@hype-stack/cli 0.3.1 → 0.4.0

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.
@@ -13,7 +13,7 @@ import { Prompt as D } from "@clack/core";
13
13
  import { styleText as O } from "node:util";
14
14
  import { downloadTemplate as ee } from "giget";
15
15
  //#region src/constants/constants.ts
16
- var k = "0.0.1", A = "gh:BetterTyped/hype-stack", j = "stack.json", M = "/schema/stack.json", te = "https://api.hype-stack.dev", N = "HYPE_STACK_API_URL", ne = "https://www.hype-stack.dev", re = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/, ie = [
16
+ var k = "0.4.0", te = "gh:BetterTyped/hype-stack", ne = "stack.json", re = "/schema/stack.json", A = "https://api.hype-stack.dev", j = "HYPE_STACK_API_URL", ie = "https://www.hype-stack.dev", M = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/, ae = [
17
17
  {
18
18
  value: "cursor",
19
19
  label: "Cursor",
@@ -31,109 +31,109 @@ var k = "0.0.1", A = "gh:BetterTyped/hype-stack", j = "stack.json", M = "/schema
31
31
  value: "copilot",
32
32
  label: "GitHub Copilot"
33
33
  }
34
- ], ae = ie.map((e) => e.value), oe = ".cursor/rules", se = ".cursor", ce = ".agents";
35
- function P() {
34
+ ], oe = ae.map((e) => e.value), se = ".cursor/rules", ce = ".cursor", le = ".agents";
35
+ function N() {
36
36
  let e = process.env.HYPE_STACK_API_URL;
37
- return e ? (le(e), e.replace(/\/+$/, "")) : te;
37
+ return e ? (ue(e), e.replace(/\/+$/, "")) : A;
38
38
  }
39
- function F() {
39
+ function P() {
40
40
  let e = process.env.HYPE_STACK_WEB_URL;
41
- return e ? (le(e), e.replace(/\/+$/, "")) : ne;
41
+ return e ? (ue(e), e.replace(/\/+$/, "")) : ie;
42
42
  }
43
- function le(e) {
43
+ function ue(e) {
44
44
  try {
45
45
  let t = new URL(e);
46
- if (!t.protocol.startsWith("http")) throw Error(`${N} must use http or https protocol, got "${t.protocol}"`);
46
+ if (!t.protocol.startsWith("http")) throw Error(`${j} must use http or https protocol, got "${t.protocol}"`);
47
47
  } catch (t) {
48
- throw t instanceof TypeError ? Error(`${N} is not a valid URL: "${e}"`, { cause: t }) : t;
48
+ throw t instanceof TypeError ? Error(`${j} is not a valid URL: "${e}"`, { cause: t }) : t;
49
49
  }
50
50
  }
51
- function ue() {
52
- return `${P()}${M}`;
51
+ function de() {
52
+ return `${N()}${re}`;
53
53
  }
54
54
  //#endregion
55
55
  //#region src/ui/theme.ts
56
- var de = (e) => `\x1b[38;5;208m${e}\x1b[39m`, fe = (e) => `\x1b[38;5;214m${e}\x1b[39m`, I = (e) => `\x1b[38;5;220m${e}\x1b[39m`, pe = (e) => `\x1b[38;5;33m${e}\x1b[39m`, L = (e) => `\x1b[38;5;39m${e}\x1b[39m`, me = (e) => `\x1b[38;5;81m${e}\x1b[39m`, he = {
57
- orange: de,
58
- orangeBright: fe,
59
- amber: I,
60
- deepBlue: pe,
61
- skyBlue: L,
62
- lightBlue: me
63
- }, R = {
64
- brand: (e) => de(e),
65
- brandBold: (e) => y.bold(de(e)),
66
- accent: (e) => L(e),
67
- accentBold: (e) => y.bold(L(e)),
56
+ var fe = (e) => `\x1b[38;5;208m${e}\x1b[39m`, pe = (e) => `\x1b[38;5;214m${e}\x1b[39m`, F = (e) => `\x1b[38;5;220m${e}\x1b[39m`, me = (e) => `\x1b[38;5;33m${e}\x1b[39m`, I = (e) => `\x1b[38;5;39m${e}\x1b[39m`, he = (e) => `\x1b[38;5;81m${e}\x1b[39m`, ge = {
57
+ orange: fe,
58
+ orangeBright: pe,
59
+ amber: F,
60
+ deepBlue: me,
61
+ skyBlue: I,
62
+ lightBlue: he
63
+ }, L = {
64
+ brand: (e) => fe(e),
65
+ brandBold: (e) => y.bold(fe(e)),
66
+ accent: (e) => I(e),
67
+ accentBold: (e) => y.bold(I(e)),
68
68
  success: (e) => y.green(e),
69
69
  error: (e) => y.red(e),
70
70
  warning: (e) => y.yellow(e),
71
71
  muted: (e) => y.dim(e),
72
72
  bold: (e) => y.bold(e),
73
73
  highlight: (e) => y.bold(y.white(e)),
74
- path: (e) => y.underline(L(e)),
75
- command: (e) => y.bold(I(e)),
74
+ path: (e) => y.underline(I(e)),
75
+ command: (e) => y.bold(F(e)),
76
76
  label: (e) => y.dim(y.bold(e))
77
77
  };
78
- function ge(e, t = e) {
79
- return `\x1b]8;;${e}\x07${L(t)}\x1b]8;;\x07`;
80
- }
81
- var z = {
82
- arrow: de("›"),
83
- bullet: R.muted("·"),
84
- dash: R.muted("─"),
85
- corner: R.muted("╰"),
86
- pipe: R.muted("│"),
87
- dot: R.muted("•"),
88
- spark: I("✦"),
89
- sparkSmall: fe("✧"),
90
- bolt: I("⚡")
91
- }, _e = [
92
- I,
93
- I,
94
- fe,
95
- de,
78
+ function _e(e, t = e) {
79
+ return `\x1b]8;;${e}\x07${I(t)}\x1b]8;;\x07`;
80
+ }
81
+ var R = {
82
+ arrow: fe("›"),
83
+ bullet: L.muted("·"),
84
+ dash: L.muted("─"),
85
+ corner: L.muted("╰"),
86
+ pipe: L.muted("│"),
87
+ dot: L.muted("•"),
88
+ spark: F("✦"),
89
+ sparkSmall: pe("✧"),
90
+ bolt: F("⚡")
91
+ }, ve = [
92
+ F,
93
+ F,
96
94
  pe,
97
- L,
95
+ fe,
98
96
  me,
99
- me
97
+ I,
98
+ he,
99
+ he
100
100
  ];
101
- function ve(e) {
101
+ function ye(e) {
102
102
  let t = [...e], n = t.length;
103
103
  return t.map((e, t) => {
104
104
  if (e === " " || e === "\n") return e;
105
105
  let r = t / Math.max(n - 1, 1);
106
- return _e[Math.min(Math.floor(r * _e.length), _e.length - 1)](e);
106
+ return ve[Math.min(Math.floor(r * ve.length), ve.length - 1)](e);
107
107
  }).join("");
108
108
  }
109
- function ye(e, t, n) {
109
+ function be(e, t, n) {
110
110
  return Math.round(e + (t - e) * n);
111
111
  }
112
- function be(e, t) {
112
+ function xe(e, t) {
113
113
  let { start: n, end: r, angle: i = 1 } = t, a = Math.max(...e.map((e) => e.length), 1), o = Math.max(e.length - 1, 1);
114
114
  return e.map((e, t) => [...e].map((e, s) => {
115
115
  if (e === " ") return e;
116
116
  let c = s / Math.max(a - 1, 1), l = t / o, u = Math.min((c + l * i) / (1 + i), 1);
117
- return `\x1b[38;2;${ye(n[0], r[0], u)};${ye(n[1], r[1], u)};${ye(n[2], r[2], u)}m${e}\x1b[39m`;
117
+ return `\x1b[38;2;${be(n[0], r[0], u)};${be(n[1], r[1], u)};${be(n[2], r[2], u)}m${e}\x1b[39m`;
118
118
  }).join(""));
119
119
  }
120
120
  //#endregion
121
121
  //#region src/core/license.ts
122
- function xe(e) {
123
- return `${F()}/packs/${e}`;
122
+ function Se(e) {
123
+ return `${P()}/packs/${e}`;
124
124
  }
125
125
  //#endregion
126
126
  //#region ../../node_modules/.pnpm/@hyper-fetch+core@8.1.1/node_modules/@hyper-fetch/core/dist/index.mjs
127
- var Se = Object.create, Ce = Object.defineProperty, we = Object.getOwnPropertyDescriptor, Te = Object.getOwnPropertyNames, Ee = Object.getPrototypeOf, De = Object.prototype.hasOwnProperty, Oe = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), ke = (e, t, n, r) => {
128
- if (t && typeof t == "object" || typeof t == "function") for (var i = Te(t), a = 0, o = i.length, s; a < o; a++) s = i[a], !De.call(e, s) && s !== n && Ce(e, s, {
127
+ var Ce = Object.create, we = Object.defineProperty, Te = Object.getOwnPropertyDescriptor, Ee = Object.getOwnPropertyNames, De = Object.getPrototypeOf, Oe = Object.prototype.hasOwnProperty, ke = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), Ae = (e, t, n, r) => {
128
+ if (t && typeof t == "object" || typeof t == "function") for (var i = Ee(t), a = 0, o = i.length, s; a < o; a++) s = i[a], !Oe.call(e, s) && s !== n && we(e, s, {
129
129
  get: ((e) => t[e]).bind(null, s),
130
- enumerable: !(r = we(t, s)) || r.enumerable
130
+ enumerable: !(r = Te(t, s)) || r.enumerable
131
131
  });
132
132
  return e;
133
- }, Ae = (e, t, n) => (n = e == null ? {} : Se(Ee(e)), ke(t || !e || !e.__esModule ? Ce(n, "default", {
133
+ }, je = (e, t, n) => (n = e == null ? {} : Ce(De(e)), Ae(t || !e || !e.__esModule ? we(n, "default", {
134
134
  value: e,
135
135
  enumerable: !0
136
- }) : n, e)), je = (e) => `${e.queryKey}_${Date.now().toString(36)}_${Math.random().toString(36).substring(2)}`, Me = /* @__PURE__ */ Ae((/* @__PURE__ */ Oe(((e, t) => {
136
+ }) : n, e)), Me = (e) => `${e.queryKey}_${Date.now().toString(36)}_${Math.random().toString(36).substring(2)}`, Ne = /* @__PURE__ */ je((/* @__PURE__ */ ke(((e, t) => {
137
137
  var n = typeof Reflect == "object" ? Reflect : null, r = n && typeof n.apply == "function" ? n.apply : function(e, t, n) {
138
138
  return Function.prototype.apply.call(e, t, n);
139
139
  }, i = n && typeof n.ownKeys == "function" ? n.ownKeys : Object.getOwnPropertySymbols ? function(e) {
@@ -308,7 +308,7 @@ var Se = Object.create, Ce = Object.defineProperty, we = Object.getOwnPropertyDe
308
308
  });
309
309
  else throw TypeError("The \"emitter\" argument must be of type EventEmitter. Received type " + typeof e);
310
310
  }
311
- })))()), Ne = (e) => `listen_${String(e)}`, Pe = class extends Me.default {
311
+ })))()), Pe = (e) => `listen_${String(e)}`, Fe = class extends Ne.default {
312
312
  emitCallbacks = [];
313
313
  constructor(e) {
314
314
  super(e);
@@ -320,26 +320,26 @@ var Se = Object.create, Ce = Object.defineProperty, we = Object.getOwnPropertyDe
320
320
  onEmit = (e) => (this.emitCallbacks?.push(e), () => {
321
321
  this.emitCallbacks = this.emitCallbacks?.filter((t) => t !== e);
322
322
  });
323
- onListener = (e, t) => (super.on(Ne(e), t), () => {
324
- super.off(Ne(e), t);
323
+ onListener = (e, t) => (super.on(Pe(e), t), () => {
324
+ super.off(Pe(e), t);
325
325
  });
326
- on = (e, t) => (super.on(e, t), super.emit(Ne(e), super.listeners(e).length), this);
327
- off = (e, t) => (super.off(e, t), super.emit(Ne(e), super.listeners(e).length), this);
326
+ on = (e, t) => (super.on(e, t), super.emit(Pe(e), super.listeners(e).length), this);
327
+ off = (e, t) => (super.off(e, t), super.emit(Pe(e), super.listeners(e).length), this);
328
328
  addListener = this.on;
329
329
  removeListener = this.off;
330
- }, Fe = class {
331
- emitter = new Pe();
332
- events = Be(this.emitter);
330
+ }, Ie = class {
331
+ emitter = new Fe();
332
+ events = Ve(this.emitter);
333
333
  isBrowser;
334
334
  isOnline;
335
335
  isFocused;
336
336
  constructor(e) {
337
337
  this.options = e, this.emitter?.setMaxListeners(1e3);
338
- let { initiallyFocused: t = V.initiallyFocused, initiallyOnline: n = V.initiallyOnline } = this.options || V;
339
- this.setInitialFocus(t), this.setInitialOnline(n), this.isBrowser = Le();
338
+ let { initiallyFocused: t = B.initiallyFocused, initiallyOnline: n = B.initiallyOnline } = this.options || B;
339
+ this.setInitialFocus(t), this.setInitialOnline(n), this.isBrowser = Re();
340
340
  }
341
341
  initialize = () => {
342
- let { focusEvent: e = V.focusEvent, onlineEvent: t = V.onlineEvent } = this.options || V;
342
+ let { focusEvent: e = B.focusEvent, onlineEvent: t = B.onlineEvent } = this.options || B;
343
343
  e(this.setFocused), t(this.setOnline);
344
344
  };
345
345
  setInitialFocus = async (e) => {
@@ -354,51 +354,51 @@ var Se = Object.create, Ce = Object.defineProperty, we = Object.getOwnPropertyDe
354
354
  setOnline = (e) => {
355
355
  this.isOnline = e, e ? this.events.emitOnline() : this.events.emitOffline();
356
356
  };
357
- }, Ie = () => {
357
+ }, Le = () => {
358
358
  try {
359
359
  return !!(window && window.addEventListener);
360
360
  } catch {
361
361
  /* istanbul ignore next */
362
362
  return !1;
363
363
  }
364
- }, Le = () => {
364
+ }, Re = () => {
365
365
  try {
366
- return !!(Ie() && window.document && window.document.addEventListener);
366
+ return !!(Le() && window.document && window.document.addEventListener);
367
367
  } catch {
368
368
  /* istanbul ignore next */
369
369
  return !1;
370
370
  }
371
- }, Re = (e, t, n) => Ie() ? (window.addEventListener(e, t, n), () => window.removeEventListener(e, t, n)) : () => null, ze = (e, t, n) => Le() ? (window.document.addEventListener(e, t, n), () => window.document.removeEventListener(e, t, n)) : () => null, Be = (e) => ({
371
+ }, ze = (e, t, n) => Le() ? (window.addEventListener(e, t, n), () => window.removeEventListener(e, t, n)) : () => null, Be = (e, t, n) => Re() ? (window.document.addEventListener(e, t, n), () => window.document.removeEventListener(e, t, n)) : () => null, Ve = (e) => ({
372
372
  emitFocus: () => {
373
- e.emit(B.FOCUS);
373
+ e.emit(z.FOCUS);
374
374
  },
375
375
  emitBlur: () => {
376
- e.emit(B.BLUR);
376
+ e.emit(z.BLUR);
377
377
  },
378
378
  emitOnline: () => {
379
- e.emit(B.ONLINE);
379
+ e.emit(z.ONLINE);
380
380
  },
381
381
  emitOffline: () => {
382
- e.emit(B.OFFLINE);
382
+ e.emit(z.OFFLINE);
383
383
  },
384
- onFocus: (t) => (e.on(B.FOCUS, t), () => e.removeListener(B.FOCUS, t)),
385
- onBlur: (t) => (e.on(B.BLUR, t), () => e.removeListener(B.BLUR, t)),
386
- onOnline: (t) => (e.on(B.ONLINE, t), () => e.removeListener(B.ONLINE, t)),
387
- onOffline: (t) => (e.on(B.OFFLINE, t), () => e.removeListener(B.OFFLINE, t))
388
- }), B = /* @__PURE__ */ function(e) {
384
+ onFocus: (t) => (e.on(z.FOCUS, t), () => e.removeListener(z.FOCUS, t)),
385
+ onBlur: (t) => (e.on(z.BLUR, t), () => e.removeListener(z.BLUR, t)),
386
+ onOnline: (t) => (e.on(z.ONLINE, t), () => e.removeListener(z.ONLINE, t)),
387
+ onOffline: (t) => (e.on(z.OFFLINE, t), () => e.removeListener(z.OFFLINE, t))
388
+ }), z = /* @__PURE__ */ function(e) {
389
389
  return e.FOCUS = "focus", e.BLUR = "blur", e.ONLINE = "online", e.OFFLINE = "offline", e;
390
- }({}), V = {
390
+ }({}), B = {
391
391
  initiallyFocused: !0,
392
392
  initiallyOnline: !0,
393
393
  focusEvent: (e) => {
394
- ze("visibilitychange", () => e(!0)), Re("focus", () => e(!0)), Re("blur", () => e(!1));
394
+ Be("visibilitychange", () => e(!0)), ze("focus", () => e(!0)), ze("blur", () => e(!1));
395
395
  },
396
396
  onlineEvent: (e) => {
397
- Re("online", () => e(!0)), Re("offline", () => e(!1));
397
+ ze("online", () => e(!0)), ze("offline", () => e(!1));
398
398
  }
399
- }, Ve = class {
400
- emitter = new Pe();
401
- events = _t(this.emitter);
399
+ }, He = class {
400
+ emitter = new Fe();
401
+ events = vt(this.emitter);
402
402
  constructor() {
403
403
  this.emitter?.setMaxListeners(1e3);
404
404
  }
@@ -435,71 +435,71 @@ var Se = Object.create, Ce = Object.defineProperty, we = Object.getOwnPropertyDe
435
435
  });
436
436
  });
437
437
  };
438
- }, He = () => "loading-event-any", Ue = (e) => `${e}-loading-event`, We = (e) => `${e}-loading-cache-event`, Ge = (e) => `${e}-loading-event-by-id`, Ke = () => "remove-event-any", qe = (e) => `${e}-remove-event`, Je = (e) => `${e}-remove-event-by-id`, Ye = () => "request-abort-any", Xe = (e) => `${e}-request-abort`, Ze = (e) => `${e}-request-abort-by-id`, Qe = () => "response-any", $e = (e) => `${e}-response`, et = (e) => `${e}-response-by-id`, tt = () => "request-start-any", nt = (e) => `${e}-request-start`, rt = (e) => `${e}-request-start-by-id`, it = () => "response-start-any", at = (e) => `${e}-response-start`, ot = (e) => `${e}-response-start-by-id`, st = () => "request-progress-any", ct = (e) => `${e}-request-progress`, lt = (e) => `${e}-request-progress-by-id`, ut = () => "response-progress-any", dt = (e) => `${e}-response-progress`, ft = (e) => `${e}-response-progress-by-id`, pt = () => "request-deduplicated-any", mt = (e) => `${e}-query-request-deduplicated`, ht = (e) => `${e}-cache-request-deduplicated`, gt = (e) => `${e}-request-deduplicated-by-id`, _t = (e) => ({
438
+ }, Ue = () => "loading-event-any", We = (e) => `${e}-loading-event`, Ge = (e) => `${e}-loading-cache-event`, Ke = (e) => `${e}-loading-event-by-id`, qe = () => "remove-event-any", Je = (e) => `${e}-remove-event`, Ye = (e) => `${e}-remove-event-by-id`, Xe = () => "request-abort-any", Ze = (e) => `${e}-request-abort`, Qe = (e) => `${e}-request-abort-by-id`, $e = () => "response-any", et = (e) => `${e}-response`, tt = (e) => `${e}-response-by-id`, nt = () => "request-start-any", rt = (e) => `${e}-request-start`, it = (e) => `${e}-request-start-by-id`, at = () => "response-start-any", ot = (e) => `${e}-response-start`, st = (e) => `${e}-response-start-by-id`, ct = () => "request-progress-any", lt = (e) => `${e}-request-progress`, ut = (e) => `${e}-request-progress-by-id`, dt = () => "response-progress-any", ft = (e) => `${e}-response-progress`, pt = (e) => `${e}-response-progress-by-id`, mt = () => "request-deduplicated-any", ht = (e) => `${e}-query-request-deduplicated`, gt = (e) => `${e}-cache-request-deduplicated`, _t = (e) => `${e}-request-deduplicated-by-id`, vt = (e) => ({
439
439
  emitDeduplicated: (t, n = !1) => {
440
- e.emit(pt(), t, n), e.emit(gt(t.requestId), t, n), e.emit(ht(t.request.cacheKey), t, n), e.emit(mt(t.request.queryKey), t, n);
440
+ e.emit(mt(), t, n), e.emit(_t(t.requestId), t, n), e.emit(gt(t.request.cacheKey), t, n), e.emit(ht(t.request.queryKey), t, n);
441
441
  },
442
442
  emitLoading: (t, n = !1) => {
443
- e.emit(He(), t, n), e.emit(Ge(t.requestId), t, n), e.emit(We(t.request.cacheKey), t, n), e.emit(Ue(t.request.queryKey), t, n);
443
+ e.emit(Ue(), t, n), e.emit(Ke(t.requestId), t, n), e.emit(Ge(t.request.cacheKey), t, n), e.emit(We(t.request.queryKey), t, n);
444
444
  },
445
445
  emitRequestStart: (t, n = !1) => {
446
- e.emit(tt(), t, n), e.emit(rt(t.requestId), t, n), e.emit(nt(t.request.queryKey), t, n);
446
+ e.emit(nt(), t, n), e.emit(it(t.requestId), t, n), e.emit(rt(t.request.queryKey), t, n);
447
447
  },
448
448
  emitResponseStart: (t, n = !1) => {
449
- e.emit(it(), t, n), e.emit(ot(t.requestId), t, n), e.emit(at(t.request.queryKey), t, n);
449
+ e.emit(at(), t, n), e.emit(st(t.requestId), t, n), e.emit(ot(t.request.queryKey), t, n);
450
450
  },
451
451
  emitUploadProgress: (t, n = !1) => {
452
- e.emit(st(), t, n), e.emit(lt(t.requestId), t, n), e.emit(ct(t.request.queryKey), t, n);
452
+ e.emit(ct(), t, n), e.emit(ut(t.requestId), t, n), e.emit(lt(t.request.queryKey), t, n);
453
453
  },
454
454
  emitDownloadProgress: (t, n = !1) => {
455
- e.emit(ut(), t, n), e.emit(ft(t.requestId), t, n), e.emit(dt(t.request.queryKey), t, n);
455
+ e.emit(dt(), t, n), e.emit(pt(t.requestId), t, n), e.emit(ft(t.request.queryKey), t, n);
456
456
  },
457
457
  emitResponse: (t, n = !1) => {
458
- e.emit(Qe(), t, n), e.emit(et(t.requestId), t, n), e.emit($e(t.request.cacheKey), t, n);
458
+ e.emit($e(), t, n), e.emit(tt(t.requestId), t, n), e.emit(et(t.request.cacheKey), t, n);
459
459
  },
460
460
  emitAbort: (t, n = !1) => {
461
- e.emit(Ye(), t, n), e.emit(Ze(t.requestId), t, n), e.emit(Xe(t.request.abortKey), t, n);
461
+ e.emit(Xe(), t, n), e.emit(Qe(t.requestId), t, n), e.emit(Ze(t.request.abortKey), t, n);
462
462
  },
463
463
  emitRemove: (t, n = !1) => {
464
- e.emit(Ke(), t, n), e.emit(Je(t.requestId), t, n), e.emit(qe(t.request.queryKey), t, n);
464
+ e.emit(qe(), t, n), e.emit(Ye(t.requestId), t, n), e.emit(Je(t.request.queryKey), t, n);
465
465
  },
466
- onDeduplicated: (t) => (e.on(pt(), t), () => e.removeListener(pt(), t)),
467
- onDeduplicatedByQueue: (t, n) => (e.on(mt(t), n), () => e.removeListener(mt(t), n)),
468
- onDeduplicatedByCache: (t, n) => (e.on(ht(t), n), () => e.removeListener(ht(t), n)),
469
- onDeduplicatedById: (t, n) => (e.on(gt(t), n), () => e.removeListener(gt(t), n)),
470
- onLoading: (t) => (e.on(He(), t), () => e.removeListener(He(), t)),
471
- onLoadingByQueue: (t, n) => (e.on(Ue(t), n), () => e.removeListener(Ue(t), n)),
472
- onLoadingByCache: (t, n) => (e.on(We(t), n), () => e.removeListener(We(t), n)),
473
- onLoadingById: (t, n) => (e.on(Ge(t), n), () => e.removeListener(Ge(t), n)),
474
- onRequestStart: (t) => (e.on(tt(), t), () => e.removeListener(tt(), t)),
475
- onRequestStartByQueue: (t, n) => (e.on(nt(t), n), () => e.removeListener(nt(t), n)),
476
- onRequestStartById: (t, n) => (e.on(rt(t), n), () => e.removeListener(rt(t), n)),
477
- onResponseStart: (t) => (e.on(it(), t), () => e.removeListener(it(), t)),
478
- onResponseStartByQueue: (t, n) => (e.on(at(t), n), () => e.removeListener(at(t), n)),
479
- onResponseStartById: (t, n) => (e.on(ot(t), n), () => e.removeListener(ot(t), n)),
480
- onUploadProgress: (t) => (e.on(st(), t), () => e.removeListener(st(), t)),
481
- onUploadProgressByQueue: (t, n) => (e.on(ct(t), n), () => e.removeListener(ct(t), n)),
482
- onUploadProgressById: (t, n) => (e.on(lt(t), n), () => e.removeListener(lt(t), n)),
483
- onDownloadProgress: (t) => (e.on(ut(), t), () => e.removeListener(ut(), t)),
484
- onDownloadProgressByQueue: (t, n) => (e.on(dt(t), n), () => e.removeListener(dt(t), n)),
485
- onDownloadProgressById: (t, n) => (e.on(ft(t), n), () => e.removeListener(ft(t), n)),
486
- onResponse: (t) => (e.on(Qe(), t), () => e.removeListener(Qe(), t)),
487
- onResponseByCache: (t, n) => (e.on($e(t), n), () => e.removeListener($e(t), n)),
488
- onResponseById: (t, n) => (e.on(et(t), n), () => e.removeListener(et(t), n)),
489
- onAbort: (t) => (e.on(Ye(), t), () => e.removeListener(Ye(), t)),
490
- onAbortByKey: (t, n) => (e.on(Xe(t), n), () => e.removeListener(Xe(t), n)),
491
- onAbortById: (t, n) => (e.on(Ze(t), n), () => e.removeListener(Ze(t), n)),
492
- onRemove: (t) => (e.on(Ke(), t), () => e.removeListener(Ke(), t)),
493
- onRemoveByQueue: (t, n) => (e.on(qe(t), n), () => e.removeListener(qe(t), n)),
494
- onRemoveById: (t, n) => (e.on(Je(t), n), () => e.removeListener(Je(t), n))
495
- }), vt = class {
466
+ onDeduplicated: (t) => (e.on(mt(), t), () => e.removeListener(mt(), t)),
467
+ onDeduplicatedByQueue: (t, n) => (e.on(ht(t), n), () => e.removeListener(ht(t), n)),
468
+ onDeduplicatedByCache: (t, n) => (e.on(gt(t), n), () => e.removeListener(gt(t), n)),
469
+ onDeduplicatedById: (t, n) => (e.on(_t(t), n), () => e.removeListener(_t(t), n)),
470
+ onLoading: (t) => (e.on(Ue(), t), () => e.removeListener(Ue(), t)),
471
+ onLoadingByQueue: (t, n) => (e.on(We(t), n), () => e.removeListener(We(t), n)),
472
+ onLoadingByCache: (t, n) => (e.on(Ge(t), n), () => e.removeListener(Ge(t), n)),
473
+ onLoadingById: (t, n) => (e.on(Ke(t), n), () => e.removeListener(Ke(t), n)),
474
+ onRequestStart: (t) => (e.on(nt(), t), () => e.removeListener(nt(), t)),
475
+ onRequestStartByQueue: (t, n) => (e.on(rt(t), n), () => e.removeListener(rt(t), n)),
476
+ onRequestStartById: (t, n) => (e.on(it(t), n), () => e.removeListener(it(t), n)),
477
+ onResponseStart: (t) => (e.on(at(), t), () => e.removeListener(at(), t)),
478
+ onResponseStartByQueue: (t, n) => (e.on(ot(t), n), () => e.removeListener(ot(t), n)),
479
+ onResponseStartById: (t, n) => (e.on(st(t), n), () => e.removeListener(st(t), n)),
480
+ onUploadProgress: (t) => (e.on(ct(), t), () => e.removeListener(ct(), t)),
481
+ onUploadProgressByQueue: (t, n) => (e.on(lt(t), n), () => e.removeListener(lt(t), n)),
482
+ onUploadProgressById: (t, n) => (e.on(ut(t), n), () => e.removeListener(ut(t), n)),
483
+ onDownloadProgress: (t) => (e.on(dt(), t), () => e.removeListener(dt(), t)),
484
+ onDownloadProgressByQueue: (t, n) => (e.on(ft(t), n), () => e.removeListener(ft(t), n)),
485
+ onDownloadProgressById: (t, n) => (e.on(pt(t), n), () => e.removeListener(pt(t), n)),
486
+ onResponse: (t) => (e.on($e(), t), () => e.removeListener($e(), t)),
487
+ onResponseByCache: (t, n) => (e.on(et(t), n), () => e.removeListener(et(t), n)),
488
+ onResponseById: (t, n) => (e.on(tt(t), n), () => e.removeListener(tt(t), n)),
489
+ onAbort: (t) => (e.on(Xe(), t), () => e.removeListener(Xe(), t)),
490
+ onAbortByKey: (t, n) => (e.on(Ze(t), n), () => e.removeListener(Ze(t), n)),
491
+ onAbortById: (t, n) => (e.on(Qe(t), n), () => e.removeListener(Qe(t), n)),
492
+ onRemove: (t) => (e.on(qe(), t), () => e.removeListener(qe(), t)),
493
+ onRemoveByQueue: (t, n) => (e.on(Je(t), n), () => e.removeListener(Je(t), n)),
494
+ onRemoveById: (t, n) => (e.on(Ye(t), n), () => e.removeListener(Ye(t), n))
495
+ }), yt = class {
496
496
  logger;
497
497
  level;
498
498
  modules;
499
- emitter = new Me.default();
499
+ emitter = new Ne.default();
500
500
  client;
501
501
  constructor(e) {
502
- this.options = e, this.emitter?.setMaxListeners(1e3), this.logger = this.options?.logger || xt, this.level = this.options?.level || "warning", this.modules = this.options?.modules;
502
+ this.options = e, this.emitter?.setMaxListeners(1e3), this.logger = this.options?.logger || St, this.level = this.options?.level || "warning", this.modules = this.options?.modules;
503
503
  }
504
504
  setSeverity = (e) => {
505
505
  this.level = e;
@@ -530,39 +530,39 @@ var Se = Object.create, Ce = Object.defineProperty, we = Object.getOwnPropertyDe
530
530
  })
531
531
  });
532
532
  log = (e) => {
533
- this.client.debug && (St.indexOf(this.level) <= St.indexOf(e.level) || this.modules && !this.modules.includes(e.module) || this.logger(e));
533
+ this.client.debug && (Ct.indexOf(this.level) <= Ct.indexOf(e.level) || this.modules && !this.modules.includes(e.module) || this.logger(e));
534
534
  };
535
- }, yt = () => `${(/* @__PURE__ */ new Date()).toLocaleTimeString()}`, bt = (e) => e.type === "request" || e.type === "response" ? `${e.extra.request.endpoint}` : `[${e.module}]`, xt = (e) => {
536
- let t = wt[e.level], n = Tt[e.level], r = `%c[${yt()}]%c${e.title}%c${bt(e)}`, i = `${t}${n}font-weight:600;border-radius: 4px 0 0 4px;`, a = `${t}${n}font-weight:600;`, o = `${t}font-weight:normal;border-radius: 0 4px 4px 0;`;
535
+ }, bt = () => `${(/* @__PURE__ */ new Date()).toLocaleTimeString()}`, xt = (e) => e.type === "request" || e.type === "response" ? `${e.extra.request.endpoint}` : `[${e.module}]`, St = (e) => {
536
+ let t = Tt[e.level], n = Et[e.level], r = `%c[${bt()}]%c${e.title}%c${xt(e)}`, i = `${t}${n}font-weight:600;border-radius: 4px 0 0 4px;`, a = `${t}${n}font-weight:600;`, o = `${t}font-weight:normal;border-radius: 0 4px 4px 0;`;
537
537
  e.extra && Object.keys(e.extra)?.length ? (console.groupCollapsed(r, i, a, o), console.log(e.extra), console.groupEnd()) : console.log(r, t);
538
- }, St = [
538
+ }, Ct = [
539
539
  "error",
540
540
  "warning",
541
541
  "info",
542
542
  "debug"
543
- ], Ct = "padding:2px 5px;", wt = {
544
- error: `${Ct};background:#db252520;`,
545
- warning: `${Ct};background:#e1941e20;`,
546
- info: `${Ct};background:#1e74e120;`,
547
- debug: `${Ct};background:#00000020;`
548
- }, Tt = {
543
+ ], wt = "padding:2px 5px;", Tt = {
544
+ error: `${wt};background:#db252520;`,
545
+ warning: `${wt};background:#e1941e20;`,
546
+ info: `${wt};background:#1e74e120;`,
547
+ debug: `${wt};background:#00000020;`
548
+ }, Et = {
549
549
  error: "color:#ff3737;",
550
550
  warning: "color:#ffc107;",
551
551
  info: "color:#34a8ff;",
552
552
  debug: "color:#cccccc;"
553
- }, Et = class extends Error {
553
+ }, Dt = class extends Error {
554
554
  constructor() {
555
555
  super("Request timeout"), this.name = "TimeoutError";
556
556
  }
557
- }, Dt = class extends Error {
557
+ }, Ot = class extends Error {
558
558
  constructor() {
559
559
  super("Request aborted"), this.name = "AbortError";
560
560
  }
561
- }, Ot = class extends Error {
561
+ }, kt = class extends Error {
562
562
  constructor() {
563
563
  super("Request deleted"), this.name = "DeletedError";
564
564
  }
565
- }, kt = class extends Error {
565
+ }, V = class extends Error {
566
566
  description;
567
567
  constructor(e) {
568
568
  super("Request processing error"), this.description = e, this.name = "RequestProcessingError";
@@ -572,16 +572,16 @@ var Se = Object.create, Ce = Object.defineProperty, we = Object.getOwnPropertyDe
572
572
  constructor(e) {
573
573
  super("Unexpected error"), this.description = e, this.name = "UnexpectedError";
574
574
  }
575
- }, H = (e) => e === "timeout" ? new Et() : e === "abort" ? new Dt() : e === "deleted" ? new Ot() : e === "processing" ? new kt() : new At(), jt = (e) => {
575
+ }, H = (e) => e === "timeout" ? new Dt() : e === "abort" ? new Ot() : e === "deleted" ? new kt() : e === "processing" ? new V() : new At(), jt = (e) => {
576
576
  try {
577
577
  return JSON.stringify(e);
578
578
  } catch {
579
579
  return "";
580
580
  }
581
581
  }, Mt = (e) => {
582
- let t = Ie() && e.payload instanceof FormData, n = typeof e.payload == "object" && e.payload !== null, r = {};
582
+ let t = Le() && e.payload instanceof FormData, n = typeof e.payload == "object" && e.payload !== null, r = {};
583
583
  return !t && n && (r["Content-Type"] = "application/json"), Object.assign(r, e.headers), r;
584
- }, Nt = (e) => Ie() && e instanceof FormData ? e : jt(e), Pt = [
584
+ }, Nt = (e) => Le() && e instanceof FormData ? e : jt(e), Pt = [
585
585
  "onBeforeSent",
586
586
  "onRequestStart",
587
587
  "onResponseStart",
@@ -1057,7 +1057,7 @@ var It = /* @__PURE__ */ function(e) {
1057
1057
  total: f,
1058
1058
  loaded: f
1059
1059
  }), e;
1060
- }, A = (e) => {
1060
+ }, te = (e) => {
1061
1061
  u = +/* @__PURE__ */ new Date(), p = w(p, e);
1062
1062
  let n = {
1063
1063
  total: p,
@@ -1067,21 +1067,21 @@ var It = /* @__PURE__ */ function(e) {
1067
1067
  requestId: t,
1068
1068
  request: d
1069
1069
  }), u;
1070
- }, j = (e) => {
1070
+ }, ne = (e) => {
1071
1071
  u ||= +/* @__PURE__ */ new Date();
1072
1072
  let t = +/* @__PURE__ */ new Date();
1073
1073
  return p = w(p, e), E(u, t, {
1074
1074
  total: e.total || p,
1075
1075
  loaded: e.loaded || 0
1076
1076
  }), t;
1077
- }, M = () => {
1077
+ }, re = () => {
1078
1078
  u ||= +/* @__PURE__ */ new Date();
1079
1079
  let e = +/* @__PURE__ */ new Date();
1080
1080
  return E(u, e, {
1081
1081
  total: p,
1082
1082
  loaded: p
1083
1083
  }), e;
1084
- }, te = async ({ data: e, error: r, status: i, extra: a }) => {
1084
+ }, A = async ({ data: e, error: r, status: i, extra: a }) => {
1085
1085
  let o = {
1086
1086
  data: e,
1087
1087
  error: r ?? null,
@@ -1106,50 +1106,50 @@ var It = /* @__PURE__ */ function(e) {
1106
1106
  response: o
1107
1107
  }
1108
1108
  }), o;
1109
- }, N = Yt({
1109
+ }, j = Yt({
1110
1110
  request: d,
1111
1111
  requestId: t,
1112
1112
  startTime: x,
1113
1113
  logger: c,
1114
1114
  resolve: n
1115
- }), ne = ({ status: e, extra: n }) => (c.error({
1115
+ }), ie = ({ status: e, extra: n }) => (c.error({
1116
1116
  title: "Abort error",
1117
1117
  type: "request",
1118
1118
  extra: {
1119
1119
  request: d,
1120
1120
  requestId: t
1121
1121
  }
1122
- }), N({
1122
+ }), j({
1123
1123
  error: i(H("abort")),
1124
1124
  status: e,
1125
1125
  extra: n
1126
- })), re = ({ status: e, extra: n }) => (c.error({
1126
+ })), M = ({ status: e, extra: n }) => (c.error({
1127
1127
  title: "Timeout error",
1128
1128
  type: "request",
1129
1129
  extra: {
1130
1130
  request: d,
1131
1131
  requestId: t
1132
1132
  }
1133
- }), N({
1133
+ }), j({
1134
1134
  error: H("timeout"),
1135
1135
  status: e,
1136
1136
  extra: n
1137
- })), ie = ({ status: e, extra: n }) => (c.error({
1137
+ })), ae = ({ status: e, extra: n }) => (c.error({
1138
1138
  title: "Unexpected error",
1139
1139
  type: "request",
1140
1140
  extra: {
1141
1141
  request: d,
1142
1142
  requestId: t
1143
1143
  }
1144
- }), N({
1144
+ }), j({
1145
1145
  error: H(),
1146
1146
  status: e,
1147
1147
  extra: n
1148
- })), ae = () => a.getAbortController(v, t), oe = ({ status: e, extra: n, onAbort: r = () => {} }) => {
1149
- let i = ae();
1150
- if (!i) throw new kt("Controller is not found");
1148
+ })), oe = () => a.getAbortController(v, t), se = ({ status: e, extra: n, onAbort: r = () => {} }) => {
1149
+ let i = oe();
1150
+ if (!i) throw new V("Controller is not found");
1151
1151
  let o = () => {
1152
- ne({
1152
+ ie({
1153
1153
  status: e,
1154
1154
  extra: n
1155
1155
  }), r(), a.events.emitAbort({
@@ -1169,33 +1169,33 @@ var It = /* @__PURE__ */ function(e) {
1169
1169
  adapterOptions: b
1170
1170
  }
1171
1171
  });
1172
- let se = e.client.adapter.unstable_queryParamsMapper(d.queryParams), ce = e.client.adapter.unstable_endpointMapper(d.endpoint), P = e.client.adapter.unstable_headerMapper(d), { url: F } = e.client;
1172
+ let ce = e.client.adapter.unstable_queryParamsMapper(d.queryParams), le = e.client.adapter.unstable_endpointMapper(d.endpoint), N = e.client.adapter.unstable_headerMapper(d), { url: P } = e.client;
1173
1173
  return {
1174
1174
  request: d,
1175
1175
  requestId: t,
1176
- url: F,
1177
- endpoint: ce,
1178
- queryParams: se,
1176
+ url: P,
1177
+ endpoint: le,
1178
+ queryParams: ce,
1179
1179
  payload: y,
1180
- headers: P,
1180
+ headers: N,
1181
1181
  adapter: e.client.adapter,
1182
1182
  adapterOptions: b,
1183
- getAbortController: ae,
1183
+ getAbortController: oe,
1184
1184
  getRequestStartTimestamp: S,
1185
1185
  getResponseStartTimestamp: C,
1186
- createAbortListener: oe,
1186
+ createAbortListener: se,
1187
1187
  onBeforeRequest: D,
1188
1188
  onRequestStart: O,
1189
1189
  onRequestProgress: ee,
1190
1190
  onRequestEnd: k,
1191
- onResponseStart: A,
1192
- onResponseProgress: j,
1193
- onResponseEnd: M,
1194
- onSuccess: te,
1195
- onAbortError: ne,
1196
- onTimeoutError: re,
1197
- onUnexpectedError: ie,
1198
- onError: N
1191
+ onResponseStart: te,
1192
+ onResponseProgress: ne,
1193
+ onResponseEnd: re,
1194
+ onSuccess: A,
1195
+ onAbortError: ie,
1196
+ onTimeoutError: M,
1197
+ onUnexpectedError: ae,
1198
+ onError: j
1199
1199
  };
1200
1200
  };
1201
1201
  function Yt({ request: e, requestId: t, startTime: n, resolve: r, logger: i }) {
@@ -1228,7 +1228,7 @@ function Yt({ request: e, requestId: t, startTime: n, resolve: r, logger: i }) {
1228
1228
  };
1229
1229
  }
1230
1230
  var Xt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTimeoutError: i, onRequestEnd: a, createAbortListener: o, onResponseProgress: s, onRequestProgress: c, onResponseStart: l, onBeforeRequest: u, onRequestStart: d, onSuccess: f, onAbortError: p, adapter: m }) => {
1231
- if (!e.unstable_mock) throw new kt("Mock should be defined when calling mocker");
1231
+ if (!e.unstable_mock) throw new V("Mock should be defined when calling mocker");
1232
1232
  let h = !1, { requestTime: g = 20, responseTime: _ = 20, totalUploaded: v = 1e3, totalDownloaded: y = 1e3, timeout: b } = e.unstable_mock.config, { data: x, error: S, status: C, success: w = !0, extra: T = e.client.adapter.defaultExtra } = await e.unstable_mock.fn({
1233
1233
  request: e,
1234
1234
  requestId: t
@@ -1321,8 +1321,8 @@ var Xt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1321
1321
  async fetch(e, t) {
1322
1322
  let n, r = async (r) => {
1323
1323
  try {
1324
- if (!this.initialized) throw new kt(`Adapter ${this.options.name} is not initialized`);
1325
- if (!this.unstable_fetcher) throw new kt(`Fetcher for ${this.options.name} adapter is not set`);
1324
+ if (!this.initialized) throw new V(`Adapter ${this.options.name} is not initialized`);
1325
+ if (!this.unstable_fetcher) throw new V(`Fetcher for ${this.options.name} adapter is not set`);
1326
1326
  this.client.triggerPlugins("onAdapterFetch", {
1327
1327
  adapter: this,
1328
1328
  request: e,
@@ -1401,21 +1401,21 @@ var Xt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1401
1401
  }
1402
1402
  return t;
1403
1403
  }, []).join("&");
1404
- }, an = (e, t = Pn) => {
1404
+ }, an = (e, t = Nn) => {
1405
1405
  if (!e || !Object.keys(e).length) return "";
1406
1406
  if (typeof e == "string") return e[0] === "?" ? e : `?${e}`;
1407
1407
  let n = Object.entries(e).map(([e, n]) => Array.isArray(n) ? rn(e, n, t) : nn(e, n, t)).filter(Boolean).join("&");
1408
1408
  return n ? `?${n}` : "";
1409
- }, on = Kt.SEC * 5, sn = { headers: {} }, cn = () => new Qt({
1409
+ }, on = Kt.SEC * 5, G = { headers: {} }, sn = () => new Qt({
1410
1410
  name: "http",
1411
1411
  defaultMethod: It.GET,
1412
- defaultExtra: sn,
1412
+ defaultExtra: G,
1413
1413
  systemErrorStatus: 0,
1414
- systemErrorExtra: sn
1414
+ systemErrorExtra: G
1415
1415
  }).setQueryParamsMapper(an).setFetcher(async ({ request: e, adapterOptions: t, headers: n, payload: r, onError: i, onResponseEnd: a, onTimeoutError: o, onRequestEnd: s, createAbortListener: c, getAbortController: l, onResponseProgress: u, onResponseStart: d, onBeforeRequest: f, onRequestStart: p, onRequestProgress: m, onSuccess: h }) => {
1416
1416
  let { method: g, client: _, endpoint: v, queryParams: y } = e, b = y ? an(y) : "", x = `${_.url}${v}${b}`, S = l(), { timeout: C = on, streaming: w = !1, ...T } = t || {}, E = !1, D, O = c({
1417
1417
  status: 0,
1418
- extra: sn
1418
+ extra: G
1419
1419
  });
1420
1420
  C > 0 && S && (D = setTimeout(() => {
1421
1421
  E = !0, O(), S.abort();
@@ -1481,18 +1481,18 @@ var Xt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1481
1481
  if (D && clearTimeout(D), O(), S?.signal?.aborted) {
1482
1482
  E && o({
1483
1483
  status: 0,
1484
- extra: sn
1484
+ extra: G
1485
1485
  });
1486
1486
  return;
1487
1487
  }
1488
1488
  i({
1489
1489
  error: e,
1490
1490
  status: 0,
1491
- extra: sn
1491
+ extra: G
1492
1492
  });
1493
1493
  }
1494
- }), ln = () => cn(), un = class {
1495
- emitter = new Pe();
1494
+ }), cn = () => sn(), ln = class {
1495
+ emitter = new Fe();
1496
1496
  events;
1497
1497
  storage;
1498
1498
  lazyStorage;
@@ -1503,7 +1503,7 @@ var Xt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1503
1503
  constructor(e) {
1504
1504
  this.options = e;
1505
1505
  let { storage: t = /* @__PURE__ */ new Map(), lazyStorage: n, version: r = "0.0.1" } = e ?? {};
1506
- this.emitter?.setMaxListeners(1e3), this.events = vn(this.emitter), this.storage = t, this.version = r, this.lazyStorage = n;
1506
+ this.emitter?.setMaxListeners(1e3), this.events = _n(this.emitter), this.storage = t, this.version = r, this.lazyStorage = n;
1507
1507
  }
1508
1508
  initialize = (e) => (this.client = e, this.logger = e.loggerManager.initialize(e, "Cache"), e.appManager.events.onOnline(() => {
1509
1509
  [...this.storage.keys()].forEach(this.scheduleGarbageCollector);
@@ -1517,7 +1517,7 @@ var Xt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1517
1517
  response: t
1518
1518
  }
1519
1519
  });
1520
- let { cacheKey: n, cache: r, staleTime: i, cacheTime: a, scope: o } = e, s = U(n, o), c = this.storage.get(s), l = typeof t == "function" ? t(c || null) : t, u = dn(c, l), d = {
1520
+ let { cacheKey: n, cache: r, staleTime: i, cacheTime: a, scope: o } = e, s = U(n, o), c = this.storage.get(s), l = typeof t == "function" ? t(c || null) : t, u = un(c, l), d = {
1521
1521
  ...u,
1522
1522
  scope: o,
1523
1523
  staleTime: i,
@@ -1656,49 +1656,49 @@ var Xt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1656
1656
  clear = async () => {
1657
1657
  this.garbageCollectors.forEach((e) => clearTimeout(e)), this.storage.clear();
1658
1658
  };
1659
- }, dn = (e, t) => {
1659
+ }, un = (e, t) => {
1660
1660
  let { data: n, success: r } = t, i = !r && e ? e.data : null, a = n || i;
1661
1661
  return {
1662
1662
  ...t,
1663
1663
  data: a
1664
1664
  };
1665
- }, fn = () => "invalidate", pn = (e) => `${e}_invalidate`, mn = () => "delete", hn = (e) => `${e}_delete`, gn = (e) => `${e}_cache`, _n = () => "cache", vn = (e) => ({
1665
+ }, dn = () => "invalidate", fn = (e) => `${e}_invalidate`, pn = () => "delete", mn = (e) => `${e}_delete`, hn = (e) => `${e}_cache`, gn = () => "cache", _n = (e) => ({
1666
1666
  emitCacheData: (t, n = !1) => {
1667
- e.emit(_n(), t, n), e.emit(gn(t.cacheKey), t, n);
1667
+ e.emit(gn(), t, n), e.emit(hn(t.cacheKey), t, n);
1668
1668
  },
1669
1669
  emitInvalidation: (t, n = !1) => {
1670
- e.emit(fn(), t, n), e.emit(pn(t), n);
1670
+ e.emit(dn(), t, n), e.emit(fn(t), n);
1671
1671
  },
1672
1672
  emitDelete: (t, n = !1) => {
1673
- e.emit(mn(), t, n), e.emit(hn(t), n);
1673
+ e.emit(pn(), t, n), e.emit(mn(t), n);
1674
1674
  },
1675
- onData: (t) => (e.on(_n(), t), () => e.removeListener(_n(), t)),
1676
- onDataByKey: (t, n) => (e.on(gn(t), n), () => e.removeListener(gn(t), n)),
1677
- onInvalidate: (t) => (e.on(fn(), t), () => e.removeListener(fn(), t)),
1678
- onInvalidateByKey: (t, n) => (e.on(pn(t), n), () => e.removeListener(pn(t), n)),
1679
- onDelete: (t) => (e.on(mn(), t), () => e.removeListener(mn(), t)),
1680
- onDeleteByKey: (t, n) => (e.on(hn(t), n), () => e.removeListener(hn(t), n))
1681
- }), G = /* @__PURE__ */ function(e) {
1675
+ onData: (t) => (e.on(gn(), t), () => e.removeListener(gn(), t)),
1676
+ onDataByKey: (t, n) => (e.on(hn(t), n), () => e.removeListener(hn(t), n)),
1677
+ onInvalidate: (t) => (e.on(dn(), t), () => e.removeListener(dn(), t)),
1678
+ onInvalidateByKey: (t, n) => (e.on(fn(t), n), () => e.removeListener(fn(t), n)),
1679
+ onDelete: (t) => (e.on(pn(), t), () => e.removeListener(pn(), t)),
1680
+ onDeleteByKey: (t, n) => (e.on(mn(t), n), () => e.removeListener(mn(t), n))
1681
+ }), K = /* @__PURE__ */ function(e) {
1682
1682
  return e.ONE_BY_ONE = "one-by-one", e.ALL_AT_ONCE = "all-at-once", e.PREVIOUS_CANCELED = "previous-canceled", e.DEDUPLICATED = "deduplicated", e;
1683
- }({}), yn = (e) => ({
1683
+ }({}), vn = (e) => ({
1684
1684
  emitDrained: (t, n) => {
1685
- e.emit(xn(), t, n), e.emit(Sn(t.queryKey), t, n);
1685
+ e.emit(bn(), t, n), e.emit(xn(t.queryKey), t, n);
1686
1686
  },
1687
1687
  emitQueueStatusChanged: (t, n) => {
1688
- e.emit(Cn(), t, n), e.emit(wn(t.queryKey), t, n);
1688
+ e.emit(Sn(), t, n), e.emit(Cn(t.queryKey), t, n);
1689
1689
  },
1690
1690
  emitQueueChanged: (t, n) => {
1691
- e.emit(Tn(), t, n), e.emit(En(t.queryKey), t, n);
1691
+ e.emit(wn(), t, n), e.emit(Tn(t.queryKey), t, n);
1692
1692
  },
1693
- onDrained: (t) => (e.on(xn(), t), () => e.removeListener(xn(), t)),
1694
- onDrainedByKey: (t, n) => (e.on(Sn(t), n), () => e.removeListener(Sn(t), n)),
1695
- onQueueStatusChange: (t) => (e.on(Cn(), t), () => e.removeListener(Cn(), t)),
1696
- onQueueStatusChangeByKey: (t, n) => (e.on(wn(t), n), () => e.removeListener(wn(t), n)),
1697
- onQueueChange: (t) => (e.on(Tn(), t), () => e.removeListener(Tn(), t)),
1698
- onQueueChangeByKey: (t, n) => (e.on(En(t), n), () => e.removeListener(En(t), n))
1699
- }), bn = class {
1700
- emitter = new Pe();
1701
- events = yn(this.emitter);
1693
+ onDrained: (t) => (e.on(bn(), t), () => e.removeListener(bn(), t)),
1694
+ onDrainedByKey: (t, n) => (e.on(xn(t), n), () => e.removeListener(xn(t), n)),
1695
+ onQueueStatusChange: (t) => (e.on(Sn(), t), () => e.removeListener(Sn(), t)),
1696
+ onQueueStatusChangeByKey: (t, n) => (e.on(Cn(t), n), () => e.removeListener(Cn(t), n)),
1697
+ onQueueChange: (t) => (e.on(wn(), t), () => e.removeListener(wn(), t)),
1698
+ onQueueChangeByKey: (t, n) => (e.on(Tn(t), n), () => e.removeListener(Tn(t), n))
1699
+ }), yn = class {
1700
+ emitter = new Fe();
1701
+ events = vn(this.emitter);
1702
1702
  storage = /* @__PURE__ */ new Map();
1703
1703
  requestCount = /* @__PURE__ */ new Map();
1704
1704
  runningRequests = /* @__PURE__ */ new Map();
@@ -1866,7 +1866,7 @@ var Xt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1866
1866
  resolved: !1
1867
1867
  });
1868
1868
  add = (e) => {
1869
- let t = U(e.queryKey, e.scope), n = this.createStorageItem(e), { requestId: r } = n, [i] = this.getQueue(t).requests.slice(-1), a = kn(e, i);
1869
+ let t = U(e.queryKey, e.scope), n = this.createStorageItem(e), { requestId: r } = n, [i] = this.getQueue(t).requests.slice(-1), a = On(e, i);
1870
1870
  switch (this.logger.debug({
1871
1871
  title: "Adding request to queue",
1872
1872
  type: "system",
@@ -1876,9 +1876,9 @@ var Xt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1876
1876
  requestId: r
1877
1877
  }
1878
1878
  }), a) {
1879
- case G.ONE_BY_ONE: return this.addQueueItem(t, n), this.flushQueue(t), r;
1880
- case G.PREVIOUS_CANCELED: return this.cancelRunningRequests(t), this.clearQueue(t), this.addQueueItem(t, n), this.flushQueue(t), r;
1881
- case G.DEDUPLICATED: return this.client.requestManager.events.emitDeduplicated({
1879
+ case K.ONE_BY_ONE: return this.addQueueItem(t, n), this.flushQueue(t), r;
1880
+ case K.PREVIOUS_CANCELED: return this.cancelRunningRequests(t), this.clearQueue(t), this.addQueueItem(t, n), this.flushQueue(t), r;
1881
+ case K.DEDUPLICATED: return this.client.requestManager.events.emitDeduplicated({
1882
1882
  request: i.request,
1883
1883
  requestId: r,
1884
1884
  deduplicatedRequest: e
@@ -1920,7 +1920,7 @@ var Xt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1920
1920
  requestId: n
1921
1921
  }
1922
1922
  });
1923
- let { retry: r, retryTime: i, queryKey: a, abortKey: o, offline: s, scope: c } = t, l = U(a, c), u = U(o, c), { adapter: d, requestManager: f, cache: p, appManager: m } = this.client, h = Dn(e.retries, r), g = !m.isOnline && s, _ = this.hasRunningRequest(l, n), v = e.stopped;
1923
+ let { retry: r, retryTime: i, queryKey: a, abortKey: o, offline: s, scope: c } = t, l = U(a, c), u = U(o, c), { adapter: d, requestManager: f, cache: p, appManager: m } = this.client, h = En(e.retries, r), g = !m.isOnline && s, _ = this.hasRunningRequest(l, n), v = e.stopped;
1924
1924
  if (g || _ || v) return this.logger.warning({
1925
1925
  title: "Unable to perform request",
1926
1926
  type: "system",
@@ -2054,26 +2054,26 @@ var Xt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
2054
2054
  }
2055
2055
  }), this.delete(l, n, u));
2056
2056
  };
2057
- }, xn = () => "drained-event", Sn = (e) => `${e}-drained-event`, Cn = () => "status-event", wn = (e) => `${e}-status-event`, Tn = () => "change-event", En = (e) => `${e}-change-event`, Dn = (e, t) => !!(t && e < t), On = (e, t) => e.deduplicateTime ? +/* @__PURE__ */ new Date() - t.timestamp <= e.deduplicateTime : !0, kn = (e, t) => {
2058
- let { queued: n, cancelable: r, deduplicate: i } = e, a = t ? On(e, t) : !1;
2059
- return n ? G.ONE_BY_ONE : r ? G.PREVIOUS_CANCELED : a && i ? G.DEDUPLICATED : G.ALL_AT_ONCE;
2057
+ }, bn = () => "drained-event", xn = (e) => `${e}-drained-event`, Sn = () => "status-event", Cn = (e) => `${e}-status-event`, wn = () => "change-event", Tn = (e) => `${e}-change-event`, En = (e, t) => !!(t && e < t), Dn = (e, t) => e.deduplicateTime ? +/* @__PURE__ */ new Date() - t.timestamp <= e.deduplicateTime : !0, On = (e, t) => {
2058
+ let { queued: n, cancelable: r, deduplicate: i } = e, a = t ? Dn(e, t) : !1;
2059
+ return n ? K.ONE_BY_ONE : r ? K.PREVIOUS_CANCELED : a && i ? K.DEDUPLICATED : K.ALL_AT_ONCE;
2060
2060
  };
2061
- function An(e) {
2061
+ function kn(e) {
2062
2062
  return e === "client" || e === "server" ? e : typeof window < "u" && typeof document < "u" ? "client" : "server";
2063
2063
  }
2064
- var jn = async (e, t) => {
2064
+ var An = async (e, t) => {
2065
2065
  let n = t;
2066
2066
  if (!t.requestOptions.disableRequestInterceptors) {
2067
2067
  for (let r of e) if (n = await r(t), !n) throw Error("Request modifier must return request");
2068
2068
  }
2069
2069
  return n;
2070
- }, Mn = async (e, t, n) => {
2070
+ }, jn = async (e, t, n) => {
2071
2071
  let r = t;
2072
2072
  if (!n.requestOptions.disableResponseInterceptors) {
2073
2073
  for (let i of e) if (r = await i(t, n), !r) throw Error("Response modifier must return data");
2074
2074
  }
2075
2075
  return r;
2076
- }, Nn = class {
2076
+ }, Mn = class {
2077
2077
  url;
2078
2078
  mode;
2079
2079
  debug;
@@ -2082,8 +2082,8 @@ var jn = async (e, t) => {
2082
2082
  unstable_onResponseCallbacks = [];
2083
2083
  unstable_onAuthCallbacks = [];
2084
2084
  unstable_onRequestCallbacks = [];
2085
- loggerManager = new vt();
2086
- requestManager = new Ve();
2085
+ loggerManager = new yt();
2086
+ requestManager = new He();
2087
2087
  appManager;
2088
2088
  adapter;
2089
2089
  cache;
@@ -2094,12 +2094,12 @@ var jn = async (e, t) => {
2094
2094
  unstable_abortKeyMapper = Vt;
2095
2095
  unstable_cacheKeyMapper = Ht;
2096
2096
  unstable_queryKeyMapper = Ht;
2097
- unstable_requestIdMapper = je;
2097
+ unstable_requestIdMapper = Me;
2098
2098
  logger = this.loggerManager.initialize(this, "Client");
2099
2099
  constructor(e) {
2100
2100
  this.options = e;
2101
2101
  let { url: t, appManager: n, cache: r, fetchDispatcher: i, submitDispatcher: a, mode: o } = this.options;
2102
- this.url = t, this.mode = An(o), this.adapter = ln(), this.appManager = n?.() || new Fe(), this.cache = r?.() || new un(), this.fetchDispatcher = i?.() || new bn(), this.submitDispatcher = a?.() || new bn(), this.adapter.initialize(this), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
2102
+ this.url = t, this.mode = kn(o), this.adapter = cn(), this.appManager = n?.() || new Ie(), this.cache = r?.() || new ln(), this.fetchDispatcher = i?.() || new yn(), this.submitDispatcher = a?.() || new yn(), this.adapter.initialize(this), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
2103
2103
  }
2104
2104
  setDebug = (e) => (this.debug = e, this);
2105
2105
  setLogLevel = (e) => (this.loggerManager.setSeverity(e), this);
@@ -2128,15 +2128,15 @@ var jn = async (e, t) => {
2128
2128
  setCacheKeyMapper = (e) => (this.unstable_cacheKeyMapper = e, this);
2129
2129
  setQueryKeyMapper = (e) => (this.unstable_queryKeyMapper = e, this);
2130
2130
  setRequestIdMapper = (e) => (this.unstable_requestIdMapper = e, this);
2131
- unstable_modifyAuth = async (e) => jn(this.unstable_onAuthCallbacks, e);
2132
- unstable_modifyRequest = async (e) => jn(this.unstable_onRequestCallbacks, e);
2133
- unstable_modifyErrorResponse = async (e, t) => Mn(this.unstable_onErrorCallbacks, e, t);
2134
- unstable_modifySuccessResponse = async (e, t) => Mn(this.unstable_onSuccessCallbacks, e, t);
2135
- unstable_modifyResponse = async (e, t) => Mn(this.unstable_onResponseCallbacks, e, t);
2131
+ unstable_modifyAuth = async (e) => An(this.unstable_onAuthCallbacks, e);
2132
+ unstable_modifyRequest = async (e) => An(this.unstable_onRequestCallbacks, e);
2133
+ unstable_modifyErrorResponse = async (e, t) => jn(this.unstable_onErrorCallbacks, e, t);
2134
+ unstable_modifySuccessResponse = async (e, t) => jn(this.unstable_onSuccessCallbacks, e, t);
2135
+ unstable_modifyResponse = async (e, t) => jn(this.unstable_onResponseCallbacks, e, t);
2136
2136
  fromJSON = (e) => qt.fromJSON(this, e);
2137
2137
  clear = () => {
2138
2138
  let { appManager: e, cache: t, fetchDispatcher: n, submitDispatcher: r } = this.options;
2139
- this.requestManager.abortControllers.clear(), this.fetchDispatcher.clear(), this.submitDispatcher.clear(), this.cache.clear(), this.requestManager.emitter.removeAllListeners(), this.fetchDispatcher.emitter.removeAllListeners(), this.submitDispatcher.emitter.removeAllListeners(), this.cache.emitter.removeAllListeners(), this.cache = t?.() || new un(), this.appManager = e?.() || new Fe(), this.fetchDispatcher = n?.() || new bn(), this.submitDispatcher = r?.() || new bn(), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
2139
+ this.requestManager.abortControllers.clear(), this.fetchDispatcher.clear(), this.submitDispatcher.clear(), this.cache.clear(), this.requestManager.emitter.removeAllListeners(), this.fetchDispatcher.emitter.removeAllListeners(), this.submitDispatcher.emitter.removeAllListeners(), this.cache.emitter.removeAllListeners(), this.cache = t?.() || new ln(), this.appManager = e?.() || new Ie(), this.fetchDispatcher = n?.() || new yn(), this.submitDispatcher = r?.() || new yn(), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
2140
2140
  };
2141
2141
  hydrate = (e, t) => {
2142
2142
  e?.forEach((e) => {
@@ -2169,7 +2169,7 @@ var jn = async (e, t) => {
2169
2169
  }, r = new qt(this, n);
2170
2170
  return this.plugins.forEach((e) => e.trigger("onRequestCreate", { request: r })), r;
2171
2171
  };
2172
- }, Pn = {
2172
+ }, Nn = {
2173
2173
  strict: !0,
2174
2174
  encode: !0,
2175
2175
  arrayFormat: "bracket",
@@ -2178,101 +2178,101 @@ var jn = async (e, t) => {
2178
2178
  skipNull: !0,
2179
2179
  skipEmptyString: !0
2180
2180
  };
2181
- function Fn(e) {
2182
- return new Nn(e);
2181
+ function Pn(e) {
2182
+ return new Mn(e);
2183
2183
  }
2184
2184
  //#endregion
2185
2185
  //#region src/core/client.ts
2186
- var K = Fn({ url: P() });
2186
+ var q = Pn({ url: N() });
2187
2187
  //#endregion
2188
2188
  //#region src/core/auth-api.ts
2189
- async function In(e) {
2190
- let { data: t, success: n } = await K.createRequest()({
2189
+ async function Fn(e) {
2190
+ let { data: t, success: n } = await q.createRequest()({
2191
2191
  endpoint: "/auth/cli/whoami",
2192
2192
  method: "GET"
2193
2193
  }).setHeaders({ Authorization: `Bearer ${e}` }).send();
2194
2194
  return !n || !t ? null : t;
2195
2195
  }
2196
- async function Ln(e) {
2197
- await K.createRequest()({
2196
+ async function In(e) {
2197
+ await q.createRequest()({
2198
2198
  endpoint: "/auth/cli/token",
2199
2199
  method: "DELETE"
2200
2200
  }).setHeaders({ Authorization: `Bearer ${e}` }).send();
2201
2201
  }
2202
2202
  //#endregion
2203
2203
  //#region src/core/auth-store.ts
2204
- var Rn = 1, zn = "hype-stack", Bn = "auth.json";
2205
- function Vn() {
2204
+ var Ln = 1, Rn = "hype-stack", zn = "auth.json";
2205
+ function Bn() {
2206
2206
  let e = process.env.HYPE_STACK_CONFIG_DIR;
2207
- if (e) return w.join(e, zn);
2207
+ if (e) return w.join(e, Rn);
2208
2208
  let t = C.homedir();
2209
2209
  if (process.platform === "win32") {
2210
2210
  let e = process.env.APPDATA ?? w.join(t, "AppData", "Roaming");
2211
- return w.join(e, zn);
2211
+ return w.join(e, Rn);
2212
2212
  }
2213
- if (process.platform === "darwin") return w.join(t, "Library", "Application Support", zn);
2213
+ if (process.platform === "darwin") return w.join(t, "Library", "Application Support", Rn);
2214
2214
  let n = process.env.XDG_CONFIG_HOME ?? w.join(t, ".config");
2215
- return w.join(n, zn);
2215
+ return w.join(n, Rn);
2216
2216
  }
2217
- function Hn() {
2218
- return w.join(Vn(), Bn);
2217
+ function Vn() {
2218
+ return w.join(Bn(), zn);
2219
2219
  }
2220
- async function Un() {
2221
- let e = await v.readFile(Hn(), "utf-8").catch(() => null);
2220
+ async function Hn() {
2221
+ let e = await v.readFile(Vn(), "utf-8").catch(() => null);
2222
2222
  if (!e) return {
2223
- version: Rn,
2223
+ version: Ln,
2224
2224
  tokens: {}
2225
2225
  };
2226
2226
  let t = JSON.parse(e);
2227
2227
  return {
2228
- version: t.version ?? Rn,
2228
+ version: t.version ?? Ln,
2229
2229
  tokens: t.tokens ?? {}
2230
2230
  };
2231
2231
  }
2232
- async function Wn(e) {
2233
- let t = Vn();
2234
- await v.mkdir(t, { recursive: !0 }), await v.writeFile(Hn(), `${JSON.stringify(e, null, 2)}\n`, { mode: 384 });
2232
+ async function Un(e) {
2233
+ let t = Bn();
2234
+ await v.mkdir(t, { recursive: !0 }), await v.writeFile(Vn(), `${JSON.stringify(e, null, 2)}\n`, { mode: 384 });
2235
2235
  }
2236
- async function Gn(e) {
2237
- return (await Un()).tokens[e] ?? null;
2236
+ async function Wn(e) {
2237
+ return (await Hn()).tokens[e] ?? null;
2238
2238
  }
2239
- async function Kn(e, t) {
2240
- let n = await Un();
2241
- n.tokens[e] = t, await Wn(n);
2239
+ async function Gn(e, t) {
2240
+ let n = await Hn();
2241
+ n.tokens[e] = t, await Un(n);
2242
2242
  }
2243
- async function qn(e) {
2244
- let t = await Un();
2245
- e in t.tokens && (delete t.tokens[e], await Wn(t));
2243
+ async function Kn(e) {
2244
+ let t = await Hn();
2245
+ e in t.tokens && (delete t.tokens[e], await Un(t));
2246
2246
  }
2247
2247
  //#endregion
2248
2248
  //#region src/core/device.ts
2249
- function Jn() {
2249
+ function qn() {
2250
2250
  let e = C.networkInterfaces();
2251
2251
  for (let t of Object.values(e)) if (t) {
2252
2252
  for (let e of t) if (!e.internal && e.mac !== "00:00:00:00:00:00") return e.mac;
2253
2253
  }
2254
2254
  return "unknown";
2255
2255
  }
2256
- function Yn() {
2257
- let e = `${Jn()}:${C.hostname()}:${C.platform()}:${C.arch()}`;
2256
+ function Jn() {
2257
+ let e = `${qn()}:${C.hostname()}:${C.platform()}:${C.arch()}`;
2258
2258
  return b("sha256").update(e).digest("hex").slice(0, 16);
2259
2259
  }
2260
- function Xn() {
2260
+ function Yn() {
2261
2261
  return `hype-stack/${k} ${C.platform()} ${C.arch()} node/${process.version.slice(1)}`;
2262
2262
  }
2263
2263
  //#endregion
2264
2264
  //#region src/core/open-browser.ts
2265
- function Zn(e) {
2265
+ function Xn(e) {
2266
2266
  T(process.platform === "darwin" ? `open "${e}"` : process.platform === "win32" ? `start "" "${e}"` : `xdg-open "${e}"`);
2267
2267
  }
2268
2268
  //#endregion
2269
2269
  //#region src/core/login.ts
2270
- var Qn = 300 * 1e3, $n = (e) => `<!doctype html><html><head><meta charset="utf-8"><title>Hype Stack CLI</title></head><body style="font-family:system-ui,sans-serif;text-align:center;padding-top:4rem;color:#111"><h2>${e}</h2><p>You can close this tab and return to your terminal.</p></body></html>`;
2271
- async function er(e = {}) {
2272
- let t = x(16).toString("hex"), n = P(), r = S.createServer(), i = await new Promise((n, i) => {
2270
+ var Zn = 300 * 1e3, Qn = (e) => `<!doctype html><html><head><meta charset="utf-8"><title>Hype Stack CLI</title></head><body style="font-family:system-ui,sans-serif;text-align:center;padding-top:4rem;color:#111"><h2>${e}</h2><p>You can close this tab and return to your terminal.</p></body></html>`;
2271
+ async function $n(e = {}) {
2272
+ let t = x(16).toString("hex"), n = N(), r = S.createServer(), i = await new Promise((n, i) => {
2273
2273
  let a = setTimeout(() => {
2274
2274
  o(), i(/* @__PURE__ */ Error("Login timed out. Run `npx @hype-stack/cli login` again."));
2275
- }, Qn);
2275
+ }, Zn);
2276
2276
  function o() {
2277
2277
  clearTimeout(a), r.close(), r.closeAllConnections?.();
2278
2278
  }
@@ -2286,7 +2286,7 @@ async function er(e = {}) {
2286
2286
  r.writeHead(200, {
2287
2287
  "Content-Type": "text/html",
2288
2288
  Connection: "close"
2289
- }), r.end($n(e));
2289
+ }), r.end(Qn(e));
2290
2290
  };
2291
2291
  if (a.searchParams.get("state") !== t) {
2292
2292
  s("Login failed."), o(), i(/* @__PURE__ */ Error("Login failed: state mismatch. Run `npx @hype-stack/cli login` again."));
@@ -2301,53 +2301,53 @@ async function er(e = {}) {
2301
2301
  }), r.on("error", (e) => {
2302
2302
  o(), i(e);
2303
2303
  }), r.listen(0, "127.0.0.1", () => {
2304
- let { port: n } = r.address(), i = encodeURIComponent(Xn()), a = `${F()}/cli/authorize?port=${n}&state=${t}&label=${i}`;
2305
- e.onUrl?.(a), Zn(a);
2304
+ let { port: n } = r.address(), i = encodeURIComponent(Yn()), a = `${P()}/cli/authorize?port=${n}&state=${t}&label=${i}`;
2305
+ e.onUrl?.(a), Xn(a);
2306
2306
  });
2307
- }), a = await In(i).catch(() => null), o = {
2307
+ }), a = await Fn(i).catch(() => null), o = {
2308
2308
  token: i,
2309
2309
  email: a?.email,
2310
2310
  organizationId: a?.organizationId
2311
2311
  };
2312
- return await Kn(n, o), o;
2312
+ return await Gn(n, o), o;
2313
2313
  }
2314
2314
  //#endregion
2315
2315
  //#region src/core/access-prompts.ts
2316
- async function tr() {
2316
+ async function er() {
2317
2317
  let e = await o.confirm({ message: "Log in to install packs your organization owns? (opens your browser)" });
2318
2318
  if (o.isCancel(e) || !e) return null;
2319
2319
  o.log.step("Opening your browser to sign in...");
2320
2320
  try {
2321
- let e = await er({ onUrl: (e) => {
2322
- o.log.info(`If your browser didn't open, visit:\n ${R.path(e)}`);
2321
+ let e = await $n({ onUrl: (e) => {
2322
+ o.log.info(`If your browser didn't open, visit:\n ${L.path(e)}`);
2323
2323
  } });
2324
2324
  return o.log.success(e.email ? `Logged in as ${e.email}` : "Logged in"), e.token;
2325
2325
  } catch (e) {
2326
2326
  return o.log.error(e instanceof Error ? e.message : String(e)), null;
2327
2327
  }
2328
2328
  }
2329
- async function nr(e) {
2329
+ async function tr(e) {
2330
2330
  if (e.length === 0) return;
2331
2331
  o.note([
2332
2332
  "These packs need a purchase before they can be installed:",
2333
2333
  "",
2334
- ...e.map((e) => ` ${R.brand(e.displayName)} ${R.highlight(`$${e.price}`)}`)
2334
+ ...e.map((e) => ` ${L.brand(e.displayName)} ${L.highlight(`$${e.price}`)}`)
2335
2335
  ].join("\n"), "Locked Packs");
2336
2336
  let t = await o.confirm({ message: `Open the purchase ${e.length === 1 ? "page" : "pages"} in your browser?` });
2337
2337
  if (o.isCancel(t) || !t) {
2338
- o.log.info(R.muted("Run 'npx @hype-stack/cli login' after purchasing, then 'npx @hype-stack/cli compose' again."));
2338
+ o.log.info(L.muted("Run 'npx @hype-stack/cli login' after purchasing, then 'npx @hype-stack/cli compose' again."));
2339
2339
  return;
2340
2340
  }
2341
- for (let t of e) Zn(xe(t.name));
2341
+ for (let t of e) Xn(Se(t.name));
2342
2342
  o.log.info([
2343
- R.muted("After purchasing, run:"),
2344
- ` ${R.highlight("npx @hype-stack/cli login")} ${R.muted("Save your access")}`,
2345
- ` ${R.highlight("npx @hype-stack/cli compose")} ${R.muted("Install the packs")}`
2343
+ L.muted("After purchasing, run:"),
2344
+ ` ${L.highlight("npx @hype-stack/cli login")} ${L.muted("Save your access")}`,
2345
+ ` ${L.highlight("npx @hype-stack/cli compose")} ${L.muted("Install the packs")}`
2346
2346
  ].join("\n"));
2347
2347
  }
2348
2348
  //#endregion
2349
2349
  //#region src/utils/exec.ts
2350
- function q(e, t, n) {
2350
+ function J(e, t, n) {
2351
2351
  return new Promise((r, i) => {
2352
2352
  let a = E(e, t, {
2353
2353
  cwd: n.cwd,
@@ -2380,60 +2380,60 @@ function q(e, t, n) {
2380
2380
  }
2381
2381
  //#endregion
2382
2382
  //#region src/utils/fs.ts
2383
- async function rr(e) {
2383
+ async function nr(e) {
2384
2384
  return (await v.stat(e).catch(() => null))?.isDirectory() ?? !1;
2385
2385
  }
2386
- async function J(e) {
2386
+ async function Y(e) {
2387
2387
  return (await v.stat(e).catch(() => null))?.isFile() ?? !1;
2388
2388
  }
2389
- async function ir(e) {
2389
+ async function rr(e) {
2390
2390
  return (await v.readdir(e).catch(() => [])).length === 0;
2391
2391
  }
2392
- async function ar(e) {
2392
+ async function ir(e) {
2393
2393
  let t = await v.readFile(e, "utf-8").catch(() => null);
2394
2394
  return t ? JSON.parse(t) : null;
2395
2395
  }
2396
- async function or(e, t) {
2396
+ async function ar(e, t) {
2397
2397
  await v.writeFile(e, JSON.stringify(t, null, 2) + "\n", "utf-8");
2398
2398
  }
2399
- async function sr(e) {
2399
+ async function or(e) {
2400
2400
  let t = {};
2401
- if (!await rr(e)) return t;
2401
+ if (!await nr(e)) return t;
2402
2402
  let n = await v.readdir(e, { withFileTypes: !0 });
2403
- for (let r of n) r.isDirectory() && await J(w.join(e, r.name, "package.json")) && (t[r.name] = w.relative(w.dirname(e), w.join(e, r.name)));
2403
+ for (let r of n) r.isDirectory() && await Y(w.join(e, r.name, "package.json")) && (t[r.name] = w.relative(w.dirname(e), w.join(e, r.name)));
2404
2404
  return t;
2405
2405
  }
2406
- async function cr(e) {
2406
+ async function sr(e) {
2407
2407
  await v.rm(e, {
2408
2408
  recursive: !0,
2409
2409
  force: !0
2410
2410
  });
2411
2411
  }
2412
- function lr(e, t) {
2412
+ function cr(e, t) {
2413
2413
  return w.basename(e) === t ? e : w.join(e, t);
2414
2414
  }
2415
2415
  //#endregion
2416
2416
  //#region src/core/codegen.ts
2417
- function ur(e) {
2418
- o.log.info(R.muted("Run database setup yourself when ready:")), o.note([
2419
- `${R.command(`cd ${e}`)}`,
2420
- `${R.command("pnpm exec prisma generate")} ${R.muted("(regenerate the Prisma client)")}`,
2421
- `${R.command("pnpm exec prisma migrate dev")} ${R.muted("(create + apply tables for new packs)")}`
2417
+ function lr(e) {
2418
+ o.log.info(L.muted("Run database setup yourself when ready:")), o.note([
2419
+ `${L.command(`cd ${e}`)}`,
2420
+ `${L.command("pnpm exec prisma generate")} ${L.muted("(regenerate the Prisma client)")}`,
2421
+ `${L.command("pnpm exec prisma migrate dev")} ${L.muted("(create + apply tables for new packs)")}`
2422
2422
  ].join("\n"), "Database Setup");
2423
2423
  }
2424
- async function dr(e) {
2425
- let { projectRoot: t, paths: n, skipPrompts: r, runCommand: i = q } = e, a = n.backend.root, s = w.join(t, a);
2426
- if (!await J(w.join(s, "package.json"))) return;
2424
+ async function ur(e) {
2425
+ let { projectRoot: t, paths: n, skipPrompts: r, runCommand: i = J } = e, a = n.backend.root, s = w.join(t, a);
2426
+ if (!await Y(w.join(s, "package.json"))) return;
2427
2427
  if (r) {
2428
- ur(a);
2428
+ lr(a);
2429
2429
  return;
2430
2430
  }
2431
2431
  let c = await o.confirm({
2432
- message: `Run database setup now? (${R.command("prisma generate")} + ${R.command("prisma migrate")})`,
2432
+ message: `Run database setup now? (${L.command("prisma generate")} + ${L.command("prisma migrate")})`,
2433
2433
  initialValue: !0
2434
2434
  });
2435
2435
  if (o.isCancel(c) || !c) {
2436
- ur(a);
2436
+ lr(a);
2437
2437
  return;
2438
2438
  }
2439
2439
  let l = o.spinner();
@@ -2442,10 +2442,10 @@ async function dr(e) {
2442
2442
  "prisma",
2443
2443
  "generate"
2444
2444
  ], { cwd: s })).exitCode !== 0) {
2445
- l.stop(R.warning("Prisma client generation failed")), ur(a);
2445
+ l.stop(L.warning("Prisma client generation failed")), lr(a);
2446
2446
  return;
2447
2447
  }
2448
- l.stop(R.success("Prisma client generated"));
2448
+ l.stop(L.success("Prisma client generated"));
2449
2449
  let u = o.spinner();
2450
2450
  if (u.start("Applying database schema..."), (await i("pnpm", [
2451
2451
  "exec",
@@ -2455,30 +2455,30 @@ async function dr(e) {
2455
2455
  "--name",
2456
2456
  "add-packs"
2457
2457
  ], { cwd: s })).exitCode !== 0) {
2458
- u.stop(R.warning("Database migration failed (is your database running?)")), ur(a);
2458
+ u.stop(L.warning("Database migration failed (is your database running?)")), lr(a);
2459
2459
  return;
2460
2460
  }
2461
- u.stop(R.success("Database schema applied"));
2461
+ u.stop(L.success("Database schema applied"));
2462
2462
  }
2463
2463
  //#endregion
2464
2464
  //#region src/core/stack-config.ts
2465
- async function fr(e) {
2466
- return ar(w.join(e, j));
2465
+ async function dr(e) {
2466
+ return ir(w.join(e, ne));
2467
2467
  }
2468
- async function pr(e) {
2469
- return J(w.join(e, j));
2468
+ async function fr(e) {
2469
+ return Y(w.join(e, ne));
2470
2470
  }
2471
- async function mr(e, t) {
2472
- await or(w.join(e, j), t);
2471
+ async function pr(e, t) {
2472
+ await ar(w.join(e, ne), t);
2473
2473
  }
2474
- async function hr(e) {
2475
- let t = w.join(e, "apps"), n = w.join(e, "packages"), [r, i] = await Promise.all([sr(t), sr(n)]);
2474
+ async function mr(e) {
2475
+ let t = w.join(e, "apps"), n = w.join(e, "packages"), [r, i] = await Promise.all([or(t), or(n)]);
2476
2476
  return {
2477
2477
  apps: r,
2478
2478
  packages: i
2479
2479
  };
2480
2480
  }
2481
- function gr(e) {
2481
+ function hr(e) {
2482
2482
  let t = e.apps.backend ?? "apps/backend", n = e.apps.frontend ?? "apps/frontend", r = e.apps.admin ?? "apps/admin", i = e.packages.enums ?? "packages/enums";
2483
2483
  return {
2484
2484
  backend: {
@@ -2512,23 +2512,23 @@ function gr(e) {
2512
2512
  }
2513
2513
  };
2514
2514
  }
2515
- function _r(e, t) {
2515
+ function gr(e, t) {
2516
2516
  return {
2517
- $schema: ue(),
2517
+ $schema: de(),
2518
2518
  version: 1,
2519
2519
  name: e,
2520
2520
  apps: t.apps,
2521
2521
  packages: t.packages,
2522
- paths: gr(t),
2522
+ paths: hr(t),
2523
2523
  installedPacks: [],
2524
2524
  licenseKey: null
2525
2525
  };
2526
2526
  }
2527
- async function vr(e) {
2528
- let t = w.join(e, "package.json"), n = w.join(e, "apps"), [r, i] = await Promise.all([J(t), rr(n)]);
2527
+ async function _r(e) {
2528
+ let t = w.join(e, "package.json"), n = w.join(e, "apps"), [r, i] = await Promise.all([Y(t), nr(n)]);
2529
2529
  return r && i;
2530
2530
  }
2531
- function Y(e, t) {
2531
+ function X(e, t) {
2532
2532
  return e.replace(/\{\{(\w+)\.(\w+)\}\}/g, (n, r, i) => {
2533
2533
  let a = t[r];
2534
2534
  if (!a) throw Error(`Unknown app "${r}" in path template "${e}"`);
@@ -2539,8 +2539,8 @@ function Y(e, t) {
2539
2539
  }
2540
2540
  //#endregion
2541
2541
  //#region src/core/registry.ts
2542
- async function yr(e) {
2543
- let { data: t, error: n, status: r } = await K.createRequest()({
2542
+ async function vr(e) {
2543
+ let { data: t, error: n, status: r } = await q.createRequest()({
2544
2544
  endpoint: `/packs/${encodeURIComponent(e)}/manifest`,
2545
2545
  method: "GET"
2546
2546
  }).send();
@@ -2548,13 +2548,13 @@ async function yr(e) {
2548
2548
  if (n || !t) throw Error(`Failed to load manifest for "${e}": ${String(n)}`);
2549
2549
  return t;
2550
2550
  }
2551
- async function br(e, t = {}) {
2552
- let n = K.createRequest()({
2551
+ async function yr(e, t = {}) {
2552
+ let n = q.createRequest()({
2553
2553
  endpoint: `/packs/${encodeURIComponent(e)}/download`,
2554
2554
  method: "POST"
2555
2555
  }), r = {
2556
- "X-Device-Id": Yn(),
2557
- "X-Client-Info": Xn()
2556
+ "X-Device-Id": Jn(),
2557
+ "X-Client-Info": Yn()
2558
2558
  };
2559
2559
  t.token && (r.Authorization = `Bearer ${t.token}`);
2560
2560
  let { data: i, error: a, success: o } = await n.setPayload({ key: t.licenseKey ?? void 0 }).setHeaders(r).send();
@@ -2574,25 +2574,25 @@ async function br(e, t = {}) {
2574
2574
  packDir: s
2575
2575
  };
2576
2576
  }
2577
- function xr(e, t, n) {
2578
- let r = Y(e, t);
2577
+ function br(e, t, n) {
2578
+ let r = X(e, t);
2579
2579
  return w.resolve(n, r);
2580
2580
  }
2581
- function Sr(e, t) {
2581
+ function xr(e, t) {
2582
2582
  return w.join(t, e);
2583
2583
  }
2584
- var Cr = K.createRequest()({
2584
+ var Sr = q.createRequest()({
2585
2585
  endpoint: "/packs/list",
2586
2586
  method: "GET"
2587
2587
  });
2588
- async function wr() {
2589
- let { data: e, error: t } = await Cr.send();
2588
+ async function Cr() {
2589
+ let { data: e, error: t } = await Sr.send();
2590
2590
  if (t || !e) throw Error(`Failed to fetch pack list: ${String(t)}`);
2591
2591
  return e.packs;
2592
2592
  }
2593
- async function Tr(e, t = {}) {
2593
+ async function wr(e, t = {}) {
2594
2594
  if (e.length === 0) return {};
2595
- let n = K.createRequest()({
2595
+ let n = q.createRequest()({
2596
2596
  endpoint: "/packs/authorize",
2597
2597
  method: "POST"
2598
2598
  }), r = {};
@@ -2606,35 +2606,35 @@ async function Tr(e, t = {}) {
2606
2606
  }
2607
2607
  //#endregion
2608
2608
  //#region src/core/codemods.ts
2609
- var Er = "@hype-stack/";
2610
- function Dr(e, t) {
2611
- return Y(e === "admin" ? "{{admin.root}}" : "{{frontend.root}}", t);
2609
+ var Tr = "@hype-stack/";
2610
+ function Er(e, t) {
2611
+ return X(e === "admin" ? "{{admin.root}}" : "{{frontend.root}}", t);
2612
2612
  }
2613
- async function Or(e, t, n) {
2614
- let r = Y("{{backend.root}}", t), i = w.resolve(n, r, "src/config/env/env.config.ts"), a = w.resolve(n, r, ".env.example"), o = w.resolve(n, r, ".env.test");
2615
- if (await J(i)) {
2613
+ async function Dr(e, t, n) {
2614
+ let r = X("{{backend.root}}", t), i = w.resolve(n, r, "src/config/env/env.config.ts"), a = w.resolve(n, r, ".env.example"), o = w.resolve(n, r, ".env.test");
2615
+ if (await Y(i)) {
2616
2616
  let t = await v.readFile(i, "utf-8");
2617
- for (let n of e) t.includes(`from "${n.from}"`) || (t = kr(t, n), t = Ar(t, n));
2617
+ for (let n of e) t.includes(`from "${n.from}"`) || (t = Or(t, n), t = kr(t, n));
2618
2618
  await v.writeFile(i, t, "utf-8");
2619
2619
  }
2620
- if (await J(a)) {
2620
+ if (await Y(a)) {
2621
2621
  let t = await v.readFile(a, "utf-8");
2622
- for (let n of e) t = jr(t, n);
2622
+ for (let n of e) t = Ar(t, n);
2623
2623
  await v.writeFile(a, t, "utf-8");
2624
2624
  }
2625
- if (await J(o)) {
2625
+ if (await Y(o)) {
2626
2626
  let t = await v.readFile(o, "utf-8");
2627
- for (let n of e) t = Mr(t, n);
2627
+ for (let n of e) t = jr(t, n);
2628
2628
  await v.writeFile(o, t, "utf-8");
2629
2629
  }
2630
2630
  }
2631
- function kr(e, t) {
2631
+ function Or(e, t) {
2632
2632
  let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("import ");
2633
2633
  if (r === -1) return n + "\n" + e;
2634
2634
  let i = e.indexOf("\n", e.indexOf(";", r));
2635
2635
  return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
2636
2636
  }
2637
- function Ar(e, t) {
2637
+ function kr(e, t) {
2638
2638
  let n = `.extend(${t.import}.shape)`;
2639
2639
  if (e.includes(n)) return e;
2640
2640
  let r = e.indexOf("export const envSchema = z.object({");
@@ -2649,27 +2649,27 @@ function Ar(e, t) {
2649
2649
  let o = a + 2;
2650
2650
  return e.slice(0, o) + n + e.slice(o);
2651
2651
  }
2652
- function jr(e, t) {
2652
+ function Ar(e, t) {
2653
2653
  for (let n of Object.keys(t.envExample.vars)) if (e.includes(`${n}=`)) return e;
2654
2654
  let n = [];
2655
2655
  n.push(""), n.push(`# ${t.envExample.section}`);
2656
2656
  for (let [e, r] of Object.entries(t.envExample.vars)) n.push(`${e}=${r}`);
2657
2657
  return e.trimEnd() + "\n" + n.join("\n") + "\n";
2658
2658
  }
2659
- function Mr(e, t) {
2659
+ function jr(e, t) {
2660
2660
  for (let n of Object.keys(t.envTest)) if (e.includes(`${n}=`)) return e;
2661
2661
  let n = [""];
2662
2662
  for (let [e, r] of Object.entries(t.envTest)) n.push(`${e}=${r}`);
2663
2663
  return e.trimEnd() + "\n" + n.join("\n") + "\n";
2664
2664
  }
2665
- async function Nr(e, t, n) {
2666
- let r = w.resolve(n, Y("{{backend.routes}}", t), "index.ts");
2667
- if (!await J(r)) return;
2665
+ async function Mr(e, t, n) {
2666
+ let r = w.resolve(n, X("{{backend.routes}}", t), "index.ts");
2667
+ if (!await Y(r)) return;
2668
2668
  let i = await v.readFile(r, "utf-8");
2669
- for (let t of e) i.includes(`from "${t.from}"`) || (i = Pr(i, t), i = Fr(i, t));
2669
+ for (let t of e) i.includes(`from "${t.from}"`) || (i = Nr(i, t), i = Pr(i, t));
2670
2670
  await v.writeFile(r, i, "utf-8");
2671
2671
  }
2672
- function Pr(e, t) {
2672
+ function Nr(e, t) {
2673
2673
  let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("from \"./");
2674
2674
  if (r !== -1) {
2675
2675
  let t = e.indexOf("\n", r);
@@ -2678,7 +2678,7 @@ function Pr(e, t) {
2678
2678
  let i = e.indexOf("export const registerRoutes");
2679
2679
  return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
2680
2680
  }
2681
- function Fr(e, t) {
2681
+ function Pr(e, t) {
2682
2682
  let n = `.route("${t.prefix}", ${t.import})`, r = e.match(/\.route\([^)]+\);/g);
2683
2683
  if (r) {
2684
2684
  let t = r[r.length - 1], i = e.lastIndexOf(t) + t.length - 1;
@@ -2686,14 +2686,14 @@ function Fr(e, t) {
2686
2686
  }
2687
2687
  return e.replace("return app;", `return app\n ${n};`);
2688
2688
  }
2689
- async function Ir(e, t, n) {
2690
- let r = w.resolve(n, Y("{{backend.root}}", t), "src/context.ts");
2691
- if (!await J(r)) return;
2689
+ async function Fr(e, t, n) {
2690
+ let r = w.resolve(n, X("{{backend.root}}", t), "src/context.ts");
2691
+ if (!await Y(r)) return;
2692
2692
  let i = await v.readFile(r, "utf-8");
2693
- for (let t of e) i.includes(`export let ${t.export}`) || (i = Lr(i, t), i = Rr(i, t), i = zr(i, t), i = Vr(i, t));
2693
+ for (let t of e) i.includes(`export let ${t.export}`) || (i = Ir(i, t), i = Lr(i, t), i = Rr(i, t), i = Br(i, t));
2694
2694
  await v.writeFile(r, i, "utf-8");
2695
2695
  }
2696
- function Lr(e, t) {
2696
+ function Ir(e, t) {
2697
2697
  let n = `import { ${t.typeImport.name} } from "${t.typeImport.from}";`;
2698
2698
  if (e.includes(`from "${t.typeImport.from}"`)) return e;
2699
2699
  let r = e.lastIndexOf("import ");
@@ -2701,7 +2701,7 @@ function Lr(e, t) {
2701
2701
  let i = e.indexOf("\n", e.indexOf(";", r));
2702
2702
  return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
2703
2703
  }
2704
- function Rr(e, t) {
2704
+ function Lr(e, t) {
2705
2705
  let n = `export let ${t.export}: ${t.type};`, r = e.lastIndexOf("export let ");
2706
2706
  if (r === -1) {
2707
2707
  let t = e.indexOf("export const setupContext");
@@ -2710,15 +2710,15 @@ function Rr(e, t) {
2710
2710
  let i = e.indexOf("\n", r);
2711
2711
  return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
2712
2712
  }
2713
- function zr(e, t) {
2713
+ function Rr(e, t) {
2714
2714
  let n = ` ${t.export} = ${t.init};`, r = e.match(/export const setupContext\s*=\s*async\s*\([^)]*\)\s*=>\s*\{/);
2715
2715
  if (!r) return e;
2716
2716
  let i = e.indexOf("{", e.indexOf(r[0]));
2717
2717
  if (i === -1) return e;
2718
- let a = Br(e, i);
2718
+ let a = zr(e, i);
2719
2719
  return a === -1 ? e : e.slice(0, a) + n + "\n" + e.slice(a);
2720
2720
  }
2721
- function Br(e, t) {
2721
+ function zr(e, t) {
2722
2722
  let n = 0;
2723
2723
  for (let r = t; r < e.length; r++) {
2724
2724
  let t = e[r];
@@ -2727,20 +2727,20 @@ function Br(e, t) {
2727
2727
  }
2728
2728
  return -1;
2729
2729
  }
2730
- function Vr(e, t) {
2730
+ function Br(e, t) {
2731
2731
  let n = ` ${t.export}: ${t.type};`, r = e.indexOf("export type ContextVariables = {");
2732
2732
  if (r === -1) return e;
2733
2733
  let i = e.indexOf("};", r);
2734
2734
  return i === -1 ? e : e.slice(0, i) + n + "\n" + e.slice(i);
2735
2735
  }
2736
- async function Hr(e, t, n) {
2737
- let r = w.resolve(n, Y("{{enums.src}}", t), "index.ts");
2738
- if (!await J(r)) return;
2736
+ async function Vr(e, t, n) {
2737
+ let r = w.resolve(n, X("{{enums.src}}", t), "index.ts");
2738
+ if (!await Y(r)) return;
2739
2739
  let i = await v.readFile(r, "utf-8");
2740
- for (let t of e) i.includes(`from "${t.from}"`) || (i = Ur(i, t));
2740
+ for (let t of e) i.includes(`from "${t.from}"`) || (i = Hr(i, t));
2741
2741
  await v.writeFile(r, i, "utf-8");
2742
2742
  }
2743
- function Ur(e, t) {
2743
+ function Hr(e, t) {
2744
2744
  let n = `export * from "${t.from}";`, r = e.lastIndexOf("export * from");
2745
2745
  if (r !== -1) {
2746
2746
  let t = e.indexOf("\n", r);
@@ -2748,14 +2748,14 @@ function Ur(e, t) {
2748
2748
  }
2749
2749
  return e.trim() === "" ? n + "\n" : e.trimEnd() + "\n" + n + "\n";
2750
2750
  }
2751
- async function Wr(e, t, n) {
2752
- let r = Y("{{backend.root}}", t), i = w.resolve(n, r, "src/sockets/index.ts");
2753
- if (!await J(i)) return;
2751
+ async function Ur(e, t, n) {
2752
+ let r = X("{{backend.root}}", t), i = w.resolve(n, r, "src/sockets/index.ts");
2753
+ if (!await Y(i)) return;
2754
2754
  let a = await v.readFile(i, "utf-8");
2755
- for (let t of e) a.includes(`from "${t.from}"`) || (a = Gr(a, t), a = Kr(a, t));
2756
- await J(w.resolve(n, r, "src/libs/websocket/ws-authenticate.ts")) && (a = qr(a)), await v.writeFile(i, a, "utf-8");
2755
+ for (let t of e) a.includes(`from "${t.from}"`) || (a = Wr(a, t), a = Gr(a, t));
2756
+ await Y(w.resolve(n, r, "src/libs/websocket/ws-authenticate.ts")) && (a = Kr(a)), await v.writeFile(i, a, "utf-8");
2757
2757
  }
2758
- function Gr(e, t) {
2758
+ function Wr(e, t) {
2759
2759
  let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("from \"./");
2760
2760
  if (r !== -1) {
2761
2761
  let t = e.indexOf("\n", r);
@@ -2764,7 +2764,7 @@ function Gr(e, t) {
2764
2764
  let i = e.indexOf("const sockets");
2765
2765
  return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
2766
2766
  }
2767
- function Kr(e, t) {
2767
+ function Gr(e, t) {
2768
2768
  let n = `.socket("${t.prefix}", ${t.import})`, r = e.indexOf("const sockets");
2769
2769
  if (r === -1) return e;
2770
2770
  let i = e.indexOf("new SocketRouter", r);
@@ -2778,7 +2778,7 @@ function Kr(e, t) {
2778
2778
  }
2779
2779
  return e;
2780
2780
  }
2781
- function qr(e) {
2781
+ function Kr(e) {
2782
2782
  if (e.includes("wsAuthenticate")) return e;
2783
2783
  let t = e.indexOf("from \"@backend/libs/websocket/socket-router\""), n = e;
2784
2784
  if (t !== -1) {
@@ -2787,14 +2787,14 @@ function qr(e) {
2787
2787
  }
2788
2788
  return n.replace("new SocketRouter()", "new SocketRouter({ authenticate: wsAuthenticate })");
2789
2789
  }
2790
- async function Jr(e, t, n) {
2791
- let r = Y("{{frontend.root}}", t), i = w.resolve(n, r, "src/api/sdk.ts");
2792
- if (!await J(i)) return;
2790
+ async function qr(e, t, n) {
2791
+ let r = X("{{frontend.root}}", t), i = w.resolve(n, r, "src/api/sdk.ts");
2792
+ if (!await Y(i)) return;
2793
2793
  let a = await v.readFile(i, "utf-8");
2794
- for (let t of e) a.includes(`.$configure(${t.import})`) || (a = Yr(a, t), a = Xr(a, t));
2794
+ for (let t of e) a.includes(`.$configure(${t.import})`) || (a = Jr(a, t), a = Yr(a, t));
2795
2795
  await v.writeFile(i, a, "utf-8");
2796
2796
  }
2797
- function Yr(e, t) {
2797
+ function Jr(e, t) {
2798
2798
  let n = `import { ${t.import} } from "${t.from}";`;
2799
2799
  if (e.includes(n)) return e;
2800
2800
  let r = e.lastIndexOf("from \"./");
@@ -2805,57 +2805,57 @@ function Yr(e, t) {
2805
2805
  let i = e.indexOf("export const sdk");
2806
2806
  return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
2807
2807
  }
2808
- function Xr(e, t) {
2808
+ function Yr(e, t) {
2809
2809
  let n = `.$configure(${t.import})`, r = e.indexOf("export const sdk");
2810
2810
  if (r === -1) return e;
2811
2811
  let i = e.indexOf(";", r);
2812
2812
  return i === -1 ? e : e.slice(0, i) + "\n " + n + e.slice(i);
2813
2813
  }
2814
- async function Zr(e, t, n) {
2815
- let r = w.resolve(n, Y("{{backend.utils}}", t), "frontend-url/frontend-url.ts");
2816
- if (!await J(r)) return;
2814
+ async function Xr(e, t, n) {
2815
+ let r = w.resolve(n, X("{{backend.utils}}", t), "frontend-url/frontend-url.ts");
2816
+ if (!await Y(r)) return;
2817
2817
  let i = await v.readFile(r, "utf-8");
2818
- for (let t of e) i.includes(`"${t.path}"`) || (i = Qr(i, t));
2818
+ for (let t of e) i.includes(`"${t.path}"`) || (i = Zr(i, t));
2819
2819
  await v.writeFile(r, i, "utf-8");
2820
2820
  }
2821
- function Qr(e, t) {
2821
+ function Zr(e, t) {
2822
2822
  let n = ` "${t.path}": ${t.search};`, r = e.indexOf("type RouteDefinitions = {");
2823
2823
  if (r === -1) return e;
2824
2824
  let i = e.indexOf("};", r);
2825
2825
  return i === -1 ? e : e.slice(0, i) + n + "\n" + e.slice(i);
2826
2826
  }
2827
- var $r = "import { type LucideIcon } from \"lucide-react\";\n\n/* -------------------------------------------------------------------------------------------------\n * Types\n * -----------------------------------------------------------------------------------------------*/\n\nexport type NavItem = {\n label: string;\n icon: LucideIcon;\n to: string;\n params?: Record<string, string>;\n};\n\nexport type NavSection = {\n label: string;\n icon: LucideIcon;\n items: NavItem[];\n};\n\nexport type NavSectionLink = NavSection & { to: string; params?: Record<string, string> };\n\nexport type NavEntry = NavSection | NavSectionLink;\n\n/* -------------------------------------------------------------------------------------------------\n * Navigation\n * -----------------------------------------------------------------------------------------------*/\n\nexport const primaryNav: NavEntry[] = [];\n\nexport const secondaryNav: NavEntry[] = [];\n\nexport const tertiaryNav: NavEntry[] = [];\n\nexport const settingsNav: NavEntry[] = [];\n", ei = {
2827
+ var Qr = "import { type LucideIcon } from \"lucide-react\";\n\n/* -------------------------------------------------------------------------------------------------\n * Types\n * -----------------------------------------------------------------------------------------------*/\n\nexport type NavItem = {\n label: string;\n icon: LucideIcon;\n to: string;\n params?: Record<string, string>;\n};\n\nexport type NavSection = {\n label: string;\n icon: LucideIcon;\n items: NavItem[];\n};\n\nexport type NavSectionLink = NavSection & { to: string; params?: Record<string, string> };\n\nexport type NavEntry = NavSection | NavSectionLink;\n\n/* -------------------------------------------------------------------------------------------------\n * Navigation\n * -----------------------------------------------------------------------------------------------*/\n\nexport const primaryNav: NavEntry[] = [];\n\nexport const secondaryNav: NavEntry[] = [];\n\nexport const tertiaryNav: NavEntry[] = [];\n\nexport const settingsNav: NavEntry[] = [];\n", $r = {
2828
2828
  primary: "primaryNav",
2829
2829
  secondary: "secondaryNav",
2830
2830
  tertiary: "tertiaryNav",
2831
2831
  settings: "settingsNav"
2832
2832
  };
2833
- async function ti(e) {
2834
- let { entries: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = Dr(i, n), o = w.resolve(r, a, "src/constants/nav.constants.ts"), s;
2835
- await J(o) ? s = await v.readFile(o, "utf-8") : (await v.mkdir(w.dirname(o), { recursive: !0 }), s = $r);
2836
- for (let e of t) s.includes(`label: "${e.label}"`) || (s = ii(s, e));
2837
- for (let e of t.toReversed()) s.includes(`label: "${e.label}"`) || (s = oi(s, e));
2833
+ async function ei(e) {
2834
+ let { entries: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = Er(i, n), o = w.resolve(r, a, "src/constants/nav.constants.ts"), s;
2835
+ await Y(o) ? s = await v.readFile(o, "utf-8") : (await v.mkdir(w.dirname(o), { recursive: !0 }), s = Qr);
2836
+ for (let e of t) s.includes(`label: "${e.label}"`) || (s = ri(s, e));
2837
+ for (let e of t.toReversed()) s.includes(`label: "${e.label}"`) || (s = ai(s, e));
2838
2838
  await v.writeFile(o, s, "utf-8");
2839
2839
  }
2840
- async function ni(e) {
2841
- let { postLoginRedirect: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = Dr(i, n), o = w.resolve(r, a, "src/features/auth/constants/auth.constants.ts");
2842
- if (!await J(o)) return;
2840
+ async function ti(e) {
2841
+ let { postLoginRedirect: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = Er(i, n), o = w.resolve(r, a, "src/features/auth/constants/auth.constants.ts");
2842
+ if (!await Y(o)) return;
2843
2843
  let s = await v.readFile(o, "utf-8"), c = /export const POST_LOGIN_REDIRECT_PATH = "[^"]*";/;
2844
2844
  if (!c.test(s)) return;
2845
2845
  let l = s.replace(c, `export const POST_LOGIN_REDIRECT_PATH = "${t}";`);
2846
2846
  await v.writeFile(o, l, "utf-8");
2847
2847
  }
2848
- function ri(e) {
2848
+ function ni(e) {
2849
2849
  let t = [e.icon];
2850
2850
  if (e.items) for (let n of e.items) t.includes(n.icon) || t.push(n.icon);
2851
2851
  return t;
2852
2852
  }
2853
- function ii(e, t) {
2854
- let n = ri(t), r = e;
2855
- for (let e of n) r = ai(r, e);
2853
+ function ri(e, t) {
2854
+ let n = ni(t), r = e;
2855
+ for (let e of n) r = ii(r, e);
2856
2856
  return r;
2857
2857
  }
2858
- function ai(e, t) {
2858
+ function ii(e, t) {
2859
2859
  let n = e.match(/import \{([^}]+)\} from "lucide-react";/);
2860
2860
  if (!n) return e;
2861
2861
  let r = n[1].split(",").map((e) => e.trim()).filter(Boolean);
@@ -2863,21 +2863,21 @@ function ai(e, t) {
2863
2863
  let i = r.findIndex((e) => e.startsWith("type "));
2864
2864
  return i === -1 ? r.push(t) : r.splice(i, 0, t), e.replace(n[0], `import { ${r.join(", ")} } from "lucide-react";`);
2865
2865
  }
2866
- function oi(e, t) {
2867
- let n = ei[t.group];
2866
+ function ai(e, t) {
2867
+ let n = $r[t.group];
2868
2868
  if (!n) return e;
2869
- let r = ci(t), i = RegExp(`export const ${n}: NavEntry\\[\\] = \\[`), a = e.match(i);
2869
+ let r = si(t), i = RegExp(`export const ${n}: NavEntry\\[\\] = \\[`), a = e.match(i);
2870
2870
  if (!a) return e;
2871
- let o = e.indexOf(a[0]) + a[0].length, s = si(e, o - 1);
2871
+ let o = e.indexOf(a[0]) + a[0].length, s = oi(e, o - 1);
2872
2872
  return s === -1 ? e : e.slice(o, s).trim() === "" ? e.slice(0, o) + "\n" + r + "\n" + e.slice(o) : e.slice(0, o) + "\n" + r + e.slice(o);
2873
2873
  }
2874
- function si(e, t) {
2874
+ function oi(e, t) {
2875
2875
  let n = 0;
2876
2876
  for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
2877
2877
  else if (e[r] === "]" && (n--, n === 0)) return r;
2878
2878
  return -1;
2879
2879
  }
2880
- function ci(e) {
2880
+ function si(e) {
2881
2881
  let t = [];
2882
2882
  if (t.push(" {"), t.push(` label: "${e.label}",`), t.push(` icon: ${e.icon},`), e.to && t.push(` to: "${e.to}",`), e.params && t.push(` params: ${e.params},`), e.items && e.items.length > 0) {
2883
2883
  t.push(" items: [");
@@ -2893,14 +2893,14 @@ function ci(e) {
2893
2893
  } else t.push(" items: [],");
2894
2894
  return t.push(" },"), t.join("\n");
2895
2895
  }
2896
- async function li(e, t, n) {
2897
- let r = Y("{{backend.features}}", t), i = w.resolve(n, r, "organizations/modules/setup-organization/steps/index.ts");
2898
- if (!await J(i)) return;
2896
+ async function ci(e, t, n) {
2897
+ let r = X("{{backend.features}}", t), i = w.resolve(n, r, "organizations/modules/setup-organization/steps/index.ts");
2898
+ if (!await Y(i)) return;
2899
2899
  let a = await v.readFile(i, "utf-8");
2900
- for (let t of e) a.includes(`from "${t.from}"`) || (a = ui(a, t), a = di(a, t));
2900
+ for (let t of e) a.includes(`from "${t.from}"`) || (a = li(a, t), a = ui(a, t));
2901
2901
  await v.writeFile(i, a, "utf-8");
2902
2902
  }
2903
- function ui(e, t) {
2903
+ function li(e, t) {
2904
2904
  let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("import ");
2905
2905
  if (r !== -1) {
2906
2906
  let t = e.indexOf("\n", e.indexOf(";", r));
@@ -2908,38 +2908,38 @@ function ui(e, t) {
2908
2908
  }
2909
2909
  return e.indexOf("type "), n + "\n\n" + e;
2910
2910
  }
2911
- function di(e, t) {
2911
+ function ui(e, t) {
2912
2912
  let n = ` { id: "${t.id}", execute: (ctx) => ${t.import}(ctx) },`, r = e.match(/export const steps:\s*Step\[\]\s*=\s*\[/);
2913
2913
  if (!r) return e;
2914
- let i = e.indexOf(r[0]) + r[0].length, a = fi(e, i - 1);
2914
+ let i = e.indexOf(r[0]) + r[0].length, a = di(e, i - 1);
2915
2915
  return a === -1 ? e : e.slice(i, a).trim() === "" ? e.slice(0, a) + "\n" + n + "\n" + e.slice(a) : e.slice(0, a) + n + "\n" + e.slice(a);
2916
2916
  }
2917
- function fi(e, t) {
2917
+ function di(e, t) {
2918
2918
  let n = 0;
2919
2919
  for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
2920
2920
  else if (e[r] === "]" && (n--, n === 0)) return r;
2921
2921
  return -1;
2922
2922
  }
2923
- var pi = "import { type ComponentType } from \"react\";\n\nexport type NavbarAction = {\n id: string;\n component: ComponentType;\n};\n\nexport const navbarActions: NavbarAction[] = [];\n\nexport const userMenuActions: NavbarAction[] = [];\n";
2924
- async function mi(e) {
2925
- await gi({
2923
+ var fi = "import { type ComponentType } from \"react\";\n\nexport type NavbarAction = {\n id: string;\n component: ComponentType;\n};\n\nexport const navbarActions: NavbarAction[] = [];\n\nexport const userMenuActions: NavbarAction[] = [];\n";
2924
+ async function pi(e) {
2925
+ await hi({
2926
2926
  ...e,
2927
2927
  arrayName: "navbarActions"
2928
2928
  });
2929
2929
  }
2930
- async function hi(e) {
2931
- await gi({
2930
+ async function mi(e) {
2931
+ await hi({
2932
2932
  ...e,
2933
2933
  arrayName: "userMenuActions"
2934
2934
  });
2935
2935
  }
2936
- async function gi({ actions: e, arrayName: t, paths: n, projectRoot: r, slot: i }) {
2937
- let a = Dr(i, n), o = w.resolve(r, a, "src/constants/navbar-actions.tsx"), s;
2938
- await J(o) ? s = await v.readFile(o, "utf-8") : (await v.mkdir(w.dirname(o), { recursive: !0 }), s = pi);
2939
- for (let n of e) s = _i(s, n), s = vi(s, n, t);
2936
+ async function hi({ actions: e, arrayName: t, paths: n, projectRoot: r, slot: i }) {
2937
+ let a = Er(i, n), o = w.resolve(r, a, "src/constants/navbar-actions.tsx"), s;
2938
+ await Y(o) ? s = await v.readFile(o, "utf-8") : (await v.mkdir(w.dirname(o), { recursive: !0 }), s = fi);
2939
+ for (let n of e) s = gi(s, n), s = _i(s, n, t);
2940
2940
  await v.writeFile(o, s, "utf-8");
2941
2941
  }
2942
- function _i(e, t) {
2942
+ function gi(e, t) {
2943
2943
  let n = `import { ${t.import} } from "${t.from}";`;
2944
2944
  if (e.includes(n)) return e;
2945
2945
  let r = e.lastIndexOf("import ");
@@ -2947,38 +2947,38 @@ function _i(e, t) {
2947
2947
  let i = e.indexOf("\n", r);
2948
2948
  return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
2949
2949
  }
2950
- function vi(e, t, n) {
2950
+ function _i(e, t, n) {
2951
2951
  let r = e.match(RegExp(`export const ${n}:\\s*NavbarAction\\[\\]\\s*=\\s*\\[`));
2952
2952
  if (!r) return e;
2953
- let i = e.indexOf(r[0]) + r[0].length, a = yi(e, i - 1);
2953
+ let i = e.indexOf(r[0]) + r[0].length, a = vi(e, i - 1);
2954
2954
  if (a === -1) return e;
2955
2955
  let o = e.slice(i, a);
2956
2956
  if (o.includes(`id: "${t.id}"`)) return e;
2957
2957
  let s = ` { id: "${t.id}", component: ${t.import} },`;
2958
2958
  return o.trim() === "" ? e.slice(0, a) + "\n" + s + "\n" + e.slice(a) : e.slice(0, a) + s + "\n" + e.slice(a);
2959
2959
  }
2960
- function yi(e, t) {
2960
+ function vi(e, t) {
2961
2961
  let n = 0;
2962
2962
  for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
2963
2963
  else if (e[r] === "]" && (n--, n === 0)) return r;
2964
2964
  return -1;
2965
2965
  }
2966
- var bi = new Set([
2966
+ var yi = new Set([
2967
2967
  ".ts",
2968
2968
  ".tsx",
2969
2969
  ".js",
2970
2970
  ".jsx"
2971
2971
  ]);
2972
- async function xi(e) {
2972
+ async function bi(e) {
2973
2973
  let { files: t, paths: n, projectRoot: r, projectName: i } = e;
2974
2974
  if (i === "hype-stack") return;
2975
2975
  let a = `@${i}/`;
2976
2976
  await Promise.all(t.map(async (e) => {
2977
- let t = xr(e.target, n, r), i = await v.stat(t).catch(() => null);
2978
- i?.isDirectory() ? await wi(t, a) : i?.isFile() && bi.has(w.extname(t)) && await Ti(t, a);
2977
+ let t = br(e.target, n, r), i = await v.stat(t).catch(() => null);
2978
+ i?.isDirectory() ? await Ci(t, a) : i?.isFile() && yi.has(w.extname(t)) && await wi(t, a);
2979
2979
  }));
2980
2980
  }
2981
- var Si = new Set([
2981
+ var xi = new Set([
2982
2982
  ".git",
2983
2983
  "node_modules",
2984
2984
  "dist",
@@ -2987,48 +2987,48 @@ var Si = new Set([
2987
2987
  ".next",
2988
2988
  "coverage"
2989
2989
  ]);
2990
- async function Ci(e, t) {
2991
- t !== "hype-stack" && await wi(e, `@${t}/`);
2990
+ async function Si(e, t) {
2991
+ t !== "hype-stack" && await Ci(e, `@${t}/`);
2992
2992
  }
2993
- async function wi(e, t) {
2993
+ async function Ci(e, t) {
2994
2994
  let n = await v.readdir(e, { withFileTypes: !0 });
2995
2995
  await Promise.all(n.map(async (n) => {
2996
2996
  let r = w.join(e, n.name);
2997
2997
  if (n.isDirectory()) {
2998
- if (Si.has(n.name)) return;
2999
- await wi(r, t);
3000
- } else n.isFile() && bi.has(w.extname(n.name)) && await Ti(r, t);
2998
+ if (xi.has(n.name)) return;
2999
+ await Ci(r, t);
3000
+ } else n.isFile() && yi.has(w.extname(n.name)) && await wi(r, t);
3001
3001
  }));
3002
3002
  }
3003
- async function Ti(e, t) {
3003
+ async function wi(e, t) {
3004
3004
  let n = await v.readFile(e, "utf-8");
3005
- if (!n.includes(Er)) return;
3006
- let r = n.replaceAll(Er, t);
3005
+ if (!n.includes(Tr)) return;
3006
+ let r = n.replaceAll(Tr, t);
3007
3007
  await v.writeFile(e, r, "utf-8");
3008
3008
  }
3009
3009
  //#endregion
3010
3010
  //#region src/core/installer.ts
3011
- function Ei(e, t) {
3011
+ function Ti(e, t) {
3012
3012
  return e.slot ? t ? t.includes(e.slot) : e.slot === "frontend" : !0;
3013
3013
  }
3014
- async function Di(e, t) {
3014
+ async function Ei(e, t) {
3015
3015
  if ((await v.stat(e)).isDirectory()) {
3016
3016
  await v.mkdir(t, { recursive: !0 });
3017
3017
  let n = await v.readdir(e, { withFileTypes: !0 });
3018
- for (let r of n) await Di(w.join(e, r.name), w.join(t, r.name));
3018
+ for (let r of n) await Ei(w.join(e, r.name), w.join(t, r.name));
3019
3019
  } else await v.mkdir(w.dirname(t), { recursive: !0 }), await v.copyFile(e, t);
3020
3020
  }
3021
- async function Oi(e) {
3022
- let { file: t, packDir: n, paths: r, projectRoot: i } = e, a = Sr(t.source, n), o = xr(t.target, r, i);
3021
+ async function Di(e) {
3022
+ let { file: t, packDir: n, paths: r, projectRoot: i } = e, a = xr(t.source, n), o = br(t.target, r, i);
3023
3023
  return {
3024
3024
  sourcePath: a,
3025
3025
  targetPath: o,
3026
- sourceExists: await J(a) || await rr(a),
3027
- targetExists: await J(o) || await rr(o)
3026
+ sourceExists: await Y(a) || await nr(a),
3027
+ targetExists: await Y(o) || await nr(o)
3028
3028
  };
3029
3029
  }
3030
- async function ki(e) {
3031
- let { file: t, packDir: n, paths: r, projectRoot: i } = e, { sourcePath: a, targetPath: o, sourceExists: s, targetExists: c } = await Oi({
3030
+ async function Oi(e) {
3031
+ let { file: t, packDir: n, paths: r, projectRoot: i } = e, { sourcePath: a, targetPath: o, sourceExists: s, targetExists: c } = await Di({
3032
3032
  file: t,
3033
3033
  packDir: n,
3034
3034
  paths: r,
@@ -3043,8 +3043,8 @@ async function ki(e) {
3043
3043
  default: return `${t.target}: Unknown strategy: ${String(t.strategy)}`;
3044
3044
  }
3045
3045
  }
3046
- async function Ai(e) {
3047
- let { file: t, packDir: n, paths: r, projectRoot: i, force: a, overwrite: o } = e, { sourcePath: s, targetPath: c, sourceExists: l, targetExists: u } = await Oi({
3046
+ async function ki(e) {
3047
+ let { file: t, packDir: n, paths: r, projectRoot: i, force: a, overwrite: o } = e, { sourcePath: s, targetPath: c, sourceExists: l, targetExists: u } = await Di({
3048
3048
  file: t,
3049
3049
  packDir: n,
3050
3050
  paths: r,
@@ -3062,7 +3062,7 @@ async function Ai(e) {
3062
3062
  status: "skipped",
3063
3063
  path: t.target,
3064
3064
  reason: "Already exists"
3065
- } : (await Di(s, c), {
3065
+ } : (await Ei(s, c), {
3066
3066
  status: "installed",
3067
3067
  path: t.target
3068
3068
  });
@@ -3071,16 +3071,16 @@ async function Ai(e) {
3071
3071
  status: "skipped",
3072
3072
  path: t.target,
3073
3073
  reason: "Already exists (skip-if-exists)"
3074
- } : (await Di(s, c), {
3074
+ } : (await Ei(s, c), {
3075
3075
  status: "installed",
3076
3076
  path: t.target
3077
3077
  });
3078
- case "override": return await Di(s, c), {
3078
+ case "override": return await Ei(s, c), {
3079
3079
  status: "installed",
3080
3080
  path: t.target
3081
3081
  };
3082
3082
  case "merge": {
3083
- if (!u) return await Di(s, c), {
3083
+ if (!u) return await Ei(s, c), {
3084
3084
  status: "installed",
3085
3085
  path: t.target
3086
3086
  };
@@ -3110,15 +3110,15 @@ async function Ai(e) {
3110
3110
  };
3111
3111
  }
3112
3112
  }
3113
- async function ji(e) {
3113
+ async function Ai(e) {
3114
3114
  let { packs: t, config: n, projectRoot: r, slotsByPack: i } = e, a = n.paths;
3115
3115
  if (!a) throw Error("stack.json is missing 'paths' configuration. Run 'npx @hype-stack/cli init' to set it up.");
3116
3116
  let o = [], s = /* @__PURE__ */ new Set();
3117
3117
  for (let e of t) {
3118
3118
  let t = i?.get(e.manifest.name);
3119
3119
  for (let n of e.manifest.files) {
3120
- if (n.strategy !== "create" || !Ei(n, t)) continue;
3121
- let { targetPath: i, targetExists: c } = await Oi({
3120
+ if (n.strategy !== "create" || !Ti(n, t)) continue;
3121
+ let { targetPath: i, targetExists: c } = await Di({
3122
3122
  file: n,
3123
3123
  packDir: e.packDir,
3124
3124
  paths: a,
@@ -3133,13 +3133,13 @@ async function ji(e) {
3133
3133
  }
3134
3134
  return o;
3135
3135
  }
3136
- async function Mi(e) {
3136
+ async function ji(e) {
3137
3137
  let { manifest: t, config: n, projectRoot: r, force: i, packDir: a, slots: o } = e, s = n.paths;
3138
3138
  if (!s) throw Error("stack.json is missing 'paths' configuration. Run 'npx @hype-stack/cli init' to set it up.");
3139
3139
  let c = [];
3140
3140
  for (let e of t.files) {
3141
- if (!Ei(e, o)) continue;
3142
- let t = await ki({
3141
+ if (!Ti(e, o)) continue;
3142
+ let t = await Oi({
3143
3143
  file: e,
3144
3144
  packDir: a,
3145
3145
  paths: s,
@@ -3150,16 +3150,16 @@ async function Mi(e) {
3150
3150
  }
3151
3151
  return c;
3152
3152
  }
3153
- async function Ni(e) {
3153
+ async function Mi(e) {
3154
3154
  let { manifest: t, config: n, projectRoot: r, force: i, overwrite: a, packDir: o, slots: s } = e, c = n.paths;
3155
3155
  if (!c) throw Error("stack.json is missing 'paths' configuration. Run 'npx @hype-stack/cli init' to set it up.");
3156
3156
  let l = {
3157
3157
  installed: [],
3158
3158
  skipped: [],
3159
3159
  errors: []
3160
- }, u = t.files.filter((e) => Ei(e, s));
3160
+ }, u = t.files.filter((e) => Ti(e, s));
3161
3161
  for (let e of u) {
3162
- let t = await Ai({
3162
+ let t = await ki({
3163
3163
  file: e,
3164
3164
  packDir: o,
3165
3165
  paths: c,
@@ -3179,40 +3179,40 @@ async function Ni(e) {
3179
3179
  break;
3180
3180
  }
3181
3181
  }
3182
- await xi({
3182
+ await bi({
3183
3183
  files: u,
3184
3184
  paths: c,
3185
3185
  projectRoot: r,
3186
3186
  projectName: n.name
3187
- }), t.env && t.env.length > 0 && await Or(t.env, c, r), t.routes && t.routes.length > 0 && await Nr(t.routes, c, r), t.context && t.context.length > 0 && await Ir(t.context, c, r), t.sockets && t.sockets.length > 0 && await Wr(t.sockets, c, r), t.sdkConfigurations && t.sdkConfigurations.length > 0 && await Jr(t.sdkConfigurations, c, r), t.enums && t.enums.length > 0 && await Hr(t.enums, c, r), t.frontendRoutes && t.frontendRoutes.length > 0 && await Zr(t.frontendRoutes, c, r);
3187
+ }), t.env && t.env.length > 0 && await Dr(t.env, c, r), t.routes && t.routes.length > 0 && await Mr(t.routes, c, r), t.context && t.context.length > 0 && await Fr(t.context, c, r), t.sockets && t.sockets.length > 0 && await Ur(t.sockets, c, r), t.sdkConfigurations && t.sdkConfigurations.length > 0 && await qr(t.sdkConfigurations, c, r), t.enums && t.enums.length > 0 && await Vr(t.enums, c, r), t.frontendRoutes && t.frontendRoutes.length > 0 && await Xr(t.frontendRoutes, c, r);
3188
3188
  let d = s && s.length > 0 ? s : ["frontend"];
3189
- for (let e of d) t.nav && t.nav.length > 0 && await ti({
3189
+ for (let e of d) t.nav && t.nav.length > 0 && await ei({
3190
3190
  entries: t.nav,
3191
3191
  paths: c,
3192
3192
  projectRoot: r,
3193
3193
  slot: e
3194
- }), t.navbarActions && t.navbarActions.length > 0 && await mi({
3194
+ }), t.navbarActions && t.navbarActions.length > 0 && await pi({
3195
3195
  actions: t.navbarActions,
3196
3196
  paths: c,
3197
3197
  projectRoot: r,
3198
3198
  slot: e
3199
- }), t.userMenuActions && t.userMenuActions.length > 0 && await hi({
3199
+ }), t.userMenuActions && t.userMenuActions.length > 0 && await mi({
3200
3200
  actions: t.userMenuActions,
3201
3201
  paths: c,
3202
3202
  projectRoot: r,
3203
3203
  slot: e
3204
3204
  });
3205
- return t.onboardingSteps && t.onboardingSteps.length > 0 && await li(t.onboardingSteps, c, r), t.postLoginRedirect && await ni({
3205
+ return t.onboardingSteps && t.onboardingSteps.length > 0 && await ci(t.onboardingSteps, c, r), t.postLoginRedirect && await ti({
3206
3206
  postLoginRedirect: t.postLoginRedirect,
3207
3207
  paths: c,
3208
3208
  projectRoot: r,
3209
3209
  slot: d[0]
3210
3210
  }), l;
3211
3211
  }
3212
- async function Pi(e) {
3212
+ async function Ni(e) {
3213
3213
  let { packs: t, config: n, projectRoot: r, force: i, overwrite: a, slotsByPack: o } = e, s = [];
3214
3214
  for (let e of t) {
3215
- let t = o?.get(e.manifest.name), a = await Mi({
3215
+ let t = o?.get(e.manifest.name), a = await ji({
3216
3216
  manifest: e.manifest,
3217
3217
  config: n,
3218
3218
  projectRoot: r,
@@ -3232,7 +3232,7 @@ async function Pi(e) {
3232
3232
  };
3233
3233
  let c = [], l = [], u = [], d = [], f = n;
3234
3234
  for (let e of t) {
3235
- let t = o?.get(e.manifest.name), n = await Ni({
3235
+ let t = o?.get(e.manifest.name), n = await Mi({
3236
3236
  manifest: e.manifest,
3237
3237
  config: f,
3238
3238
  projectRoot: r,
@@ -3241,7 +3241,7 @@ async function Pi(e) {
3241
3241
  packDir: e.packDir,
3242
3242
  slots: t
3243
3243
  });
3244
- c.push(...n.installed), l.push(...n.skipped), u.push(...n.errors), f = await Fi(f, e.manifest.name, r), d.push(e.manifest.name);
3244
+ c.push(...n.installed), l.push(...n.skipped), u.push(...n.errors), f = await Pi(f, e.manifest.name, r), d.push(e.manifest.name);
3245
3245
  }
3246
3246
  return {
3247
3247
  installed: c,
@@ -3252,19 +3252,19 @@ async function Pi(e) {
3252
3252
  config: f
3253
3253
  };
3254
3254
  }
3255
- async function Fi(e, t, n) {
3255
+ async function Pi(e, t, n) {
3256
3256
  let r = {
3257
3257
  ...e,
3258
3258
  installedPacks: [...e.installedPacks ?? [], t]
3259
3259
  };
3260
- return await mr(n, r), r;
3260
+ return await pr(n, r), r;
3261
3261
  }
3262
- async function Ii(e) {
3262
+ async function Fi(e) {
3263
3263
  let { manifest: t, config: n, projectRoot: r, templateDir: i } = e, a = n.paths;
3264
3264
  if (!a) throw Error("stack.json is missing 'paths' configuration. Run 'npx @hype-stack/cli init' to set it up.");
3265
3265
  let o = [], s = [];
3266
3266
  for (let e of t.files) {
3267
- let t = await Ai({
3267
+ let t = await ki({
3268
3268
  file: e,
3269
3269
  packDir: i,
3270
3270
  paths: a,
@@ -3282,11 +3282,11 @@ async function Ii(e) {
3282
3282
  case "skipped": break;
3283
3283
  }
3284
3284
  }
3285
- return t.frontendRoutes && t.frontendRoutes.length > 0 && await Zr(t.frontendRoutes, a, r), t.nav && t.nav.length > 0 && await ti({
3285
+ return t.frontendRoutes && t.frontendRoutes.length > 0 && await Xr(t.frontendRoutes, a, r), t.nav && t.nav.length > 0 && await ei({
3286
3286
  entries: t.nav,
3287
3287
  paths: a,
3288
3288
  projectRoot: r
3289
- }), t.postLoginRedirect && await ni({
3289
+ }), t.postLoginRedirect && await ti({
3290
3290
  postLoginRedirect: t.postLoginRedirect,
3291
3291
  paths: a,
3292
3292
  projectRoot: r
@@ -3297,28 +3297,28 @@ async function Ii(e) {
3297
3297
  }
3298
3298
  //#endregion
3299
3299
  //#region src/core/pack-categories.ts
3300
- var Li = [
3300
+ var Ii = [
3301
3301
  "starter",
3302
3302
  "layout",
3303
3303
  "feature"
3304
- ], Ri = {
3304
+ ], Li = {
3305
3305
  starter: "Starter",
3306
3306
  layout: "Layout",
3307
3307
  feature: "Features"
3308
- }, zi = new Set(["starter", "layout"]), Bi = "layout-basic";
3309
- function Vi(e, t = {}) {
3308
+ }, Ri = new Set(["starter", "layout"]), zi = "layout-basic";
3309
+ function Bi(e, t = {}) {
3310
3310
  let n = [];
3311
- for (let r of Li) {
3311
+ for (let r of Ii) {
3312
3312
  let i = e.filter((e) => e.category === r);
3313
3313
  if (i.length === 0) continue;
3314
- let a = zi.has(r) ? "single" : "multiple";
3314
+ let a = Ri.has(r) ? "single" : "multiple";
3315
3315
  if (r === "layout") {
3316
- n.push(Hi("frontend", i)), t.adminAvailable && n.push(Hi("admin", i));
3316
+ n.push(Vi("frontend", i)), t.adminAvailable && n.push(Vi("admin", i));
3317
3317
  continue;
3318
3318
  }
3319
3319
  n.push({
3320
3320
  category: r,
3321
- label: Ri[r],
3321
+ label: Li[r],
3322
3322
  mode: a,
3323
3323
  packs: i,
3324
3324
  preselect: null
@@ -3326,20 +3326,105 @@ function Vi(e, t = {}) {
3326
3326
  }
3327
3327
  return n;
3328
3328
  }
3329
- function Hi(e, t) {
3330
- let n = t.some((e) => e.name === Bi);
3329
+ function Vi(e, t) {
3330
+ let n = t.some((e) => e.name === zi);
3331
3331
  return {
3332
3332
  category: "layout",
3333
3333
  label: e === "admin" ? "Admin Layout" : "Layout",
3334
3334
  mode: "single",
3335
3335
  packs: t,
3336
- preselect: n ? Bi : null,
3336
+ preselect: n ? zi : null,
3337
3337
  slot: e
3338
3338
  };
3339
3339
  }
3340
3340
  //#endregion
3341
+ //#region src/ui/logger.ts
3342
+ function Hi(e) {
3343
+ o.note(e.map((e) => `${R.arrow} ${e}`).join("\n"), "Next steps");
3344
+ }
3345
+ function Z() {
3346
+ o.cancel(L.muted("Operation cancelled.")), process.exit(0);
3347
+ }
3348
+ //#endregion
3349
+ //#region src/core/post-setup.ts
3350
+ async function Ui() {
3351
+ return (await J("docker", ["info"], { cwd: process.cwd() })).exitCode === 0;
3352
+ }
3353
+ async function Wi(e) {
3354
+ return Y(`${e}/apps/backend/.env`);
3355
+ }
3356
+ async function Gi(e, t, n) {
3357
+ let r = n ? `Start services with ${L.command("docker compose up -d")}?` : `Docker is not running. Start services with ${L.command("docker compose up -d")}?`, i = t ? !0 : await o.confirm({
3358
+ message: r,
3359
+ initialValue: !0
3360
+ });
3361
+ if (o.isCancel(i) && Z(), !i) return o.log.info(L.muted("Skipping Docker services and database migrations.")), !1;
3362
+ let a = o.spinner();
3363
+ return a.start("Starting Docker services..."), (await J("docker", [
3364
+ "compose",
3365
+ "up",
3366
+ "-d"
3367
+ ], { cwd: `${e}/apps/backend` })).exitCode === 0 ? (a.stop(L.success("Docker services started")), !0) : (a.stop(L.warning("Failed to start Docker services")), o.log.warn(L.muted("Run `docker compose up -d` in apps/backend manually to start services.")), o.log.info(L.muted("Skipping database migrations.")), !1);
3368
+ }
3369
+ async function Ki(e, t = 15, n = 2e3) {
3370
+ for (let r = 0; r < t; r++) {
3371
+ if ((await J("docker", [
3372
+ "compose",
3373
+ "exec",
3374
+ "-T",
3375
+ "postgres",
3376
+ "pg_isready",
3377
+ "-U",
3378
+ "postgres"
3379
+ ], { cwd: `${e}/apps/backend` })).exitCode === 0) return !0;
3380
+ await new Promise((e) => setTimeout(e, n));
3381
+ }
3382
+ return !1;
3383
+ }
3384
+ async function qi(e, t, n = {}) {
3385
+ if (!await Wi(e)) {
3386
+ o.log.warn(`${L.path(".env")} not found in ${L.path("apps/backend")}. Skipping Docker and migrations - configure it first.`);
3387
+ return;
3388
+ }
3389
+ if (!await Gi(e, t, await Ui())) return;
3390
+ let r = o.spinner();
3391
+ if (r.start("Waiting for Postgres to be ready..."), !await Ki(e, n.postgresMaxAttempts ?? 15, n.postgresCheckIntervalMs ?? 2e3)) {
3392
+ r.stop(L.warning("Postgres health check timed out")), o.log.warn(L.muted("Run migrations manually once Postgres is ready: pnpm --filter @internal/backend migration:latest"));
3393
+ return;
3394
+ }
3395
+ r.stop(L.success("Postgres is ready"));
3396
+ let i = t ? !0 : await o.confirm({
3397
+ message: `Run database migrations with ${L.command("prisma migrate deploy")}?`,
3398
+ initialValue: !0
3399
+ });
3400
+ if (o.isCancel(i) && Z(), !i) {
3401
+ o.log.info(L.muted("Skipping database migrations."));
3402
+ return;
3403
+ }
3404
+ let a = o.spinner();
3405
+ if (a.start("Running database migrations..."), (await J("pnpm", [
3406
+ "--filter",
3407
+ "@internal/backend",
3408
+ "migration:latest"
3409
+ ], { cwd: e })).exitCode !== 0) {
3410
+ a.stop(L.warning("Migrations failed")), o.log.warn(L.muted("Run `pnpm --filter @internal/backend migration:latest` manually to apply migrations."));
3411
+ return;
3412
+ }
3413
+ a.stop(L.success("Database migrations applied"));
3414
+ let s = o.spinner();
3415
+ if (s.start("Generating Prisma client..."), (await J("pnpm", [
3416
+ "--filter",
3417
+ "@internal/backend",
3418
+ "generate"
3419
+ ], { cwd: e })).exitCode !== 0) {
3420
+ s.stop(L.warning("Prisma client generation failed")), o.log.warn(L.muted("Run `pnpm --filter @internal/backend generate` manually."));
3421
+ return;
3422
+ }
3423
+ s.stop(L.success("Prisma client generated"));
3424
+ }
3425
+ //#endregion
3341
3426
  //#region src/core/resolve.ts
3342
- function Ui(e) {
3427
+ function Ji(e) {
3343
3428
  let t = /* @__PURE__ */ new Map();
3344
3429
  for (let n of e) t.set(n.name, {
3345
3430
  name: n.name,
@@ -3347,7 +3432,7 @@ function Ui(e) {
3347
3432
  });
3348
3433
  return t;
3349
3434
  }
3350
- function Wi(e, t, n = /* @__PURE__ */ new Set()) {
3435
+ function Yi(e, t, n = /* @__PURE__ */ new Set()) {
3351
3436
  let r = /* @__PURE__ */ new Set();
3352
3437
  function i(e) {
3353
3438
  if (n.has(e)) return [];
@@ -3361,10 +3446,10 @@ function Wi(e, t, n = /* @__PURE__ */ new Set()) {
3361
3446
  }
3362
3447
  return i(e);
3363
3448
  }
3364
- function Gi(e, t, n = []) {
3449
+ function Xi(e, t, n = []) {
3365
3450
  let r = new Set(n), i = new Set(n), a = [];
3366
3451
  for (let n of e) {
3367
- let e = Wi(n, t, new Set(i));
3452
+ let e = Yi(n, t, new Set(i));
3368
3453
  for (let t of e) i.has(t) || (i.add(t), a.push(t));
3369
3454
  }
3370
3455
  return {
@@ -3372,7 +3457,7 @@ function Gi(e, t, n = []) {
3372
3457
  alreadyInstalled: e.filter((e) => r.has(e))
3373
3458
  };
3374
3459
  }
3375
- function Ki(e) {
3460
+ function Zi(e) {
3376
3461
  let { order: t, graph: n, isLocked: r, installed: i = [] } = e, a = new Set(i), o = /* @__PURE__ */ new Set();
3377
3462
  for (let e of t) {
3378
3463
  let t = n.get(e)?.dependencies.some((e) => !a.has(e) && o.has(e)) ?? !1;
@@ -3385,7 +3470,7 @@ function Ki(e) {
3385
3470
  }
3386
3471
  //#endregion
3387
3472
  //#region src/core/variants.ts
3388
- function qi(e, t = {}) {
3473
+ function Qi(e, t = {}) {
3389
3474
  let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
3390
3475
  for (let i of e) {
3391
3476
  let e = t[i.family] ?? i.default;
@@ -3397,14 +3482,14 @@ function qi(e, t = {}) {
3397
3482
  familyOf: r
3398
3483
  };
3399
3484
  }
3400
- function Ji(e, t, n) {
3485
+ function $i(e, t, n) {
3401
3486
  return [...e.map((e) => n.chosen.get(e.family) ?? e.default), ...t];
3402
3487
  }
3403
- function Yi(e, t) {
3488
+ function ea(e, t) {
3404
3489
  let n = t.familyOf.get(e);
3405
3490
  return n ? t.chosen.get(n) ?? e : e;
3406
3491
  }
3407
- function Xi(e, t) {
3492
+ function ta(e, t) {
3408
3493
  let n = /* @__PURE__ */ new Map();
3409
3494
  for (let t of e) t.family && n.set(t.name, t.family);
3410
3495
  let r = new Set(t), i = /* @__PURE__ */ new Map();
@@ -3420,65 +3505,65 @@ function Xi(e, t) {
3420
3505
  familyOf: n
3421
3506
  };
3422
3507
  }
3423
- function Zi(e, t) {
3508
+ function na(e, t) {
3424
3509
  return e.map((e) => ({
3425
3510
  ...e,
3426
- dependencies: e.dependencies.map((e) => Yi(e, t))
3511
+ dependencies: e.dependencies.map((e) => ea(e, t))
3427
3512
  }));
3428
3513
  }
3429
3514
  //#endregion
3430
3515
  //#region src/ui/banner.ts
3431
- var Qi = [
3516
+ var ra = [
3432
3517
  " ██╗ ██╗ ██╗ ██╗ ██████╗ ███████╗",
3433
3518
  " ██║ ██║ ╚██╗ ██╔╝ ██╔══██╗ ██╔════╝",
3434
3519
  " ███████║ ╚████╔╝ ██████╔╝ █████╗ ",
3435
3520
  " ██╔══██║ ╚██╔╝ ██╔═══╝ ██╔══╝ ",
3436
3521
  " ██║ ██║ ██║ ██║ ███████╗",
3437
3522
  " ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝"
3438
- ], $i = [
3523
+ ], ia = [
3439
3524
  " ███████╗ ████████╗ █████╗ ██████╗ ██╗ ██╗",
3440
3525
  " ██╔════╝ ╚══██╔══╝ ██╔══██╗ ██╔════╝ ██║ ██╔╝",
3441
3526
  " ███████╗ ██║ ███████║ ██║ █████╔╝ ",
3442
3527
  " ╚════██║ ██║ ██╔══██║ ██║ ██╔═██╗ ",
3443
3528
  " ███████║ ██║ ██║ ██║ ╚██████╗ ██║ ██╗",
3444
3529
  " ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝"
3445
- ], ea = [
3530
+ ], aa = [
3446
3531
  253,
3447
3532
  176,
3448
3533
  21
3449
- ], ta = [
3534
+ ], oa = [
3450
3535
  245,
3451
3536
  76,
3452
3537
  2
3453
- ], na = 5, ra = [
3538
+ ], sa = 5, ca = [
3454
3539
  17,
3455
3540
  103,
3456
3541
  248
3457
- ], ia = [
3542
+ ], la = [
3458
3543
  42,
3459
3544
  160,
3460
3545
  250
3461
- ], aa = .2;
3462
- function oa() {
3546
+ ], ua = .2;
3547
+ function da() {
3463
3548
  console.log();
3464
- for (let e of be(Qi, {
3465
- start: ea,
3466
- end: ta,
3467
- angle: na
3549
+ for (let e of xe(ra, {
3550
+ start: aa,
3551
+ end: oa,
3552
+ angle: sa
3468
3553
  })) console.log(y.bold(e));
3469
- for (let e of be($i, {
3470
- start: ra,
3471
- end: ia,
3472
- angle: aa
3554
+ for (let e of xe(ia, {
3555
+ start: ca,
3556
+ end: la,
3557
+ angle: ua
3473
3558
  })) console.log(y.bold(e));
3474
- console.log(), console.log(` ${z.spark} ${y.dim("v" + k)} ${y.dim("·")} ${ve("Ship web + desktop apps from one codebase")}`), console.log();
3559
+ console.log(), console.log(` ${R.spark} ${y.dim("v" + k)} ${y.dim("·")} ${ye("Ship web + desktop apps from one codebase")}`), console.log();
3475
3560
  }
3476
- function X() {
3477
- console.log(), console.log(` ${z.bolt} ${he.orange("Hype")}${he.skyBlue("Stack")} ${y.dim("v" + k)}`), console.log();
3561
+ function fa() {
3562
+ console.log(), console.log(` ${R.bolt} ${ge.orange("Hype")}${ge.skyBlue("Stack")} ${y.dim("v" + k)}`), console.log();
3478
3563
  }
3479
3564
  //#endregion
3480
3565
  //#region src/ui/pack-multiselect.ts
3481
- var sa = class extends D {
3566
+ var pa = class extends D {
3482
3567
  options;
3483
3568
  cursor = 0;
3484
3569
  selected;
@@ -3582,20 +3667,12 @@ var sa = class extends D {
3582
3667
  }
3583
3668
  }
3584
3669
  };
3585
- function ca(e) {
3586
- return new sa(e).prompt();
3587
- }
3588
- //#endregion
3589
- //#region src/ui/logger.ts
3590
- function la(e) {
3591
- o.note(e.map((e) => `${z.arrow} ${e}`).join("\n"), "Next steps");
3592
- }
3593
- function Z() {
3594
- o.cancel(R.muted("Operation cancelled.")), process.exit(0);
3670
+ function ma(e) {
3671
+ return new pa(e).prompt();
3595
3672
  }
3596
3673
  //#endregion
3597
3674
  //#region src/core/apply-theme.ts
3598
- function ua(e, t) {
3675
+ function ha(e, t) {
3599
3676
  let n = e.indexOf(t);
3600
3677
  if (n === -1) return null;
3601
3678
  let r = e.indexOf("{", n);
@@ -3610,47 +3687,47 @@ function ua(e, t) {
3610
3687
  bodyEnd: a - 1
3611
3688
  } : null;
3612
3689
  }
3613
- function da(e, t) {
3690
+ function ga(e, t) {
3614
3691
  let n = e;
3615
3692
  for (let [e, r] of Object.entries(t)) {
3616
- let t = RegExp(`(^[ \\t]*--${fa(e)}[ \\t]*:[ \\t]*)([^;\\n]*);`, "m");
3693
+ let t = RegExp(`(^[ \\t]*--${_a(e)}[ \\t]*:[ \\t]*)([^;\\n]*);`, "m");
3617
3694
  n = n.replace(t, (e, t) => `${t}${r};`);
3618
3695
  }
3619
3696
  return n;
3620
3697
  }
3621
- function fa(e) {
3698
+ function _a(e) {
3622
3699
  return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3623
3700
  }
3624
- function pa(e, t) {
3625
- let n = ua(e, ":root"), r = ua(e, ".dark"), i = e;
3701
+ function va(e, t) {
3702
+ let n = ha(e, ":root"), r = ha(e, ".dark"), i = e;
3626
3703
  if (n) {
3627
3704
  let e = i.slice(0, n.bodyStart), r = i.slice(n.bodyStart, n.bodyEnd), a = i.slice(n.bodyEnd);
3628
- i = e + da(r, t.light) + a;
3705
+ i = e + ga(r, t.light) + a;
3629
3706
  }
3630
3707
  if (r) {
3631
- let e = ua(i, ".dark");
3708
+ let e = ha(i, ".dark");
3632
3709
  if (e) {
3633
3710
  let n = i.slice(0, e.bodyStart), r = i.slice(e.bodyStart, e.bodyEnd), a = i.slice(e.bodyEnd);
3634
- i = n + da(r, t.dark) + a;
3711
+ i = n + ga(r, t.dark) + a;
3635
3712
  }
3636
3713
  }
3637
3714
  return i;
3638
3715
  }
3639
- var ma = "assets/styles.css";
3640
- async function ha(e, t) {
3641
- let n = w.resolve(e, ma), r;
3716
+ var ya = "assets/styles.css";
3717
+ async function ba(e, t) {
3718
+ let n = w.resolve(e, ya), r;
3642
3719
  try {
3643
3720
  r = await v.readFile(n, "utf-8");
3644
3721
  } catch {
3645
3722
  return !1;
3646
3723
  }
3647
- let i = pa(r, t);
3724
+ let i = va(r, t);
3648
3725
  return i === r || await v.writeFile(n, i, "utf-8"), !0;
3649
3726
  }
3650
3727
  //#endregion
3651
3728
  //#region src/core/clone.ts
3652
- async function ga(e) {
3653
- let t = await ee(A, {
3729
+ async function xa(e) {
3730
+ let t = await ee(te, {
3654
3731
  dir: e,
3655
3732
  force: !0
3656
3733
  });
@@ -3661,7 +3738,7 @@ async function ga(e) {
3661
3738
  }
3662
3739
  //#endregion
3663
3740
  //#region src/core/editor-config.ts
3664
- function _a(e) {
3741
+ function Sa(e) {
3665
3742
  let t = {
3666
3743
  globs: [],
3667
3744
  alwaysApply: !1
@@ -3696,10 +3773,10 @@ function _a(e) {
3696
3773
  content: i
3697
3774
  };
3698
3775
  }
3699
- function va(e) {
3776
+ function Ca(e) {
3700
3777
  return e.frontmatter.globs.length > 0 ? `---\npaths:\n${e.frontmatter.globs.map((e) => ` - "${e}"`).join("\n")}\n---\n\n${e.content}` : e.content;
3701
3778
  }
3702
- function ya(e) {
3779
+ function wa(e) {
3703
3780
  let t;
3704
3781
  t = e.frontmatter.alwaysApply ? "always_on" : e.frontmatter.globs.length > 0 ? "glob" : "model_decision";
3705
3782
  let n = [`trigger: ${t}`];
@@ -3709,30 +3786,30 @@ function ya(e) {
3709
3786
  }
3710
3787
  return e.frontmatter.description && n.push(`description: ${e.frontmatter.description}`), `---\n${n.join("\n")}\n---\n\n${e.content}`;
3711
3788
  }
3712
- function ba(e) {
3789
+ function Ta(e) {
3713
3790
  return e.frontmatter.globs.length > 0 ? `---\napplyTo: "${e.frontmatter.globs.join(", ")}"\n---\n\n${e.content}` : e.content;
3714
3791
  }
3715
- var xa = {
3792
+ var Ea = {
3716
3793
  claude: {
3717
3794
  rulesDir: ".claude/rules",
3718
3795
  extension: ".md",
3719
- convert: va
3796
+ convert: Ca
3720
3797
  },
3721
3798
  windsurf: {
3722
3799
  rulesDir: ".windsurf/rules",
3723
3800
  extension: ".md",
3724
- convert: ya
3801
+ convert: wa
3725
3802
  },
3726
3803
  copilot: {
3727
3804
  rulesDir: ".github/instructions",
3728
3805
  extension: ".instructions.md",
3729
- convert: ba
3806
+ convert: Ta
3730
3807
  }
3731
3808
  };
3732
- async function Sa(e) {
3733
- let t = w.join(e, oe), n = (await v.readdir(t, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isFile() && e.name.endsWith(".mdc"));
3809
+ async function Da(e) {
3810
+ let t = w.join(e, se), n = (await v.readdir(t, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isFile() && e.name.endsWith(".mdc"));
3734
3811
  return await Promise.all(n.map(async (e) => {
3735
- let n = w.join(t, e.name), { frontmatter: r, content: i } = _a(await v.readFile(n, "utf-8"));
3812
+ let n = w.join(t, e.name), { frontmatter: r, content: i } = Sa(await v.readFile(n, "utf-8"));
3736
3813
  return {
3737
3814
  frontmatter: r,
3738
3815
  content: i,
@@ -3740,44 +3817,44 @@ async function Sa(e) {
3740
3817
  };
3741
3818
  }));
3742
3819
  }
3743
- async function Ca(e, t) {
3820
+ async function Oa(e, t) {
3744
3821
  if (t === "cursor") return;
3745
- let n = xa[t], r = await Sa(e), i = w.join(e, n.rulesDir);
3822
+ let n = Ea[t], r = await Da(e), i = w.join(e, n.rulesDir);
3746
3823
  await v.mkdir(i, { recursive: !0 }), await Promise.all(r.map((e) => {
3747
3824
  let t = n.convert(e), r = e.filename.replace(/\.mdc$/, n.extension);
3748
3825
  return v.writeFile(w.join(i, r), t, "utf-8");
3749
- })), await cr(w.join(e, se)), await cr(w.join(e, ce));
3826
+ })), await sr(w.join(e, ce)), await sr(w.join(e, le));
3750
3827
  }
3751
3828
  //#endregion
3752
3829
  //#region src/core/env-files.ts
3753
- var wa = [
3830
+ var ka = [
3754
3831
  "apps",
3755
3832
  "packages",
3756
3833
  "libs",
3757
3834
  "shared"
3758
3835
  ];
3759
- async function Ta(e) {
3760
- let t = await Ea(e);
3836
+ async function Aa(e) {
3837
+ let t = await ja(e);
3761
3838
  return (await Promise.all(t.map(async (t) => {
3762
3839
  let n = w.join(w.dirname(t), ".env");
3763
- return await J(n) ? null : (await v.copyFile(t, n), w.relative(e, n));
3840
+ return await Y(n) ? null : (await v.copyFile(t, n), w.relative(e, n));
3764
3841
  }))).filter((e) => e !== null).sort();
3765
3842
  }
3766
- async function Ea(e) {
3767
- let t = [w.join(e, ".env.example")], n = await Promise.all(wa.map(async (t) => {
3843
+ async function ja(e) {
3844
+ let t = [w.join(e, ".env.example")], n = await Promise.all(ka.map(async (t) => {
3768
3845
  let n = w.join(e, t);
3769
3846
  return (await v.readdir(n, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isDirectory()).map((e) => w.join(n, e.name, ".env.example"));
3770
3847
  }));
3771
- return t.push(...n.flat()), (await Promise.all(t.map(async (e) => await J(e) ? e : null))).filter((e) => e !== null);
3848
+ return t.push(...n.flat()), (await Promise.all(t.map(async (e) => await Y(e) ? e : null))).filter((e) => e !== null);
3772
3849
  }
3773
3850
  //#endregion
3774
3851
  //#region src/core/post-clone.ts
3775
- var Q = "@hype-stack/", Da = "hype-stack";
3776
- async function Oa(e) {
3777
- await cr(w.join(e, ".git"));
3852
+ var Q = "@hype-stack/", Ma = "hype-stack";
3853
+ async function Na(e) {
3854
+ await sr(w.join(e, ".git"));
3778
3855
  }
3779
- async function ka(e) {
3780
- await q("git", ["init"], { cwd: e }), await q("git", ["add", "."], { cwd: e }), await q("git", [
3856
+ async function Pa(e) {
3857
+ await J("git", ["init"], { cwd: e }), await J("git", ["add", "."], { cwd: e }), await J("git", [
3781
3858
  "-c",
3782
3859
  "user.name=Hype Stack CLI",
3783
3860
  "-c",
@@ -3787,22 +3864,48 @@ async function ka(e) {
3787
3864
  "Initial commit from Hype Stack CLI"
3788
3865
  ], { cwd: e });
3789
3866
  }
3790
- async function Aa(e, t) {
3791
- let n = `@${t}/`, r = await Pa(e);
3867
+ async function Fa(e, t) {
3868
+ let n = `@${t}/`, r = await Ua(e);
3792
3869
  for (let e of r) {
3793
- let t = await ar(e);
3870
+ let t = await ir(e);
3794
3871
  if (!t) continue;
3795
3872
  let r = !1;
3796
- t.name?.startsWith(Q) && (t.name = t.name.replace(Q, n), r = !0), ja(t.dependencies, n) && (r = !0), ja(t.devDependencies, n) && (r = !0), t.nx && Ma(t.nx, n) && (r = !0);
3873
+ t.name?.startsWith(Q) && (t.name = t.name.replace(Q, n), r = !0), Ba(t.dependencies, n) && (r = !0), Ba(t.devDependencies, n) && (r = !0), t.nx && Va(t.nx, n) && (r = !0);
3797
3874
  let i = await v.readFile(e, "utf-8");
3798
3875
  if (i.includes(Q)) {
3799
3876
  let t = i.replaceAll(Q, n);
3800
3877
  await v.writeFile(e, t, "utf-8");
3801
- } else r && await or(e, t);
3878
+ } else r && await ar(e, t);
3802
3879
  }
3803
- await Ci(e, t), await Na(e, t);
3880
+ await Si(e, t), await Ra(e, t), await Ha(e, t);
3804
3881
  }
3805
- function ja(e, t) {
3882
+ var Ia = new Set([
3883
+ ".git",
3884
+ "node_modules",
3885
+ "dist",
3886
+ "build",
3887
+ ".nx",
3888
+ ".next",
3889
+ "coverage"
3890
+ ]), La = /^(docker-compose|compose)(\.[\w.-]+)?\.ya?ml$/;
3891
+ async function Ra(e, t) {
3892
+ if (t === Ma) return;
3893
+ let n = await za(e);
3894
+ await Promise.all(n.map(async (e) => {
3895
+ let n = await v.readFile(e, "utf-8").catch(() => null);
3896
+ if (!n || !/^name:[ \t]*hype-stack/m.test(n)) return;
3897
+ let r = n.replace(/^(name:[ \t]*)hype-stack/gm, `$1${t}`);
3898
+ await v.writeFile(e, r, "utf-8");
3899
+ }));
3900
+ }
3901
+ async function za(e) {
3902
+ let t = await v.readdir(e, { withFileTypes: !0 }).catch(() => []);
3903
+ return (await Promise.all(t.map(async (t) => {
3904
+ let n = w.join(e, t.name);
3905
+ return t.isDirectory() ? Ia.has(t.name) ? [] : za(n) : t.isFile() && La.test(t.name) ? [n] : [];
3906
+ }))).flat();
3907
+ }
3908
+ function Ba(e, t) {
3806
3909
  if (!e) return !1;
3807
3910
  let n = !1;
3808
3911
  for (let r of Object.keys(e)) if (r.startsWith(Q)) {
@@ -3811,7 +3914,7 @@ function ja(e, t) {
3811
3914
  }
3812
3915
  return n;
3813
3916
  }
3814
- function Ma(e, t) {
3917
+ function Va(e, t) {
3815
3918
  if (!e) return !1;
3816
3919
  let n = !1;
3817
3920
  if (e.implicitDependencies &&= e.implicitDependencies.map((e) => e.startsWith(Q) ? (n = !0, e.replace(Q, t)) : e), e.targets) {
@@ -3819,13 +3922,13 @@ function Ma(e, t) {
3819
3922
  }
3820
3923
  return n;
3821
3924
  }
3822
- async function Na(e, t) {
3925
+ async function Ha(e, t) {
3823
3926
  let n = w.join(e, "packages/enums/src/app/index.ts"), r = await v.readFile(n, "utf-8").catch(() => null);
3824
3927
  if (!r) return;
3825
- let i = t.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" "), a = r.replaceAll(`id: "${Da}"`, `id: "${t}"`).replaceAll(`name: "${Da}"`, `name: "${t}"`).replace(/name: "Hype Stack"/, `name: "${i}"`).replace(/description: ".*?"/, `description: "${i} application"`);
3928
+ let i = t.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" "), a = r.replaceAll(`id: "${Ma}"`, `id: "${t}"`).replaceAll(`name: "${Ma}"`, `name: "${t}"`).replace(/name: "Hype Stack"/, `name: "${i}"`).replace(/description: ".*?"/, `description: "${i} application"`);
3826
3929
  await v.writeFile(n, a, "utf-8");
3827
3930
  }
3828
- async function Pa(e) {
3931
+ async function Ua(e) {
3829
3932
  let t = [], n = w.join(e, "package.json");
3830
3933
  (await v.stat(n).catch(() => null))?.isFile() && t.push(n);
3831
3934
  for (let n of [
@@ -3844,85 +3947,8 @@ async function Pa(e) {
3844
3947
  return t;
3845
3948
  }
3846
3949
  //#endregion
3847
- //#region src/core/post-setup.ts
3848
- async function Fa() {
3849
- return (await q("docker", ["info"], { cwd: process.cwd() })).exitCode === 0;
3850
- }
3851
- async function Ia(e) {
3852
- return J(`${e}/apps/backend/.env`);
3853
- }
3854
- async function La(e, t, n) {
3855
- let r = n ? `Start services with ${R.command("docker compose up -d")}?` : `Docker is not running. Start services with ${R.command("docker compose up -d")}?`, i = t ? !0 : await o.confirm({
3856
- message: r,
3857
- initialValue: !0
3858
- });
3859
- if (o.isCancel(i) && Z(), !i) return o.log.info(R.muted("Skipping Docker services and database migrations.")), !1;
3860
- let a = o.spinner();
3861
- return a.start("Starting Docker services..."), (await q("docker", [
3862
- "compose",
3863
- "up",
3864
- "-d"
3865
- ], { cwd: `${e}/apps/backend` })).exitCode === 0 ? (a.stop(R.success("Docker services started")), !0) : (a.stop(R.warning("Failed to start Docker services")), o.log.warn(R.muted("Run `docker compose up -d` in apps/backend manually to start services.")), o.log.info(R.muted("Skipping database migrations.")), !1);
3866
- }
3867
- async function Ra(e, t = 15, n = 2e3) {
3868
- for (let r = 0; r < t; r++) {
3869
- if ((await q("docker", [
3870
- "compose",
3871
- "exec",
3872
- "-T",
3873
- "postgres",
3874
- "pg_isready",
3875
- "-U",
3876
- "postgres"
3877
- ], { cwd: `${e}/apps/backend` })).exitCode === 0) return !0;
3878
- await new Promise((e) => setTimeout(e, n));
3879
- }
3880
- return !1;
3881
- }
3882
- async function za(e, t, n = {}) {
3883
- if (!await Ia(e)) {
3884
- o.log.warn(`${R.path(".env")} not found in ${R.path("apps/backend")}. Skipping Docker and migrations - configure it first.`);
3885
- return;
3886
- }
3887
- if (!await La(e, t, await Fa())) return;
3888
- let r = o.spinner();
3889
- if (r.start("Waiting for Postgres to be ready..."), !await Ra(e, n.postgresMaxAttempts ?? 15, n.postgresCheckIntervalMs ?? 2e3)) {
3890
- r.stop(R.warning("Postgres health check timed out")), o.log.warn(R.muted("Run migrations manually once Postgres is ready: pnpm --filter @internal/backend migration:latest"));
3891
- return;
3892
- }
3893
- r.stop(R.success("Postgres is ready"));
3894
- let i = t ? !0 : await o.confirm({
3895
- message: `Run database migrations with ${R.command("prisma migrate deploy")}?`,
3896
- initialValue: !0
3897
- });
3898
- if (o.isCancel(i) && Z(), !i) {
3899
- o.log.info(R.muted("Skipping database migrations."));
3900
- return;
3901
- }
3902
- let a = o.spinner();
3903
- if (a.start("Running database migrations..."), (await q("pnpm", [
3904
- "--filter",
3905
- "@internal/backend",
3906
- "migration:latest"
3907
- ], { cwd: e })).exitCode !== 0) {
3908
- a.stop(R.warning("Migrations failed")), o.log.warn(R.muted("Run `pnpm --filter @internal/backend migration:latest` manually to apply migrations."));
3909
- return;
3910
- }
3911
- a.stop(R.success("Database migrations applied"));
3912
- let s = o.spinner();
3913
- if (s.start("Generating Prisma client..."), (await q("pnpm", [
3914
- "--filter",
3915
- "@internal/backend",
3916
- "generate"
3917
- ], { cwd: e })).exitCode !== 0) {
3918
- s.stop(R.warning("Prisma client generation failed")), o.log.warn(R.muted("Run `pnpm --filter @internal/backend generate` manually."));
3919
- return;
3920
- }
3921
- s.stop(R.success("Prisma client generated"));
3922
- }
3923
- //#endregion
3924
3950
  //#region src/core/readme.ts
3925
- var Ba = {
3951
+ var Wa = {
3926
3952
  cursor: {
3927
3953
  label: "Cursor",
3928
3954
  rulesDir: ".cursor/rules"
@@ -3939,24 +3965,24 @@ var Ba = {
3939
3965
  label: "GitHub Copilot",
3940
3966
  rulesDir: ".github/instructions"
3941
3967
  }
3942
- }, Va = {
3968
+ }, Ga = {
3943
3969
  backend: "Hono API server (Postgres, Prisma, Kysely, Valkey cache, WorkOS auth)",
3944
3970
  frontend: "React + Vite app talking to the backend through the typed HyperFetch SDK"
3945
- }, Ha = {
3971
+ }, Ka = {
3946
3972
  enums: "Shared enums and app config used across apps",
3947
3973
  cli: "Project tooling and code generators"
3948
3974
  };
3949
- function Ua(e) {
3975
+ function qa(e) {
3950
3976
  return e.split(/[-_]/).filter(Boolean).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" ");
3951
3977
  }
3952
- function Wa(e, t) {
3978
+ function Ja(e, t) {
3953
3979
  return Object.entries(e).toSorted(([e], [t]) => e.localeCompare(t)).map(([e, n]) => {
3954
3980
  let r = t[e];
3955
3981
  return r ? `- \`${n}\` - ${r}` : `- \`${n}\``;
3956
3982
  });
3957
3983
  }
3958
- function Ga(e) {
3959
- let { projectName: t, editor: n, workspace: r } = e, i = Ua(t), a = Ba[n], o = !!r.apps.backend, s = Wa(r.apps, Va), c = Wa(r.packages, Ha), l = [];
3984
+ function Ya(e) {
3985
+ let { projectName: t, editor: n, workspace: r } = e, i = qa(t), a = Wa[n], o = !!r.apps.backend, s = Ja(r.apps, Ga), c = Ja(r.packages, Ka), l = [];
3960
3986
  s.length > 0 && l.push(...s), c.length > 0 && l.push(...c), l.push("- `stack.json` - Hype Stack workspace config (apps, paths, installed packs)");
3961
3987
  let u = [];
3962
3988
  u.push(`# ${i}`), u.push([
@@ -4064,19 +4090,19 @@ function Ga(e) {
4064
4090
  "stays useful."
4065
4091
  ].join("\n")), u.join("\n\n") + "\n";
4066
4092
  }
4067
- async function Ka(e, t) {
4093
+ async function Xa(e, t) {
4068
4094
  let n = w.join(e, "README.md");
4069
- await v.writeFile(n, Ga(t), "utf-8");
4095
+ await v.writeFile(n, Ya(t), "utf-8");
4070
4096
  }
4071
4097
  //#endregion
4072
4098
  //#region src/core/tracking.ts
4073
- async function qa(e) {
4099
+ async function Za(e) {
4074
4100
  try {
4075
4101
  let t = {
4076
- "X-Device-Id": Yn(),
4077
- "X-Client-Info": Xn()
4078
- }, n = await Gn(P()).catch(() => null);
4079
- n?.token && (t.Authorization = `Bearer ${n.token}`), await K.createRequest()({
4102
+ "X-Device-Id": Jn(),
4103
+ "X-Client-Info": Yn()
4104
+ }, n = await Wn(N()).catch(() => null);
4105
+ n?.token && (t.Authorization = `Bearer ${n.token}`), await q.createRequest()({
4080
4106
  endpoint: "/cli/track",
4081
4107
  method: "POST"
4082
4108
  }).setPayload({ event: e }).setHeaders(t).send();
@@ -4084,7 +4110,7 @@ async function qa(e) {
4084
4110
  }
4085
4111
  //#endregion
4086
4112
  //#region src/ui/swatch.ts
4087
- function Ja(e) {
4113
+ function Qa(e) {
4088
4114
  let t = e.trim().match(/^oklch\(([^)]+)\)$/i);
4089
4115
  if (!t) return null;
4090
4116
  let n = t[1].trim().split(/\s+/);
@@ -4103,61 +4129,61 @@ function Ja(e) {
4103
4129
  h: a
4104
4130
  };
4105
4131
  }
4106
- function Ya(e) {
4132
+ function $a(e) {
4107
4133
  return Math.min(255, Math.max(0, Math.round(e)));
4108
4134
  }
4109
- function Xa(e) {
4135
+ function eo(e) {
4110
4136
  return e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055;
4111
4137
  }
4112
- function Za({ l: e, c: t, h: n }) {
4138
+ function to({ l: e, c: t, h: n }) {
4113
4139
  let r = n * Math.PI / 180, i = t * Math.cos(r), a = t * Math.sin(r), o = e + .3963377774 * i + .2158037573 * a, s = e - .1055613458 * i - .0638541728 * a, c = e - .0894841775 * i - 1.291485548 * a, l = o ** 3, u = s ** 3, d = c ** 3, f = 4.0767416621 * l - 3.3077115913 * u + .2309699292 * d, p = -1.2684380042 * l + 2.6097570613 * u - .3413193965 * d, m = -.0041960863 * l - .7034186147 * u + 1.7076146937 * d;
4114
4140
  return [
4115
- Ya(Xa(f) * 255),
4116
- Ya(Xa(p) * 255),
4117
- Ya(Xa(m) * 255)
4141
+ $a(eo(f) * 255),
4142
+ $a(eo(p) * 255),
4143
+ $a(eo(m) * 255)
4118
4144
  ];
4119
4145
  }
4120
- var Qa = "\x1B[49m";
4121
- function $a(e, t) {
4146
+ var no = "\x1B[49m";
4147
+ function ro(e, t) {
4122
4148
  let n = e[t];
4123
4149
  if (!n) return y.dim(" ");
4124
- let r = Ja(n);
4150
+ let r = Qa(n);
4125
4151
  if (!r) return y.dim(" ");
4126
- let [i, a, o] = Za(r);
4127
- return `\x1b[48;2;${i};${a};${o}m ${Qa}`;
4152
+ let [i, a, o] = to(r);
4153
+ return `\x1b[48;2;${i};${a};${o}m ${no}`;
4128
4154
  }
4129
- var eo = [
4155
+ var io = [
4130
4156
  "primary",
4131
4157
  "secondary",
4132
4158
  "accent"
4133
4159
  ];
4134
- function to(e) {
4135
- return eo.map((t) => $a(e, t)).join("");
4160
+ function ao(e) {
4161
+ return io.map((t) => ro(e, t)).join("");
4136
4162
  }
4137
- function no(e) {
4138
- return `${to(e.light)} ${y.dim("·")} ${to(e.dark)}`;
4163
+ function oo(e) {
4164
+ return `${ao(e.light)} ${y.dim("·")} ${ao(e.dark)}`;
4139
4165
  }
4140
4166
  //#endregion
4141
4167
  //#region src/utils/validate.ts
4142
- function ro(e) {
4168
+ function so(e) {
4143
4169
  if (!e.trim()) return "Project name cannot be empty";
4144
- if (!re.test(e)) return "Project name must be lowercase, alphanumeric, and may contain hyphens, dots, or underscores";
4170
+ if (!M.test(e)) return "Project name must be lowercase, alphanumeric, and may contain hyphens, dots, or underscores";
4145
4171
  if (e.length > 214) return "Project name is too long (max 214 characters)";
4146
4172
  }
4147
4173
  //#endregion
4148
4174
  //#region src/commands/create.ts
4149
- async function io(a) {
4150
- oa(), o.intro(R.brandBold("Create a new Hype Stack project"));
4175
+ async function co(a) {
4176
+ a.skipBanner || da(), o.intro(L.brandBold("Create a new Hype Stack project"));
4151
4177
  let s = a.yes === !0, c;
4152
4178
  if (s && a.name) {
4153
- let e = ro(a.name);
4179
+ let e = so(a.name);
4154
4180
  e && (o.log.error(e), Z()), c = a.name;
4155
4181
  } else {
4156
4182
  let e = await o.text({
4157
4183
  message: "What is your project named?",
4158
4184
  placeholder: "my-app",
4159
4185
  initialValue: a.name ?? "",
4160
- validate: (e) => ro(e ?? "")
4186
+ validate: (e) => so(e ?? "")
4161
4187
  });
4162
4188
  o.isCancel(e) && Z(), c = e;
4163
4189
  }
@@ -4175,17 +4201,17 @@ async function io(a) {
4175
4201
  });
4176
4202
  o.isCancel(t) && Z(), e = t;
4177
4203
  }
4178
- l = lr(e, c);
4204
+ l = cr(e, c);
4179
4205
  }
4180
4206
  let u = w.resolve(l);
4181
- s || o.note(R.path(u), "Project will be created at");
4182
- let d = a.editor && ae.includes(a.editor) ? a.editor : null, f;
4207
+ s || o.note(L.path(u), "Project will be created at");
4208
+ let d = a.editor && oe.includes(a.editor) ? a.editor : null, f;
4183
4209
  if (d) f = d;
4184
4210
  else if (s) f = "cursor";
4185
4211
  else {
4186
4212
  let e = await o.select({
4187
4213
  message: "Which code editor do you use?",
4188
- options: ie.map((e) => ({
4214
+ options: ae.map((e) => ({
4189
4215
  value: e.value,
4190
4216
  label: e.label,
4191
4217
  hint: "hint" in e ? e.hint : void 0
@@ -4202,93 +4228,98 @@ async function io(a) {
4202
4228
  message: "Pick a color theme",
4203
4229
  options: n.map((e) => ({
4204
4230
  value: e.name,
4205
- label: `${no(e)} ${e.label}`
4231
+ label: `${oo(e)} ${e.label}`
4206
4232
  })),
4207
4233
  initialValue: e
4208
4234
  });
4209
4235
  o.isCancel(t) && Z(), m = t;
4210
4236
  }
4211
4237
  if (!s) {
4212
- let e = ie.find((e) => e.value === f)?.label ?? f, n = t.find((e) => e.value === m)?.label ?? m, r = await o.confirm({ message: `Create ${R.highlight(c)} in ${R.path(u)} with ${R.highlight(e)} config and the ${R.highlight(n)} theme?` });
4238
+ let e = ae.find((e) => e.value === f)?.label ?? f, n = t.find((e) => e.value === m)?.label ?? m, r = await o.confirm({ message: `Create ${L.highlight(c)} in ${L.path(u)} with ${L.highlight(e)} config and the ${L.highlight(n)} theme?` });
4213
4239
  (o.isCancel(r) || !r) && Z();
4214
4240
  }
4215
- if (await rr(u) && !await ir(u)) {
4241
+ if (await nr(u) && !await rr(u)) {
4216
4242
  let e = await o.confirm({
4217
- message: `Directory ${R.path(u)} is not empty. Continue anyway?`,
4243
+ message: `Directory ${L.path(u)} is not empty. Continue anyway?`,
4218
4244
  initialValue: !1
4219
4245
  });
4220
4246
  (o.isCancel(e) || !e) && Z();
4221
4247
  }
4222
4248
  let h = o.spinner();
4223
- h.start("Cloning Hype Stack template..."), await ga(u), h.stop(R.success("Template cloned"));
4249
+ h.start("Cloning Hype Stack template..."), await xa(u), h.stop(L.success("Template cloned"));
4224
4250
  let g = o.spinner();
4225
- g.start("Setting up project..."), await Oa(u), await Aa(u, c), await Ca(u, f);
4226
- let _ = await hr(u), v = _r(c, _);
4227
- await mr(u, v), await Ka(u, {
4251
+ g.start("Setting up project..."), await Na(u), await Fa(u, c), await Oa(u, f);
4252
+ let _ = await mr(u), v = gr(c, _);
4253
+ await pr(u, v), await Xa(u, {
4228
4254
  projectName: c,
4229
4255
  editor: f,
4230
4256
  workspace: _
4231
- }), i(m) && (await ha(w.resolve(u, v.paths?.frontend.root ?? "apps/frontend"), r(m)) || o.log.warn(R.muted(`Could not find ${R.path("assets/styles.css")} to apply the ${m} theme`))), g.stop(R.success("Project configured"));
4257
+ }), i(m) && (await ba(w.resolve(u, v.paths?.frontend.root ?? "apps/frontend"), r(m)) || o.log.warn(L.muted(`Could not find ${L.path("assets/styles.css")} to apply the ${m} theme`))), g.stop(L.success("Project configured"));
4232
4258
  let y = o.spinner();
4233
- y.start("Installing dependencies..."), (await q("pnpm", ["install"], { cwd: u })).exitCode === 0 ? y.stop(R.success("Dependencies installed")) : (y.stop(R.warning("Dependencies installed with warnings")), o.log.warn(R.muted("You may need to run `pnpm install` manually to resolve issues.")));
4259
+ y.start("Installing dependencies..."), (await J("pnpm", ["install"], { cwd: u })).exitCode === 0 ? y.stop(L.success("Dependencies installed")) : (y.stop(L.warning("Dependencies installed with warnings")), o.log.warn(L.muted("You may need to run `pnpm install` manually to resolve issues.")));
4234
4260
  let b = o.spinner();
4235
- b.start("Initializing git repository..."), await ka(u), b.stop(R.success("Git repository initialized with clean history"));
4261
+ b.start("Initializing git repository..."), await Pa(u), b.stop(L.success("Git repository initialized with clean history"));
4236
4262
  let x = o.spinner();
4237
4263
  x.start("Creating .env files from examples...");
4238
- let S = await Ta(u);
4264
+ let S = await Aa(u);
4239
4265
  if (S.length > 0) {
4240
4266
  let e = S.length;
4241
- x.stop(R.success(`Created ${e} .env file${e === 1 ? "" : "s"} from examples`));
4242
- } else x.stop(R.muted("No .env.example files to copy"));
4243
- o.log.success(`${R.brandBold("Hype Stack")} project ${R.highlight(c)} is ready!`);
4244
- let C = w.relative(process.cwd(), u) || ".", T = [`${R.command(`cd ${C}`)}`];
4245
- S.length > 0 ? T.push(`Review your ${R.path(".env")} files and fill in any secrets`) : T.push(`Copy ${R.path(".env.example")} to ${R.path(".env")} and configure`), la(T);
4246
- let E = a.setup !== !1 && (s || await o.confirm({
4247
- message: "Would you like to start Docker services and run database migrations now?",
4248
- initialValue: !0
4249
- }));
4250
- return o.isCancel(E) && Z(), E ? await za(u, s) : (o.log.info(R.muted("You can start services later:")), la([
4251
- `${R.command("docker compose up -d")} ${R.muted("(in apps/backend - start Postgres, Valkey, RustFS)")}`,
4252
- `${R.command("pnpm --filter @internal/backend migration:latest")} ${R.muted("(apply migrations)")}`,
4253
- `${R.command("pnpm run generate")} ${R.muted("(generate Prisma client)")}`
4254
- ])), la([`${R.command("pnpm dev")} ${R.muted("(start frontend + backend)")}`]), await qa("project_create"), o.outro(R.muted("Happy building!")), u;
4267
+ x.stop(L.success(`Created ${e} .env file${e === 1 ? "" : "s"} from examples`));
4268
+ } else x.stop(L.muted("No .env.example files to copy"));
4269
+ o.log.success(`${L.brandBold("Hype Stack")} project ${L.highlight(c)} is ready!`);
4270
+ let C = w.relative(process.cwd(), u) || ".", T = [`${L.command(`cd ${C}`)}`];
4271
+ S.length > 0 ? T.push(`Review your ${L.path(".env")} files and fill in any secrets`) : T.push(`Copy ${L.path(".env.example")} to ${L.path(".env")} and configure`), Hi(T);
4272
+ let E = a.setup === !1;
4273
+ if (a.deferSetup) o.log.info(L.muted("Docker and migrations will run after your packs are installed."));
4274
+ else {
4275
+ let e = !E && (s || await o.confirm({
4276
+ message: "Would you like to start Docker services and run database migrations now?",
4277
+ initialValue: !0
4278
+ }));
4279
+ o.isCancel(e) && Z(), e ? await qi(u, s) : (o.log.info(L.muted("You can start services later:")), Hi([
4280
+ `${L.command("docker compose up -d")} ${L.muted("(in apps/backend - start Postgres, Valkey, RustFS)")}`,
4281
+ `${L.command("pnpm --filter @internal/backend migration:latest")} ${L.muted("(apply migrations)")}`,
4282
+ `${L.command("pnpm run generate")} ${L.muted("(generate Prisma client)")}`
4283
+ ])), Hi([`${L.command("pnpm dev")} ${L.muted("(start frontend + backend)")}`]);
4284
+ }
4285
+ return await Za("project_create"), o.outro(L.muted("Happy building!")), u;
4255
4286
  }
4256
4287
  //#endregion
4257
4288
  //#region src/commands/init.ts
4258
- async function ao(e) {
4289
+ async function lo(e) {
4259
4290
  let t = e.cwd ?? process.cwd(), n = e.silent ?? !1;
4260
- if (n || (X(), o.intro(R.brandBold("Initialize Hype Stack configuration"))), !await vr(t)) {
4261
- o.log.error(`This doesn't look like a Hype Stack project. ${R.muted("Expected apps/ directory and package.json")}`), o.outro(R.muted(`Run ${R.command("npx @hype-stack/cli create")} to scaffold a new project.`));
4291
+ if (n || (fa(), o.intro(L.brandBold("Initialize Hype Stack configuration"))), !await _r(t)) {
4292
+ o.log.error(`This doesn't look like a Hype Stack project. ${L.muted("Expected apps/ directory and package.json")}`), o.outro(L.muted(`Run ${L.command("npx @hype-stack/cli create")} to scaffold a new project.`));
4262
4293
  return;
4263
4294
  }
4264
- if (await pr(t)) {
4265
- let e = await fr(t);
4295
+ if (await fr(t)) {
4296
+ let e = await dr(t);
4266
4297
  if (e && !n) {
4267
- o.log.info(`Found existing ${R.path("stack.json")} for project ${R.highlight(e.name)}`);
4298
+ o.log.info(`Found existing ${L.path("stack.json")} for project ${L.highlight(e.name)}`);
4268
4299
  let t = await o.confirm({
4269
4300
  message: "Overwrite existing configuration?",
4270
4301
  initialValue: !1
4271
4302
  });
4272
4303
  if (o.isCancel(t) || !t) {
4273
- o.outro(R.muted("Keeping existing configuration."));
4304
+ o.outro(L.muted("Keeping existing configuration."));
4274
4305
  return;
4275
4306
  }
4276
4307
  }
4277
4308
  }
4278
- let r = await hr(t);
4309
+ let r = await mr(t);
4279
4310
  if (!n) {
4280
4311
  let e = Object.entries(r.apps), t = Object.entries(r.packages);
4281
4312
  if (e.length > 0) {
4282
- o.log.info(R.bold("Detected apps:"));
4283
- for (let [t, n] of e) o.log.message(` ${z.arrow} ${R.highlight(t)} ${R.muted(`→ ${n}`)}`);
4313
+ o.log.info(L.bold("Detected apps:"));
4314
+ for (let [t, n] of e) o.log.message(` ${R.arrow} ${L.highlight(t)} ${L.muted(`→ ${n}`)}`);
4284
4315
  }
4285
4316
  if (t.length > 0) {
4286
- o.log.info(R.bold("Detected packages:"));
4287
- for (let [e, n] of t) o.log.message(` ${z.arrow} ${R.highlight(e)} ${R.muted(`→ ${n}`)}`);
4317
+ o.log.info(L.bold("Detected packages:"));
4318
+ for (let [e, n] of t) o.log.message(` ${R.arrow} ${L.highlight(e)} ${L.muted(`→ ${n}`)}`);
4288
4319
  }
4289
4320
  e.length === 0 && t.length === 0 && o.log.warn("No apps or packages detected in the workspace.");
4290
4321
  }
4291
- let i = (await ar(w.join(t, "package.json")))?.name?.replace(/^@/, "").replace(/\/source$/, "") ?? "my-app", a = i;
4322
+ let i = (await ir(w.join(t, "package.json")))?.name?.replace(/^@/, "").replace(/\/source$/, "") ?? "my-app", a = i;
4292
4323
  if (!n) {
4293
4324
  let e = await o.text({
4294
4325
  message: "Project name for stack.json?",
@@ -4297,28 +4328,38 @@ async function ao(e) {
4297
4328
  });
4298
4329
  o.isCancel(e) && Z(), a = e;
4299
4330
  }
4300
- await mr(t, _r(a, r)), n || (o.log.success(`${R.path("stack.json")} written successfully`), o.outro(R.muted("Your project is mapped and ready for Hype Stack CLI commands.")));
4331
+ await pr(t, gr(a, r)), n || (o.log.success(`${L.path("stack.json")} written successfully`), o.outro(L.muted("Your project is mapped and ready for Hype Stack CLI commands.")));
4301
4332
  }
4302
- async function oo(e, t = {}) {
4303
- if (await pr(e)) return e;
4304
- let n = t.runInit ?? ((e) => ao({
4333
+ async function uo(e, t = {}) {
4334
+ if (await fr(e)) return {
4335
+ projectRoot: e,
4336
+ scaffolded: !1
4337
+ };
4338
+ let n = t.runInit ?? ((e) => lo({
4305
4339
  cwd: e,
4306
4340
  silent: !0
4307
- })), r = t.runCreate ?? ((e) => io({ parentDirectory: e }));
4308
- if (await vr(e)) {
4309
- o.log.warn(`No ${R.path("stack.json")} found in ${R.path(e)}.`);
4341
+ })), r = t.runCreate ?? ((e) => co({
4342
+ parentDirectory: e,
4343
+ deferSetup: !0,
4344
+ skipBanner: !0
4345
+ }));
4346
+ if (await _r(e)) {
4347
+ o.log.warn(`No ${L.path("stack.json")} found in ${L.path(e)}.`);
4310
4348
  let t = await o.confirm({
4311
- message: `Create ${R.path("stack.json")} now?`,
4349
+ message: `Create ${L.path("stack.json")} now?`,
4312
4350
  initialValue: !0
4313
4351
  });
4314
4352
  if (o.isCancel(t) || !t) return null;
4315
4353
  await n(e);
4316
- let r = await pr(e);
4317
- return r && o.log.success(`${R.path("stack.json")} created`), r ? e : null;
4354
+ let r = await fr(e);
4355
+ return r && o.log.success(`${L.path("stack.json")} created`), r ? {
4356
+ projectRoot: e,
4357
+ scaffolded: !1
4358
+ } : null;
4318
4359
  }
4319
- o.log.warn(`This doesn't look like a Hype Stack project, and there's no ${R.path("stack.json")} here.`);
4360
+ o.log.warn(`This doesn't look like a Hype Stack project, and there's no ${L.path("stack.json")} here.`);
4320
4361
  let i = await o.confirm({
4321
- message: `Is ${R.path(e)} where you want to work?`,
4362
+ message: `Is ${L.path(e)} where you want to work?`,
4322
4363
  initialValue: !0
4323
4364
  });
4324
4365
  if (o.isCancel(i) || !i) return null;
@@ -4328,11 +4369,14 @@ async function oo(e, t = {}) {
4328
4369
  });
4329
4370
  if (o.isCancel(a) || !a) return null;
4330
4371
  let s = await r(e);
4331
- return await pr(s) ? s : null;
4372
+ return await fr(s) ? {
4373
+ projectRoot: s,
4374
+ scaffolded: !0
4375
+ } : null;
4332
4376
  }
4333
4377
  //#endregion
4334
4378
  //#region src/core/npm-deps.ts
4335
- function so(e, t) {
4379
+ function fo(e, t) {
4336
4380
  let n = [], r = [];
4337
4381
  if (!e) return {
4338
4382
  errors: n,
@@ -4363,7 +4407,7 @@ function so(e, t) {
4363
4407
  operations: r
4364
4408
  };
4365
4409
  }
4366
- function co(e) {
4410
+ function po(e) {
4367
4411
  let t = {};
4368
4412
  for (let n of e) if (n) for (let [e, r] of Object.entries(n)) t[e] = {
4369
4413
  ...t[e],
@@ -4371,11 +4415,11 @@ function co(e) {
4371
4415
  };
4372
4416
  return t;
4373
4417
  }
4374
- async function lo(e, t, n = q) {
4418
+ async function mo(e, t, n = J) {
4375
4419
  let r = [];
4376
4420
  for (let i of e) {
4377
4421
  let e = w.join(t, i.relativeDir);
4378
- if (!await J(w.join(e, "package.json"))) {
4422
+ if (!await Y(w.join(e, "package.json"))) {
4379
4423
  r.push(`Cannot install npm dependencies under "${i.relativeDir}": package.json not found.`);
4380
4424
  continue;
4381
4425
  }
@@ -4407,25 +4451,25 @@ async function lo(e, t, n = q) {
4407
4451
  function $(e) {
4408
4452
  return e instanceof Error ? e.message : String(e);
4409
4453
  }
4410
- async function uo(e, t, n) {
4454
+ async function ho(e, t, n) {
4411
4455
  let r = e.filter((e) => e.tier === "paid" && !t.has(e.name)).map((e) => e.name);
4412
- return r.length === 0 ? {} : Tr(r, n).catch(() => ({}));
4456
+ return r.length === 0 ? {} : wr(r, n).catch(() => ({}));
4413
4457
  }
4414
- function fo(e, t) {
4415
- return e === "free" ? R.success("free") : e === "owned" ? R.accent("owned") : `${R.highlight(`$${t}`)} ${R.muted("locked")}`;
4458
+ function go(e, t) {
4459
+ return e === "free" ? L.success("free") : e === "owned" ? L.accent("owned") : `${L.highlight(`$${t}`)} ${L.muted("locked")}`;
4416
4460
  }
4417
- async function po(e, t, n) {
4461
+ async function _o(e, t, n) {
4418
4462
  let r = e.filter((e) => t(e)), i = e.filter((e) => !t(e));
4419
- i.length > 0 && o.log.warning(`Skipping ${i.join(", ")} because ${i.length === 1 ? "it depends" : "they depend"} on a pack you don't own yet.`), await nr(r.map((e) => n.get(e)).filter((e) => e !== void 0).map((e) => ({
4463
+ i.length > 0 && o.log.warning(`Skipping ${i.join(", ")} because ${i.length === 1 ? "it depends" : "they depend"} on a pack you don't own yet.`), await tr(r.map((e) => n.get(e)).filter((e) => e !== void 0).map((e) => ({
4420
4464
  name: e.name,
4421
4465
  displayName: e.displayName,
4422
4466
  price: e.price
4423
4467
  })));
4424
4468
  }
4425
- function mo(e, t) {
4469
+ function vo(e, t) {
4426
4470
  let n = e.map((e, n) => {
4427
4471
  let r = t.get(e), i = r ? r.displayName : e;
4428
- return ` ${R.muted(`${n + 1}.`)} ${R.brand(i)}`;
4472
+ return ` ${L.muted(`${n + 1}.`)} ${L.brand(i)}`;
4429
4473
  });
4430
4474
  o.note([
4431
4475
  "These packs will be installed, in order:",
@@ -4433,10 +4477,10 @@ function mo(e, t) {
4433
4477
  ...n
4434
4478
  ].join("\n"), "Install Plan");
4435
4479
  }
4436
- async function ho(e, t) {
4480
+ async function yo(e, t) {
4437
4481
  let n = [];
4438
4482
  for (let r of e) {
4439
- let e = await yr(r), i = await br(r, t);
4483
+ let e = await vr(r), i = await yr(r, t);
4440
4484
  if (i.status === "denied") throw Error(`Access to "${r}" was denied (${i.reason}). Try 'npx @hype-stack/cli login' or check your license.`);
4441
4485
  n.push({
4442
4486
  manifest: e,
@@ -4445,36 +4489,36 @@ async function ho(e, t) {
4445
4489
  }
4446
4490
  return n;
4447
4491
  }
4448
- async function go(e) {
4449
- let { prepared: t, paths: n, cwd: r, spinner: i } = e, a = so(co(t.map((e) => e.manifest.dependencies_npm)), n);
4492
+ async function bo(e) {
4493
+ let { prepared: t, paths: n, cwd: r, spinner: i } = e, a = fo(po(t.map((e) => e.manifest.dependencies_npm)), n);
4450
4494
  if (a.errors.length > 0) {
4451
4495
  for (let e of a.errors) o.log.error(e);
4452
4496
  return;
4453
4497
  }
4454
4498
  if (a.operations.length === 0) return;
4455
4499
  i.start("Installing npm dependencies...");
4456
- let s = await lo(a.operations, r);
4500
+ let s = await mo(a.operations, r);
4457
4501
  if (i.stop(s.ok ? "npm dependencies installed" : "npm dependency installation failed"), !s.ok) for (let e of s.errors) o.log.error(e);
4458
4502
  }
4459
- function _o(e) {
4503
+ function xo(e) {
4460
4504
  let t = e.flatMap((e) => e.manifest.postInstall ?? []), n = [...new Set(t)];
4461
- n.length !== 0 && o.note(n.map((e) => ` ${R.muted("→")} ${e}`).join("\n"), "Next Steps");
4505
+ n.length !== 0 && o.note(n.map((e) => ` ${L.muted("→")} ${e}`).join("\n"), "Next Steps");
4462
4506
  }
4463
- async function vo(e) {
4507
+ async function So(e) {
4464
4508
  let { prepared: t, config: n, cwd: r, force: i, yes: a, slotsByPack: s } = e, c = /* @__PURE__ */ new Set();
4465
4509
  if (i) return c;
4466
- let l = await ji({
4510
+ let l = await Ai({
4467
4511
  packs: t,
4468
4512
  config: n,
4469
4513
  projectRoot: r,
4470
4514
  slotsByPack: s
4471
4515
  });
4472
4516
  if (l.length === 0) return c;
4473
- if (a) return o.log.warning(`${l.length} existing file${l.length === 1 ? "" : "s"} kept. Pass ${R.command("--force")} to overwrite.`), c;
4517
+ if (a) return o.log.warning(`${l.length} existing file${l.length === 1 ? "" : "s"} kept. Pass ${L.command("--force")} to overwrite.`), c;
4474
4518
  o.log.warning(`${l.length} file${l.length === 1 ? "" : "s"} already exist in your project.`);
4475
4519
  for (let e of l) {
4476
4520
  let t = w.relative(r, e.targetPath) || e.target, n = await o.confirm({
4477
- message: `Overwrite ${R.path(t)}? ${R.muted(`(${e.packName})`)}`,
4521
+ message: `Overwrite ${L.path(t)}? ${L.muted(`(${e.packName})`)}`,
4478
4522
  initialValue: !1
4479
4523
  });
4480
4524
  o.isCancel(n) && (o.cancel("Installation cancelled."), process.exit(0)), n && c.add(e.targetPath);
@@ -4483,152 +4527,152 @@ async function vo(e) {
4483
4527
  }
4484
4528
  //#endregion
4485
4529
  //#region src/commands/compose.ts
4486
- async function yo(e = {}) {
4530
+ async function Co(e = {}) {
4487
4531
  let t = e.cwd ?? process.cwd();
4488
- X();
4489
- let n = await oo(t), r;
4532
+ da();
4533
+ let n = await uo(t), r = n?.projectRoot ?? null, i = n?.scaffolded ?? !1, a;
4490
4534
  try {
4491
- r = await fr(n ?? t);
4535
+ a = await dr(r ?? t);
4492
4536
  } catch (e) {
4493
- o.cancel(`Could not parse ${R.path("stack.json")}: ${$(e)} Run 'npx @hype-stack/cli init' to regenerate it.`), process.exit(1);
4537
+ o.cancel(`Could not parse ${L.path("stack.json")}: ${$(e)} Run 'npx @hype-stack/cli init' to regenerate it.`), process.exit(1);
4494
4538
  }
4495
- r || (o.cancel(n ? `Could not read ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' to regenerate it, then run 'npx @hype-stack/cli compose' again.` : `No ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' first, then 'npx @hype-stack/cli compose'.`), process.exit(1)), r.paths || (o.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'npx @hype-stack/cli init' again to regenerate it.`), process.exit(1));
4496
- let i = n ?? t;
4497
- o.intro(R.brandBold("Compose your stack"));
4498
- let a = o.spinner();
4499
- a.start("Loading packs...");
4500
- let s;
4539
+ a || (o.cancel(r ? `Could not read ${L.path("stack.json")}. Run 'npx @hype-stack/cli init' to regenerate it, then run 'npx @hype-stack/cli compose' again.` : `No ${L.path("stack.json")}. Run 'npx @hype-stack/cli init' first, then 'npx @hype-stack/cli compose'.`), process.exit(1)), a.paths || (o.cancel(`${L.path("stack.json")} is missing ${L.path("paths")}. Run 'npx @hype-stack/cli init' again to regenerate it.`), process.exit(1));
4540
+ let s = r ?? t;
4541
+ o.intro(L.brandBold("Compose your stack"));
4542
+ let c = o.spinner();
4543
+ c.start("Loading packs...");
4544
+ let l;
4501
4545
  try {
4502
- s = await wr();
4546
+ l = await Cr();
4503
4547
  } catch (e) {
4504
- a.stop("Failed to load packs"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4505
- }
4506
- a.stop("Packs loaded");
4507
- let c = r.installedPacks ?? [], l = new Set(c), u = new Map(s.map((e) => [e.name, e])), d = e.licenseKey ?? r.licenseKey ?? null, f = (await Gn(P()))?.token ?? null, p = await uo(s, l, {
4508
- token: f,
4509
- key: d
4510
- }), m = (e) => {
4511
- let t = u.get(e);
4512
- return !t || t.tier === "free" ? "free" : p[e]?.owned ? "owned" : "locked";
4513
- }, h = (e) => !l.has(e) && m(e) === "locked", g = await bo({
4514
- packs: s,
4515
- installedSet: l,
4516
- stateOf: m,
4548
+ c.stop("Failed to load packs"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4549
+ }
4550
+ c.stop("Packs loaded");
4551
+ let u = a.installedPacks ?? [], d = new Set(u), f = new Map(l.map((e) => [e.name, e])), p = e.licenseKey ?? a.licenseKey ?? null, m = (await Wn(N()))?.token ?? null, h = await ho(l, d, {
4552
+ token: m,
4553
+ key: p
4554
+ }), g = (e) => {
4555
+ let t = f.get(e);
4556
+ return !t || t.tier === "free" ? "free" : h[e]?.owned ? "owned" : "locked";
4557
+ }, _ = (e) => !d.has(e) && g(e) === "locked", y = await wo({
4558
+ packs: l,
4559
+ installedSet: d,
4560
+ stateOf: g,
4517
4561
  options: e,
4518
- adminAvailable: !!r.apps.admin
4562
+ adminAvailable: !!a.apps.admin
4519
4563
  });
4520
- if (g === null && (o.cancel("Cancelled."), process.exit(0)), g.length === 0) {
4521
- o.outro(R.muted("No packs selected. Nothing to do."));
4564
+ if (y === null && (o.cancel("Cancelled."), process.exit(0)), y.length === 0) {
4565
+ o.outro(L.muted("No packs selected. Nothing to do."));
4522
4566
  return;
4523
4567
  }
4524
- let _ = Co(g), y = wo(g), b = Xi(s, _), x = Ui(Zi(s, b)), S;
4568
+ let b = Do(y), x = Oo(y), S = ta(l, b), C = Ji(na(l, S)), w;
4525
4569
  try {
4526
- S = Gi(_, x, c);
4570
+ w = Xi(b, C, u);
4527
4571
  } catch (e) {
4528
4572
  o.cancel($(e)), process.exit(1);
4529
4573
  }
4530
- if (S.order.length === 0) {
4531
- o.note(`${S.alreadyInstalled.join(", ")} already installed.`, "Nothing to do"), o.outro(R.muted("Your selection is already part of the project."));
4574
+ if (w.order.length === 0) {
4575
+ o.note(`${w.alreadyInstalled.join(", ")} already installed.`, "Nothing to do"), o.outro(L.muted("Your selection is already part of the project."));
4532
4576
  return;
4533
4577
  }
4534
- let C = Ki({
4535
- order: S.order,
4536
- graph: x,
4537
- isLocked: h,
4538
- installed: c
4578
+ let T = Zi({
4579
+ order: w.order,
4580
+ graph: C,
4581
+ isLocked: _,
4582
+ installed: u
4539
4583
  });
4540
- if (C.blocked.length > 0 && !f && !d) {
4541
- let e = await tr();
4542
- e && (f = e, p = await uo(s, l, {
4543
- token: f,
4544
- key: d
4545
- }), C = Ki({
4546
- order: S.order,
4547
- graph: x,
4548
- isLocked: h,
4549
- installed: c
4584
+ if (T.blocked.length > 0 && !m && !p) {
4585
+ let e = await er();
4586
+ e && (m = e, h = await ho(l, d, {
4587
+ token: m,
4588
+ key: p
4589
+ }), T = Zi({
4590
+ order: w.order,
4591
+ graph: C,
4592
+ isLocked: _,
4593
+ installed: u
4550
4594
  }));
4551
4595
  }
4552
- if (C.blocked.length > 0 && await po(C.blocked, h, u), C.installable.length === 0) {
4553
- o.outro(R.muted("Nothing left to install once locked packs are removed."));
4596
+ if (T.blocked.length > 0 && await _o(T.blocked, _, f), T.installable.length === 0) {
4597
+ o.outro(L.muted("Nothing left to install once locked packs are removed."));
4554
4598
  return;
4555
4599
  }
4556
- if (mo(C.installable, u), !e.yes) {
4557
- let e = await o.confirm({ message: `Install ${C.installable.length} pack${C.installable.length === 1 ? "" : "s"}?` });
4600
+ if (vo(T.installable, f), !e.yes) {
4601
+ let e = await o.confirm({ message: `Install ${T.installable.length} pack${T.installable.length === 1 ? "" : "s"}?` });
4558
4602
  (o.isCancel(e) || !e) && (o.cancel("Installation cancelled."), process.exit(0));
4559
4603
  }
4560
- a.start("Downloading packs...");
4561
- let w;
4604
+ c.start("Downloading packs...");
4605
+ let E;
4562
4606
  try {
4563
- w = await ho(C.installable, {
4564
- token: f,
4565
- key: d
4607
+ E = await yo(T.installable, {
4608
+ token: m,
4609
+ key: p
4566
4610
  });
4567
4611
  } catch (e) {
4568
- a.stop("Download failed"), o.cancel($(e)), process.exit(1);
4612
+ c.stop("Download failed"), o.cancel($(e)), process.exit(1);
4569
4613
  }
4570
- a.stop(`Downloaded ${w.length} pack${w.length === 1 ? "" : "s"}`);
4571
- let T = await vo({
4572
- prepared: w,
4573
- config: r,
4574
- cwd: i,
4614
+ c.stop(`Downloaded ${E.length} pack${E.length === 1 ? "" : "s"}`);
4615
+ let D = await So({
4616
+ prepared: E,
4617
+ config: a,
4618
+ cwd: s,
4575
4619
  force: e.force ?? !1,
4576
4620
  yes: e.yes ?? !1,
4577
- slotsByPack: y
4621
+ slotsByPack: x
4578
4622
  });
4579
4623
  try {
4580
- a.start("Installing pack files...");
4581
- let t = await Pi({
4582
- packs: w,
4583
- config: r,
4584
- projectRoot: i,
4624
+ c.start("Installing pack files...");
4625
+ let t = await Ni({
4626
+ packs: E,
4627
+ config: a,
4628
+ projectRoot: s,
4585
4629
  force: e.force ?? !1,
4586
- overwrite: T,
4587
- slotsByPack: y
4630
+ overwrite: D,
4631
+ slotsByPack: x
4588
4632
  });
4589
4633
  if (t.aborted) {
4590
- a.stop("Installation aborted");
4634
+ c.stop("Installation aborted");
4591
4635
  for (let e of t.errors) o.log.error(e);
4592
4636
  o.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
4593
4637
  }
4594
- a.stop("Files installed"), t.installed.length > 0 && o.log.success(`${R.highlight(String(t.installed.length))} files installed`), t.skipped.length > 0 && o.log.warning(`${t.skipped.length} files skipped (use --force to overwrite)`);
4638
+ c.stop("Files installed"), t.installed.length > 0 && o.log.success(`${L.highlight(String(t.installed.length))} files installed`), t.skipped.length > 0 && o.log.warning(`${t.skipped.length} files skipped (use --force to overwrite)`);
4595
4639
  for (let e of t.errors) o.log.error(e);
4596
- await go({
4597
- prepared: w,
4598
- paths: r.paths,
4599
- cwd: i,
4600
- spinner: a
4601
- }), await dr({
4602
- projectRoot: i,
4603
- paths: r.paths,
4640
+ await bo({
4641
+ prepared: E,
4642
+ paths: a.paths,
4643
+ cwd: s,
4644
+ spinner: c
4645
+ }), i && await qi(s, e.yes ?? !1), await ur({
4646
+ projectRoot: s,
4647
+ paths: a.paths,
4604
4648
  skipPrompts: e.yes ?? !1
4605
- }), _o(w), o.outro(R.brand(`Installed ${t.appliedPacks.join(", ")}.`));
4649
+ }), xo(E), o.outro(L.brand(`Installed ${t.appliedPacks.join(", ")}.`));
4606
4650
  } finally {
4607
- await Promise.all(w.map((e) => v.rm(e.packDir, {
4651
+ await Promise.all(E.map((e) => v.rm(e.packDir, {
4608
4652
  recursive: !0,
4609
4653
  force: !0
4610
4654
  })));
4611
4655
  }
4612
4656
  }
4613
- async function bo(e) {
4657
+ async function wo(e) {
4614
4658
  let { packs: t, installedSet: n, stateOf: r, options: i, adminAvailable: a } = e;
4615
4659
  if (i.packs && i.packs.length > 0) {
4616
- let e = i.packs.map(So), n = e.filter((e) => !t.some((t) => t.name === e.name));
4660
+ let e = i.packs.map(Eo), n = e.filter((e) => !t.some((t) => t.name === e.name));
4617
4661
  return n.length > 0 && (o.cancel(`Unknown pack${n.length === 1 ? "" : "s"}: ${n.map((e) => e.name).join(", ")}`), process.exit(1)), e;
4618
4662
  }
4619
4663
  let s = t.filter((e) => n.has(e.name));
4620
- s.length > 0 && o.note(s.map((e) => ` ${R.muted("✓")} ${e.displayName}`).join("\n"), "Already Installed");
4664
+ s.length > 0 && o.note(s.map((e) => ` ${L.muted("✓")} ${e.displayName}`).join("\n"), "Already Installed");
4621
4665
  let c = t.filter((e) => !n.has(e.name));
4622
- if (c.length === 0) return o.outro(R.muted("Every available pack is already installed.")), [];
4623
- let l = F();
4624
- o.note(c.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${ge(`${l}/packs/${e.name}`)}`).join("\n"), "Browse packs");
4625
- let u = Vi(c, { adminAvailable: a }), d = [];
4666
+ if (c.length === 0) return o.outro(L.muted("Every available pack is already installed.")), [];
4667
+ let l = P();
4668
+ o.note(c.map((e) => ` ${R.arrow} ${L.highlight(e.displayName)} ${_e(`${l}/packs/${e.name}`)}`).join("\n"), "Browse packs");
4669
+ let u = Bi(c, { adminAvailable: a }), d = [];
4626
4670
  for (let e of u) {
4627
4671
  let t = e.packs.map((e) => {
4628
4672
  let t = r(e.name);
4629
4673
  return {
4630
4674
  value: e.name,
4631
- label: `${e.displayName} ${fo(t, e.price)}`,
4675
+ label: `${e.displayName} ${go(t, e.price)}`,
4632
4676
  hint: e.description
4633
4677
  };
4634
4678
  });
@@ -4645,7 +4689,7 @@ async function bo(e) {
4645
4689
  });
4646
4690
  continue;
4647
4691
  }
4648
- let n = await ca({
4692
+ let n = await ma({
4649
4693
  message: `Select ${e.label.toLowerCase()} to add (optional)`,
4650
4694
  options: t,
4651
4695
  required: !1
@@ -4655,20 +4699,20 @@ async function bo(e) {
4655
4699
  }
4656
4700
  return d;
4657
4701
  }
4658
- var xo = /@(frontend|admin)$/;
4659
- function So(e) {
4660
- let t = e.match(xo);
4702
+ var To = /@(frontend|admin)$/;
4703
+ function Eo(e) {
4704
+ let t = e.match(To);
4661
4705
  return t ? {
4662
4706
  name: e.slice(0, -t[0].length),
4663
4707
  slot: t[1]
4664
4708
  } : { name: e };
4665
4709
  }
4666
- function Co(e) {
4710
+ function Do(e) {
4667
4711
  let t = /* @__PURE__ */ new Set(), n = [];
4668
4712
  for (let r of e) t.has(r.name) || (t.add(r.name), n.push(r.name));
4669
4713
  return n;
4670
4714
  }
4671
- function wo(e) {
4715
+ function Oo(e) {
4672
4716
  let t = /* @__PURE__ */ new Map();
4673
4717
  for (let n of e) {
4674
4718
  if (!n.slot) continue;
@@ -4679,42 +4723,42 @@ function wo(e) {
4679
4723
  }
4680
4724
  //#endregion
4681
4725
  //#region src/commands/login.ts
4682
- async function To() {
4683
- X(), o.intro(R.brandBold("Log in to Hype Stack")), o.log.step("Opening your browser to sign in...");
4726
+ async function ko() {
4727
+ fa(), o.intro(L.brandBold("Log in to Hype Stack")), o.log.step("Opening your browser to sign in...");
4684
4728
  let e;
4685
4729
  try {
4686
- e = await er({ onUrl: (e) => {
4687
- o.log.info(`If your browser didn't open, visit:\n ${R.path(e)}`);
4730
+ e = await $n({ onUrl: (e) => {
4731
+ o.log.info(`If your browser didn't open, visit:\n ${L.path(e)}`);
4688
4732
  } });
4689
4733
  } catch (e) {
4690
4734
  o.cancel(e instanceof Error ? e.message : String(e)), process.exit(1);
4691
4735
  }
4692
- o.outro(R.brand(e.email ? `Logged in as ${e.email}. You can now install packs your organization owns.` : "Logged in. You can now install packs your organization owns."));
4736
+ o.outro(L.brand(e.email ? `Logged in as ${e.email}. You can now install packs your organization owns.` : "Logged in. You can now install packs your organization owns."));
4693
4737
  }
4694
4738
  //#endregion
4695
4739
  //#region src/commands/logout.ts
4696
- async function Eo() {
4697
- X(), o.intro(R.brandBold("Log out of Hype Stack"));
4698
- let e = P(), t = await Gn(e);
4740
+ async function Ao() {
4741
+ fa(), o.intro(L.brandBold("Log out of Hype Stack"));
4742
+ let e = N(), t = await Wn(e);
4699
4743
  if (!t) {
4700
- o.outro(R.muted("You're not logged in."));
4744
+ o.outro(L.muted("You're not logged in."));
4701
4745
  return;
4702
4746
  }
4703
- await Ln(t.token).catch(() => null), await qn(e), o.outro(R.brand("Logged out."));
4747
+ await In(t.token).catch(() => null), await Kn(e), o.outro(L.brand("Logged out."));
4704
4748
  }
4705
4749
  //#endregion
4706
4750
  //#region src/core/templates.ts
4707
- var Do = K.createRequest()({
4751
+ var jo = q.createRequest()({
4708
4752
  endpoint: "/templates/list",
4709
4753
  method: "GET"
4710
4754
  });
4711
- async function Oo() {
4712
- let { data: e, error: t } = await Do.send();
4755
+ async function Mo() {
4756
+ let { data: e, error: t } = await jo.send();
4713
4757
  if (t || !e) throw Error(`Failed to fetch template list: ${String(t)}`);
4714
4758
  return e.templates;
4715
4759
  }
4716
- async function ko(e) {
4717
- let { data: t, error: n, status: r } = await K.createRequest()({
4760
+ async function No(e) {
4761
+ let { data: t, error: n, status: r } = await q.createRequest()({
4718
4762
  endpoint: `/templates/${encodeURIComponent(e)}/manifest`,
4719
4763
  method: "GET"
4720
4764
  }).send();
@@ -4722,13 +4766,13 @@ async function ko(e) {
4722
4766
  if (n || !t) throw Error(`Failed to load manifest for template "${e}": ${String(n)}`);
4723
4767
  return t;
4724
4768
  }
4725
- async function Ao(e, t = {}) {
4726
- let n = K.createRequest()({
4769
+ async function Po(e, t = {}) {
4770
+ let n = q.createRequest()({
4727
4771
  endpoint: `/templates/${encodeURIComponent(e)}/download`,
4728
4772
  method: "POST"
4729
4773
  }), r = {
4730
- "X-Device-Id": Yn(),
4731
- "X-Client-Info": Xn()
4774
+ "X-Device-Id": Jn(),
4775
+ "X-Client-Info": Yn()
4732
4776
  };
4733
4777
  t.token && (r.Authorization = `Bearer ${t.token}`);
4734
4778
  let { data: i, error: a, success: o } = await n.setPayload({ key: t.licenseKey ?? void 0 }).setHeaders(r).send();
@@ -4750,172 +4794,172 @@ async function Ao(e, t = {}) {
4750
4794
  }
4751
4795
  //#endregion
4752
4796
  //#region src/commands/template.ts
4753
- async function jo(e = {}) {
4797
+ async function Fo(e = {}) {
4754
4798
  let t = e.cwd ?? process.cwd();
4755
- X();
4756
- let n = await oo(t), a;
4799
+ da();
4800
+ let n = await uo(t), a = n?.projectRoot ?? null, s = n?.scaffolded ?? !1, c;
4757
4801
  try {
4758
- a = await fr(n ?? t);
4802
+ c = await dr(a ?? t);
4759
4803
  } catch (e) {
4760
- o.cancel(`Could not parse ${R.path("stack.json")}: ${$(e)} Run 'npx @hype-stack/cli init' to regenerate it.`), process.exit(1);
4804
+ o.cancel(`Could not parse ${L.path("stack.json")}: ${$(e)} Run 'npx @hype-stack/cli init' to regenerate it.`), process.exit(1);
4761
4805
  }
4762
- a || (o.cancel(n ? `Could not read ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' to regenerate it, then run 'npx @hype-stack/cli template' again.` : `No ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' first, then 'npx @hype-stack/cli template'.`), process.exit(1)), a.paths || (o.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'npx @hype-stack/cli init' again to regenerate it.`), process.exit(1));
4763
- let s = n ?? t;
4764
- o.intro(R.brandBold("Install a template"));
4765
- let c = o.spinner();
4766
- c.start("Loading packs...");
4767
- let l;
4806
+ c || (o.cancel(a ? `Could not read ${L.path("stack.json")}. Run 'npx @hype-stack/cli init' to regenerate it, then run 'npx @hype-stack/cli template' again.` : `No ${L.path("stack.json")}. Run 'npx @hype-stack/cli init' first, then 'npx @hype-stack/cli template'.`), process.exit(1)), c.paths || (o.cancel(`${L.path("stack.json")} is missing ${L.path("paths")}. Run 'npx @hype-stack/cli init' again to regenerate it.`), process.exit(1));
4807
+ let l = a ?? t;
4808
+ o.intro(L.brandBold("Install a template"));
4809
+ let u = o.spinner();
4810
+ u.start("Loading packs...");
4811
+ let d;
4768
4812
  try {
4769
- l = await wr();
4813
+ d = await Cr();
4770
4814
  } catch (e) {
4771
- c.stop("Failed to load packs"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4815
+ u.stop("Failed to load packs"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4772
4816
  }
4773
- c.stop("Packs loaded");
4774
- let u = a.installedPacks ?? [], d = new Set(u), f = new Map(l.map((e) => [e.name, e])), p = e.licenseKey ?? a.licenseKey ?? null, m = (await Gn(P()))?.token ?? null;
4775
- c.start("Loading templates...");
4776
- let h;
4817
+ u.stop("Packs loaded");
4818
+ let f = c.installedPacks ?? [], p = new Set(f), m = new Map(d.map((e) => [e.name, e])), h = e.licenseKey ?? c.licenseKey ?? null, g = (await Wn(N()))?.token ?? null;
4819
+ u.start("Loading templates...");
4820
+ let _;
4777
4821
  try {
4778
- h = await Oo();
4822
+ _ = await Mo();
4779
4823
  } catch (e) {
4780
- c.stop("Failed to load templates"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4824
+ u.stop("Failed to load templates"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4781
4825
  }
4782
- let g = e.templateId;
4783
- if (!g) {
4784
- e.yes && (c.stop("Template id required"), o.cancel("Pass a template id with `npx @hype-stack/cli template <id>` (required in --yes mode)."), process.exit(1)), h.length === 0 && (c.stop("No templates available"), o.cancel("No templates are available yet. Check back later."), process.exit(1)), c.stop("Templates loaded");
4785
- let t = F();
4786
- o.note(h.map((e) => ` ${z.arrow} ${R.highlight(e.name)} ${ge(`${t}/templates/${e.id}`)}`).join("\n"), "Browse templates");
4826
+ let y = e.templateId;
4827
+ if (!y) {
4828
+ e.yes && (u.stop("Template id required"), o.cancel("Pass a template id with `npx @hype-stack/cli template <id>` (required in --yes mode)."), process.exit(1)), _.length === 0 && (u.stop("No templates available"), o.cancel("No templates are available yet. Check back later."), process.exit(1)), u.stop("Templates loaded");
4829
+ let t = P();
4830
+ o.note(_.map((e) => ` ${R.arrow} ${L.highlight(e.name)} ${_e(`${t}/templates/${e.id}`)}`).join("\n"), "Browse templates");
4787
4831
  let n = await o.select({
4788
4832
  message: "Choose a template",
4789
- options: h.map((e) => ({
4833
+ options: _.map((e) => ({
4790
4834
  value: e.id,
4791
4835
  label: e.name,
4792
4836
  hint: e.description
4793
4837
  }))
4794
4838
  });
4795
- o.isCancel(n) && (o.cancel("Cancelled."), process.exit(0)), g = n;
4796
- }
4797
- let _ = h.find((e) => e.id === g);
4798
- _ || (c.stop("Template not found"), o.cancel(`Template "${g}" not found. Available: ${h.map((e) => e.id).join(", ") || "(none)"}`), process.exit(1)), c.stop(`Template: ${_.name}`);
4799
- let y = await Mo(_, e.variants, e.yes ?? !1), b = qi(_.slots, y), x = Ji(_.slots, _.packs, b), S = await No({
4800
- packs: l,
4801
- templatePacks: x,
4802
- installedSet: d,
4839
+ o.isCancel(n) && (o.cancel("Cancelled."), process.exit(0)), y = n;
4840
+ }
4841
+ let b = _.find((e) => e.id === y);
4842
+ b || (u.stop("Template not found"), o.cancel(`Template "${y}" not found. Available: ${_.map((e) => e.id).join(", ") || "(none)"}`), process.exit(1)), u.stop(`Template: ${b.name}`);
4843
+ let x = await Io(b, e.variants, e.yes ?? !1), S = Qi(b.slots, x), C = $i(b.slots, b.packs, S), T = await Lo({
4844
+ packs: d,
4845
+ templatePacks: C,
4846
+ installedSet: p,
4803
4847
  options: e
4804
- }), C = [...x, ...S.filter((e) => !x.includes(e))], T = C.filter((e) => !f.has(e));
4805
- T.length > 0 && (o.cancel(`Unknown pack${T.length === 1 ? "" : "s"}: ${T.join(", ")}`), process.exit(1));
4806
- let E = Zi(l, b), D = Ui(E), O;
4848
+ }), E = [...C, ...T.filter((e) => !C.includes(e))], D = E.filter((e) => !m.has(e));
4849
+ D.length > 0 && (o.cancel(`Unknown pack${D.length === 1 ? "" : "s"}: ${D.join(", ")}`), process.exit(1));
4850
+ let O = na(d, S), ee = Ji(O), k;
4807
4851
  try {
4808
- O = Gi(C, D, u);
4852
+ k = Xi(E, ee, f);
4809
4853
  } catch (e) {
4810
4854
  o.cancel($(e)), process.exit(1);
4811
4855
  }
4812
- if (O.order.length === 0) {
4813
- o.outro(R.muted("Every pack in this template is already installed."));
4856
+ if (k.order.length === 0) {
4857
+ o.outro(L.muted("Every pack in this template is already installed."));
4814
4858
  return;
4815
4859
  }
4816
- let ee = await uo(E, d, {
4817
- token: m,
4818
- key: p
4819
- }), k = (e) => {
4820
- let t = f.get(e);
4821
- return !t || t.tier === "free" ? "free" : ee[e]?.owned ? "owned" : "locked";
4822
- }, A = (e) => !d.has(e) && k(e) === "locked", j = Ki({
4823
- order: O.order,
4824
- graph: D,
4825
- isLocked: A,
4826
- installed: u
4860
+ let te = await ho(O, p, {
4861
+ token: g,
4862
+ key: h
4863
+ }), ne = (e) => {
4864
+ let t = m.get(e);
4865
+ return !t || t.tier === "free" ? "free" : te[e]?.owned ? "owned" : "locked";
4866
+ }, re = (e) => !p.has(e) && ne(e) === "locked", A = Zi({
4867
+ order: k.order,
4868
+ graph: ee,
4869
+ isLocked: re,
4870
+ installed: f
4827
4871
  });
4828
- if (j.blocked.length > 0 && !m && !p) {
4829
- let e = await tr();
4830
- e && (m = e, ee = await uo(E, d, {
4831
- token: m,
4832
- key: p
4833
- }), j = Ki({
4834
- order: O.order,
4835
- graph: D,
4836
- isLocked: A,
4837
- installed: u
4872
+ if (A.blocked.length > 0 && !g && !h) {
4873
+ let e = await er();
4874
+ e && (g = e, te = await ho(O, p, {
4875
+ token: g,
4876
+ key: h
4877
+ }), A = Zi({
4878
+ order: k.order,
4879
+ graph: ee,
4880
+ isLocked: re,
4881
+ installed: f
4838
4882
  }));
4839
4883
  }
4840
- if (j.blocked.length > 0 && await po(j.blocked, A, f), j.installable.length === 0) {
4841
- o.outro(R.muted("Nothing left to install once locked packs are removed."));
4884
+ if (A.blocked.length > 0 && await _o(A.blocked, re, m), A.installable.length === 0) {
4885
+ o.outro(L.muted("Nothing left to install once locked packs are removed."));
4842
4886
  return;
4843
4887
  }
4844
- if (mo(j.installable, f), !e.yes) {
4845
- let e = await o.confirm({ message: `Install template ${R.brandBold(_.name)} (${j.installable.length} pack${j.installable.length === 1 ? "" : "s"})?` });
4888
+ if (vo(A.installable, m), !e.yes) {
4889
+ let e = await o.confirm({ message: `Install template ${L.brandBold(b.name)} (${A.installable.length} pack${A.installable.length === 1 ? "" : "s"})?` });
4846
4890
  (o.isCancel(e) || !e) && (o.cancel("Installation cancelled."), process.exit(0));
4847
4891
  }
4848
- c.start("Downloading packs...");
4849
- let M;
4892
+ u.start("Downloading packs...");
4893
+ let j;
4850
4894
  try {
4851
- M = await ho(j.installable, {
4852
- token: m,
4853
- key: p
4895
+ j = await yo(A.installable, {
4896
+ token: g,
4897
+ key: h
4854
4898
  });
4855
4899
  } catch (e) {
4856
- c.stop("Download failed"), o.cancel($(e)), process.exit(1);
4900
+ u.stop("Download failed"), o.cancel($(e)), process.exit(1);
4857
4901
  }
4858
- c.stop(`Downloaded ${M.length} pack${M.length === 1 ? "" : "s"}`);
4859
- let te = await vo({
4860
- prepared: M,
4861
- config: a,
4862
- cwd: s,
4902
+ u.stop(`Downloaded ${j.length} pack${j.length === 1 ? "" : "s"}`);
4903
+ let ie = await So({
4904
+ prepared: j,
4905
+ config: c,
4906
+ cwd: l,
4863
4907
  force: e.force ?? !1,
4864
4908
  yes: e.yes ?? !1
4865
- }), N = null;
4909
+ }), M = null;
4866
4910
  try {
4867
- c.start("Installing pack files...");
4868
- let t = await Pi({
4869
- packs: M,
4870
- config: a,
4871
- projectRoot: s,
4911
+ u.start("Installing pack files...");
4912
+ let t = await Ni({
4913
+ packs: j,
4914
+ config: c,
4915
+ projectRoot: l,
4872
4916
  force: e.force ?? !1,
4873
- overwrite: te
4917
+ overwrite: ie
4874
4918
  });
4875
4919
  if (t.aborted) {
4876
- c.stop("Installation aborted");
4920
+ u.stop("Installation aborted");
4877
4921
  for (let e of t.errors) o.log.error(e);
4878
4922
  o.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
4879
4923
  }
4880
- c.stop("Files installed"), t.installed.length > 0 && o.log.success(`${R.highlight(String(t.installed.length))} files installed`), t.skipped.length > 0 && o.log.warning(`${t.skipped.length} files skipped (use --force to overwrite)`);
4924
+ u.stop("Files installed"), t.installed.length > 0 && o.log.success(`${L.highlight(String(t.installed.length))} files installed`), t.skipped.length > 0 && o.log.warning(`${t.skipped.length} files skipped (use --force to overwrite)`);
4881
4925
  for (let e of t.errors) o.log.error(e);
4882
- c.start("Applying template overrides...");
4883
- let n = await ko(_.id), l = await Ao(_.id, {
4884
- token: m,
4885
- licenseKey: p
4926
+ u.start("Applying template overrides...");
4927
+ let n = await No(b.id), a = await Po(b.id, {
4928
+ token: g,
4929
+ licenseKey: h
4886
4930
  });
4887
- l.status === "denied" && (c.stop("Template download denied"), o.cancel(`Access to template "${_.id}" was denied (${l.reason}). Try 'npx @hype-stack/cli login' or check your license.`), process.exit(1)), N = l.templateDir;
4888
- let u = await Ii({
4931
+ a.status === "denied" && (u.stop("Template download denied"), o.cancel(`Access to template "${b.id}" was denied (${a.reason}). Try 'npx @hype-stack/cli login' or check your license.`), process.exit(1)), M = a.templateDir;
4932
+ let d = await Fi({
4889
4933
  manifest: n,
4890
- config: a,
4891
- projectRoot: s,
4892
- templateDir: N
4934
+ config: c,
4935
+ projectRoot: l,
4936
+ templateDir: M
4893
4937
  });
4894
- c.stop("Template overrides applied"), u.installed.length > 0 && o.log.success(`${u.installed.length} template file${u.installed.length === 1 ? "" : "s"} applied`);
4895
- for (let e of u.errors) o.log.error(e);
4896
- let d = n.theme ?? "zinc-mono";
4897
- i(d) && (await ha(w.resolve(s, a.paths?.frontend.root ?? "apps/frontend"), r(d)) ? o.log.success(`Applied the ${r(d).label} theme`) : o.log.warning(R.muted(`Could not find ${R.path("assets/styles.css")} to apply the theme`))), await Po({
4898
- prepared: M,
4938
+ u.stop("Template overrides applied"), d.installed.length > 0 && o.log.success(`${d.installed.length} template file${d.installed.length === 1 ? "" : "s"} applied`);
4939
+ for (let e of d.errors) o.log.error(e);
4940
+ let f = n.theme ?? "zinc-mono";
4941
+ i(f) && (await ba(w.resolve(l, c.paths?.frontend.root ?? "apps/frontend"), r(f)) ? o.log.success(`Applied the ${r(f).label} theme`) : o.log.warning(L.muted(`Could not find ${L.path("assets/styles.css")} to apply the theme`))), await Ro({
4942
+ prepared: j,
4899
4943
  templateNpm: n.dependencies_npm,
4900
- paths: a.paths,
4901
- cwd: s,
4902
- spinner: c
4903
- }), await dr({
4904
- projectRoot: s,
4905
- paths: a.paths,
4944
+ paths: c.paths,
4945
+ cwd: l,
4946
+ spinner: u
4947
+ }), s && await qi(l, e.yes ?? !1), await ur({
4948
+ projectRoot: l,
4949
+ paths: c.paths,
4906
4950
  skipPrompts: e.yes ?? !1
4907
- }), _o(M), n.postInstall && n.postInstall.length > 0 && o.note(n.postInstall.map((e) => ` ${R.muted("→")} ${e}`).join("\n"), "Template Next Steps"), o.outro(R.brand(`Installed template ${_.name}.`));
4951
+ }), xo(j), n.postInstall && n.postInstall.length > 0 && o.note(n.postInstall.map((e) => ` ${L.muted("→")} ${e}`).join("\n"), "Template Next Steps"), o.outro(L.brand(`Installed template ${b.name}.`));
4908
4952
  } finally {
4909
- await Promise.all(M.map((e) => v.rm(e.packDir, {
4953
+ await Promise.all(j.map((e) => v.rm(e.packDir, {
4910
4954
  recursive: !0,
4911
4955
  force: !0
4912
- }))), N && await v.rm(N, {
4956
+ }))), M && await v.rm(M, {
4913
4957
  recursive: !0,
4914
4958
  force: !0
4915
4959
  });
4916
4960
  }
4917
4961
  }
4918
- async function Mo(e, t, n) {
4962
+ async function Io(e, t, n) {
4919
4963
  let r = {};
4920
4964
  for (let i of e.slots) {
4921
4965
  if (t?.[i.family]) {
@@ -4939,7 +4983,7 @@ async function Mo(e, t, n) {
4939
4983
  }
4940
4984
  return r;
4941
4985
  }
4942
- async function No(e) {
4986
+ async function Lo(e) {
4943
4987
  let { packs: t, templatePacks: n, installedSet: r, options: i } = e, a = new Set(n);
4944
4988
  if (i.packs && i.packs.length > 0) {
4945
4989
  let e = i.packs.filter((e) => !t.some((t) => t.name === e));
@@ -4948,9 +4992,9 @@ async function No(e) {
4948
4992
  if (i.yes) return [];
4949
4993
  let s = t.filter((e) => e.category === "feature" && !a.has(e.name) && !r.has(e.name));
4950
4994
  if (s.length === 0) return [];
4951
- let c = F();
4952
- o.note(s.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${ge(`${c}/packs/${e.name}`)}`).join("\n"), "Browse packs");
4953
- let l = await ca({
4995
+ let c = P();
4996
+ o.note(s.map((e) => ` ${R.arrow} ${L.highlight(e.displayName)} ${_e(`${c}/packs/${e.name}`)}`).join("\n"), "Browse packs");
4997
+ let l = await ma({
4954
4998
  message: "Add extra packs on top of the template (optional)",
4955
4999
  options: s.map((e) => ({
4956
5000
  value: e.name,
@@ -4961,25 +5005,25 @@ async function No(e) {
4961
5005
  });
4962
5006
  return p(l) && (o.cancel("Cancelled."), process.exit(0)), l;
4963
5007
  }
4964
- async function Po(e) {
4965
- let { prepared: t, templateNpm: n, paths: r, cwd: i, spinner: a } = e, s = co(t.map((e) => e.manifest.dependencies_npm)), c = so(n ? co([s, n]) : s, r);
5008
+ async function Ro(e) {
5009
+ let { prepared: t, templateNpm: n, paths: r, cwd: i, spinner: a } = e, s = po(t.map((e) => e.manifest.dependencies_npm)), c = fo(n ? po([s, n]) : s, r);
4966
5010
  if (c.errors.length > 0) {
4967
5011
  for (let e of c.errors) o.log.error(e);
4968
5012
  return;
4969
5013
  }
4970
5014
  if (c.operations.length === 0) return;
4971
5015
  a.start("Installing npm dependencies...");
4972
- let l = await lo(c.operations, i);
5016
+ let l = await mo(c.operations, i);
4973
5017
  if (a.stop(l.ok ? "npm dependencies installed" : "npm dependency installation failed"), !l.ok) for (let e of l.errors) o.log.error(e);
4974
5018
  }
4975
5019
  //#endregion
4976
5020
  //#region src/cli.ts
4977
- function Fo(e) {
5021
+ function zo(e) {
4978
5022
  if (!e) return;
4979
5023
  let t = e.split(",").map((e) => e.trim()).filter((e) => e.length > 0);
4980
5024
  return t.length > 0 ? t : void 0;
4981
5025
  }
4982
- function Io(e) {
5026
+ function Bo(e) {
4983
5027
  if (!e) return;
4984
5028
  let t = {};
4985
5029
  for (let n of e.split(",")) {
@@ -4988,10 +5032,10 @@ function Io(e) {
4988
5032
  }
4989
5033
  return Object.keys(t).length > 0 ? t : void 0;
4990
5034
  }
4991
- function Lo() {
5035
+ function Vo() {
4992
5036
  let e = new a();
4993
5037
  return e.name("hype-stack").description("Build with Hype Stack -- templates, components, modules, and more").version(k, "-v, --version"), e.command("create").description("Create a new Hype Stack project").option("-n, --name <name>", "Project name").option("-d, --directory <path>", "Target directory").option("-e, --editor <editor>", "Code editor (cursor, claude, windsurf, copilot)").option("-t, --theme <theme>", "Color theme (default, slate, rose, emerald, violet, amber, ocean, zinc-mono, crimson, midnight)").option("--no-install", "Skip dependency installation").option("--no-setup", "Skip Docker services and database migrations after create").option("-y, --yes", "Skip confirmation prompts (requires --name)").action(async (e) => {
4994
- await io({
5038
+ await co({
4995
5039
  name: e.name,
4996
5040
  directory: e.directory,
4997
5041
  install: e.install,
@@ -5001,32 +5045,32 @@ function Lo() {
5001
5045
  setup: e.setup
5002
5046
  });
5003
5047
  }), e.command("init").description("Initialize stack.json in the current project").action(async () => {
5004
- await ao({});
5048
+ await lo({});
5005
5049
  }), e.command("compose").description("Choose feature packs to add to your project").option("--packs <list>", "Comma-separated pack names (non-interactive). Append @frontend or @admin to a layout pack to target that app shell, e.g. layout-basic@frontend,layout-native-app-shell@admin").option("--force", "Overwrite existing files").option("-y, --yes", "Skip confirmation prompts").option("-k, --key <key>", "License key").option("--license-key <key>", "License key (alias for --key)").option("--cwd <path>", "Working directory").action(async (e) => {
5006
- await yo({
5007
- packs: Fo(e.packs),
5050
+ await Co({
5051
+ packs: zo(e.packs),
5008
5052
  force: e.force,
5009
5053
  yes: e.yes,
5010
5054
  licenseKey: e.key ?? e.licenseKey,
5011
5055
  cwd: e.cwd
5012
5056
  });
5013
5057
  }), e.command("template").description("Install a template by id, with starter/layout variant swaps and extra packs on top").argument("[id]", "Template id (omit to pick interactively)").option("--variants <map>", "Preselect slot variants, e.g. starter-saas=starter-saas-better-auth,layout=layout-basic").option("--packs <list>", "Extra packs to add on top of the template (comma-separated)").option("--force", "Overwrite existing files").option("-y, --yes", "Skip confirmation prompts (requires <id>)").option("-k, --key <key>", "License key").option("--license-key <key>", "License key (alias for --key)").option("--cwd <path>", "Working directory").action(async (e, t) => {
5014
- await jo({
5058
+ await Fo({
5015
5059
  templateId: e,
5016
- variants: Io(t.variants),
5017
- packs: Fo(t.packs),
5060
+ variants: Bo(t.variants),
5061
+ packs: zo(t.packs),
5018
5062
  force: t.force,
5019
5063
  yes: t.yes,
5020
5064
  licenseKey: t.key ?? t.licenseKey,
5021
5065
  cwd: t.cwd
5022
5066
  });
5023
5067
  }), e.command("login").description("Log in via your browser to install packs your organization owns").action(async () => {
5024
- await To();
5068
+ await ko();
5025
5069
  }), e.command("logout").description("Log out and remove the saved CLI token").action(async () => {
5026
- await Eo();
5070
+ await Ao();
5027
5071
  }), e.command("auth").description("Alias for `login`").action(async () => {
5028
- await To();
5072
+ await ko();
5029
5073
  }), e;
5030
5074
  }
5031
5075
  //#endregion
5032
- export { oo as a, yo as i, Eo as n, ao as o, To as r, io as s, Lo as t };
5076
+ export { uo as a, Co as i, Ao as n, lo as o, ko as r, co as s, Vo as t };