@hype-stack/cli 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,23 +1,23 @@
1
- import { DEFAULT_THEME as e, THEME_CHOICES as t, getTheme as n, isThemeName as r } from "./themes.js";
2
- import { Command as i } from "commander";
3
- import * as a from "@clack/prompts";
4
- import o from "node:fs/promises";
5
- import s from "picocolors";
6
- import c from "node:os";
7
- import l from "node:path";
8
- import { exec as u, spawn as d } from "node:child_process";
9
- import { downloadTemplate as f } from "giget";
1
+ import { DEFAULT_THEME as e, THEME_CHOICES as t, THEME_LIST as n, getTheme as r, isThemeName as i } from "./themes.js";
2
+ import { Command as a } from "commander";
3
+ import * as o from "@clack/prompts";
4
+ import s from "node:fs/promises";
5
+ import c from "picocolors";
6
+ import l from "node:os";
7
+ import u from "node:path";
8
+ import { exec as d, spawn as f } from "node:child_process";
9
+ import { downloadTemplate as p } from "giget";
10
10
  //#region \0rolldown/runtime.js
11
- var p = Object.create, m = Object.defineProperty, h = Object.getOwnPropertyDescriptor, g = Object.getOwnPropertyNames, _ = Object.getPrototypeOf, v = Object.prototype.hasOwnProperty, y = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), b = (e, t, n, r) => {
12
- if (t && typeof t == "object" || typeof t == "function") for (var i = g(t), a = 0, o = i.length, s; a < o; a++) s = i[a], !v.call(e, s) && s !== n && m(e, s, {
11
+ var m = Object.create, h = Object.defineProperty, g = Object.getOwnPropertyDescriptor, _ = Object.getOwnPropertyNames, v = Object.getPrototypeOf, y = Object.prototype.hasOwnProperty, b = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), x = (e, t, n, r) => {
12
+ if (t && typeof t == "object" || typeof t == "function") for (var i = _(t), a = 0, o = i.length, s; a < o; a++) s = i[a], !y.call(e, s) && s !== n && h(e, s, {
13
13
  get: ((e) => t[e]).bind(null, s),
14
- enumerable: !(r = h(t, s)) || r.enumerable
14
+ enumerable: !(r = g(t, s)) || r.enumerable
15
15
  });
16
16
  return e;
17
- }, x = (e, t, n) => (n = e == null ? {} : p(_(e)), b(t || !e || !e.__esModule ? m(n, "default", {
17
+ }, S = (e, t, n) => (n = e == null ? {} : m(v(e)), x(t || !e || !e.__esModule ? h(n, "default", {
18
18
  value: e,
19
19
  enumerable: !0
20
- }) : n, e)), S = "0.0.1", C = "gh:BetterTyped/hype-stack", w = "stack.json", T = "/schema/stack.json", E = "https://hype-stack.dev", D = "HYPE_STACK_API_URL", O = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/, k = [
20
+ }) : n, e)), C = "0.0.1", w = "gh:BetterTyped/hype-stack", T = "stack.json", E = "/schema/stack.json", D = "https://hype-stack.dev", O = "HYPE_STACK_API_URL", ee = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/, k = [
21
21
  {
22
22
  value: "cursor",
23
23
  label: "Cursor",
@@ -35,107 +35,111 @@ var p = Object.create, m = Object.defineProperty, h = Object.getOwnPropertyDescr
35
35
  value: "copilot",
36
36
  label: "GitHub Copilot"
37
37
  }
38
- ], ee = k.map((e) => e.value), A = ".cursor/rules", j = ".cursor", te = ".agents";
39
- function M() {
38
+ ], A = k.map((e) => e.value), j = ".cursor/rules", te = ".cursor", M = ".agents";
39
+ function N() {
40
40
  let e = process.env.HYPE_STACK_API_URL;
41
- return e ? (ne(e), e.replace(/\/+$/, "")) : E;
41
+ return e ? (ne(e), e.replace(/\/+$/, "")) : D;
42
42
  }
43
- function N() {
43
+ function P() {
44
44
  let e = process.env.HYPE_STACK_WEB_URL;
45
- return e ? (ne(e), e.replace(/\/+$/, "")) : M();
45
+ return e ? (ne(e), e.replace(/\/+$/, "")) : N();
46
46
  }
47
47
  function ne(e) {
48
48
  try {
49
49
  let t = new URL(e);
50
- if (!t.protocol.startsWith("http")) throw Error(`${D} must use http or https protocol, got "${t.protocol}"`);
50
+ if (!t.protocol.startsWith("http")) throw Error(`${O} must use http or https protocol, got "${t.protocol}"`);
51
51
  } catch (t) {
52
- throw t instanceof TypeError ? Error(`${D} is not a valid URL: "${e}"`, { cause: t }) : t;
52
+ throw t instanceof TypeError ? Error(`${O} is not a valid URL: "${e}"`, { cause: t }) : t;
53
53
  }
54
54
  }
55
55
  function re() {
56
- return `${M()}${T}`;
56
+ return `${N()}${E}`;
57
57
  }
58
58
  //#endregion
59
59
  //#region src/ui/theme.ts
60
- var P = (e) => `\x1b[38;5;208m${e}\x1b[39m`, ie = (e) => `\x1b[38;5;214m${e}\x1b[39m`, F = (e) => `\x1b[38;5;220m${e}\x1b[39m`, ae = (e) => `\x1b[38;5;33m${e}\x1b[39m`, I = (e) => `\x1b[38;5;39m${e}\x1b[39m`, oe = (e) => `\x1b[38;5;81m${e}\x1b[39m`, se = {
61
- orange: P,
60
+ var F = (e) => `\x1b[38;5;208m${e}\x1b[39m`, ie = (e) => `\x1b[38;5;214m${e}\x1b[39m`, I = (e) => `\x1b[38;5;220m${e}\x1b[39m`, ae = (e) => `\x1b[38;5;33m${e}\x1b[39m`, L = (e) => `\x1b[38;5;39m${e}\x1b[39m`, oe = (e) => `\x1b[38;5;81m${e}\x1b[39m`, se = {
61
+ orange: F,
62
62
  orangeBright: ie,
63
- amber: F,
63
+ amber: I,
64
64
  deepBlue: ae,
65
- skyBlue: I,
65
+ skyBlue: L,
66
66
  lightBlue: oe
67
- }, L = {
68
- brand: (e) => P(e),
69
- brandBold: (e) => s.bold(P(e)),
70
- accent: (e) => I(e),
71
- accentBold: (e) => s.bold(I(e)),
72
- success: (e) => s.green(e),
73
- error: (e) => s.red(e),
74
- warning: (e) => s.yellow(e),
75
- muted: (e) => s.dim(e),
76
- bold: (e) => s.bold(e),
77
- highlight: (e) => s.bold(s.white(e)),
78
- path: (e) => s.underline(I(e)),
79
- command: (e) => s.bold(F(e)),
80
- label: (e) => s.dim(s.bold(e))
81
67
  }, R = {
82
- arrow: P("›"),
83
- bullet: L.muted("·"),
84
- dash: L.muted("─"),
85
- corner: L.muted("╰"),
86
- pipe: L.muted("│"),
87
- dot: L.muted("•"),
88
- spark: F("✦"),
68
+ brand: (e) => F(e),
69
+ brandBold: (e) => c.bold(F(e)),
70
+ accent: (e) => L(e),
71
+ accentBold: (e) => c.bold(L(e)),
72
+ success: (e) => c.green(e),
73
+ error: (e) => c.red(e),
74
+ warning: (e) => c.yellow(e),
75
+ muted: (e) => c.dim(e),
76
+ bold: (e) => c.bold(e),
77
+ highlight: (e) => c.bold(c.white(e)),
78
+ path: (e) => c.underline(L(e)),
79
+ command: (e) => c.bold(I(e)),
80
+ label: (e) => c.dim(c.bold(e))
81
+ };
82
+ function ce(e, t = e) {
83
+ return `\x1b]8;;${e}\x07${L(t)}\x1b]8;;\x07`;
84
+ }
85
+ var z = {
86
+ arrow: F("›"),
87
+ bullet: R.muted("·"),
88
+ dash: R.muted("─"),
89
+ corner: R.muted("╰"),
90
+ pipe: R.muted("│"),
91
+ dot: R.muted("•"),
92
+ spark: I("✦"),
89
93
  sparkSmall: ie("✧"),
90
- bolt: F("⚡")
91
- }, ce = [
92
- F,
93
- F,
94
+ bolt: I("⚡")
95
+ }, le = [
96
+ I,
97
+ I,
94
98
  ie,
95
- P,
99
+ F,
96
100
  ae,
97
- I,
101
+ L,
98
102
  oe,
99
103
  oe
100
104
  ];
101
- function le(e) {
105
+ function ue(e) {
102
106
  let t = [...e], n = t.length;
103
107
  return t.map((e, t) => {
104
108
  if (e === " " || e === "\n") return e;
105
109
  let r = t / Math.max(n - 1, 1);
106
- return ce[Math.min(Math.floor(r * ce.length), ce.length - 1)](e);
110
+ return le[Math.min(Math.floor(r * le.length), le.length - 1)](e);
107
111
  }).join("");
108
112
  }
109
- function ue(e, t, n) {
113
+ function de(e, t, n) {
110
114
  return Math.round(e + (t - e) * n);
111
115
  }
112
- function de(e, t) {
116
+ function fe(e, t) {
113
117
  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
118
  return e.map((e, t) => [...e].map((e, s) => {
115
119
  if (e === " ") return e;
116
120
  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;${ue(n[0], r[0], u)};${ue(n[1], r[1], u)};${ue(n[2], r[2], u)}m${e}\x1b[39m`;
121
+ return `\x1b[38;2;${de(n[0], r[0], u)};${de(n[1], r[1], u)};${de(n[2], r[2], u)}m${e}\x1b[39m`;
118
122
  }).join(""));
119
123
  }
120
124
  //#endregion
121
125
  //#region src/core/license.ts
122
- function fe(e) {
123
- return `${N()}/packs/${e}`;
126
+ function pe(e) {
127
+ return `${P()}/packs/${e}`;
124
128
  }
125
129
  //#endregion
126
130
  //#region ../../node_modules/.pnpm/@hyper-fetch+core@8.1.1/node_modules/@hyper-fetch/core/dist/index.mjs
127
- var pe = /* @__PURE__ */ x((/* @__PURE__ */ y(((e, t) => {
131
+ var me = /* @__PURE__ */ S((/* @__PURE__ */ b(((e, t) => {
128
132
  t.exports = {};
129
- })))(), 1), me = Object.create, he = Object.defineProperty, ge = Object.getOwnPropertyDescriptor, _e = Object.getOwnPropertyNames, ve = Object.getPrototypeOf, ye = Object.prototype.hasOwnProperty, be = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), xe = (e, t, n, r) => {
130
- if (t && typeof t == "object" || typeof t == "function") for (var i = _e(t), a = 0, o = i.length, s; a < o; a++) s = i[a], !ye.call(e, s) && s !== n && he(e, s, {
133
+ })))(), 1), he = Object.create, ge = Object.defineProperty, _e = Object.getOwnPropertyDescriptor, ve = Object.getOwnPropertyNames, ye = Object.getPrototypeOf, be = Object.prototype.hasOwnProperty, xe = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), Se = (e, t, n, r) => {
134
+ if (t && typeof t == "object" || typeof t == "function") for (var i = ve(t), a = 0, o = i.length, s; a < o; a++) s = i[a], !be.call(e, s) && s !== n && ge(e, s, {
131
135
  get: ((e) => t[e]).bind(null, s),
132
- enumerable: !(r = ge(t, s)) || r.enumerable
136
+ enumerable: !(r = _e(t, s)) || r.enumerable
133
137
  });
134
138
  return e;
135
- }, Se = (e, t, n) => (n = e == null ? {} : me(ve(e)), xe(t || !e || !e.__esModule ? he(n, "default", {
139
+ }, Ce = (e, t, n) => (n = e == null ? {} : he(ye(e)), Se(t || !e || !e.__esModule ? ge(n, "default", {
136
140
  value: e,
137
141
  enumerable: !0
138
- }) : n, e)), Ce = (e) => `${e.queryKey}_${Date.now().toString(36)}_${Math.random().toString(36).substring(2)}`, we = /* @__PURE__ */ Se((/* @__PURE__ */ be(((e, t) => {
142
+ }) : n, e)), we = (e) => `${e.queryKey}_${Date.now().toString(36)}_${Math.random().toString(36).substring(2)}`, Te = /* @__PURE__ */ Ce((/* @__PURE__ */ xe(((e, t) => {
139
143
  var n = typeof Reflect == "object" ? Reflect : null, r = n && typeof n.apply == "function" ? n.apply : function(e, t, n) {
140
144
  return Function.prototype.apply.call(e, t, n);
141
145
  }, i = n && typeof n.ownKeys == "function" ? n.ownKeys : Object.getOwnPropertySymbols ? function(e) {
@@ -310,7 +314,7 @@ var pe = /* @__PURE__ */ x((/* @__PURE__ */ y(((e, t) => {
310
314
  });
311
315
  else throw TypeError("The \"emitter\" argument must be of type EventEmitter. Received type " + typeof e);
312
316
  }
313
- })))()), Te = (e) => `listen_${String(e)}`, Ee = class extends we.default {
317
+ })))()), Ee = (e) => `listen_${String(e)}`, De = class extends Te.default {
314
318
  emitCallbacks = [];
315
319
  constructor(e) {
316
320
  super(e);
@@ -322,26 +326,26 @@ var pe = /* @__PURE__ */ x((/* @__PURE__ */ y(((e, t) => {
322
326
  onEmit = (e) => (this.emitCallbacks?.push(e), () => {
323
327
  this.emitCallbacks = this.emitCallbacks?.filter((t) => t !== e);
324
328
  });
325
- onListener = (e, t) => (super.on(Te(e), t), () => {
326
- super.off(Te(e), t);
329
+ onListener = (e, t) => (super.on(Ee(e), t), () => {
330
+ super.off(Ee(e), t);
327
331
  });
328
- on = (e, t) => (super.on(e, t), super.emit(Te(e), super.listeners(e).length), this);
329
- off = (e, t) => (super.off(e, t), super.emit(Te(e), super.listeners(e).length), this);
332
+ on = (e, t) => (super.on(e, t), super.emit(Ee(e), super.listeners(e).length), this);
333
+ off = (e, t) => (super.off(e, t), super.emit(Ee(e), super.listeners(e).length), this);
330
334
  addListener = this.on;
331
335
  removeListener = this.off;
332
- }, De = class {
333
- emitter = new Ee();
334
- events = Me(this.emitter);
336
+ }, Oe = class {
337
+ emitter = new De();
338
+ events = Ne(this.emitter);
335
339
  isBrowser;
336
340
  isOnline;
337
341
  isFocused;
338
342
  constructor(e) {
339
343
  this.options = e, this.emitter?.setMaxListeners(1e3);
340
- let { initiallyFocused: t = B.initiallyFocused, initiallyOnline: n = B.initiallyOnline } = this.options || B;
341
- this.setInitialFocus(t), this.setInitialOnline(n), this.isBrowser = ke();
344
+ let { initiallyFocused: t = V.initiallyFocused, initiallyOnline: n = V.initiallyOnline } = this.options || V;
345
+ this.setInitialFocus(t), this.setInitialOnline(n), this.isBrowser = Ae();
342
346
  }
343
347
  initialize = () => {
344
- let { focusEvent: e = B.focusEvent, onlineEvent: t = B.onlineEvent } = this.options || B;
348
+ let { focusEvent: e = V.focusEvent, onlineEvent: t = V.onlineEvent } = this.options || V;
345
349
  e(this.setFocused), t(this.setOnline);
346
350
  };
347
351
  setInitialFocus = async (e) => {
@@ -356,51 +360,51 @@ var pe = /* @__PURE__ */ x((/* @__PURE__ */ y(((e, t) => {
356
360
  setOnline = (e) => {
357
361
  this.isOnline = e, e ? this.events.emitOnline() : this.events.emitOffline();
358
362
  };
359
- }, Oe = () => {
363
+ }, ke = () => {
360
364
  try {
361
365
  return !!(window && window.addEventListener);
362
366
  } catch {
363
367
  /* istanbul ignore next */
364
368
  return !1;
365
369
  }
366
- }, ke = () => {
370
+ }, Ae = () => {
367
371
  try {
368
- return !!(Oe() && window.document && window.document.addEventListener);
372
+ return !!(ke() && window.document && window.document.addEventListener);
369
373
  } catch {
370
374
  /* istanbul ignore next */
371
375
  return !1;
372
376
  }
373
- }, Ae = (e, t, n) => Oe() ? (window.addEventListener(e, t, n), () => window.removeEventListener(e, t, n)) : () => null, je = (e, t, n) => ke() ? (window.document.addEventListener(e, t, n), () => window.document.removeEventListener(e, t, n)) : () => null, Me = (e) => ({
377
+ }, je = (e, t, n) => ke() ? (window.addEventListener(e, t, n), () => window.removeEventListener(e, t, n)) : () => null, Me = (e, t, n) => Ae() ? (window.document.addEventListener(e, t, n), () => window.document.removeEventListener(e, t, n)) : () => null, Ne = (e) => ({
374
378
  emitFocus: () => {
375
- e.emit(z.FOCUS);
379
+ e.emit(B.FOCUS);
376
380
  },
377
381
  emitBlur: () => {
378
- e.emit(z.BLUR);
382
+ e.emit(B.BLUR);
379
383
  },
380
384
  emitOnline: () => {
381
- e.emit(z.ONLINE);
385
+ e.emit(B.ONLINE);
382
386
  },
383
387
  emitOffline: () => {
384
- e.emit(z.OFFLINE);
388
+ e.emit(B.OFFLINE);
385
389
  },
386
- onFocus: (t) => (e.on(z.FOCUS, t), () => e.removeListener(z.FOCUS, t)),
387
- onBlur: (t) => (e.on(z.BLUR, t), () => e.removeListener(z.BLUR, t)),
388
- onOnline: (t) => (e.on(z.ONLINE, t), () => e.removeListener(z.ONLINE, t)),
389
- onOffline: (t) => (e.on(z.OFFLINE, t), () => e.removeListener(z.OFFLINE, t))
390
- }), z = /* @__PURE__ */ function(e) {
390
+ onFocus: (t) => (e.on(B.FOCUS, t), () => e.removeListener(B.FOCUS, t)),
391
+ onBlur: (t) => (e.on(B.BLUR, t), () => e.removeListener(B.BLUR, t)),
392
+ onOnline: (t) => (e.on(B.ONLINE, t), () => e.removeListener(B.ONLINE, t)),
393
+ onOffline: (t) => (e.on(B.OFFLINE, t), () => e.removeListener(B.OFFLINE, t))
394
+ }), B = /* @__PURE__ */ function(e) {
391
395
  return e.FOCUS = "focus", e.BLUR = "blur", e.ONLINE = "online", e.OFFLINE = "offline", e;
392
- }({}), B = {
396
+ }({}), V = {
393
397
  initiallyFocused: !0,
394
398
  initiallyOnline: !0,
395
399
  focusEvent: (e) => {
396
- je("visibilitychange", () => e(!0)), Ae("focus", () => e(!0)), Ae("blur", () => e(!1));
400
+ Me("visibilitychange", () => e(!0)), je("focus", () => e(!0)), je("blur", () => e(!1));
397
401
  },
398
402
  onlineEvent: (e) => {
399
- Ae("online", () => e(!0)), Ae("offline", () => e(!1));
403
+ je("online", () => e(!0)), je("offline", () => e(!1));
400
404
  }
401
- }, Ne = class {
402
- emitter = new Ee();
403
- events = lt(this.emitter);
405
+ }, Pe = class {
406
+ emitter = new De();
407
+ events = ut(this.emitter);
404
408
  constructor() {
405
409
  this.emitter?.setMaxListeners(1e3);
406
410
  }
@@ -437,71 +441,71 @@ var pe = /* @__PURE__ */ x((/* @__PURE__ */ y(((e, t) => {
437
441
  });
438
442
  });
439
443
  };
440
- }, Pe = () => "loading-event-any", Fe = (e) => `${e}-loading-event`, Ie = (e) => `${e}-loading-cache-event`, Le = (e) => `${e}-loading-event-by-id`, Re = () => "remove-event-any", ze = (e) => `${e}-remove-event`, Be = (e) => `${e}-remove-event-by-id`, Ve = () => "request-abort-any", He = (e) => `${e}-request-abort`, Ue = (e) => `${e}-request-abort-by-id`, We = () => "response-any", Ge = (e) => `${e}-response`, Ke = (e) => `${e}-response-by-id`, qe = () => "request-start-any", Je = (e) => `${e}-request-start`, Ye = (e) => `${e}-request-start-by-id`, Xe = () => "response-start-any", Ze = (e) => `${e}-response-start`, Qe = (e) => `${e}-response-start-by-id`, $e = () => "request-progress-any", et = (e) => `${e}-request-progress`, tt = (e) => `${e}-request-progress-by-id`, nt = () => "response-progress-any", rt = (e) => `${e}-response-progress`, it = (e) => `${e}-response-progress-by-id`, at = () => "request-deduplicated-any", ot = (e) => `${e}-query-request-deduplicated`, st = (e) => `${e}-cache-request-deduplicated`, ct = (e) => `${e}-request-deduplicated-by-id`, lt = (e) => ({
444
+ }, Fe = () => "loading-event-any", Ie = (e) => `${e}-loading-event`, Le = (e) => `${e}-loading-cache-event`, Re = (e) => `${e}-loading-event-by-id`, ze = () => "remove-event-any", Be = (e) => `${e}-remove-event`, Ve = (e) => `${e}-remove-event-by-id`, He = () => "request-abort-any", Ue = (e) => `${e}-request-abort`, We = (e) => `${e}-request-abort-by-id`, Ge = () => "response-any", Ke = (e) => `${e}-response`, qe = (e) => `${e}-response-by-id`, Je = () => "request-start-any", Ye = (e) => `${e}-request-start`, Xe = (e) => `${e}-request-start-by-id`, Ze = () => "response-start-any", Qe = (e) => `${e}-response-start`, $e = (e) => `${e}-response-start-by-id`, et = () => "request-progress-any", tt = (e) => `${e}-request-progress`, nt = (e) => `${e}-request-progress-by-id`, rt = () => "response-progress-any", it = (e) => `${e}-response-progress`, at = (e) => `${e}-response-progress-by-id`, ot = () => "request-deduplicated-any", st = (e) => `${e}-query-request-deduplicated`, ct = (e) => `${e}-cache-request-deduplicated`, lt = (e) => `${e}-request-deduplicated-by-id`, ut = (e) => ({
441
445
  emitDeduplicated: (t, n = !1) => {
442
- e.emit(at(), t, n), e.emit(ct(t.requestId), t, n), e.emit(st(t.request.cacheKey), t, n), e.emit(ot(t.request.queryKey), t, n);
446
+ e.emit(ot(), t, n), e.emit(lt(t.requestId), t, n), e.emit(ct(t.request.cacheKey), t, n), e.emit(st(t.request.queryKey), t, n);
443
447
  },
444
448
  emitLoading: (t, n = !1) => {
445
- e.emit(Pe(), t, n), e.emit(Le(t.requestId), t, n), e.emit(Ie(t.request.cacheKey), t, n), e.emit(Fe(t.request.queryKey), t, n);
449
+ e.emit(Fe(), t, n), e.emit(Re(t.requestId), t, n), e.emit(Le(t.request.cacheKey), t, n), e.emit(Ie(t.request.queryKey), t, n);
446
450
  },
447
451
  emitRequestStart: (t, n = !1) => {
448
- e.emit(qe(), t, n), e.emit(Ye(t.requestId), t, n), e.emit(Je(t.request.queryKey), t, n);
452
+ e.emit(Je(), t, n), e.emit(Xe(t.requestId), t, n), e.emit(Ye(t.request.queryKey), t, n);
449
453
  },
450
454
  emitResponseStart: (t, n = !1) => {
451
- e.emit(Xe(), t, n), e.emit(Qe(t.requestId), t, n), e.emit(Ze(t.request.queryKey), t, n);
455
+ e.emit(Ze(), t, n), e.emit($e(t.requestId), t, n), e.emit(Qe(t.request.queryKey), t, n);
452
456
  },
453
457
  emitUploadProgress: (t, n = !1) => {
454
- e.emit($e(), t, n), e.emit(tt(t.requestId), t, n), e.emit(et(t.request.queryKey), t, n);
458
+ e.emit(et(), t, n), e.emit(nt(t.requestId), t, n), e.emit(tt(t.request.queryKey), t, n);
455
459
  },
456
460
  emitDownloadProgress: (t, n = !1) => {
457
- e.emit(nt(), t, n), e.emit(it(t.requestId), t, n), e.emit(rt(t.request.queryKey), t, n);
461
+ e.emit(rt(), t, n), e.emit(at(t.requestId), t, n), e.emit(it(t.request.queryKey), t, n);
458
462
  },
459
463
  emitResponse: (t, n = !1) => {
460
- e.emit(We(), t, n), e.emit(Ke(t.requestId), t, n), e.emit(Ge(t.request.cacheKey), t, n);
464
+ e.emit(Ge(), t, n), e.emit(qe(t.requestId), t, n), e.emit(Ke(t.request.cacheKey), t, n);
461
465
  },
462
466
  emitAbort: (t, n = !1) => {
463
- e.emit(Ve(), t, n), e.emit(Ue(t.requestId), t, n), e.emit(He(t.request.abortKey), t, n);
467
+ e.emit(He(), t, n), e.emit(We(t.requestId), t, n), e.emit(Ue(t.request.abortKey), t, n);
464
468
  },
465
469
  emitRemove: (t, n = !1) => {
466
- e.emit(Re(), t, n), e.emit(Be(t.requestId), t, n), e.emit(ze(t.request.queryKey), t, n);
470
+ e.emit(ze(), t, n), e.emit(Ve(t.requestId), t, n), e.emit(Be(t.request.queryKey), t, n);
467
471
  },
468
- onDeduplicated: (t) => (e.on(at(), t), () => e.removeListener(at(), t)),
469
- onDeduplicatedByQueue: (t, n) => (e.on(ot(t), n), () => e.removeListener(ot(t), n)),
470
- onDeduplicatedByCache: (t, n) => (e.on(st(t), n), () => e.removeListener(st(t), n)),
471
- onDeduplicatedById: (t, n) => (e.on(ct(t), n), () => e.removeListener(ct(t), n)),
472
- onLoading: (t) => (e.on(Pe(), t), () => e.removeListener(Pe(), t)),
473
- onLoadingByQueue: (t, n) => (e.on(Fe(t), n), () => e.removeListener(Fe(t), n)),
474
- onLoadingByCache: (t, n) => (e.on(Ie(t), n), () => e.removeListener(Ie(t), n)),
475
- onLoadingById: (t, n) => (e.on(Le(t), n), () => e.removeListener(Le(t), n)),
476
- onRequestStart: (t) => (e.on(qe(), t), () => e.removeListener(qe(), t)),
477
- onRequestStartByQueue: (t, n) => (e.on(Je(t), n), () => e.removeListener(Je(t), n)),
478
- onRequestStartById: (t, n) => (e.on(Ye(t), n), () => e.removeListener(Ye(t), n)),
479
- onResponseStart: (t) => (e.on(Xe(), t), () => e.removeListener(Xe(), t)),
480
- onResponseStartByQueue: (t, n) => (e.on(Ze(t), n), () => e.removeListener(Ze(t), n)),
481
- onResponseStartById: (t, n) => (e.on(Qe(t), n), () => e.removeListener(Qe(t), n)),
482
- onUploadProgress: (t) => (e.on($e(), t), () => e.removeListener($e(), t)),
483
- onUploadProgressByQueue: (t, n) => (e.on(et(t), n), () => e.removeListener(et(t), n)),
484
- onUploadProgressById: (t, n) => (e.on(tt(t), n), () => e.removeListener(tt(t), n)),
485
- onDownloadProgress: (t) => (e.on(nt(), t), () => e.removeListener(nt(), t)),
486
- onDownloadProgressByQueue: (t, n) => (e.on(rt(t), n), () => e.removeListener(rt(t), n)),
487
- onDownloadProgressById: (t, n) => (e.on(it(t), n), () => e.removeListener(it(t), n)),
488
- onResponse: (t) => (e.on(We(), t), () => e.removeListener(We(), t)),
489
- onResponseByCache: (t, n) => (e.on(Ge(t), n), () => e.removeListener(Ge(t), n)),
490
- onResponseById: (t, n) => (e.on(Ke(t), n), () => e.removeListener(Ke(t), n)),
491
- onAbort: (t) => (e.on(Ve(), t), () => e.removeListener(Ve(), t)),
492
- onAbortByKey: (t, n) => (e.on(He(t), n), () => e.removeListener(He(t), n)),
493
- onAbortById: (t, n) => (e.on(Ue(t), n), () => e.removeListener(Ue(t), n)),
494
- onRemove: (t) => (e.on(Re(), t), () => e.removeListener(Re(), t)),
495
- onRemoveByQueue: (t, n) => (e.on(ze(t), n), () => e.removeListener(ze(t), n)),
496
- onRemoveById: (t, n) => (e.on(Be(t), n), () => e.removeListener(Be(t), n))
497
- }), ut = class {
472
+ onDeduplicated: (t) => (e.on(ot(), t), () => e.removeListener(ot(), t)),
473
+ onDeduplicatedByQueue: (t, n) => (e.on(st(t), n), () => e.removeListener(st(t), n)),
474
+ onDeduplicatedByCache: (t, n) => (e.on(ct(t), n), () => e.removeListener(ct(t), n)),
475
+ onDeduplicatedById: (t, n) => (e.on(lt(t), n), () => e.removeListener(lt(t), n)),
476
+ onLoading: (t) => (e.on(Fe(), t), () => e.removeListener(Fe(), t)),
477
+ onLoadingByQueue: (t, n) => (e.on(Ie(t), n), () => e.removeListener(Ie(t), n)),
478
+ onLoadingByCache: (t, n) => (e.on(Le(t), n), () => e.removeListener(Le(t), n)),
479
+ onLoadingById: (t, n) => (e.on(Re(t), n), () => e.removeListener(Re(t), n)),
480
+ onRequestStart: (t) => (e.on(Je(), t), () => e.removeListener(Je(), t)),
481
+ onRequestStartByQueue: (t, n) => (e.on(Ye(t), n), () => e.removeListener(Ye(t), n)),
482
+ onRequestStartById: (t, n) => (e.on(Xe(t), n), () => e.removeListener(Xe(t), n)),
483
+ onResponseStart: (t) => (e.on(Ze(), t), () => e.removeListener(Ze(), t)),
484
+ onResponseStartByQueue: (t, n) => (e.on(Qe(t), n), () => e.removeListener(Qe(t), n)),
485
+ onResponseStartById: (t, n) => (e.on($e(t), n), () => e.removeListener($e(t), n)),
486
+ onUploadProgress: (t) => (e.on(et(), t), () => e.removeListener(et(), t)),
487
+ onUploadProgressByQueue: (t, n) => (e.on(tt(t), n), () => e.removeListener(tt(t), n)),
488
+ onUploadProgressById: (t, n) => (e.on(nt(t), n), () => e.removeListener(nt(t), n)),
489
+ onDownloadProgress: (t) => (e.on(rt(), t), () => e.removeListener(rt(), t)),
490
+ onDownloadProgressByQueue: (t, n) => (e.on(it(t), n), () => e.removeListener(it(t), n)),
491
+ onDownloadProgressById: (t, n) => (e.on(at(t), n), () => e.removeListener(at(t), n)),
492
+ onResponse: (t) => (e.on(Ge(), t), () => e.removeListener(Ge(), t)),
493
+ onResponseByCache: (t, n) => (e.on(Ke(t), n), () => e.removeListener(Ke(t), n)),
494
+ onResponseById: (t, n) => (e.on(qe(t), n), () => e.removeListener(qe(t), n)),
495
+ onAbort: (t) => (e.on(He(), t), () => e.removeListener(He(), t)),
496
+ onAbortByKey: (t, n) => (e.on(Ue(t), n), () => e.removeListener(Ue(t), n)),
497
+ onAbortById: (t, n) => (e.on(We(t), n), () => e.removeListener(We(t), n)),
498
+ onRemove: (t) => (e.on(ze(), t), () => e.removeListener(ze(), t)),
499
+ onRemoveByQueue: (t, n) => (e.on(Be(t), n), () => e.removeListener(Be(t), n)),
500
+ onRemoveById: (t, n) => (e.on(Ve(t), n), () => e.removeListener(Ve(t), n))
501
+ }), dt = class {
498
502
  logger;
499
503
  level;
500
504
  modules;
501
- emitter = new we.default();
505
+ emitter = new Te.default();
502
506
  client;
503
507
  constructor(e) {
504
- this.options = e, this.emitter?.setMaxListeners(1e3), this.logger = this.options?.logger || pt, this.level = this.options?.level || "warning", this.modules = this.options?.modules;
508
+ this.options = e, this.emitter?.setMaxListeners(1e3), this.logger = this.options?.logger || mt, this.level = this.options?.level || "warning", this.modules = this.options?.modules;
505
509
  }
506
510
  setSeverity = (e) => {
507
511
  this.level = e;
@@ -532,39 +536,39 @@ var pe = /* @__PURE__ */ x((/* @__PURE__ */ y(((e, t) => {
532
536
  })
533
537
  });
534
538
  log = (e) => {
535
- this.client.debug && (mt.indexOf(this.level) <= mt.indexOf(e.level) || this.modules && !this.modules.includes(e.module) || this.logger(e));
539
+ this.client.debug && (ht.indexOf(this.level) <= ht.indexOf(e.level) || this.modules && !this.modules.includes(e.module) || this.logger(e));
536
540
  };
537
- }, dt = () => `${(/* @__PURE__ */ new Date()).toLocaleTimeString()}`, ft = (e) => e.type === "request" || e.type === "response" ? `${e.extra.request.endpoint}` : `[${e.module}]`, pt = (e) => {
538
- let t = gt[e.level], n = _t[e.level], r = `%c[${dt()}]%c${e.title}%c${ft(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;`;
541
+ }, ft = () => `${(/* @__PURE__ */ new Date()).toLocaleTimeString()}`, pt = (e) => e.type === "request" || e.type === "response" ? `${e.extra.request.endpoint}` : `[${e.module}]`, mt = (e) => {
542
+ let t = _t[e.level], n = vt[e.level], r = `%c[${ft()}]%c${e.title}%c${pt(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;`;
539
543
  e.extra && Object.keys(e.extra)?.length ? (console.groupCollapsed(r, i, a, o), console.log(e.extra), console.groupEnd()) : console.log(r, t);
540
- }, mt = [
544
+ }, ht = [
541
545
  "error",
542
546
  "warning",
543
547
  "info",
544
548
  "debug"
545
- ], ht = "padding:2px 5px;", gt = {
546
- error: `${ht};background:#db252520;`,
547
- warning: `${ht};background:#e1941e20;`,
548
- info: `${ht};background:#1e74e120;`,
549
- debug: `${ht};background:#00000020;`
550
- }, _t = {
549
+ ], gt = "padding:2px 5px;", _t = {
550
+ error: `${gt};background:#db252520;`,
551
+ warning: `${gt};background:#e1941e20;`,
552
+ info: `${gt};background:#1e74e120;`,
553
+ debug: `${gt};background:#00000020;`
554
+ }, vt = {
551
555
  error: "color:#ff3737;",
552
556
  warning: "color:#ffc107;",
553
557
  info: "color:#34a8ff;",
554
558
  debug: "color:#cccccc;"
555
- }, vt = class extends Error {
559
+ }, yt = class extends Error {
556
560
  constructor() {
557
561
  super("Request timeout"), this.name = "TimeoutError";
558
562
  }
559
- }, yt = class extends Error {
563
+ }, bt = class extends Error {
560
564
  constructor() {
561
565
  super("Request aborted"), this.name = "AbortError";
562
566
  }
563
- }, bt = class extends Error {
567
+ }, xt = class extends Error {
564
568
  constructor() {
565
569
  super("Request deleted"), this.name = "DeletedError";
566
570
  }
567
- }, xt = class extends Error {
571
+ }, H = class extends Error {
568
572
  description;
569
573
  constructor(e) {
570
574
  super("Request processing error"), this.description = e, this.name = "RequestProcessingError";
@@ -574,16 +578,16 @@ var pe = /* @__PURE__ */ x((/* @__PURE__ */ y(((e, t) => {
574
578
  constructor(e) {
575
579
  super("Unexpected error"), this.description = e, this.name = "UnexpectedError";
576
580
  }
577
- }, V = (e) => e === "timeout" ? new vt() : e === "abort" ? new yt() : e === "deleted" ? new bt() : e === "processing" ? new xt() : new St(), Ct = (e) => {
581
+ }, U = (e) => e === "timeout" ? new yt() : e === "abort" ? new bt() : e === "deleted" ? new xt() : e === "processing" ? new H() : new St(), Ct = (e) => {
578
582
  try {
579
583
  return JSON.stringify(e);
580
584
  } catch {
581
585
  return "";
582
586
  }
583
587
  }, wt = (e) => {
584
- let t = Oe() && e.payload instanceof FormData, n = typeof e.payload == "object" && e.payload !== null, r = {};
588
+ let t = ke() && e.payload instanceof FormData, n = typeof e.payload == "object" && e.payload !== null, r = {};
585
589
  return !t && n && (r["Content-Type"] = "application/json"), Object.assign(r, e.headers), r;
586
- }, Tt = (e) => Oe() && e instanceof FormData ? e : Ct(e), Et = [
590
+ }, Tt = (e) => ke() && e instanceof FormData ? e : Ct(e), Et = [
587
591
  "onBeforeSent",
588
592
  "onRequestStart",
589
593
  "onResponseStart",
@@ -632,7 +636,7 @@ function Dt(e) {
632
636
  }
633
637
  var Ot = /* @__PURE__ */ function(e) {
634
638
  return e.GET = "GET", e.POST = "POST", e.PUT = "PUT", e.PATCH = "PATCH", e.DELETE = "DELETE", e;
635
- }({}), H = (e, t) => t ? `${t}__${e}` : e, kt = (e) => {
639
+ }({}), W = (e, t) => t ? `${t}__${e}` : e, kt = (e) => {
636
640
  try {
637
641
  if (typeof e == "string") return e;
638
642
  if (e == null) return "";
@@ -750,7 +754,7 @@ var Ot = /* @__PURE__ */ function(e) {
750
754
  data: null,
751
755
  status: null,
752
756
  success: !1,
753
- error: V("deleted"),
757
+ error: U("deleted"),
754
758
  extra: e.client.adapter.defaultExtra,
755
759
  requestTimestamp: +/* @__PURE__ */ new Date(),
756
760
  responseTimestamp: +/* @__PURE__ */ new Date()
@@ -918,7 +922,7 @@ var Ot = /* @__PURE__ */ function(e) {
918
922
  }
919
923
  abort = () => {
920
924
  let { requestManager: e } = this.client;
921
- return e.abortByKey(H(this.abortKey, this.scope)), this.clone();
925
+ return e.abortByKey(W(this.abortKey, this.scope)), this.clone();
922
926
  };
923
927
  dehydrate = (e) => {
924
928
  let { response: t, override: n = !0 } = e || {};
@@ -933,7 +937,7 @@ var Ot = /* @__PURE__ */ function(e) {
933
937
  cache: !0,
934
938
  response: t
935
939
  };
936
- let r = this.client.cache.get(H(this.cacheKey, this.scope));
940
+ let r = this.client.cache.get(W(this.cacheKey, this.scope));
937
941
  if (r) return {
938
942
  override: n,
939
943
  cacheTime: this.cacheTime,
@@ -955,7 +959,7 @@ var Ot = /* @__PURE__ */ function(e) {
955
959
  };
956
960
  };
957
961
  read() {
958
- let e = this.client.cache.get(H(this.cacheKey, this.scope));
962
+ let e = this.client.cache.get(W(this.cacheKey, this.scope));
959
963
  if (e) return {
960
964
  data: e.data,
961
965
  error: e.error,
@@ -967,7 +971,7 @@ var Ot = /* @__PURE__ */ function(e) {
967
971
  };
968
972
  }
969
973
  exec = async (e) => {
970
- let { adapter: t, requestManager: n } = this.client, r = this.clone(e), i = this.client.unstable_requestIdMapper(this), a = H(this.abortKey, this.scope);
974
+ let { adapter: t, requestManager: n } = this.client, r = this.clone(e), i = this.client.unstable_requestIdMapper(this), a = W(this.abortKey, this.scope);
971
975
  n.addAbortController(a, i);
972
976
  let o = await t.fetch(r, i);
973
977
  return n.removeAbortController(a, i), r.unstable_responseMapper ? r.unstable_responseMapper(o) : o;
@@ -997,7 +1001,7 @@ var Ot = /* @__PURE__ */ function(e) {
997
1001
  requestId: t
998
1002
  }
999
1003
  }), d = await d.client.unstable_modifyRequest(d), d.auth && (d = await d.client.unstable_modifyAuth(d)), d.unstable_requestMapper && (d = await d.unstable_requestMapper(d, t));
1000
- let { client: g, abortKey: _ } = d, v = H(_, d.scope), y = d.payload;
1004
+ let { client: g, abortKey: _ } = d, v = W(_, d.scope), y = d.payload;
1001
1005
  d.unstable_payloadMapper ? y = await d.unstable_payloadMapper(d.payload) : s && (y = await s(y));
1002
1006
  let b = d.options, x = +/* @__PURE__ */ new Date();
1003
1007
  r(x);
@@ -1045,14 +1049,14 @@ var Ot = /* @__PURE__ */ function(e) {
1045
1049
  requestId: t,
1046
1050
  request: d
1047
1051
  }), l;
1048
- }, k = (e) => {
1052
+ }, ee = (e) => {
1049
1053
  l ||= +/* @__PURE__ */ new Date(), f = w(f, e);
1050
1054
  let t = +/* @__PURE__ */ new Date();
1051
1055
  return T(l, t, {
1052
1056
  total: f,
1053
1057
  loaded: e.loaded || 0
1054
1058
  }), t;
1055
- }, ee = () => {
1059
+ }, k = () => {
1056
1060
  l ||= +/* @__PURE__ */ new Date();
1057
1061
  let e = +/* @__PURE__ */ new Date();
1058
1062
  return T(l, e, {
@@ -1114,7 +1118,7 @@ var Ot = /* @__PURE__ */ function(e) {
1114
1118
  startTime: x,
1115
1119
  logger: c,
1116
1120
  resolve: n
1117
- }), ne = ({ status: e, extra: n }) => (c.error({
1121
+ }), P = ({ status: e, extra: n }) => (c.error({
1118
1122
  title: "Abort error",
1119
1123
  type: "request",
1120
1124
  extra: {
@@ -1122,10 +1126,10 @@ var Ot = /* @__PURE__ */ function(e) {
1122
1126
  requestId: t
1123
1127
  }
1124
1128
  }), N({
1125
- error: i(V("abort")),
1129
+ error: i(U("abort")),
1126
1130
  status: e,
1127
1131
  extra: n
1128
- })), re = ({ status: e, extra: n }) => (c.error({
1132
+ })), ne = ({ status: e, extra: n }) => (c.error({
1129
1133
  title: "Timeout error",
1130
1134
  type: "request",
1131
1135
  extra: {
@@ -1133,10 +1137,10 @@ var Ot = /* @__PURE__ */ function(e) {
1133
1137
  requestId: t
1134
1138
  }
1135
1139
  }), N({
1136
- error: V("timeout"),
1140
+ error: U("timeout"),
1137
1141
  status: e,
1138
1142
  extra: n
1139
- })), P = ({ status: e, extra: n }) => (c.error({
1143
+ })), re = ({ status: e, extra: n }) => (c.error({
1140
1144
  title: "Unexpected error",
1141
1145
  type: "request",
1142
1146
  extra: {
@@ -1144,14 +1148,14 @@ var Ot = /* @__PURE__ */ function(e) {
1144
1148
  requestId: t
1145
1149
  }
1146
1150
  }), N({
1147
- error: V(),
1151
+ error: U(),
1148
1152
  status: e,
1149
1153
  extra: n
1150
- })), ie = () => a.getAbortController(v, t), F = ({ status: e, extra: n, onAbort: r = () => {} }) => {
1151
- let i = ie();
1152
- if (!i) throw new xt("Controller is not found");
1154
+ })), F = () => a.getAbortController(v, t), ie = ({ status: e, extra: n, onAbort: r = () => {} }) => {
1155
+ let i = F();
1156
+ if (!i) throw new H("Controller is not found");
1153
1157
  let o = () => {
1154
- ne({
1158
+ P({
1155
1159
  status: e,
1156
1160
  extra: n
1157
1161
  }), r(), a.events.emitAbort({
@@ -1171,32 +1175,32 @@ var Ot = /* @__PURE__ */ function(e) {
1171
1175
  adapterOptions: b
1172
1176
  }
1173
1177
  });
1174
- let ae = e.client.adapter.unstable_queryParamsMapper(d.queryParams), I = e.client.adapter.unstable_endpointMapper(d.endpoint), oe = e.client.adapter.unstable_headerMapper(d), { url: se } = e.client;
1178
+ let I = e.client.adapter.unstable_queryParamsMapper(d.queryParams), ae = e.client.adapter.unstable_endpointMapper(d.endpoint), L = e.client.adapter.unstable_headerMapper(d), { url: oe } = e.client;
1175
1179
  return {
1176
1180
  request: d,
1177
1181
  requestId: t,
1178
- url: se,
1179
- endpoint: I,
1180
- queryParams: ae,
1182
+ url: oe,
1183
+ endpoint: ae,
1184
+ queryParams: I,
1181
1185
  payload: y,
1182
- headers: oe,
1186
+ headers: L,
1183
1187
  adapter: e.client.adapter,
1184
1188
  adapterOptions: b,
1185
- getAbortController: ie,
1189
+ getAbortController: F,
1186
1190
  getRequestStartTimestamp: S,
1187
1191
  getResponseStartTimestamp: C,
1188
- createAbortListener: F,
1192
+ createAbortListener: ie,
1189
1193
  onBeforeRequest: D,
1190
1194
  onRequestStart: O,
1191
- onRequestProgress: k,
1192
- onRequestEnd: ee,
1195
+ onRequestProgress: ee,
1196
+ onRequestEnd: k,
1193
1197
  onResponseStart: A,
1194
1198
  onResponseProgress: j,
1195
1199
  onResponseEnd: te,
1196
1200
  onSuccess: M,
1197
- onAbortError: ne,
1198
- onTimeoutError: re,
1199
- onUnexpectedError: P,
1201
+ onAbortError: P,
1202
+ onTimeoutError: ne,
1203
+ onUnexpectedError: re,
1200
1204
  onError: N
1201
1205
  };
1202
1206
  };
@@ -1230,7 +1234,7 @@ function Vt({ request: e, requestId: t, startTime: n, resolve: r, logger: i }) {
1230
1234
  };
1231
1235
  }
1232
1236
  var Ht = 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 }) => {
1233
- if (!e.unstable_mock) throw new xt("Mock should be defined when calling mocker");
1237
+ if (!e.unstable_mock) throw new H("Mock should be defined when calling mocker");
1234
1238
  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({
1235
1239
  request: e,
1236
1240
  requestId: t
@@ -1323,8 +1327,8 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1323
1327
  async fetch(e, t) {
1324
1328
  let n, r = async (r) => {
1325
1329
  try {
1326
- if (!this.initialized) throw new xt(`Adapter ${this.options.name} is not initialized`);
1327
- if (!this.unstable_fetcher) throw new xt(`Fetcher for ${this.options.name} adapter is not set`);
1330
+ if (!this.initialized) throw new H(`Adapter ${this.options.name} is not initialized`);
1331
+ if (!this.unstable_fetcher) throw new H(`Fetcher for ${this.options.name} adapter is not set`);
1328
1332
  this.client.triggerPlugins("onAdapterFetch", {
1329
1333
  adapter: this,
1330
1334
  request: e,
@@ -1364,60 +1368,60 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1364
1368
  } catch {
1365
1369
  return e;
1366
1370
  }
1367
- }, Kt = (e) => e ? Gt(e) : V(), qt = (e) => (t) => {
1371
+ }, Kt = (e) => e ? Gt(e) : U(), qt = (e) => (t) => {
1368
1372
  let { skipNull: n, skipEmptyString: r } = e;
1369
1373
  return !(r && t === void 0 || r && t === "" || n && t === null);
1370
- }, U = (e, { encode: t, strict: n }) => t && n ? encodeURIComponent(e).replace(/[!'()*]/g, (e) => `%${e.charCodeAt(0).toString(16).toUpperCase()}`) : t ? encodeURIComponent(e) : e, Jt = (e, t, n) => {
1374
+ }, G = (e, { encode: t, strict: n }) => t && n ? encodeURIComponent(e).replace(/[!'()*]/g, (e) => `%${e.charCodeAt(0).toString(16).toUpperCase()}`) : t ? encodeURIComponent(e) : e, Jt = (e, t, n) => {
1371
1375
  let r = !qt(n)(t);
1372
- return !e || r ? "" : `${U(e, n)}=${U(t instanceof Date ? n.dateParser?.(t) || t.toISOString() : typeof t == "object" && !Array.isArray(t) ? n.objectParser?.(t) || JSON.stringify(t) : String(t), n)}`;
1376
+ return !e || r ? "" : `${G(e, n)}=${G(t instanceof Date ? n.dateParser?.(t) || t.toISOString() : typeof t == "object" && !Array.isArray(t) ? n.objectParser?.(t) || JSON.stringify(t) : String(t), n)}`;
1373
1377
  }, Yt = (e, t, n) => {
1374
1378
  let { arrayFormat: r, arraySeparator: i } = n;
1375
1379
  return t.filter(qt(n)).reduce((t, a, o) => {
1376
1380
  switch (r) {
1377
1381
  case "index": {
1378
- let r = `${U(e, n)}[${U(String(o), n)}]=`;
1379
- t.push(`${r}${U(String(a), n)}`);
1382
+ let r = `${G(e, n)}[${G(String(o), n)}]=`;
1383
+ t.push(`${r}${G(String(a), n)}`);
1380
1384
  break;
1381
1385
  }
1382
1386
  case "bracket": {
1383
- let r = `${U(e, n)}[]=`;
1384
- t.push(`${r}${U(String(a), n)}`);
1387
+ let r = `${G(e, n)}[]=`;
1388
+ t.push(`${r}${G(String(a), n)}`);
1385
1389
  break;
1386
1390
  }
1387
1391
  case "comma": {
1388
- let r = !t.length && `${U(e, n)}=` || "";
1389
- return [[...t, `${r}${U(String(a), n)}`].join(",")];
1392
+ let r = !t.length && `${G(e, n)}=` || "";
1393
+ return [[...t, `${r}${G(String(a), n)}`].join(",")];
1390
1394
  }
1391
1395
  case "separator": {
1392
- let r = !t.length && `${U(e, n)}=` || "";
1393
- return [[...t, `${r}${U(String(a), n)}`].join(i || "|")];
1396
+ let r = !t.length && `${G(e, n)}=` || "";
1397
+ return [[...t, `${r}${G(String(a), n)}`].join(i || "|")];
1394
1398
  }
1395
1399
  case "bracket-separator": {
1396
- let r = !t.length && `${U(e, n)}[]=` || "";
1397
- return [[...t, `${r}${U(String(a), n)}`].join(i || "|")];
1400
+ let r = !t.length && `${G(e, n)}[]=` || "";
1401
+ return [[...t, `${r}${G(String(a), n)}`].join(i || "|")];
1398
1402
  }
1399
1403
  default: {
1400
- let r = `${U(e, n)}=`;
1401
- t.push(`${r}${U(String(a), n)}`);
1404
+ let r = `${G(e, n)}=`;
1405
+ t.push(`${r}${G(String(a), n)}`);
1402
1406
  }
1403
1407
  }
1404
1408
  return t;
1405
1409
  }, []).join("&");
1406
- }, Xt = (e, t = Tn) => {
1410
+ }, Xt = (e, t = En) => {
1407
1411
  if (!e || !Object.keys(e).length) return "";
1408
1412
  if (typeof e == "string") return e[0] === "?" ? e : `?${e}`;
1409
1413
  let n = Object.entries(e).map(([e, n]) => Array.isArray(n) ? Yt(e, n, t) : Jt(e, n, t)).filter(Boolean).join("&");
1410
1414
  return n ? `?${n}` : "";
1411
- }, Zt = Rt.SEC * 5, W = { headers: {} }, Qt = () => new Wt({
1415
+ }, Zt = Rt.SEC * 5, Qt = { headers: {} }, $t = () => new Wt({
1412
1416
  name: "http",
1413
1417
  defaultMethod: Ot.GET,
1414
- defaultExtra: W,
1418
+ defaultExtra: Qt,
1415
1419
  systemErrorStatus: 0,
1416
- systemErrorExtra: W
1420
+ systemErrorExtra: Qt
1417
1421
  }).setQueryParamsMapper(Xt).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 }) => {
1418
1422
  let { method: g, client: _, endpoint: v, queryParams: y } = e, b = y ? Xt(y) : "", x = `${_.url}${v}${b}`, S = l(), { timeout: C = Zt, streaming: w = !1, ...T } = t || {}, E = !1, D, O = c({
1419
1423
  status: 0,
1420
- extra: W
1424
+ extra: Qt
1421
1425
  });
1422
1426
  C > 0 && S && (D = setTimeout(() => {
1423
1427
  E = !0, O(), S.abort();
@@ -1483,18 +1487,18 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1483
1487
  if (D && clearTimeout(D), O(), S?.signal?.aborted) {
1484
1488
  E && o({
1485
1489
  status: 0,
1486
- extra: W
1490
+ extra: Qt
1487
1491
  });
1488
1492
  return;
1489
1493
  }
1490
1494
  i({
1491
1495
  error: e,
1492
1496
  status: 0,
1493
- extra: W
1497
+ extra: Qt
1494
1498
  });
1495
1499
  }
1496
- }), $t = () => Qt(), en = class {
1497
- emitter = new Ee();
1500
+ }), en = () => $t(), tn = class {
1501
+ emitter = new De();
1498
1502
  events;
1499
1503
  storage;
1500
1504
  lazyStorage;
@@ -1505,7 +1509,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1505
1509
  constructor(e) {
1506
1510
  this.options = e;
1507
1511
  let { storage: t = /* @__PURE__ */ new Map(), lazyStorage: n, version: r = "0.0.1" } = e ?? {};
1508
- this.emitter?.setMaxListeners(1e3), this.events = ln(this.emitter), this.storage = t, this.version = r, this.lazyStorage = n;
1512
+ this.emitter?.setMaxListeners(1e3), this.events = un(this.emitter), this.storage = t, this.version = r, this.lazyStorage = n;
1509
1513
  }
1510
1514
  initialize = (e) => (this.client = e, this.logger = e.loggerManager.initialize(e, "Cache"), e.appManager.events.onOnline(() => {
1511
1515
  [...this.storage.keys()].forEach(this.scheduleGarbageCollector);
@@ -1519,7 +1523,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1519
1523
  response: t
1520
1524
  }
1521
1525
  });
1522
- let { cacheKey: n, cache: r, staleTime: i, cacheTime: a, scope: o } = e, s = H(n, o), c = this.storage.get(s), l = typeof t == "function" ? t(c || null) : t, u = tn(c, l), d = {
1526
+ let { cacheKey: n, cache: r, staleTime: i, cacheTime: a, scope: o } = e, s = W(n, o), c = this.storage.get(s), l = typeof t == "function" ? t(c || null) : t, u = nn(c, l), d = {
1523
1527
  ...u,
1524
1528
  scope: o,
1525
1529
  staleTime: i,
@@ -1565,7 +1569,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1565
1569
  partialResponse: t
1566
1570
  }
1567
1571
  });
1568
- let { cacheKey: n, scope: r } = e, i = H(n, r), a = this.storage.get(i), o = typeof t == "function" ? t(a || null) : t;
1572
+ let { cacheKey: n, scope: r } = e, i = W(n, r), a = this.storage.get(i), o = typeof t == "function" ? t(a || null) : t;
1569
1573
  a && this.set(e, {
1570
1574
  ...a,
1571
1575
  ...o
@@ -1603,7 +1607,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1603
1607
  cacheKey: t
1604
1608
  }), this.events.emitInvalidation(t);
1605
1609
  };
1606
- e instanceof zt ? n(H(e.cacheKey, e.scope), e.cacheKey) : typeof e == "string" ? n(e) : t.length && t.forEach((t) => {
1610
+ e instanceof zt ? n(W(e.cacheKey, e.scope), e.cacheKey) : typeof e == "string" ? n(e) : t.length && t.forEach((t) => {
1607
1611
  e.test(t) && n(t);
1608
1612
  });
1609
1613
  };
@@ -1658,49 +1662,49 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1658
1662
  clear = async () => {
1659
1663
  this.garbageCollectors.forEach((e) => clearTimeout(e)), this.storage.clear();
1660
1664
  };
1661
- }, tn = (e, t) => {
1665
+ }, nn = (e, t) => {
1662
1666
  let { data: n, success: r } = t, i = !r && e ? e.data : null, a = n || i;
1663
1667
  return {
1664
1668
  ...t,
1665
1669
  data: a
1666
1670
  };
1667
- }, nn = () => "invalidate", rn = (e) => `${e}_invalidate`, an = () => "delete", on = (e) => `${e}_delete`, sn = (e) => `${e}_cache`, cn = () => "cache", ln = (e) => ({
1671
+ }, rn = () => "invalidate", an = (e) => `${e}_invalidate`, on = () => "delete", sn = (e) => `${e}_delete`, cn = (e) => `${e}_cache`, ln = () => "cache", un = (e) => ({
1668
1672
  emitCacheData: (t, n = !1) => {
1669
- e.emit(cn(), t, n), e.emit(sn(t.cacheKey), t, n);
1673
+ e.emit(ln(), t, n), e.emit(cn(t.cacheKey), t, n);
1670
1674
  },
1671
1675
  emitInvalidation: (t, n = !1) => {
1672
- e.emit(nn(), t, n), e.emit(rn(t), n);
1676
+ e.emit(rn(), t, n), e.emit(an(t), n);
1673
1677
  },
1674
1678
  emitDelete: (t, n = !1) => {
1675
- e.emit(an(), t, n), e.emit(on(t), n);
1679
+ e.emit(on(), t, n), e.emit(sn(t), n);
1676
1680
  },
1677
- onData: (t) => (e.on(cn(), t), () => e.removeListener(cn(), t)),
1678
- onDataByKey: (t, n) => (e.on(sn(t), n), () => e.removeListener(sn(t), n)),
1679
- onInvalidate: (t) => (e.on(nn(), t), () => e.removeListener(nn(), t)),
1680
- onInvalidateByKey: (t, n) => (e.on(rn(t), n), () => e.removeListener(rn(t), n)),
1681
- onDelete: (t) => (e.on(an(), t), () => e.removeListener(an(), t)),
1682
- onDeleteByKey: (t, n) => (e.on(on(t), n), () => e.removeListener(on(t), n))
1683
- }), G = /* @__PURE__ */ function(e) {
1681
+ onData: (t) => (e.on(ln(), t), () => e.removeListener(ln(), t)),
1682
+ onDataByKey: (t, n) => (e.on(cn(t), n), () => e.removeListener(cn(t), n)),
1683
+ onInvalidate: (t) => (e.on(rn(), t), () => e.removeListener(rn(), t)),
1684
+ onInvalidateByKey: (t, n) => (e.on(an(t), n), () => e.removeListener(an(t), n)),
1685
+ onDelete: (t) => (e.on(on(), t), () => e.removeListener(on(), t)),
1686
+ onDeleteByKey: (t, n) => (e.on(sn(t), n), () => e.removeListener(sn(t), n))
1687
+ }), K = /* @__PURE__ */ function(e) {
1684
1688
  return e.ONE_BY_ONE = "one-by-one", e.ALL_AT_ONCE = "all-at-once", e.PREVIOUS_CANCELED = "previous-canceled", e.DEDUPLICATED = "deduplicated", e;
1685
- }({}), un = (e) => ({
1689
+ }({}), dn = (e) => ({
1686
1690
  emitDrained: (t, n) => {
1687
- e.emit(fn(), t, n), e.emit(pn(t.queryKey), t, n);
1691
+ e.emit(pn(), t, n), e.emit(mn(t.queryKey), t, n);
1688
1692
  },
1689
1693
  emitQueueStatusChanged: (t, n) => {
1690
- e.emit(mn(), t, n), e.emit(hn(t.queryKey), t, n);
1694
+ e.emit(hn(), t, n), e.emit(gn(t.queryKey), t, n);
1691
1695
  },
1692
1696
  emitQueueChanged: (t, n) => {
1693
- e.emit(gn(), t, n), e.emit(_n(t.queryKey), t, n);
1697
+ e.emit(_n(), t, n), e.emit(vn(t.queryKey), t, n);
1694
1698
  },
1695
- onDrained: (t) => (e.on(fn(), t), () => e.removeListener(fn(), t)),
1696
- onDrainedByKey: (t, n) => (e.on(pn(t), n), () => e.removeListener(pn(t), n)),
1697
- onQueueStatusChange: (t) => (e.on(mn(), t), () => e.removeListener(mn(), t)),
1698
- onQueueStatusChangeByKey: (t, n) => (e.on(hn(t), n), () => e.removeListener(hn(t), n)),
1699
- onQueueChange: (t) => (e.on(gn(), t), () => e.removeListener(gn(), t)),
1700
- onQueueChangeByKey: (t, n) => (e.on(_n(t), n), () => e.removeListener(_n(t), n))
1701
- }), dn = class {
1702
- emitter = new Ee();
1703
- events = un(this.emitter);
1699
+ onDrained: (t) => (e.on(pn(), t), () => e.removeListener(pn(), t)),
1700
+ onDrainedByKey: (t, n) => (e.on(mn(t), n), () => e.removeListener(mn(t), n)),
1701
+ onQueueStatusChange: (t) => (e.on(hn(), t), () => e.removeListener(hn(), t)),
1702
+ onQueueStatusChangeByKey: (t, n) => (e.on(gn(t), n), () => e.removeListener(gn(t), n)),
1703
+ onQueueChange: (t) => (e.on(_n(), t), () => e.removeListener(_n(), t)),
1704
+ onQueueChangeByKey: (t, n) => (e.on(vn(t), n), () => e.removeListener(vn(t), n))
1705
+ }), fn = class {
1706
+ emitter = new De();
1707
+ events = dn(this.emitter);
1704
1708
  storage = /* @__PURE__ */ new Map();
1705
1709
  requestCount = /* @__PURE__ */ new Map();
1706
1710
  runningRequests = /* @__PURE__ */ new Map();
@@ -1833,14 +1837,14 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1833
1837
  hasRunningRequest = (e, t) => !!this.getRunningRequests(e).find((e) => e.requestId === t);
1834
1838
  cancelRunningRequests = (e) => {
1835
1839
  this.runningRequests.get(e)?.forEach((e) => {
1836
- let t = H(e.request.abortKey, e.request.scope);
1840
+ let t = W(e.request.abortKey, e.request.scope);
1837
1841
  this.client.requestManager.abortByRequestId(t, e.requestId);
1838
1842
  }), this.deleteRunningRequests(e);
1839
1843
  };
1840
1844
  cancelRunningRequest = (e, t) => {
1841
1845
  let n = this.getRunningRequests(e).filter((e) => {
1842
1846
  if (e.requestId === t) {
1843
- let t = H(e.request.abortKey, e.request.scope);
1847
+ let t = W(e.request.abortKey, e.request.scope);
1844
1848
  return this.client.requestManager.abortByRequestId(t, e.requestId), !1;
1845
1849
  }
1846
1850
  return !0;
@@ -1868,7 +1872,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1868
1872
  resolved: !1
1869
1873
  });
1870
1874
  add = (e) => {
1871
- let t = H(e.queryKey, e.scope), n = this.createStorageItem(e), { requestId: r } = n, [i] = this.getQueue(t).requests.slice(-1), a = bn(e, i);
1875
+ let t = W(e.queryKey, e.scope), n = this.createStorageItem(e), { requestId: r } = n, [i] = this.getQueue(t).requests.slice(-1), a = xn(e, i);
1872
1876
  switch (this.logger.debug({
1873
1877
  title: "Adding request to queue",
1874
1878
  type: "system",
@@ -1878,9 +1882,9 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1878
1882
  requestId: r
1879
1883
  }
1880
1884
  }), a) {
1881
- case G.ONE_BY_ONE: return this.addQueueItem(t, n), this.flushQueue(t), r;
1882
- case G.PREVIOUS_CANCELED: return this.cancelRunningRequests(t), this.clearQueue(t), this.addQueueItem(t, n), this.flushQueue(t), r;
1883
- case G.DEDUPLICATED: return this.client.requestManager.events.emitDeduplicated({
1885
+ case K.ONE_BY_ONE: return this.addQueueItem(t, n), this.flushQueue(t), r;
1886
+ case K.PREVIOUS_CANCELED: return this.cancelRunningRequests(t), this.clearQueue(t), this.addQueueItem(t, n), this.flushQueue(t), r;
1887
+ case K.DEDUPLICATED: return this.client.requestManager.events.emitDeduplicated({
1884
1888
  request: i.request,
1885
1889
  requestId: r,
1886
1890
  deduplicatedRequest: e
@@ -1922,7 +1926,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1922
1926
  requestId: n
1923
1927
  }
1924
1928
  });
1925
- let { retry: r, retryTime: i, queryKey: a, abortKey: o, offline: s, scope: c } = t, l = H(a, c), u = H(o, c), { adapter: d, requestManager: f, cache: p, appManager: m } = this.client, h = vn(e.retries, r), g = !m.isOnline && s, _ = this.hasRunningRequest(l, n), v = e.stopped;
1929
+ let { retry: r, retryTime: i, queryKey: a, abortKey: o, offline: s, scope: c } = t, l = W(a, c), u = W(o, c), { adapter: d, requestManager: f, cache: p, appManager: m } = this.client, h = yn(e.retries, r), g = !m.isOnline && s, _ = this.hasRunningRequest(l, n), v = e.stopped;
1926
1930
  if (g || _ || v) return this.logger.warning({
1927
1931
  title: "Unable to perform request",
1928
1932
  type: "system",
@@ -1942,7 +1946,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
1942
1946
  }), this.incrementQueueRequestCount(l), f.addAbortController(u, n);
1943
1947
  let b = await d.fetch(t, n);
1944
1948
  e.resolved = !0, f.removeAbortController(u, n);
1945
- let x = !m.isOnline, S = V("abort").message === b.error?.message, C = !this.hasRunningRequest(l, n) || S;
1949
+ let x = !m.isOnline, S = U("abort").message === b.error?.message, C = !this.hasRunningRequest(l, n) || S;
1946
1950
  this.deleteRunningRequest(l, n);
1947
1951
  let w = b.success || !h || !t.retryOnError || t.retryOnError(b), T = !b.success && h && w && !C && !x, E = {
1948
1952
  isCanceled: C,
@@ -2056,26 +2060,26 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
2056
2060
  }
2057
2061
  }), this.delete(l, n, u));
2058
2062
  };
2059
- }, fn = () => "drained-event", pn = (e) => `${e}-drained-event`, mn = () => "status-event", hn = (e) => `${e}-status-event`, gn = () => "change-event", _n = (e) => `${e}-change-event`, vn = (e, t) => !!(t && e < t), yn = (e, t) => e.deduplicateTime ? +/* @__PURE__ */ new Date() - t.timestamp <= e.deduplicateTime : !0, bn = (e, t) => {
2060
- let { queued: n, cancelable: r, deduplicate: i } = e, a = t ? yn(e, t) : !1;
2061
- return n ? G.ONE_BY_ONE : r ? G.PREVIOUS_CANCELED : a && i ? G.DEDUPLICATED : G.ALL_AT_ONCE;
2063
+ }, pn = () => "drained-event", mn = (e) => `${e}-drained-event`, hn = () => "status-event", gn = (e) => `${e}-status-event`, _n = () => "change-event", vn = (e) => `${e}-change-event`, yn = (e, t) => !!(t && e < t), bn = (e, t) => e.deduplicateTime ? +/* @__PURE__ */ new Date() - t.timestamp <= e.deduplicateTime : !0, xn = (e, t) => {
2064
+ let { queued: n, cancelable: r, deduplicate: i } = e, a = t ? bn(e, t) : !1;
2065
+ return n ? K.ONE_BY_ONE : r ? K.PREVIOUS_CANCELED : a && i ? K.DEDUPLICATED : K.ALL_AT_ONCE;
2062
2066
  };
2063
- function xn(e) {
2067
+ function Sn(e) {
2064
2068
  return e === "client" || e === "server" ? e : typeof window < "u" && typeof document < "u" ? "client" : "server";
2065
2069
  }
2066
- var Sn = async (e, t) => {
2070
+ var Cn = async (e, t) => {
2067
2071
  let n = t;
2068
2072
  if (!t.requestOptions.disableRequestInterceptors) {
2069
2073
  for (let r of e) if (n = await r(t), !n) throw Error("Request modifier must return request");
2070
2074
  }
2071
2075
  return n;
2072
- }, Cn = async (e, t, n) => {
2076
+ }, wn = async (e, t, n) => {
2073
2077
  let r = t;
2074
2078
  if (!n.requestOptions.disableResponseInterceptors) {
2075
2079
  for (let i of e) if (r = await i(t, n), !r) throw Error("Response modifier must return data");
2076
2080
  }
2077
2081
  return r;
2078
- }, wn = class {
2082
+ }, Tn = class {
2079
2083
  url;
2080
2084
  mode;
2081
2085
  debug;
@@ -2084,8 +2088,8 @@ var Sn = async (e, t) => {
2084
2088
  unstable_onResponseCallbacks = [];
2085
2089
  unstable_onAuthCallbacks = [];
2086
2090
  unstable_onRequestCallbacks = [];
2087
- loggerManager = new ut();
2088
- requestManager = new Ne();
2091
+ loggerManager = new dt();
2092
+ requestManager = new Pe();
2089
2093
  appManager;
2090
2094
  adapter;
2091
2095
  cache;
@@ -2096,12 +2100,12 @@ var Sn = async (e, t) => {
2096
2100
  unstable_abortKeyMapper = Nt;
2097
2101
  unstable_cacheKeyMapper = Pt;
2098
2102
  unstable_queryKeyMapper = Pt;
2099
- unstable_requestIdMapper = Ce;
2103
+ unstable_requestIdMapper = we;
2100
2104
  logger = this.loggerManager.initialize(this, "Client");
2101
2105
  constructor(e) {
2102
2106
  this.options = e;
2103
2107
  let { url: t, appManager: n, cache: r, fetchDispatcher: i, submitDispatcher: a, mode: o } = this.options;
2104
- this.url = t, this.mode = xn(o), this.adapter = $t(), this.appManager = n?.() || new De(), this.cache = r?.() || new en(), this.fetchDispatcher = i?.() || new dn(), this.submitDispatcher = a?.() || new dn(), this.adapter.initialize(this), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
2108
+ this.url = t, this.mode = Sn(o), this.adapter = en(), this.appManager = n?.() || new Oe(), this.cache = r?.() || new tn(), this.fetchDispatcher = i?.() || new fn(), this.submitDispatcher = a?.() || new fn(), this.adapter.initialize(this), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
2105
2109
  }
2106
2110
  setDebug = (e) => (this.debug = e, this);
2107
2111
  setLogLevel = (e) => (this.loggerManager.setSeverity(e), this);
@@ -2130,15 +2134,15 @@ var Sn = async (e, t) => {
2130
2134
  setCacheKeyMapper = (e) => (this.unstable_cacheKeyMapper = e, this);
2131
2135
  setQueryKeyMapper = (e) => (this.unstable_queryKeyMapper = e, this);
2132
2136
  setRequestIdMapper = (e) => (this.unstable_requestIdMapper = e, this);
2133
- unstable_modifyAuth = async (e) => Sn(this.unstable_onAuthCallbacks, e);
2134
- unstable_modifyRequest = async (e) => Sn(this.unstable_onRequestCallbacks, e);
2135
- unstable_modifyErrorResponse = async (e, t) => Cn(this.unstable_onErrorCallbacks, e, t);
2136
- unstable_modifySuccessResponse = async (e, t) => Cn(this.unstable_onSuccessCallbacks, e, t);
2137
- unstable_modifyResponse = async (e, t) => Cn(this.unstable_onResponseCallbacks, e, t);
2137
+ unstable_modifyAuth = async (e) => Cn(this.unstable_onAuthCallbacks, e);
2138
+ unstable_modifyRequest = async (e) => Cn(this.unstable_onRequestCallbacks, e);
2139
+ unstable_modifyErrorResponse = async (e, t) => wn(this.unstable_onErrorCallbacks, e, t);
2140
+ unstable_modifySuccessResponse = async (e, t) => wn(this.unstable_onSuccessCallbacks, e, t);
2141
+ unstable_modifyResponse = async (e, t) => wn(this.unstable_onResponseCallbacks, e, t);
2138
2142
  fromJSON = (e) => zt.fromJSON(this, e);
2139
2143
  clear = () => {
2140
2144
  let { appManager: e, cache: t, fetchDispatcher: n, submitDispatcher: r } = this.options;
2141
- 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 en(), this.appManager = e?.() || new De(), this.fetchDispatcher = n?.() || new dn(), this.submitDispatcher = r?.() || new dn(), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
2145
+ 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 tn(), this.appManager = e?.() || new Oe(), this.fetchDispatcher = n?.() || new fn(), this.submitDispatcher = r?.() || new fn(), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
2142
2146
  };
2143
2147
  hydrate = (e, t) => {
2144
2148
  e?.forEach((e) => {
@@ -2155,7 +2159,7 @@ var Sn = async (e, t) => {
2155
2159
  ...a,
2156
2160
  ...t
2157
2161
  };
2158
- if (!s.override && this.cache.get(H(n, r))) return;
2162
+ if (!s.override && this.cache.get(W(n, r))) return;
2159
2163
  let c = Gt(i);
2160
2164
  this.cache.set({
2161
2165
  ...s,
@@ -2171,7 +2175,7 @@ var Sn = async (e, t) => {
2171
2175
  }, r = new zt(this, n);
2172
2176
  return this.plugins.forEach((e) => e.trigger("onRequestCreate", { request: r })), r;
2173
2177
  };
2174
- }, Tn = {
2178
+ }, En = {
2175
2179
  strict: !0,
2176
2180
  encode: !0,
2177
2181
  arrayFormat: "bracket",
@@ -2180,101 +2184,101 @@ var Sn = async (e, t) => {
2180
2184
  skipNull: !0,
2181
2185
  skipEmptyString: !0
2182
2186
  };
2183
- function En(e) {
2184
- return new wn(e);
2187
+ function Dn(e) {
2188
+ return new Tn(e);
2185
2189
  }
2186
2190
  //#endregion
2187
2191
  //#region src/core/client.ts
2188
- var K = En({ url: M() });
2192
+ var q = Dn({ url: N() });
2189
2193
  //#endregion
2190
2194
  //#region src/core/auth-api.ts
2191
- async function Dn(e) {
2192
- let { data: t, success: n } = await K.createRequest()({
2195
+ async function On(e) {
2196
+ let { data: t, success: n } = await q.createRequest()({
2193
2197
  endpoint: "/auth/cli/whoami",
2194
2198
  method: "GET"
2195
2199
  }).setHeaders({ Authorization: `Bearer ${e}` }).send();
2196
2200
  return !n || !t ? null : t;
2197
2201
  }
2198
- async function On(e) {
2199
- await K.createRequest()({
2202
+ async function kn(e) {
2203
+ await q.createRequest()({
2200
2204
  endpoint: "/auth/cli/token",
2201
2205
  method: "DELETE"
2202
2206
  }).setHeaders({ Authorization: `Bearer ${e}` }).send();
2203
2207
  }
2204
2208
  //#endregion
2205
2209
  //#region src/core/auth-store.ts
2206
- var kn = 1, An = "hype-stack", jn = "auth.json";
2207
- function Mn() {
2210
+ var An = 1, jn = "hype-stack", Mn = "auth.json";
2211
+ function Nn() {
2208
2212
  let e = process.env.HYPE_STACK_CONFIG_DIR;
2209
- if (e) return l.join(e, An);
2210
- let t = c.homedir();
2213
+ if (e) return u.join(e, jn);
2214
+ let t = l.homedir();
2211
2215
  if (process.platform === "win32") {
2212
- let e = process.env.APPDATA ?? l.join(t, "AppData", "Roaming");
2213
- return l.join(e, An);
2216
+ let e = process.env.APPDATA ?? u.join(t, "AppData", "Roaming");
2217
+ return u.join(e, jn);
2214
2218
  }
2215
- if (process.platform === "darwin") return l.join(t, "Library", "Application Support", An);
2216
- let n = process.env.XDG_CONFIG_HOME ?? l.join(t, ".config");
2217
- return l.join(n, An);
2219
+ if (process.platform === "darwin") return u.join(t, "Library", "Application Support", jn);
2220
+ let n = process.env.XDG_CONFIG_HOME ?? u.join(t, ".config");
2221
+ return u.join(n, jn);
2218
2222
  }
2219
- function Nn() {
2220
- return l.join(Mn(), jn);
2223
+ function Pn() {
2224
+ return u.join(Nn(), Mn);
2221
2225
  }
2222
- async function Pn() {
2223
- let e = await o.readFile(Nn(), "utf-8").catch(() => null);
2226
+ async function Fn() {
2227
+ let e = await s.readFile(Pn(), "utf-8").catch(() => null);
2224
2228
  if (!e) return {
2225
- version: kn,
2229
+ version: An,
2226
2230
  tokens: {}
2227
2231
  };
2228
2232
  let t = JSON.parse(e);
2229
2233
  return {
2230
- version: t.version ?? kn,
2234
+ version: t.version ?? An,
2231
2235
  tokens: t.tokens ?? {}
2232
2236
  };
2233
2237
  }
2234
- async function Fn(e) {
2235
- let t = Mn();
2236
- await o.mkdir(t, { recursive: !0 }), await o.writeFile(Nn(), `${JSON.stringify(e, null, 2)}\n`, { mode: 384 });
2237
- }
2238
2238
  async function In(e) {
2239
- return (await Pn()).tokens[e] ?? null;
2239
+ let t = Nn();
2240
+ await s.mkdir(t, { recursive: !0 }), await s.writeFile(Pn(), `${JSON.stringify(e, null, 2)}\n`, { mode: 384 });
2240
2241
  }
2241
- async function Ln(e, t) {
2242
- let n = await Pn();
2243
- n.tokens[e] = t, await Fn(n);
2242
+ async function Ln(e) {
2243
+ return (await Fn()).tokens[e] ?? null;
2244
2244
  }
2245
- async function Rn(e) {
2246
- let t = await Pn();
2247
- e in t.tokens && (delete t.tokens[e], await Fn(t));
2245
+ async function Rn(e, t) {
2246
+ let n = await Fn();
2247
+ n.tokens[e] = t, await In(n);
2248
+ }
2249
+ async function zn(e) {
2250
+ let t = await Fn();
2251
+ e in t.tokens && (delete t.tokens[e], await In(t));
2248
2252
  }
2249
2253
  //#endregion
2250
2254
  //#region src/core/device.ts
2251
- function zn() {
2252
- let e = c.networkInterfaces();
2255
+ function Bn() {
2256
+ let e = l.networkInterfaces();
2253
2257
  for (let t of Object.values(e)) if (t) {
2254
2258
  for (let e of t) if (!e.internal && e.mac !== "00:00:00:00:00:00") return e.mac;
2255
2259
  }
2256
2260
  return "unknown";
2257
2261
  }
2258
- function Bn() {
2259
- let e = `${zn()}:${c.hostname()}:${c.platform()}:${c.arch()}`;
2260
- return (0, pe.createHash)("sha256").update(e).digest("hex").slice(0, 16);
2261
- }
2262
2262
  function Vn() {
2263
- return `hype-stack/${S} ${c.platform()} ${c.arch()} node/${process.version.slice(1)}`;
2263
+ let e = `${Bn()}:${l.hostname()}:${l.platform()}:${l.arch()}`;
2264
+ return (0, me.createHash)("sha256").update(e).digest("hex").slice(0, 16);
2265
+ }
2266
+ function Hn() {
2267
+ return `hype-stack/${C} ${l.platform()} ${l.arch()} node/${process.version.slice(1)}`;
2264
2268
  }
2265
2269
  //#endregion
2266
2270
  //#region src/core/open-browser.ts
2267
- function Hn(e) {
2268
- u(process.platform === "darwin" ? `open "${e}"` : process.platform === "win32" ? `start "" "${e}"` : `xdg-open "${e}"`);
2271
+ function Un(e) {
2272
+ d(process.platform === "darwin" ? `open "${e}"` : process.platform === "win32" ? `start "" "${e}"` : `xdg-open "${e}"`);
2269
2273
  }
2270
2274
  //#endregion
2271
2275
  //#region src/core/login.ts
2272
- var Un = 300 * 1e3, Wn = (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>`;
2273
- async function Gn(e = {}) {
2274
- let t = (0, pe.randomBytes)(16).toString("hex"), n = M(), r = pe.default.createServer(), i = await new Promise((n, i) => {
2276
+ var Wn = 300 * 1e3, Gn = (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>`;
2277
+ async function Kn(e = {}) {
2278
+ let t = (0, me.randomBytes)(16).toString("hex"), n = N(), r = me.default.createServer(), i = await new Promise((n, i) => {
2275
2279
  let a = setTimeout(() => {
2276
2280
  o(), i(/* @__PURE__ */ Error("Login timed out. Run `hype-stack login` again."));
2277
- }, Un);
2281
+ }, Wn);
2278
2282
  function o() {
2279
2283
  clearTimeout(a), r.close(), r.closeAllConnections?.();
2280
2284
  }
@@ -2288,7 +2292,7 @@ async function Gn(e = {}) {
2288
2292
  r.writeHead(200, {
2289
2293
  "Content-Type": "text/html",
2290
2294
  Connection: "close"
2291
- }), r.end(Wn(e));
2295
+ }), r.end(Gn(e));
2292
2296
  };
2293
2297
  if (a.searchParams.get("state") !== t) {
2294
2298
  s("Login failed."), o(), i(/* @__PURE__ */ Error("Login failed: state mismatch. Run `hype-stack login` again."));
@@ -2303,55 +2307,55 @@ async function Gn(e = {}) {
2303
2307
  }), r.on("error", (e) => {
2304
2308
  o(), i(e);
2305
2309
  }), r.listen(0, "127.0.0.1", () => {
2306
- let { port: n } = r.address(), i = encodeURIComponent(Vn()), a = `${N()}/cli/authorize?port=${n}&state=${t}&label=${i}`;
2307
- e.onUrl?.(a), Hn(a);
2310
+ let { port: n } = r.address(), i = encodeURIComponent(Hn()), a = `${P()}/cli/authorize?port=${n}&state=${t}&label=${i}`;
2311
+ e.onUrl?.(a), Un(a);
2308
2312
  });
2309
- }), a = await Dn(i).catch(() => null), o = {
2313
+ }), a = await On(i).catch(() => null), o = {
2310
2314
  token: i,
2311
2315
  email: a?.email,
2312
2316
  organizationId: a?.organizationId
2313
2317
  };
2314
- return await Ln(n, o), o;
2318
+ return await Rn(n, o), o;
2315
2319
  }
2316
2320
  //#endregion
2317
2321
  //#region src/core/access-prompts.ts
2318
- async function Kn() {
2319
- let e = await a.confirm({ message: "Log in to install packs your organization owns? (opens your browser)" });
2320
- if (a.isCancel(e) || !e) return null;
2321
- a.log.step("Opening your browser to sign in...");
2322
+ async function qn() {
2323
+ let e = await o.confirm({ message: "Log in to install packs your organization owns? (opens your browser)" });
2324
+ if (o.isCancel(e) || !e) return null;
2325
+ o.log.step("Opening your browser to sign in...");
2322
2326
  try {
2323
- let e = await Gn({ onUrl: (e) => {
2324
- a.log.info(`If your browser didn't open, visit:\n ${L.path(e)}`);
2327
+ let e = await Kn({ onUrl: (e) => {
2328
+ o.log.info(`If your browser didn't open, visit:\n ${R.path(e)}`);
2325
2329
  } });
2326
- return a.log.success(e.email ? `Logged in as ${e.email}` : "Logged in"), e.token;
2330
+ return o.log.success(e.email ? `Logged in as ${e.email}` : "Logged in"), e.token;
2327
2331
  } catch (e) {
2328
- return a.log.error(e instanceof Error ? e.message : String(e)), null;
2332
+ return o.log.error(e instanceof Error ? e.message : String(e)), null;
2329
2333
  }
2330
2334
  }
2331
- async function qn(e) {
2335
+ async function Jn(e) {
2332
2336
  if (e.length === 0) return;
2333
- a.note([
2337
+ o.note([
2334
2338
  "These packs need a purchase before they can be installed:",
2335
2339
  "",
2336
- ...e.map((e) => ` ${L.brand(e.displayName)} ${L.highlight(`$${e.price}`)}`)
2340
+ ...e.map((e) => ` ${R.brand(e.displayName)} ${R.highlight(`$${e.price}`)}`)
2337
2341
  ].join("\n"), "Locked Packs");
2338
- let t = await a.confirm({ message: `Open the purchase ${e.length === 1 ? "page" : "pages"} in your browser?` });
2339
- if (a.isCancel(t) || !t) {
2340
- a.log.info(L.muted("Run 'hype-stack login' after purchasing, then 'hype-stack compose' again."));
2342
+ let t = await o.confirm({ message: `Open the purchase ${e.length === 1 ? "page" : "pages"} in your browser?` });
2343
+ if (o.isCancel(t) || !t) {
2344
+ o.log.info(R.muted("Run 'hype-stack login' after purchasing, then 'hype-stack compose' again."));
2341
2345
  return;
2342
2346
  }
2343
- for (let t of e) Hn(fe(t.name));
2344
- a.log.info([
2345
- L.muted("After purchasing, run:"),
2346
- ` ${L.highlight("hype-stack login")} ${L.muted("Save your access")}`,
2347
- ` ${L.highlight("hype-stack compose")} ${L.muted("Install the packs")}`
2347
+ for (let t of e) Un(pe(t.name));
2348
+ o.log.info([
2349
+ R.muted("After purchasing, run:"),
2350
+ ` ${R.highlight("hype-stack login")} ${R.muted("Save your access")}`,
2351
+ ` ${R.highlight("hype-stack compose")} ${R.muted("Install the packs")}`
2348
2352
  ].join("\n"));
2349
2353
  }
2350
2354
  //#endregion
2351
2355
  //#region src/utils/exec.ts
2352
- function q(e, t, n) {
2356
+ function J(e, t, n) {
2353
2357
  return new Promise((r, i) => {
2354
- let a = d(e, t, {
2358
+ let a = f(e, t, {
2355
2359
  cwd: n.cwd,
2356
2360
  stdio: [
2357
2361
  "ignore",
@@ -2382,70 +2386,73 @@ function q(e, t, n) {
2382
2386
  }
2383
2387
  //#endregion
2384
2388
  //#region src/utils/fs.ts
2385
- async function Jn(e) {
2386
- return (await o.stat(e).catch(() => null))?.isDirectory() ?? !1;
2387
- }
2388
- async function J(e) {
2389
- return (await o.stat(e).catch(() => null))?.isFile() ?? !1;
2390
- }
2391
2389
  async function Yn(e) {
2392
- return (await o.readdir(e).catch(() => [])).length === 0;
2390
+ return (await s.stat(e).catch(() => null))?.isDirectory() ?? !1;
2391
+ }
2392
+ async function Y(e) {
2393
+ return (await s.stat(e).catch(() => null))?.isFile() ?? !1;
2393
2394
  }
2394
2395
  async function Xn(e) {
2395
- let t = await o.readFile(e, "utf-8").catch(() => null);
2396
+ return (await s.readdir(e).catch(() => [])).length === 0;
2397
+ }
2398
+ async function Zn(e) {
2399
+ let t = await s.readFile(e, "utf-8").catch(() => null);
2396
2400
  return t ? JSON.parse(t) : null;
2397
2401
  }
2398
- async function Zn(e, t) {
2399
- await o.writeFile(e, JSON.stringify(t, null, 2) + "\n", "utf-8");
2402
+ async function Qn(e, t) {
2403
+ await s.writeFile(e, JSON.stringify(t, null, 2) + "\n", "utf-8");
2400
2404
  }
2401
- async function Qn(e) {
2405
+ async function $n(e) {
2402
2406
  let t = {};
2403
- if (!await Jn(e)) return t;
2404
- let n = await o.readdir(e, { withFileTypes: !0 });
2405
- for (let r of n) r.isDirectory() && await J(l.join(e, r.name, "package.json")) && (t[r.name] = l.relative(l.dirname(e), l.join(e, r.name)));
2407
+ if (!await Yn(e)) return t;
2408
+ let n = await s.readdir(e, { withFileTypes: !0 });
2409
+ for (let r of n) r.isDirectory() && await Y(u.join(e, r.name, "package.json")) && (t[r.name] = u.relative(u.dirname(e), u.join(e, r.name)));
2406
2410
  return t;
2407
2411
  }
2408
- async function $n(e) {
2409
- await o.rm(e, {
2412
+ async function er(e) {
2413
+ await s.rm(e, {
2410
2414
  recursive: !0,
2411
2415
  force: !0
2412
2416
  });
2413
2417
  }
2418
+ function tr(e, t) {
2419
+ return u.basename(e) === t ? e : u.join(e, t);
2420
+ }
2414
2421
  //#endregion
2415
2422
  //#region src/core/codegen.ts
2416
- function er(e) {
2417
- a.log.info(L.muted("Run database setup yourself when ready:")), a.note([
2418
- `${L.command(`cd ${e}`)}`,
2419
- `${L.command("pnpm exec prisma generate")} ${L.muted("(regenerate the Prisma client)")}`,
2420
- `${L.command("pnpm exec prisma migrate dev")} ${L.muted("(create + apply tables for new packs)")}`
2423
+ function nr(e) {
2424
+ o.log.info(R.muted("Run database setup yourself when ready:")), o.note([
2425
+ `${R.command(`cd ${e}`)}`,
2426
+ `${R.command("pnpm exec prisma generate")} ${R.muted("(regenerate the Prisma client)")}`,
2427
+ `${R.command("pnpm exec prisma migrate dev")} ${R.muted("(create + apply tables for new packs)")}`
2421
2428
  ].join("\n"), "Database Setup");
2422
2429
  }
2423
- async function tr(e) {
2424
- let { projectRoot: t, paths: n, skipPrompts: r, runCommand: i = q } = e, o = n.backend.root, s = l.join(t, o);
2425
- if (!await J(l.join(s, "package.json"))) return;
2430
+ async function rr(e) {
2431
+ let { projectRoot: t, paths: n, skipPrompts: r, runCommand: i = J } = e, a = n.backend.root, s = u.join(t, a);
2432
+ if (!await Y(u.join(s, "package.json"))) return;
2426
2433
  if (r) {
2427
- er(o);
2434
+ nr(a);
2428
2435
  return;
2429
2436
  }
2430
- let c = await a.confirm({
2431
- message: `Run database setup now? (${L.command("prisma generate")} + ${L.command("prisma migrate")})`,
2437
+ let c = await o.confirm({
2438
+ message: `Run database setup now? (${R.command("prisma generate")} + ${R.command("prisma migrate")})`,
2432
2439
  initialValue: !0
2433
2440
  });
2434
- if (a.isCancel(c) || !c) {
2435
- er(o);
2441
+ if (o.isCancel(c) || !c) {
2442
+ nr(a);
2436
2443
  return;
2437
2444
  }
2438
- let u = a.spinner();
2439
- if (u.start("Generating Prisma client..."), (await i("pnpm", [
2445
+ let l = o.spinner();
2446
+ if (l.start("Generating Prisma client..."), (await i("pnpm", [
2440
2447
  "exec",
2441
2448
  "prisma",
2442
2449
  "generate"
2443
2450
  ], { cwd: s })).exitCode !== 0) {
2444
- u.stop(L.warning("Prisma client generation failed")), er(o);
2451
+ l.stop(R.warning("Prisma client generation failed")), nr(a);
2445
2452
  return;
2446
2453
  }
2447
- u.stop(L.success("Prisma client generated"));
2448
- let d = a.spinner();
2454
+ l.stop(R.success("Prisma client generated"));
2455
+ let d = o.spinner();
2449
2456
  if (d.start("Applying database schema..."), (await i("pnpm", [
2450
2457
  "exec",
2451
2458
  "prisma",
@@ -2454,30 +2461,30 @@ async function tr(e) {
2454
2461
  "--name",
2455
2462
  "add-packs"
2456
2463
  ], { cwd: s })).exitCode !== 0) {
2457
- d.stop(L.warning("Database migration failed (is your database running?)")), er(o);
2464
+ d.stop(R.warning("Database migration failed (is your database running?)")), nr(a);
2458
2465
  return;
2459
2466
  }
2460
- d.stop(L.success("Database schema applied"));
2467
+ d.stop(R.success("Database schema applied"));
2461
2468
  }
2462
2469
  //#endregion
2463
2470
  //#region src/core/stack-config.ts
2464
- async function nr(e) {
2465
- return Xn(l.join(e, w));
2471
+ async function ir(e) {
2472
+ return Zn(u.join(e, T));
2466
2473
  }
2467
- async function rr(e) {
2468
- return J(l.join(e, w));
2474
+ async function ar(e) {
2475
+ return Y(u.join(e, T));
2469
2476
  }
2470
- async function ir(e, t) {
2471
- await Zn(l.join(e, w), t);
2477
+ async function or(e, t) {
2478
+ await Qn(u.join(e, T), t);
2472
2479
  }
2473
- async function ar(e) {
2474
- let t = l.join(e, "apps"), n = l.join(e, "packages"), [r, i] = await Promise.all([Qn(t), Qn(n)]);
2480
+ async function sr(e) {
2481
+ let t = u.join(e, "apps"), n = u.join(e, "packages"), [r, i] = await Promise.all([$n(t), $n(n)]);
2475
2482
  return {
2476
2483
  apps: r,
2477
2484
  packages: i
2478
2485
  };
2479
2486
  }
2480
- function or(e) {
2487
+ function cr(e) {
2481
2488
  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";
2482
2489
  return {
2483
2490
  backend: {
@@ -2511,23 +2518,23 @@ function or(e) {
2511
2518
  }
2512
2519
  };
2513
2520
  }
2514
- function sr(e, t) {
2521
+ function lr(e, t) {
2515
2522
  return {
2516
2523
  $schema: re(),
2517
2524
  version: 1,
2518
2525
  name: e,
2519
2526
  apps: t.apps,
2520
2527
  packages: t.packages,
2521
- paths: or(t),
2528
+ paths: cr(t),
2522
2529
  installedPacks: [],
2523
2530
  licenseKey: null
2524
2531
  };
2525
2532
  }
2526
- async function cr(e) {
2527
- let t = l.join(e, "package.json"), n = l.join(e, "apps"), [r, i] = await Promise.all([J(t), Jn(n)]);
2533
+ async function ur(e) {
2534
+ let t = u.join(e, "package.json"), n = u.join(e, "apps"), [r, i] = await Promise.all([Y(t), Yn(n)]);
2528
2535
  return r && i;
2529
2536
  }
2530
- function Y(e, t) {
2537
+ function X(e, t) {
2531
2538
  return e.replace(/\{\{(\w+)\.(\w+)\}\}/g, (n, r, i) => {
2532
2539
  let a = t[r];
2533
2540
  if (!a) throw Error(`Unknown app "${r}" in path template "${e}"`);
@@ -2538,8 +2545,8 @@ function Y(e, t) {
2538
2545
  }
2539
2546
  //#endregion
2540
2547
  //#region src/core/registry.ts
2541
- async function lr(e) {
2542
- let { data: t, error: n, status: r } = await K.createRequest()({
2548
+ async function dr(e) {
2549
+ let { data: t, error: n, status: r } = await q.createRequest()({
2543
2550
  endpoint: `/packs/${encodeURIComponent(e)}/manifest`,
2544
2551
  method: "GET"
2545
2552
  }).send();
@@ -2547,51 +2554,51 @@ async function lr(e) {
2547
2554
  if (n || !t) throw Error(`Failed to load manifest for "${e}": ${String(n)}`);
2548
2555
  return t;
2549
2556
  }
2550
- async function ur(e, t = {}) {
2551
- let n = K.createRequest()({
2557
+ async function fr(e, t = {}) {
2558
+ let n = q.createRequest()({
2552
2559
  endpoint: `/packs/${encodeURIComponent(e)}/download`,
2553
2560
  method: "POST"
2554
2561
  }), r = {
2555
- "X-Device-Id": Bn(),
2556
- "X-Client-Info": Vn()
2562
+ "X-Device-Id": Vn(),
2563
+ "X-Client-Info": Hn()
2557
2564
  };
2558
2565
  t.token && (r.Authorization = `Bearer ${t.token}`);
2559
- let { data: i, error: a, success: s } = await n.setPayload({ key: t.licenseKey ?? void 0 }).setHeaders(r).send();
2560
- if (!s || !i) throw Error(`Failed to download pack "${e}": ${String(a)}`);
2566
+ let { data: i, error: a, success: o } = await n.setPayload({ key: t.licenseKey ?? void 0 }).setHeaders(r).send();
2567
+ if (!o || !i) throw Error(`Failed to download pack "${e}": ${String(a)}`);
2561
2568
  if (!i.ok) return {
2562
2569
  status: "denied",
2563
2570
  reason: i.reason,
2564
2571
  packs: i.packs ?? [],
2565
2572
  expiresAt: i.expiresAt ?? null
2566
2573
  };
2567
- let u = await o.mkdtemp(l.join(c.tmpdir(), `hype-stack-pack-${e}-`));
2574
+ let c = await s.mkdtemp(u.join(l.tmpdir(), `hype-stack-pack-${e}-`));
2568
2575
  return await Promise.all(i.files.map(async (e) => {
2569
- let t = l.join(u, ...e.path.split("/"));
2570
- await o.mkdir(l.dirname(t), { recursive: !0 }), await o.writeFile(t, Buffer.from(e.content, "base64"));
2576
+ let t = u.join(c, ...e.path.split("/"));
2577
+ await s.mkdir(u.dirname(t), { recursive: !0 }), await s.writeFile(t, Buffer.from(e.content, "base64"));
2571
2578
  })), {
2572
2579
  status: "ok",
2573
- packDir: u
2580
+ packDir: c
2574
2581
  };
2575
2582
  }
2576
- function dr(e, t, n) {
2577
- let r = Y(e, t);
2578
- return l.resolve(n, r);
2583
+ function pr(e, t, n) {
2584
+ let r = X(e, t);
2585
+ return u.resolve(n, r);
2579
2586
  }
2580
- function fr(e, t) {
2581
- return l.join(t, e);
2587
+ function mr(e, t) {
2588
+ return u.join(t, e);
2582
2589
  }
2583
- var pr = K.createRequest()({
2590
+ var hr = q.createRequest()({
2584
2591
  endpoint: "/packs/list",
2585
2592
  method: "GET"
2586
2593
  });
2587
- async function mr() {
2588
- let { data: e, error: t } = await pr.send();
2594
+ async function gr() {
2595
+ let { data: e, error: t } = await hr.send();
2589
2596
  if (t || !e) throw Error(`Failed to fetch pack list: ${String(t)}`);
2590
2597
  return e.packs;
2591
2598
  }
2592
- async function hr(e, t = {}) {
2599
+ async function _r(e, t = {}) {
2593
2600
  if (e.length === 0) return {};
2594
- let n = K.createRequest()({
2601
+ let n = q.createRequest()({
2595
2602
  endpoint: "/packs/authorize",
2596
2603
  method: "POST"
2597
2604
  }), r = {};
@@ -2605,35 +2612,35 @@ async function hr(e, t = {}) {
2605
2612
  }
2606
2613
  //#endregion
2607
2614
  //#region src/core/codemods.ts
2608
- var gr = "@hype-stack/";
2609
- function _r(e, t) {
2610
- return Y(e === "admin" ? "{{admin.root}}" : "{{frontend.root}}", t);
2615
+ var vr = "@hype-stack/";
2616
+ function yr(e, t) {
2617
+ return X(e === "admin" ? "{{admin.root}}" : "{{frontend.root}}", t);
2611
2618
  }
2612
- async function vr(e, t, n) {
2613
- let r = Y("{{backend.root}}", t), i = l.resolve(n, r, "src/config/env/env.config.ts"), a = l.resolve(n, r, ".env.example"), s = l.resolve(n, r, ".env.test");
2614
- if (await J(i)) {
2615
- let t = await o.readFile(i, "utf-8");
2616
- for (let n of e) t.includes(`from "${n.from}"`) || (t = yr(t, n), t = br(t, n));
2617
- await o.writeFile(i, t, "utf-8");
2619
+ async function br(e, t, n) {
2620
+ let r = X("{{backend.root}}", t), i = u.resolve(n, r, "src/config/env/env.config.ts"), a = u.resolve(n, r, ".env.example"), o = u.resolve(n, r, ".env.test");
2621
+ if (await Y(i)) {
2622
+ let t = await s.readFile(i, "utf-8");
2623
+ for (let n of e) t.includes(`from "${n.from}"`) || (t = xr(t, n), t = Sr(t, n));
2624
+ await s.writeFile(i, t, "utf-8");
2618
2625
  }
2619
- if (await J(a)) {
2620
- let t = await o.readFile(a, "utf-8");
2621
- for (let n of e) t = xr(t, n);
2622
- await o.writeFile(a, t, "utf-8");
2626
+ if (await Y(a)) {
2627
+ let t = await s.readFile(a, "utf-8");
2628
+ for (let n of e) t = Cr(t, n);
2629
+ await s.writeFile(a, t, "utf-8");
2623
2630
  }
2624
- if (await J(s)) {
2625
- let t = await o.readFile(s, "utf-8");
2626
- for (let n of e) t = Sr(t, n);
2627
- await o.writeFile(s, t, "utf-8");
2631
+ if (await Y(o)) {
2632
+ let t = await s.readFile(o, "utf-8");
2633
+ for (let n of e) t = wr(t, n);
2634
+ await s.writeFile(o, t, "utf-8");
2628
2635
  }
2629
2636
  }
2630
- function yr(e, t) {
2637
+ function xr(e, t) {
2631
2638
  let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("import ");
2632
2639
  if (r === -1) return n + "\n" + e;
2633
2640
  let i = e.indexOf("\n", e.indexOf(";", r));
2634
2641
  return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
2635
2642
  }
2636
- function br(e, t) {
2643
+ function Sr(e, t) {
2637
2644
  let n = `.extend(${t.import}.shape)`;
2638
2645
  if (e.includes(n)) return e;
2639
2646
  let r = e.indexOf("export const envSchema = z.object({");
@@ -2648,27 +2655,27 @@ function br(e, t) {
2648
2655
  let o = a + 2;
2649
2656
  return e.slice(0, o) + n + e.slice(o);
2650
2657
  }
2651
- function xr(e, t) {
2658
+ function Cr(e, t) {
2652
2659
  for (let n of Object.keys(t.envExample.vars)) if (e.includes(`${n}=`)) return e;
2653
2660
  let n = [];
2654
2661
  n.push(""), n.push(`# ${t.envExample.section}`);
2655
2662
  for (let [e, r] of Object.entries(t.envExample.vars)) n.push(`${e}=${r}`);
2656
2663
  return e.trimEnd() + "\n" + n.join("\n") + "\n";
2657
2664
  }
2658
- function Sr(e, t) {
2665
+ function wr(e, t) {
2659
2666
  for (let n of Object.keys(t.envTest)) if (e.includes(`${n}=`)) return e;
2660
2667
  let n = [""];
2661
2668
  for (let [e, r] of Object.entries(t.envTest)) n.push(`${e}=${r}`);
2662
2669
  return e.trimEnd() + "\n" + n.join("\n") + "\n";
2663
2670
  }
2664
- async function Cr(e, t, n) {
2665
- let r = l.resolve(n, Y("{{backend.routes}}", t), "index.ts");
2666
- if (!await J(r)) return;
2667
- let i = await o.readFile(r, "utf-8");
2668
- for (let t of e) i.includes(`from "${t.from}"`) || (i = wr(i, t), i = Tr(i, t));
2669
- await o.writeFile(r, i, "utf-8");
2671
+ async function Tr(e, t, n) {
2672
+ let r = u.resolve(n, X("{{backend.routes}}", t), "index.ts");
2673
+ if (!await Y(r)) return;
2674
+ let i = await s.readFile(r, "utf-8");
2675
+ for (let t of e) i.includes(`from "${t.from}"`) || (i = Er(i, t), i = Dr(i, t));
2676
+ await s.writeFile(r, i, "utf-8");
2670
2677
  }
2671
- function wr(e, t) {
2678
+ function Er(e, t) {
2672
2679
  let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("from \"./");
2673
2680
  if (r !== -1) {
2674
2681
  let t = e.indexOf("\n", r);
@@ -2677,7 +2684,7 @@ function wr(e, t) {
2677
2684
  let i = e.indexOf("export const registerRoutes");
2678
2685
  return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
2679
2686
  }
2680
- function Tr(e, t) {
2687
+ function Dr(e, t) {
2681
2688
  let n = `.route("${t.prefix}", ${t.import})`, r = e.match(/\.route\([^)]+\);/g);
2682
2689
  if (r) {
2683
2690
  let t = r[r.length - 1], i = e.lastIndexOf(t) + t.length - 1;
@@ -2685,14 +2692,14 @@ function Tr(e, t) {
2685
2692
  }
2686
2693
  return e.replace("return app;", `return app\n ${n};`);
2687
2694
  }
2688
- async function Er(e, t, n) {
2689
- let r = l.resolve(n, Y("{{backend.root}}", t), "src/context.ts");
2690
- if (!await J(r)) return;
2691
- let i = await o.readFile(r, "utf-8");
2692
- for (let t of e) i.includes(`export let ${t.export}`) || (i = Dr(i, t), i = Or(i, t), i = kr(i, t), i = jr(i, t));
2693
- await o.writeFile(r, i, "utf-8");
2695
+ async function Or(e, t, n) {
2696
+ let r = u.resolve(n, X("{{backend.root}}", t), "src/context.ts");
2697
+ if (!await Y(r)) return;
2698
+ let i = await s.readFile(r, "utf-8");
2699
+ for (let t of e) i.includes(`export let ${t.export}`) || (i = kr(i, t), i = Ar(i, t), i = jr(i, t), i = Nr(i, t));
2700
+ await s.writeFile(r, i, "utf-8");
2694
2701
  }
2695
- function Dr(e, t) {
2702
+ function kr(e, t) {
2696
2703
  let n = `import { ${t.typeImport.name} } from "${t.typeImport.from}";`;
2697
2704
  if (e.includes(`from "${t.typeImport.from}"`)) return e;
2698
2705
  let r = e.lastIndexOf("import ");
@@ -2700,7 +2707,7 @@ function Dr(e, t) {
2700
2707
  let i = e.indexOf("\n", e.indexOf(";", r));
2701
2708
  return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
2702
2709
  }
2703
- function Or(e, t) {
2710
+ function Ar(e, t) {
2704
2711
  let n = `export let ${t.export}: ${t.type};`, r = e.lastIndexOf("export let ");
2705
2712
  if (r === -1) {
2706
2713
  let t = e.indexOf("export const setupContext");
@@ -2709,15 +2716,15 @@ function Or(e, t) {
2709
2716
  let i = e.indexOf("\n", r);
2710
2717
  return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
2711
2718
  }
2712
- function kr(e, t) {
2719
+ function jr(e, t) {
2713
2720
  let n = ` ${t.export} = ${t.init};`, r = e.match(/export const setupContext\s*=\s*async\s*\([^)]*\)\s*=>\s*\{/);
2714
2721
  if (!r) return e;
2715
2722
  let i = e.indexOf("{", e.indexOf(r[0]));
2716
2723
  if (i === -1) return e;
2717
- let a = Ar(e, i);
2724
+ let a = Mr(e, i);
2718
2725
  return a === -1 ? e : e.slice(0, a) + n + "\n" + e.slice(a);
2719
2726
  }
2720
- function Ar(e, t) {
2727
+ function Mr(e, t) {
2721
2728
  let n = 0;
2722
2729
  for (let r = t; r < e.length; r++) {
2723
2730
  let t = e[r];
@@ -2726,20 +2733,20 @@ function Ar(e, t) {
2726
2733
  }
2727
2734
  return -1;
2728
2735
  }
2729
- function jr(e, t) {
2736
+ function Nr(e, t) {
2730
2737
  let n = ` ${t.export}: ${t.type};`, r = e.indexOf("export type ContextVariables = {");
2731
2738
  if (r === -1) return e;
2732
2739
  let i = e.indexOf("};", r);
2733
2740
  return i === -1 ? e : e.slice(0, i) + n + "\n" + e.slice(i);
2734
2741
  }
2735
- async function Mr(e, t, n) {
2736
- let r = l.resolve(n, Y("{{enums.src}}", t), "index.ts");
2737
- if (!await J(r)) return;
2738
- let i = await o.readFile(r, "utf-8");
2739
- for (let t of e) i.includes(`from "${t.from}"`) || (i = Nr(i, t));
2740
- await o.writeFile(r, i, "utf-8");
2742
+ async function Pr(e, t, n) {
2743
+ let r = u.resolve(n, X("{{enums.src}}", t), "index.ts");
2744
+ if (!await Y(r)) return;
2745
+ let i = await s.readFile(r, "utf-8");
2746
+ for (let t of e) i.includes(`from "${t.from}"`) || (i = Fr(i, t));
2747
+ await s.writeFile(r, i, "utf-8");
2741
2748
  }
2742
- function Nr(e, t) {
2749
+ function Fr(e, t) {
2743
2750
  let n = `export * from "${t.from}";`, r = e.lastIndexOf("export * from");
2744
2751
  if (r !== -1) {
2745
2752
  let t = e.indexOf("\n", r);
@@ -2747,14 +2754,14 @@ function Nr(e, t) {
2747
2754
  }
2748
2755
  return e.trim() === "" ? n + "\n" : e.trimEnd() + "\n" + n + "\n";
2749
2756
  }
2750
- async function Pr(e, t, n) {
2751
- let r = Y("{{backend.root}}", t), i = l.resolve(n, r, "src/sockets/index.ts");
2752
- if (!await J(i)) return;
2753
- let a = await o.readFile(i, "utf-8");
2754
- for (let t of e) a.includes(`from "${t.from}"`) || (a = Fr(a, t), a = Ir(a, t));
2755
- await J(l.resolve(n, r, "src/libs/websocket/ws-authenticate.ts")) && (a = Lr(a)), await o.writeFile(i, a, "utf-8");
2757
+ async function Ir(e, t, n) {
2758
+ let r = X("{{backend.root}}", t), i = u.resolve(n, r, "src/sockets/index.ts");
2759
+ if (!await Y(i)) return;
2760
+ let a = await s.readFile(i, "utf-8");
2761
+ for (let t of e) a.includes(`from "${t.from}"`) || (a = Lr(a, t), a = Rr(a, t));
2762
+ await Y(u.resolve(n, r, "src/libs/websocket/ws-authenticate.ts")) && (a = zr(a)), await s.writeFile(i, a, "utf-8");
2756
2763
  }
2757
- function Fr(e, t) {
2764
+ function Lr(e, t) {
2758
2765
  let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("from \"./");
2759
2766
  if (r !== -1) {
2760
2767
  let t = e.indexOf("\n", r);
@@ -2763,7 +2770,7 @@ function Fr(e, t) {
2763
2770
  let i = e.indexOf("const sockets");
2764
2771
  return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
2765
2772
  }
2766
- function Ir(e, t) {
2773
+ function Rr(e, t) {
2767
2774
  let n = `.socket("${t.prefix}", ${t.import})`, r = e.indexOf("const sockets");
2768
2775
  if (r === -1) return e;
2769
2776
  let i = e.indexOf("new SocketRouter", r);
@@ -2777,7 +2784,7 @@ function Ir(e, t) {
2777
2784
  }
2778
2785
  return e;
2779
2786
  }
2780
- function Lr(e) {
2787
+ function zr(e) {
2781
2788
  if (e.includes("wsAuthenticate")) return e;
2782
2789
  let t = e.indexOf("from \"@backend/libs/websocket/socket-router\""), n = e;
2783
2790
  if (t !== -1) {
@@ -2786,14 +2793,14 @@ function Lr(e) {
2786
2793
  }
2787
2794
  return n.replace("new SocketRouter()", "new SocketRouter({ authenticate: wsAuthenticate })");
2788
2795
  }
2789
- async function Rr(e, t, n) {
2790
- let r = Y("{{frontend.root}}", t), i = l.resolve(n, r, "src/api/sdk.ts");
2791
- if (!await J(i)) return;
2792
- let a = await o.readFile(i, "utf-8");
2793
- for (let t of e) a.includes(`.$configure(${t.import})`) || (a = zr(a, t), a = Br(a, t));
2794
- await o.writeFile(i, a, "utf-8");
2796
+ async function Br(e, t, n) {
2797
+ let r = X("{{frontend.root}}", t), i = u.resolve(n, r, "src/api/sdk.ts");
2798
+ if (!await Y(i)) return;
2799
+ let a = await s.readFile(i, "utf-8");
2800
+ for (let t of e) a.includes(`.$configure(${t.import})`) || (a = Vr(a, t), a = Hr(a, t));
2801
+ await s.writeFile(i, a, "utf-8");
2795
2802
  }
2796
- function zr(e, t) {
2803
+ function Vr(e, t) {
2797
2804
  let n = `import { ${t.import} } from "${t.from}";`;
2798
2805
  if (e.includes(n)) return e;
2799
2806
  let r = e.lastIndexOf("from \"./");
@@ -2804,57 +2811,57 @@ function zr(e, t) {
2804
2811
  let i = e.indexOf("export const sdk");
2805
2812
  return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
2806
2813
  }
2807
- function Br(e, t) {
2814
+ function Hr(e, t) {
2808
2815
  let n = `.$configure(${t.import})`, r = e.indexOf("export const sdk");
2809
2816
  if (r === -1) return e;
2810
2817
  let i = e.indexOf(";", r);
2811
2818
  return i === -1 ? e : e.slice(0, i) + "\n " + n + e.slice(i);
2812
2819
  }
2813
- async function Vr(e, t, n) {
2814
- let r = l.resolve(n, Y("{{backend.utils}}", t), "frontend-url/frontend-url.ts");
2815
- if (!await J(r)) return;
2816
- let i = await o.readFile(r, "utf-8");
2817
- for (let t of e) i.includes(`"${t.path}"`) || (i = Hr(i, t));
2818
- await o.writeFile(r, i, "utf-8");
2820
+ async function Ur(e, t, n) {
2821
+ let r = u.resolve(n, X("{{backend.utils}}", t), "frontend-url/frontend-url.ts");
2822
+ if (!await Y(r)) return;
2823
+ let i = await s.readFile(r, "utf-8");
2824
+ for (let t of e) i.includes(`"${t.path}"`) || (i = Wr(i, t));
2825
+ await s.writeFile(r, i, "utf-8");
2819
2826
  }
2820
- function Hr(e, t) {
2827
+ function Wr(e, t) {
2821
2828
  let n = ` "${t.path}": ${t.search};`, r = e.indexOf("type RouteDefinitions = {");
2822
2829
  if (r === -1) return e;
2823
2830
  let i = e.indexOf("};", r);
2824
2831
  return i === -1 ? e : e.slice(0, i) + n + "\n" + e.slice(i);
2825
2832
  }
2826
- var Ur = "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", Wr = {
2833
+ var Gr = "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", Kr = {
2827
2834
  primary: "primaryNav",
2828
2835
  secondary: "secondaryNav",
2829
2836
  tertiary: "tertiaryNav",
2830
2837
  settings: "settingsNav"
2831
2838
  };
2832
- async function Gr(e) {
2833
- let { entries: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = _r(i, n), s = l.resolve(r, a, "src/constants/nav.constants.ts"), c;
2834
- await J(s) ? c = await o.readFile(s, "utf-8") : (await o.mkdir(l.dirname(s), { recursive: !0 }), c = Ur);
2835
- for (let e of t) c.includes(`label: "${e.label}"`) || (c = Jr(c, e));
2836
- for (let e of t.toReversed()) c.includes(`label: "${e.label}"`) || (c = Xr(c, e));
2837
- await o.writeFile(s, c, "utf-8");
2838
- }
2839
- async function Kr(e) {
2840
- let { postLoginRedirect: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = _r(i, n), s = l.resolve(r, a, "src/features/auth/constants/auth.constants.ts");
2841
- if (!await J(s)) return;
2842
- let c = await o.readFile(s, "utf-8"), u = /export const POST_LOGIN_REDIRECT_PATH = "[^"]*";/;
2843
- if (!u.test(c)) return;
2844
- let d = c.replace(u, `export const POST_LOGIN_REDIRECT_PATH = "${t}";`);
2845
- await o.writeFile(s, d, "utf-8");
2846
- }
2847
- function qr(e) {
2839
+ async function qr(e) {
2840
+ let { entries: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = yr(i, n), o = u.resolve(r, a, "src/constants/nav.constants.ts"), c;
2841
+ await Y(o) ? c = await s.readFile(o, "utf-8") : (await s.mkdir(u.dirname(o), { recursive: !0 }), c = Gr);
2842
+ for (let e of t) c.includes(`label: "${e.label}"`) || (c = Xr(c, e));
2843
+ for (let e of t.toReversed()) c.includes(`label: "${e.label}"`) || (c = Qr(c, e));
2844
+ await s.writeFile(o, c, "utf-8");
2845
+ }
2846
+ async function Jr(e) {
2847
+ let { postLoginRedirect: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = yr(i, n), o = u.resolve(r, a, "src/features/auth/constants/auth.constants.ts");
2848
+ if (!await Y(o)) return;
2849
+ let c = await s.readFile(o, "utf-8"), l = /export const POST_LOGIN_REDIRECT_PATH = "[^"]*";/;
2850
+ if (!l.test(c)) return;
2851
+ let d = c.replace(l, `export const POST_LOGIN_REDIRECT_PATH = "${t}";`);
2852
+ await s.writeFile(o, d, "utf-8");
2853
+ }
2854
+ function Yr(e) {
2848
2855
  let t = [e.icon];
2849
2856
  if (e.items) for (let n of e.items) t.includes(n.icon) || t.push(n.icon);
2850
2857
  return t;
2851
2858
  }
2852
- function Jr(e, t) {
2853
- let n = qr(t), r = e;
2854
- for (let e of n) r = Yr(r, e);
2859
+ function Xr(e, t) {
2860
+ let n = Yr(t), r = e;
2861
+ for (let e of n) r = Zr(r, e);
2855
2862
  return r;
2856
2863
  }
2857
- function Yr(e, t) {
2864
+ function Zr(e, t) {
2858
2865
  let n = e.match(/import \{([^}]+)\} from "lucide-react";/);
2859
2866
  if (!n) return e;
2860
2867
  let r = n[1].split(",").map((e) => e.trim()).filter(Boolean);
@@ -2862,21 +2869,21 @@ function Yr(e, t) {
2862
2869
  let i = r.findIndex((e) => e.startsWith("type "));
2863
2870
  return i === -1 ? r.push(t) : r.splice(i, 0, t), e.replace(n[0], `import { ${r.join(", ")} } from "lucide-react";`);
2864
2871
  }
2865
- function Xr(e, t) {
2866
- let n = Wr[t.group];
2872
+ function Qr(e, t) {
2873
+ let n = Kr[t.group];
2867
2874
  if (!n) return e;
2868
- let r = Qr(t), i = RegExp(`export const ${n}: NavEntry\\[\\] = \\[`), a = e.match(i);
2875
+ let r = ei(t), i = RegExp(`export const ${n}: NavEntry\\[\\] = \\[`), a = e.match(i);
2869
2876
  if (!a) return e;
2870
- let o = e.indexOf(a[0]) + a[0].length, s = Zr(e, o - 1);
2877
+ let o = e.indexOf(a[0]) + a[0].length, s = $r(e, o - 1);
2871
2878
  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);
2872
2879
  }
2873
- function Zr(e, t) {
2880
+ function $r(e, t) {
2874
2881
  let n = 0;
2875
2882
  for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
2876
2883
  else if (e[r] === "]" && (n--, n === 0)) return r;
2877
2884
  return -1;
2878
2885
  }
2879
- function Qr(e) {
2886
+ function ei(e) {
2880
2887
  let t = [];
2881
2888
  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) {
2882
2889
  t.push(" items: [");
@@ -2892,14 +2899,14 @@ function Qr(e) {
2892
2899
  } else t.push(" items: [],");
2893
2900
  return t.push(" },"), t.join("\n");
2894
2901
  }
2895
- async function $r(e, t, n) {
2896
- let r = Y("{{backend.features}}", t), i = l.resolve(n, r, "organizations/modules/setup-organization/steps/index.ts");
2897
- if (!await J(i)) return;
2898
- let a = await o.readFile(i, "utf-8");
2899
- for (let t of e) a.includes(`from "${t.from}"`) || (a = ei(a, t), a = ti(a, t));
2900
- await o.writeFile(i, a, "utf-8");
2902
+ async function ti(e, t, n) {
2903
+ let r = X("{{backend.features}}", t), i = u.resolve(n, r, "organizations/modules/setup-organization/steps/index.ts");
2904
+ if (!await Y(i)) return;
2905
+ let a = await s.readFile(i, "utf-8");
2906
+ for (let t of e) a.includes(`from "${t.from}"`) || (a = ni(a, t), a = ri(a, t));
2907
+ await s.writeFile(i, a, "utf-8");
2901
2908
  }
2902
- function ei(e, t) {
2909
+ function ni(e, t) {
2903
2910
  let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("import ");
2904
2911
  if (r !== -1) {
2905
2912
  let t = e.indexOf("\n", e.indexOf(";", r));
@@ -2907,38 +2914,38 @@ function ei(e, t) {
2907
2914
  }
2908
2915
  return e.indexOf("type "), n + "\n\n" + e;
2909
2916
  }
2910
- function ti(e, t) {
2917
+ function ri(e, t) {
2911
2918
  let n = ` { id: "${t.id}", execute: (ctx) => ${t.import}(ctx) },`, r = e.match(/export const steps:\s*Step\[\]\s*=\s*\[/);
2912
2919
  if (!r) return e;
2913
- let i = e.indexOf(r[0]) + r[0].length, a = ni(e, i - 1);
2920
+ let i = e.indexOf(r[0]) + r[0].length, a = ii(e, i - 1);
2914
2921
  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);
2915
2922
  }
2916
- function ni(e, t) {
2923
+ function ii(e, t) {
2917
2924
  let n = 0;
2918
2925
  for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
2919
2926
  else if (e[r] === "]" && (n--, n === 0)) return r;
2920
2927
  return -1;
2921
2928
  }
2922
- var ri = "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";
2923
- async function ii(e) {
2924
- await oi({
2929
+ var ai = "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";
2930
+ async function oi(e) {
2931
+ await ci({
2925
2932
  ...e,
2926
2933
  arrayName: "navbarActions"
2927
2934
  });
2928
2935
  }
2929
- async function ai(e) {
2930
- await oi({
2936
+ async function si(e) {
2937
+ await ci({
2931
2938
  ...e,
2932
2939
  arrayName: "userMenuActions"
2933
2940
  });
2934
2941
  }
2935
- async function oi({ actions: e, arrayName: t, paths: n, projectRoot: r, slot: i }) {
2936
- let a = _r(i, n), s = l.resolve(r, a, "src/constants/navbar-actions.tsx"), c;
2937
- await J(s) ? c = await o.readFile(s, "utf-8") : (await o.mkdir(l.dirname(s), { recursive: !0 }), c = ri);
2938
- for (let n of e) c = si(c, n), c = ci(c, n, t);
2939
- await o.writeFile(s, c, "utf-8");
2942
+ async function ci({ actions: e, arrayName: t, paths: n, projectRoot: r, slot: i }) {
2943
+ let a = yr(i, n), o = u.resolve(r, a, "src/constants/navbar-actions.tsx"), c;
2944
+ await Y(o) ? c = await s.readFile(o, "utf-8") : (await s.mkdir(u.dirname(o), { recursive: !0 }), c = ai);
2945
+ for (let n of e) c = li(c, n), c = ui(c, n, t);
2946
+ await s.writeFile(o, c, "utf-8");
2940
2947
  }
2941
- function si(e, t) {
2948
+ function li(e, t) {
2942
2949
  let n = `import { ${t.import} } from "${t.from}";`;
2943
2950
  if (e.includes(n)) return e;
2944
2951
  let r = e.lastIndexOf("import ");
@@ -2946,38 +2953,38 @@ function si(e, t) {
2946
2953
  let i = e.indexOf("\n", r);
2947
2954
  return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
2948
2955
  }
2949
- function ci(e, t, n) {
2956
+ function ui(e, t, n) {
2950
2957
  let r = e.match(RegExp(`export const ${n}:\\s*NavbarAction\\[\\]\\s*=\\s*\\[`));
2951
2958
  if (!r) return e;
2952
- let i = e.indexOf(r[0]) + r[0].length, a = li(e, i - 1);
2959
+ let i = e.indexOf(r[0]) + r[0].length, a = di(e, i - 1);
2953
2960
  if (a === -1) return e;
2954
2961
  let o = e.slice(i, a);
2955
2962
  if (o.includes(`id: "${t.id}"`)) return e;
2956
2963
  let s = ` { id: "${t.id}", component: ${t.import} },`;
2957
2964
  return o.trim() === "" ? e.slice(0, a) + "\n" + s + "\n" + e.slice(a) : e.slice(0, a) + s + "\n" + e.slice(a);
2958
2965
  }
2959
- function li(e, t) {
2966
+ function di(e, t) {
2960
2967
  let n = 0;
2961
2968
  for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
2962
2969
  else if (e[r] === "]" && (n--, n === 0)) return r;
2963
2970
  return -1;
2964
2971
  }
2965
- var ui = new Set([
2972
+ var fi = new Set([
2966
2973
  ".ts",
2967
2974
  ".tsx",
2968
2975
  ".js",
2969
2976
  ".jsx"
2970
2977
  ]);
2971
- async function di(e) {
2978
+ async function pi(e) {
2972
2979
  let { files: t, paths: n, projectRoot: r, projectName: i } = e;
2973
2980
  if (i === "hype-stack") return;
2974
2981
  let a = `@${i}/`;
2975
2982
  await Promise.all(t.map(async (e) => {
2976
- let t = dr(e.target, n, r), i = await o.stat(t).catch(() => null);
2977
- i?.isDirectory() ? await mi(t, a) : i?.isFile() && ui.has(l.extname(t)) && await hi(t, a);
2983
+ let t = pr(e.target, n, r), i = await s.stat(t).catch(() => null);
2984
+ i?.isDirectory() ? await gi(t, a) : i?.isFile() && fi.has(u.extname(t)) && await _i(t, a);
2978
2985
  }));
2979
2986
  }
2980
- var fi = new Set([
2987
+ var mi = new Set([
2981
2988
  ".git",
2982
2989
  "node_modules",
2983
2990
  "dist",
@@ -2986,48 +2993,48 @@ var fi = new Set([
2986
2993
  ".next",
2987
2994
  "coverage"
2988
2995
  ]);
2989
- async function pi(e, t) {
2990
- t !== "hype-stack" && await mi(e, `@${t}/`);
2996
+ async function hi(e, t) {
2997
+ t !== "hype-stack" && await gi(e, `@${t}/`);
2991
2998
  }
2992
- async function mi(e, t) {
2993
- let n = await o.readdir(e, { withFileTypes: !0 });
2999
+ async function gi(e, t) {
3000
+ let n = await s.readdir(e, { withFileTypes: !0 });
2994
3001
  await Promise.all(n.map(async (n) => {
2995
- let r = l.join(e, n.name);
3002
+ let r = u.join(e, n.name);
2996
3003
  if (n.isDirectory()) {
2997
- if (fi.has(n.name)) return;
2998
- await mi(r, t);
2999
- } else n.isFile() && ui.has(l.extname(n.name)) && await hi(r, t);
3004
+ if (mi.has(n.name)) return;
3005
+ await gi(r, t);
3006
+ } else n.isFile() && fi.has(u.extname(n.name)) && await _i(r, t);
3000
3007
  }));
3001
3008
  }
3002
- async function hi(e, t) {
3003
- let n = await o.readFile(e, "utf-8");
3004
- if (!n.includes(gr)) return;
3005
- let r = n.replaceAll(gr, t);
3006
- await o.writeFile(e, r, "utf-8");
3009
+ async function _i(e, t) {
3010
+ let n = await s.readFile(e, "utf-8");
3011
+ if (!n.includes(vr)) return;
3012
+ let r = n.replaceAll(vr, t);
3013
+ await s.writeFile(e, r, "utf-8");
3007
3014
  }
3008
3015
  //#endregion
3009
3016
  //#region src/core/installer.ts
3010
- function gi(e, t) {
3017
+ function vi(e, t) {
3011
3018
  return e.slot ? t ? t.includes(e.slot) : e.slot === "frontend" : !0;
3012
3019
  }
3013
- async function _i(e, t) {
3014
- if ((await o.stat(e)).isDirectory()) {
3015
- await o.mkdir(t, { recursive: !0 });
3016
- let n = await o.readdir(e, { withFileTypes: !0 });
3017
- for (let r of n) await _i(l.join(e, r.name), l.join(t, r.name));
3018
- } else await o.mkdir(l.dirname(t), { recursive: !0 }), await o.copyFile(e, t);
3019
- }
3020
- async function vi(e) {
3021
- let { file: t, packDir: n, paths: r, projectRoot: i } = e, a = fr(t.source, n), o = dr(t.target, r, i);
3020
+ async function yi(e, t) {
3021
+ if ((await s.stat(e)).isDirectory()) {
3022
+ await s.mkdir(t, { recursive: !0 });
3023
+ let n = await s.readdir(e, { withFileTypes: !0 });
3024
+ for (let r of n) await yi(u.join(e, r.name), u.join(t, r.name));
3025
+ } else await s.mkdir(u.dirname(t), { recursive: !0 }), await s.copyFile(e, t);
3026
+ }
3027
+ async function bi(e) {
3028
+ let { file: t, packDir: n, paths: r, projectRoot: i } = e, a = mr(t.source, n), o = pr(t.target, r, i);
3022
3029
  return {
3023
3030
  sourcePath: a,
3024
3031
  targetPath: o,
3025
- sourceExists: await J(a) || await Jn(a),
3026
- targetExists: await J(o) || await Jn(o)
3032
+ sourceExists: await Y(a) || await Yn(a),
3033
+ targetExists: await Y(o) || await Yn(o)
3027
3034
  };
3028
3035
  }
3029
- async function yi(e) {
3030
- let { file: t, packDir: n, paths: r, projectRoot: i } = e, { sourcePath: a, targetPath: s, sourceExists: c, targetExists: l } = await vi({
3036
+ async function xi(e) {
3037
+ let { file: t, packDir: n, paths: r, projectRoot: i } = e, { sourcePath: a, targetPath: o, sourceExists: c, targetExists: l } = await bi({
3031
3038
  file: t,
3032
3039
  packDir: n,
3033
3040
  paths: r,
@@ -3038,12 +3045,12 @@ async function yi(e) {
3038
3045
  case "create":
3039
3046
  case "skip-if-exists":
3040
3047
  case "override": return null;
3041
- case "merge": return !l || !t.marker || (await o.readFile(s, "utf-8")).includes(t.marker) ? null : `${t.target}: Marker "${t.marker}" not found`;
3048
+ case "merge": return !l || !t.marker || (await s.readFile(o, "utf-8")).includes(t.marker) ? null : `${t.target}: Marker "${t.marker}" not found`;
3042
3049
  default: return `${t.target}: Unknown strategy: ${String(t.strategy)}`;
3043
3050
  }
3044
3051
  }
3045
- async function bi(e) {
3046
- let { file: t, packDir: n, paths: r, projectRoot: i, force: a, overwrite: s } = e, { sourcePath: c, targetPath: l, sourceExists: u, targetExists: d } = await vi({
3052
+ async function Si(e) {
3053
+ let { file: t, packDir: n, paths: r, projectRoot: i, force: a, overwrite: o } = e, { sourcePath: c, targetPath: l, sourceExists: u, targetExists: d } = await bi({
3047
3054
  file: t,
3048
3055
  packDir: n,
3049
3056
  paths: r,
@@ -3056,12 +3063,12 @@ async function bi(e) {
3056
3063
  };
3057
3064
  switch (t.strategy) {
3058
3065
  case "create": {
3059
- let e = a || (s?.has(l) ?? !1);
3066
+ let e = a || (o?.has(l) ?? !1);
3060
3067
  return d && !e ? {
3061
3068
  status: "skipped",
3062
3069
  path: t.target,
3063
3070
  reason: "Already exists"
3064
- } : (await _i(c, l), {
3071
+ } : (await yi(c, l), {
3065
3072
  status: "installed",
3066
3073
  path: t.target
3067
3074
  });
@@ -3070,20 +3077,20 @@ async function bi(e) {
3070
3077
  status: "skipped",
3071
3078
  path: t.target,
3072
3079
  reason: "Already exists (skip-if-exists)"
3073
- } : (await _i(c, l), {
3080
+ } : (await yi(c, l), {
3074
3081
  status: "installed",
3075
3082
  path: t.target
3076
3083
  });
3077
- case "override": return await _i(c, l), {
3084
+ case "override": return await yi(c, l), {
3078
3085
  status: "installed",
3079
3086
  path: t.target
3080
3087
  };
3081
3088
  case "merge": {
3082
- if (!d) return await _i(c, l), {
3089
+ if (!d) return await yi(c, l), {
3083
3090
  status: "installed",
3084
3091
  path: t.target
3085
3092
  };
3086
- let e = await o.readFile(c, "utf-8"), n = await o.readFile(l, "utf-8");
3093
+ let e = await s.readFile(c, "utf-8"), n = await s.readFile(l, "utf-8");
3087
3094
  if (t.marker) {
3088
3095
  let r = n.indexOf(t.marker);
3089
3096
  if (r === -1) return {
@@ -3092,10 +3099,10 @@ async function bi(e) {
3092
3099
  reason: `Marker "${t.marker}" not found`
3093
3100
  };
3094
3101
  let i = n.slice(0, r) + e + n.slice(r);
3095
- await o.writeFile(l, i);
3102
+ await s.writeFile(l, i);
3096
3103
  } else {
3097
3104
  let t = n + "\n" + e;
3098
- await o.writeFile(l, t);
3105
+ await s.writeFile(l, t);
3099
3106
  }
3100
3107
  return {
3101
3108
  status: "installed",
@@ -3109,15 +3116,15 @@ async function bi(e) {
3109
3116
  };
3110
3117
  }
3111
3118
  }
3112
- async function xi(e) {
3119
+ async function Ci(e) {
3113
3120
  let { packs: t, config: n, projectRoot: r, slotsByPack: i } = e, a = n.paths;
3114
3121
  if (!a) throw Error("stack.json is missing 'paths' configuration. Run 'hype-stack init' to set it up.");
3115
3122
  let o = [], s = /* @__PURE__ */ new Set();
3116
3123
  for (let e of t) {
3117
3124
  let t = i?.get(e.manifest.name);
3118
3125
  for (let n of e.manifest.files) {
3119
- if (n.strategy !== "create" || !gi(n, t)) continue;
3120
- let { targetPath: i, targetExists: c } = await vi({
3126
+ if (n.strategy !== "create" || !vi(n, t)) continue;
3127
+ let { targetPath: i, targetExists: c } = await bi({
3121
3128
  file: n,
3122
3129
  packDir: e.packDir,
3123
3130
  paths: a,
@@ -3132,13 +3139,13 @@ async function xi(e) {
3132
3139
  }
3133
3140
  return o;
3134
3141
  }
3135
- async function Si(e) {
3142
+ async function wi(e) {
3136
3143
  let { manifest: t, config: n, projectRoot: r, force: i, packDir: a, slots: o } = e, s = n.paths;
3137
3144
  if (!s) throw Error("stack.json is missing 'paths' configuration. Run 'hype-stack init' to set it up.");
3138
3145
  let c = [];
3139
3146
  for (let e of t.files) {
3140
- if (!gi(e, o)) continue;
3141
- let t = await yi({
3147
+ if (!vi(e, o)) continue;
3148
+ let t = await xi({
3142
3149
  file: e,
3143
3150
  packDir: a,
3144
3151
  paths: s,
@@ -3149,16 +3156,16 @@ async function Si(e) {
3149
3156
  }
3150
3157
  return c;
3151
3158
  }
3152
- async function Ci(e) {
3159
+ async function Ti(e) {
3153
3160
  let { manifest: t, config: n, projectRoot: r, force: i, overwrite: a, packDir: o, slots: s } = e, c = n.paths;
3154
3161
  if (!c) throw Error("stack.json is missing 'paths' configuration. Run 'hype-stack init' to set it up.");
3155
3162
  let l = {
3156
3163
  installed: [],
3157
3164
  skipped: [],
3158
3165
  errors: []
3159
- }, u = t.files.filter((e) => gi(e, s));
3166
+ }, u = t.files.filter((e) => vi(e, s));
3160
3167
  for (let e of u) {
3161
- let t = await bi({
3168
+ let t = await Si({
3162
3169
  file: e,
3163
3170
  packDir: o,
3164
3171
  paths: c,
@@ -3178,40 +3185,40 @@ async function Ci(e) {
3178
3185
  break;
3179
3186
  }
3180
3187
  }
3181
- await di({
3188
+ await pi({
3182
3189
  files: u,
3183
3190
  paths: c,
3184
3191
  projectRoot: r,
3185
3192
  projectName: n.name
3186
- }), t.env && t.env.length > 0 && await vr(t.env, c, r), t.routes && t.routes.length > 0 && await Cr(t.routes, c, r), t.context && t.context.length > 0 && await Er(t.context, c, r), t.sockets && t.sockets.length > 0 && await Pr(t.sockets, c, r), t.sdkConfigurations && t.sdkConfigurations.length > 0 && await Rr(t.sdkConfigurations, c, r), t.enums && t.enums.length > 0 && await Mr(t.enums, c, r), t.frontendRoutes && t.frontendRoutes.length > 0 && await Vr(t.frontendRoutes, c, r);
3193
+ }), t.env && t.env.length > 0 && await br(t.env, c, r), t.routes && t.routes.length > 0 && await Tr(t.routes, c, r), t.context && t.context.length > 0 && await Or(t.context, c, r), t.sockets && t.sockets.length > 0 && await Ir(t.sockets, c, r), t.sdkConfigurations && t.sdkConfigurations.length > 0 && await Br(t.sdkConfigurations, c, r), t.enums && t.enums.length > 0 && await Pr(t.enums, c, r), t.frontendRoutes && t.frontendRoutes.length > 0 && await Ur(t.frontendRoutes, c, r);
3187
3194
  let d = s && s.length > 0 ? s : ["frontend"];
3188
- for (let e of d) t.nav && t.nav.length > 0 && await Gr({
3195
+ for (let e of d) t.nav && t.nav.length > 0 && await qr({
3189
3196
  entries: t.nav,
3190
3197
  paths: c,
3191
3198
  projectRoot: r,
3192
3199
  slot: e
3193
- }), t.navbarActions && t.navbarActions.length > 0 && await ii({
3200
+ }), t.navbarActions && t.navbarActions.length > 0 && await oi({
3194
3201
  actions: t.navbarActions,
3195
3202
  paths: c,
3196
3203
  projectRoot: r,
3197
3204
  slot: e
3198
- }), t.userMenuActions && t.userMenuActions.length > 0 && await ai({
3205
+ }), t.userMenuActions && t.userMenuActions.length > 0 && await si({
3199
3206
  actions: t.userMenuActions,
3200
3207
  paths: c,
3201
3208
  projectRoot: r,
3202
3209
  slot: e
3203
3210
  });
3204
- return t.onboardingSteps && t.onboardingSteps.length > 0 && await $r(t.onboardingSteps, c, r), t.postLoginRedirect && await Kr({
3211
+ return t.onboardingSteps && t.onboardingSteps.length > 0 && await ti(t.onboardingSteps, c, r), t.postLoginRedirect && await Jr({
3205
3212
  postLoginRedirect: t.postLoginRedirect,
3206
3213
  paths: c,
3207
3214
  projectRoot: r,
3208
3215
  slot: d[0]
3209
3216
  }), l;
3210
3217
  }
3211
- async function wi(e) {
3218
+ async function Ei(e) {
3212
3219
  let { packs: t, config: n, projectRoot: r, force: i, overwrite: a, slotsByPack: o } = e, s = [];
3213
3220
  for (let e of t) {
3214
- let t = o?.get(e.manifest.name), a = await Si({
3221
+ let t = o?.get(e.manifest.name), a = await wi({
3215
3222
  manifest: e.manifest,
3216
3223
  config: n,
3217
3224
  projectRoot: r,
@@ -3231,7 +3238,7 @@ async function wi(e) {
3231
3238
  };
3232
3239
  let c = [], l = [], u = [], d = [], f = n;
3233
3240
  for (let e of t) {
3234
- let t = o?.get(e.manifest.name), n = await Ci({
3241
+ let t = o?.get(e.manifest.name), n = await Ti({
3235
3242
  manifest: e.manifest,
3236
3243
  config: f,
3237
3244
  projectRoot: r,
@@ -3240,7 +3247,7 @@ async function wi(e) {
3240
3247
  packDir: e.packDir,
3241
3248
  slots: t
3242
3249
  });
3243
- c.push(...n.installed), l.push(...n.skipped), u.push(...n.errors), f = await Ti(f, e.manifest.name, r), d.push(e.manifest.name);
3250
+ c.push(...n.installed), l.push(...n.skipped), u.push(...n.errors), f = await Di(f, e.manifest.name, r), d.push(e.manifest.name);
3244
3251
  }
3245
3252
  return {
3246
3253
  installed: c,
@@ -3251,19 +3258,19 @@ async function wi(e) {
3251
3258
  config: f
3252
3259
  };
3253
3260
  }
3254
- async function Ti(e, t, n) {
3261
+ async function Di(e, t, n) {
3255
3262
  let r = {
3256
3263
  ...e,
3257
3264
  installedPacks: [...e.installedPacks ?? [], t]
3258
3265
  };
3259
- return await ir(n, r), r;
3266
+ return await or(n, r), r;
3260
3267
  }
3261
- async function Ei(e) {
3268
+ async function Oi(e) {
3262
3269
  let { manifest: t, config: n, projectRoot: r, templateDir: i } = e, a = n.paths;
3263
3270
  if (!a) throw Error("stack.json is missing 'paths' configuration. Run 'hype-stack init' to set it up.");
3264
3271
  let o = [], s = [];
3265
3272
  for (let e of t.files) {
3266
- let t = await bi({
3273
+ let t = await Si({
3267
3274
  file: e,
3268
3275
  packDir: i,
3269
3276
  paths: a,
@@ -3281,11 +3288,11 @@ async function Ei(e) {
3281
3288
  case "skipped": break;
3282
3289
  }
3283
3290
  }
3284
- return t.frontendRoutes && t.frontendRoutes.length > 0 && await Vr(t.frontendRoutes, a, r), t.nav && t.nav.length > 0 && await Gr({
3291
+ return t.frontendRoutes && t.frontendRoutes.length > 0 && await Ur(t.frontendRoutes, a, r), t.nav && t.nav.length > 0 && await qr({
3285
3292
  entries: t.nav,
3286
3293
  paths: a,
3287
3294
  projectRoot: r
3288
- }), t.postLoginRedirect && await Kr({
3295
+ }), t.postLoginRedirect && await Jr({
3289
3296
  postLoginRedirect: t.postLoginRedirect,
3290
3297
  paths: a,
3291
3298
  projectRoot: r
@@ -3296,28 +3303,28 @@ async function Ei(e) {
3296
3303
  }
3297
3304
  //#endregion
3298
3305
  //#region src/core/pack-categories.ts
3299
- var Di = [
3306
+ var ki = [
3300
3307
  "starter",
3301
3308
  "layout",
3302
3309
  "feature"
3303
- ], Oi = {
3310
+ ], Ai = {
3304
3311
  starter: "Starter",
3305
3312
  layout: "Layout",
3306
3313
  feature: "Features"
3307
- }, ki = new Set(["starter", "layout"]), Ai = "layout-basic";
3308
- function ji(e, t = {}) {
3314
+ }, ji = new Set(["starter", "layout"]), Mi = "layout-basic";
3315
+ function Ni(e, t = {}) {
3309
3316
  let n = [];
3310
- for (let r of Di) {
3317
+ for (let r of ki) {
3311
3318
  let i = e.filter((e) => e.category === r);
3312
3319
  if (i.length === 0) continue;
3313
- let a = ki.has(r) ? "single" : "multiple";
3320
+ let a = ji.has(r) ? "single" : "multiple";
3314
3321
  if (r === "layout") {
3315
- n.push(Mi("frontend", i)), t.adminAvailable && n.push(Mi("admin", i));
3322
+ n.push(Pi("frontend", i)), t.adminAvailable && n.push(Pi("admin", i));
3316
3323
  continue;
3317
3324
  }
3318
3325
  n.push({
3319
3326
  category: r,
3320
- label: Oi[r],
3327
+ label: Ai[r],
3321
3328
  mode: a,
3322
3329
  packs: i,
3323
3330
  preselect: null
@@ -3325,20 +3332,20 @@ function ji(e, t = {}) {
3325
3332
  }
3326
3333
  return n;
3327
3334
  }
3328
- function Mi(e, t) {
3329
- let n = t.some((e) => e.name === Ai);
3335
+ function Pi(e, t) {
3336
+ let n = t.some((e) => e.name === Mi);
3330
3337
  return {
3331
3338
  category: "layout",
3332
3339
  label: e === "admin" ? "Admin Layout" : "Layout",
3333
3340
  mode: "single",
3334
3341
  packs: t,
3335
- preselect: n ? Ai : null,
3342
+ preselect: n ? Mi : null,
3336
3343
  slot: e
3337
3344
  };
3338
3345
  }
3339
3346
  //#endregion
3340
3347
  //#region src/core/resolve.ts
3341
- function Ni(e) {
3348
+ function Fi(e) {
3342
3349
  let t = /* @__PURE__ */ new Map();
3343
3350
  for (let n of e) t.set(n.name, {
3344
3351
  name: n.name,
@@ -3346,7 +3353,7 @@ function Ni(e) {
3346
3353
  });
3347
3354
  return t;
3348
3355
  }
3349
- function Pi(e, t, n = /* @__PURE__ */ new Set()) {
3356
+ function Ii(e, t, n = /* @__PURE__ */ new Set()) {
3350
3357
  let r = /* @__PURE__ */ new Set();
3351
3358
  function i(e) {
3352
3359
  if (n.has(e)) return [];
@@ -3360,10 +3367,10 @@ function Pi(e, t, n = /* @__PURE__ */ new Set()) {
3360
3367
  }
3361
3368
  return i(e);
3362
3369
  }
3363
- function Fi(e, t, n = []) {
3370
+ function Li(e, t, n = []) {
3364
3371
  let r = new Set(n), i = new Set(n), a = [];
3365
3372
  for (let n of e) {
3366
- let e = Pi(n, t, new Set(i));
3373
+ let e = Ii(n, t, new Set(i));
3367
3374
  for (let t of e) i.has(t) || (i.add(t), a.push(t));
3368
3375
  }
3369
3376
  return {
@@ -3371,7 +3378,7 @@ function Fi(e, t, n = []) {
3371
3378
  alreadyInstalled: e.filter((e) => r.has(e))
3372
3379
  };
3373
3380
  }
3374
- function Ii(e) {
3381
+ function Ri(e) {
3375
3382
  let { order: t, graph: n, isLocked: r, installed: i = [] } = e, a = new Set(i), o = /* @__PURE__ */ new Set();
3376
3383
  for (let e of t) {
3377
3384
  let t = n.get(e)?.dependencies.some((e) => !a.has(e) && o.has(e)) ?? !1;
@@ -3384,7 +3391,7 @@ function Ii(e) {
3384
3391
  }
3385
3392
  //#endregion
3386
3393
  //#region src/core/variants.ts
3387
- function Li(e, t = {}) {
3394
+ function zi(e, t = {}) {
3388
3395
  let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
3389
3396
  for (let i of e) {
3390
3397
  let e = t[i.family] ?? i.default;
@@ -3396,14 +3403,14 @@ function Li(e, t = {}) {
3396
3403
  familyOf: r
3397
3404
  };
3398
3405
  }
3399
- function Ri(e, t, n) {
3406
+ function Bi(e, t, n) {
3400
3407
  return [...e.map((e) => n.chosen.get(e.family) ?? e.default), ...t];
3401
3408
  }
3402
- function zi(e, t) {
3409
+ function Vi(e, t) {
3403
3410
  let n = t.familyOf.get(e);
3404
3411
  return n ? t.chosen.get(n) ?? e : e;
3405
3412
  }
3406
- function Bi(e, t) {
3413
+ function Hi(e, t) {
3407
3414
  let n = /* @__PURE__ */ new Map();
3408
3415
  for (let t of e) t.family && n.set(t.name, t.family);
3409
3416
  let r = new Set(t), i = /* @__PURE__ */ new Map();
@@ -3419,74 +3426,74 @@ function Bi(e, t) {
3419
3426
  familyOf: n
3420
3427
  };
3421
3428
  }
3422
- function Vi(e, t) {
3429
+ function Ui(e, t) {
3423
3430
  return e.map((e) => ({
3424
3431
  ...e,
3425
- dependencies: e.dependencies.map((e) => zi(e, t))
3432
+ dependencies: e.dependencies.map((e) => Vi(e, t))
3426
3433
  }));
3427
3434
  }
3428
3435
  //#endregion
3429
3436
  //#region src/ui/banner.ts
3430
- var Hi = [
3437
+ var Wi = [
3431
3438
  " ██╗ ██╗ ██╗ ██╗ ██████╗ ███████╗",
3432
3439
  " ██║ ██║ ╚██╗ ██╔╝ ██╔══██╗ ██╔════╝",
3433
3440
  " ███████║ ╚████╔╝ ██████╔╝ █████╗ ",
3434
3441
  " ██╔══██║ ╚██╔╝ ██╔═══╝ ██╔══╝ ",
3435
3442
  " ██║ ██║ ██║ ██║ ███████╗",
3436
3443
  " ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝"
3437
- ], Ui = [
3444
+ ], Gi = [
3438
3445
  " ███████╗ ████████╗ █████╗ ██████╗ ██╗ ██╗",
3439
3446
  " ██╔════╝ ╚══██╔══╝ ██╔══██╗ ██╔════╝ ██║ ██╔╝",
3440
3447
  " ███████╗ ██║ ███████║ ██║ █████╔╝ ",
3441
3448
  " ╚════██║ ██║ ██╔══██║ ██║ ██╔═██╗ ",
3442
3449
  " ███████║ ██║ ██║ ██║ ╚██████╗ ██║ ██╗",
3443
3450
  " ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝"
3444
- ], Wi = [
3451
+ ], Ki = [
3445
3452
  253,
3446
3453
  176,
3447
3454
  21
3448
- ], Gi = [
3455
+ ], qi = [
3449
3456
  245,
3450
3457
  76,
3451
3458
  2
3452
- ], Ki = 5, qi = [
3459
+ ], Ji = 5, Yi = [
3453
3460
  17,
3454
3461
  103,
3455
3462
  248
3456
- ], Ji = [
3463
+ ], Xi = [
3457
3464
  42,
3458
3465
  160,
3459
3466
  250
3460
- ], Yi = .2;
3461
- function Xi() {
3467
+ ], Zi = .2;
3468
+ function Qi() {
3462
3469
  console.log();
3463
- for (let e of de(Hi, {
3464
- start: Wi,
3465
- end: Gi,
3466
- angle: Ki
3467
- })) console.log(s.bold(e));
3468
- for (let e of de(Ui, {
3469
- start: qi,
3470
- end: Ji,
3471
- angle: Yi
3472
- })) console.log(s.bold(e));
3473
- console.log(), console.log(` ${R.spark} ${s.dim("v" + S)} ${s.dim("·")} ${le("Ship web + desktop apps from one codebase")}`), console.log();
3474
- }
3475
- function X() {
3476
- console.log(), console.log(` ${R.bolt} ${se.orange("Hype")}${se.skyBlue("Stack")} ${s.dim("v" + S)}`), console.log();
3470
+ for (let e of fe(Wi, {
3471
+ start: Ki,
3472
+ end: qi,
3473
+ angle: Ji
3474
+ })) console.log(c.bold(e));
3475
+ for (let e of fe(Gi, {
3476
+ start: Yi,
3477
+ end: Xi,
3478
+ angle: Zi
3479
+ })) console.log(c.bold(e));
3480
+ console.log(), console.log(` ${z.spark} ${c.dim("v" + C)} ${c.dim("·")} ${ue("Ship web + desktop apps from one codebase")}`), console.log();
3481
+ }
3482
+ function $i() {
3483
+ console.log(), console.log(` ${z.bolt} ${se.orange("Hype")}${se.skyBlue("Stack")} ${c.dim("v" + C)}`), console.log();
3477
3484
  }
3478
3485
  //#endregion
3479
3486
  //#region src/ui/logger.ts
3480
- function Zi(e) {
3481
- a.note(e.map((e) => `${R.arrow} ${e}`).join("\n"), "Next steps");
3487
+ function ea(e) {
3488
+ o.note(e.map((e) => `${z.arrow} ${e}`).join("\n"), "Next steps");
3482
3489
  }
3483
3490
  function Z() {
3484
- a.cancel(L.muted("Operation cancelled.")), process.exit(0);
3491
+ o.cancel(R.muted("Operation cancelled.")), process.exit(0);
3485
3492
  }
3486
3493
  //#endregion
3487
3494
  //#region src/core/clone.ts
3488
- async function Qi(e) {
3489
- let t = await f(C, {
3495
+ async function ta(e) {
3496
+ let t = await p(w, {
3490
3497
  dir: e,
3491
3498
  force: !0
3492
3499
  });
@@ -3497,7 +3504,7 @@ async function Qi(e) {
3497
3504
  }
3498
3505
  //#endregion
3499
3506
  //#region src/core/apply-theme.ts
3500
- function $i(e, t) {
3507
+ function na(e, t) {
3501
3508
  let n = e.indexOf(t);
3502
3509
  if (n === -1) return null;
3503
3510
  let r = e.indexOf("{", n);
@@ -3512,46 +3519,46 @@ function $i(e, t) {
3512
3519
  bodyEnd: a - 1
3513
3520
  } : null;
3514
3521
  }
3515
- function ea(e, t) {
3522
+ function ra(e, t) {
3516
3523
  let n = e;
3517
3524
  for (let [e, r] of Object.entries(t)) {
3518
- let t = RegExp(`(^[ \\t]*--${ta(e)}[ \\t]*:[ \\t]*)([^;\\n]*);`, "m");
3525
+ let t = RegExp(`(^[ \\t]*--${ia(e)}[ \\t]*:[ \\t]*)([^;\\n]*);`, "m");
3519
3526
  n = n.replace(t, (e, t) => `${t}${r};`);
3520
3527
  }
3521
3528
  return n;
3522
3529
  }
3523
- function ta(e) {
3530
+ function ia(e) {
3524
3531
  return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3525
3532
  }
3526
- function na(e, t) {
3527
- let n = $i(e, ":root"), r = $i(e, ".dark"), i = e;
3533
+ function aa(e, t) {
3534
+ let n = na(e, ":root"), r = na(e, ".dark"), i = e;
3528
3535
  if (n) {
3529
3536
  let e = i.slice(0, n.bodyStart), r = i.slice(n.bodyStart, n.bodyEnd), a = i.slice(n.bodyEnd);
3530
- i = e + ea(r, t.light) + a;
3537
+ i = e + ra(r, t.light) + a;
3531
3538
  }
3532
3539
  if (r) {
3533
- let e = $i(i, ".dark");
3540
+ let e = na(i, ".dark");
3534
3541
  if (e) {
3535
3542
  let n = i.slice(0, e.bodyStart), r = i.slice(e.bodyStart, e.bodyEnd), a = i.slice(e.bodyEnd);
3536
- i = n + ea(r, t.dark) + a;
3543
+ i = n + ra(r, t.dark) + a;
3537
3544
  }
3538
3545
  }
3539
3546
  return i;
3540
3547
  }
3541
- var ra = "assets/styles.css";
3542
- async function ia(e, t) {
3543
- let n = l.resolve(e, ra), r;
3548
+ var oa = "assets/styles.css";
3549
+ async function sa(e, t) {
3550
+ let n = u.resolve(e, oa), r;
3544
3551
  try {
3545
- r = await o.readFile(n, "utf-8");
3552
+ r = await s.readFile(n, "utf-8");
3546
3553
  } catch {
3547
3554
  return !1;
3548
3555
  }
3549
- let i = na(r, t);
3550
- return i === r || await o.writeFile(n, i, "utf-8"), !0;
3556
+ let i = aa(r, t);
3557
+ return i === r || await s.writeFile(n, i, "utf-8"), !0;
3551
3558
  }
3552
3559
  //#endregion
3553
3560
  //#region src/core/editor-config.ts
3554
- function aa(e) {
3561
+ function ca(e) {
3555
3562
  let t = {
3556
3563
  globs: [],
3557
3564
  alwaysApply: !1
@@ -3586,10 +3593,10 @@ function aa(e) {
3586
3593
  content: i
3587
3594
  };
3588
3595
  }
3589
- function oa(e) {
3596
+ function la(e) {
3590
3597
  return e.frontmatter.globs.length > 0 ? `---\npaths:\n${e.frontmatter.globs.map((e) => ` - "${e}"`).join("\n")}\n---\n\n${e.content}` : e.content;
3591
3598
  }
3592
- function sa(e) {
3599
+ function ua(e) {
3593
3600
  let t;
3594
3601
  t = e.frontmatter.alwaysApply ? "always_on" : e.frontmatter.globs.length > 0 ? "glob" : "model_decision";
3595
3602
  let n = [`trigger: ${t}`];
@@ -3599,30 +3606,30 @@ function sa(e) {
3599
3606
  }
3600
3607
  return e.frontmatter.description && n.push(`description: ${e.frontmatter.description}`), `---\n${n.join("\n")}\n---\n\n${e.content}`;
3601
3608
  }
3602
- function ca(e) {
3609
+ function da(e) {
3603
3610
  return e.frontmatter.globs.length > 0 ? `---\napplyTo: "${e.frontmatter.globs.join(", ")}"\n---\n\n${e.content}` : e.content;
3604
3611
  }
3605
- var la = {
3612
+ var fa = {
3606
3613
  claude: {
3607
3614
  rulesDir: ".claude/rules",
3608
3615
  extension: ".md",
3609
- convert: oa
3616
+ convert: la
3610
3617
  },
3611
3618
  windsurf: {
3612
3619
  rulesDir: ".windsurf/rules",
3613
3620
  extension: ".md",
3614
- convert: sa
3621
+ convert: ua
3615
3622
  },
3616
3623
  copilot: {
3617
3624
  rulesDir: ".github/instructions",
3618
3625
  extension: ".instructions.md",
3619
- convert: ca
3626
+ convert: da
3620
3627
  }
3621
3628
  };
3622
- async function ua(e) {
3623
- let t = l.join(e, A), n = (await o.readdir(t, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isFile() && e.name.endsWith(".mdc"));
3629
+ async function pa(e) {
3630
+ let t = u.join(e, j), n = (await s.readdir(t, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isFile() && e.name.endsWith(".mdc"));
3624
3631
  return await Promise.all(n.map(async (e) => {
3625
- let n = l.join(t, e.name), { frontmatter: r, content: i } = aa(await o.readFile(n, "utf-8"));
3632
+ let n = u.join(t, e.name), { frontmatter: r, content: i } = ca(await s.readFile(n, "utf-8"));
3626
3633
  return {
3627
3634
  frontmatter: r,
3628
3635
  content: i,
@@ -3630,44 +3637,44 @@ async function ua(e) {
3630
3637
  };
3631
3638
  }));
3632
3639
  }
3633
- async function da(e, t) {
3640
+ async function ma(e, t) {
3634
3641
  if (t === "cursor") return;
3635
- let n = la[t], r = await ua(e), i = l.join(e, n.rulesDir);
3636
- await o.mkdir(i, { recursive: !0 }), await Promise.all(r.map((e) => {
3642
+ let n = fa[t], r = await pa(e), i = u.join(e, n.rulesDir);
3643
+ await s.mkdir(i, { recursive: !0 }), await Promise.all(r.map((e) => {
3637
3644
  let t = n.convert(e), r = e.filename.replace(/\.mdc$/, n.extension);
3638
- return o.writeFile(l.join(i, r), t, "utf-8");
3639
- })), await $n(l.join(e, j)), await $n(l.join(e, te));
3645
+ return s.writeFile(u.join(i, r), t, "utf-8");
3646
+ })), await er(u.join(e, te)), await er(u.join(e, M));
3640
3647
  }
3641
3648
  //#endregion
3642
3649
  //#region src/core/env-files.ts
3643
- var fa = [
3650
+ var ha = [
3644
3651
  "apps",
3645
3652
  "packages",
3646
3653
  "libs",
3647
3654
  "shared"
3648
3655
  ];
3649
- async function pa(e) {
3650
- let t = await ma(e);
3656
+ async function ga(e) {
3657
+ let t = await _a(e);
3651
3658
  return (await Promise.all(t.map(async (t) => {
3652
- let n = l.join(l.dirname(t), ".env");
3653
- return await J(n) ? null : (await o.copyFile(t, n), l.relative(e, n));
3659
+ let n = u.join(u.dirname(t), ".env");
3660
+ return await Y(n) ? null : (await s.copyFile(t, n), u.relative(e, n));
3654
3661
  }))).filter((e) => e !== null).sort();
3655
3662
  }
3656
- async function ma(e) {
3657
- let t = [l.join(e, ".env.example")], n = await Promise.all(fa.map(async (t) => {
3658
- let n = l.join(e, t);
3659
- return (await o.readdir(n, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isDirectory()).map((e) => l.join(n, e.name, ".env.example"));
3663
+ async function _a(e) {
3664
+ let t = [u.join(e, ".env.example")], n = await Promise.all(ha.map(async (t) => {
3665
+ let n = u.join(e, t);
3666
+ return (await s.readdir(n, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isDirectory()).map((e) => u.join(n, e.name, ".env.example"));
3660
3667
  }));
3661
- return t.push(...n.flat()), (await Promise.all(t.map(async (e) => await J(e) ? e : null))).filter((e) => e !== null);
3668
+ return t.push(...n.flat()), (await Promise.all(t.map(async (e) => await Y(e) ? e : null))).filter((e) => e !== null);
3662
3669
  }
3663
3670
  //#endregion
3664
3671
  //#region src/core/post-clone.ts
3665
- var Q = "@hype-stack/", ha = "hype-stack";
3666
- async function ga(e) {
3667
- await $n(l.join(e, ".git"));
3672
+ var Q = "@hype-stack/", va = "hype-stack";
3673
+ async function ya(e) {
3674
+ await er(u.join(e, ".git"));
3668
3675
  }
3669
- async function _a(e) {
3670
- await q("git", ["init"], { cwd: e }), await q("git", ["add", "."], { cwd: e }), await q("git", [
3676
+ async function ba(e) {
3677
+ await J("git", ["init"], { cwd: e }), await J("git", ["add", "."], { cwd: e }), await J("git", [
3671
3678
  "-c",
3672
3679
  "user.name=Hype Stack CLI",
3673
3680
  "-c",
@@ -3677,22 +3684,22 @@ async function _a(e) {
3677
3684
  "Initial commit from Hype Stack CLI"
3678
3685
  ], { cwd: e });
3679
3686
  }
3680
- async function va(e, t) {
3681
- let n = `@${t}/`, r = await Sa(e);
3687
+ async function xa(e, t) {
3688
+ let n = `@${t}/`, r = await Ta(e);
3682
3689
  for (let e of r) {
3683
- let t = await Xn(e);
3690
+ let t = await Zn(e);
3684
3691
  if (!t) continue;
3685
3692
  let r = !1;
3686
- t.name?.startsWith(Q) && (t.name = t.name.replace(Q, n), r = !0), ya(t.dependencies, n) && (r = !0), ya(t.devDependencies, n) && (r = !0), t.nx && ba(t.nx, n) && (r = !0);
3687
- let i = await o.readFile(e, "utf-8");
3693
+ t.name?.startsWith(Q) && (t.name = t.name.replace(Q, n), r = !0), Sa(t.dependencies, n) && (r = !0), Sa(t.devDependencies, n) && (r = !0), t.nx && Ca(t.nx, n) && (r = !0);
3694
+ let i = await s.readFile(e, "utf-8");
3688
3695
  if (i.includes(Q)) {
3689
3696
  let t = i.replaceAll(Q, n);
3690
- await o.writeFile(e, t, "utf-8");
3691
- } else r && await Zn(e, t);
3697
+ await s.writeFile(e, t, "utf-8");
3698
+ } else r && await Qn(e, t);
3692
3699
  }
3693
- await pi(e, t), await xa(e, t);
3700
+ await hi(e, t), await wa(e, t);
3694
3701
  }
3695
- function ya(e, t) {
3702
+ function Sa(e, t) {
3696
3703
  if (!e) return !1;
3697
3704
  let n = !1;
3698
3705
  for (let r of Object.keys(e)) if (r.startsWith(Q)) {
@@ -3701,7 +3708,7 @@ function ya(e, t) {
3701
3708
  }
3702
3709
  return n;
3703
3710
  }
3704
- function ba(e, t) {
3711
+ function Ca(e, t) {
3705
3712
  if (!e) return !1;
3706
3713
  let n = !1;
3707
3714
  if (e.implicitDependencies &&= e.implicitDependencies.map((e) => e.startsWith(Q) ? (n = !0, e.replace(Q, t)) : e), e.targets) {
@@ -3709,54 +3716,54 @@ function ba(e, t) {
3709
3716
  }
3710
3717
  return n;
3711
3718
  }
3712
- async function xa(e, t) {
3713
- let n = l.join(e, "packages/enums/src/app/index.ts"), r = await o.readFile(n, "utf-8").catch(() => null);
3719
+ async function wa(e, t) {
3720
+ let n = u.join(e, "packages/enums/src/app/index.ts"), r = await s.readFile(n, "utf-8").catch(() => null);
3714
3721
  if (!r) return;
3715
- let i = t.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" "), a = r.replaceAll(`id: "${ha}"`, `id: "${t}"`).replaceAll(`name: "${ha}"`, `name: "${t}"`).replace(/name: "Hype Stack"/, `name: "${i}"`).replace(/description: ".*?"/, `description: "${i} application"`);
3716
- await o.writeFile(n, a, "utf-8");
3722
+ let i = t.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" "), a = r.replaceAll(`id: "${va}"`, `id: "${t}"`).replaceAll(`name: "${va}"`, `name: "${t}"`).replace(/name: "Hype Stack"/, `name: "${i}"`).replace(/description: ".*?"/, `description: "${i} application"`);
3723
+ await s.writeFile(n, a, "utf-8");
3717
3724
  }
3718
- async function Sa(e) {
3719
- let t = [], n = l.join(e, "package.json");
3720
- (await o.stat(n).catch(() => null))?.isFile() && t.push(n);
3725
+ async function Ta(e) {
3726
+ let t = [], n = u.join(e, "package.json");
3727
+ (await s.stat(n).catch(() => null))?.isFile() && t.push(n);
3721
3728
  for (let n of [
3722
3729
  "apps",
3723
3730
  "packages",
3724
3731
  "libs",
3725
3732
  "shared"
3726
3733
  ]) {
3727
- let r = l.join(e, n), i = await o.readdir(r, { withFileTypes: !0 }).catch(() => []);
3734
+ let r = u.join(e, n), i = await s.readdir(r, { withFileTypes: !0 }).catch(() => []);
3728
3735
  for (let e of i) {
3729
3736
  if (!e.isDirectory()) continue;
3730
- let n = l.join(r, e.name, "package.json");
3731
- (await o.stat(n).catch(() => null))?.isFile() && t.push(n);
3737
+ let n = u.join(r, e.name, "package.json");
3738
+ (await s.stat(n).catch(() => null))?.isFile() && t.push(n);
3732
3739
  }
3733
3740
  }
3734
3741
  return t;
3735
3742
  }
3736
3743
  //#endregion
3737
3744
  //#region src/core/post-setup.ts
3738
- async function Ca() {
3739
- return (await q("docker", ["info"], { cwd: process.cwd() })).exitCode === 0;
3745
+ async function Ea() {
3746
+ return (await J("docker", ["info"], { cwd: process.cwd() })).exitCode === 0;
3740
3747
  }
3741
- async function wa(e) {
3742
- return J(`${e}/apps/backend/.env`);
3748
+ async function Da(e) {
3749
+ return Y(`${e}/apps/backend/.env`);
3743
3750
  }
3744
- async function Ta(e, t, n) {
3745
- 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 a.confirm({
3751
+ async function Oa(e, t, n) {
3752
+ 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({
3746
3753
  message: r,
3747
3754
  initialValue: !0
3748
3755
  });
3749
- if (a.isCancel(i) && Z(), !i) return a.log.info(L.muted("Skipping Docker services and database migrations.")), !1;
3750
- let o = a.spinner();
3751
- return o.start("Starting Docker services..."), (await q("docker", [
3756
+ if (o.isCancel(i) && Z(), !i) return o.log.info(R.muted("Skipping Docker services and database migrations.")), !1;
3757
+ let a = o.spinner();
3758
+ return a.start("Starting Docker services..."), (await J("docker", [
3752
3759
  "compose",
3753
3760
  "up",
3754
3761
  "-d"
3755
- ], { cwd: `${e}/apps/backend` })).exitCode === 0 ? (o.stop(L.success("Docker services started")), !0) : (o.stop(L.warning("Failed to start Docker services")), a.log.warn(L.muted("Run `docker compose up -d` in apps/backend manually to start services.")), a.log.info(L.muted("Skipping database migrations.")), !1);
3762
+ ], { 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);
3756
3763
  }
3757
- async function Ea(e, t = 15, n = 2e3) {
3764
+ async function ka(e, t = 15, n = 2e3) {
3758
3765
  for (let r = 0; r < t; r++) {
3759
- if ((await q("docker", [
3766
+ if ((await J("docker", [
3760
3767
  "compose",
3761
3768
  "exec",
3762
3769
  "-T",
@@ -3769,50 +3776,50 @@ async function Ea(e, t = 15, n = 2e3) {
3769
3776
  }
3770
3777
  return !1;
3771
3778
  }
3772
- async function Da(e, t, n = {}) {
3773
- if (!await wa(e)) {
3774
- a.log.warn(`${L.path(".env")} not found in ${L.path("apps/backend")}. Skipping Docker and migrations - configure it first.`);
3779
+ async function Aa(e, t, n = {}) {
3780
+ if (!await Da(e)) {
3781
+ o.log.warn(`${R.path(".env")} not found in ${R.path("apps/backend")}. Skipping Docker and migrations - configure it first.`);
3775
3782
  return;
3776
3783
  }
3777
- if (!await Ta(e, t, await Ca())) return;
3778
- let r = a.spinner();
3779
- if (r.start("Waiting for Postgres to be ready..."), !await Ea(e, n.postgresMaxAttempts ?? 15, n.postgresCheckIntervalMs ?? 2e3)) {
3780
- r.stop(L.warning("Postgres health check timed out")), a.log.warn(L.muted("Run migrations manually once Postgres is ready: pnpm --filter @internal/backend migration:latest"));
3784
+ if (!await Oa(e, t, await Ea())) return;
3785
+ let r = o.spinner();
3786
+ if (r.start("Waiting for Postgres to be ready..."), !await ka(e, n.postgresMaxAttempts ?? 15, n.postgresCheckIntervalMs ?? 2e3)) {
3787
+ 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"));
3781
3788
  return;
3782
3789
  }
3783
- r.stop(L.success("Postgres is ready"));
3784
- let i = t ? !0 : await a.confirm({
3785
- message: `Run database migrations with ${L.command("prisma migrate deploy")}?`,
3790
+ r.stop(R.success("Postgres is ready"));
3791
+ let i = t ? !0 : await o.confirm({
3792
+ message: `Run database migrations with ${R.command("prisma migrate deploy")}?`,
3786
3793
  initialValue: !0
3787
3794
  });
3788
- if (a.isCancel(i) && Z(), !i) {
3789
- a.log.info(L.muted("Skipping database migrations."));
3795
+ if (o.isCancel(i) && Z(), !i) {
3796
+ o.log.info(R.muted("Skipping database migrations."));
3790
3797
  return;
3791
3798
  }
3792
- let o = a.spinner();
3793
- if (o.start("Running database migrations..."), (await q("pnpm", [
3799
+ let a = o.spinner();
3800
+ if (a.start("Running database migrations..."), (await J("pnpm", [
3794
3801
  "--filter",
3795
3802
  "@internal/backend",
3796
3803
  "migration:latest"
3797
3804
  ], { cwd: e })).exitCode !== 0) {
3798
- o.stop(L.warning("Migrations failed")), a.log.warn(L.muted("Run `pnpm --filter @internal/backend migration:latest` manually to apply migrations."));
3805
+ a.stop(R.warning("Migrations failed")), o.log.warn(R.muted("Run `pnpm --filter @internal/backend migration:latest` manually to apply migrations."));
3799
3806
  return;
3800
3807
  }
3801
- o.stop(L.success("Database migrations applied"));
3802
- let s = a.spinner();
3803
- if (s.start("Generating Prisma client..."), (await q("pnpm", [
3808
+ a.stop(R.success("Database migrations applied"));
3809
+ let s = o.spinner();
3810
+ if (s.start("Generating Prisma client..."), (await J("pnpm", [
3804
3811
  "--filter",
3805
3812
  "@internal/backend",
3806
3813
  "generate"
3807
3814
  ], { cwd: e })).exitCode !== 0) {
3808
- s.stop(L.warning("Prisma client generation failed")), a.log.warn(L.muted("Run `pnpm --filter @internal/backend generate` manually."));
3815
+ s.stop(R.warning("Prisma client generation failed")), o.log.warn(R.muted("Run `pnpm --filter @internal/backend generate` manually."));
3809
3816
  return;
3810
3817
  }
3811
- s.stop(L.success("Prisma client generated"));
3818
+ s.stop(R.success("Prisma client generated"));
3812
3819
  }
3813
3820
  //#endregion
3814
3821
  //#region src/core/readme.ts
3815
- var Oa = {
3822
+ var ja = {
3816
3823
  cursor: {
3817
3824
  label: "Cursor",
3818
3825
  rulesDir: ".cursor/rules"
@@ -3829,24 +3836,24 @@ var Oa = {
3829
3836
  label: "GitHub Copilot",
3830
3837
  rulesDir: ".github/instructions"
3831
3838
  }
3832
- }, ka = {
3839
+ }, Ma = {
3833
3840
  backend: "Hono API server (Postgres, Prisma, Kysely, Valkey cache, WorkOS auth)",
3834
3841
  frontend: "React + Vite app talking to the backend through the typed HyperFetch SDK"
3835
- }, Aa = {
3842
+ }, Na = {
3836
3843
  enums: "Shared enums and app config used across apps",
3837
3844
  cli: "Project tooling and code generators"
3838
3845
  };
3839
- function ja(e) {
3846
+ function Pa(e) {
3840
3847
  return e.split(/[-_]/).filter(Boolean).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" ");
3841
3848
  }
3842
- function Ma(e, t) {
3849
+ function Fa(e, t) {
3843
3850
  return Object.entries(e).toSorted(([e], [t]) => e.localeCompare(t)).map(([e, n]) => {
3844
3851
  let r = t[e];
3845
3852
  return r ? `- \`${n}\` - ${r}` : `- \`${n}\``;
3846
3853
  });
3847
3854
  }
3848
- function Na(e) {
3849
- let { projectName: t, editor: n, workspace: r } = e, i = ja(t), a = Oa[n], o = !!r.apps.backend, s = Ma(r.apps, ka), c = Ma(r.packages, Aa), l = [];
3855
+ function Ia(e) {
3856
+ let { projectName: t, editor: n, workspace: r } = e, i = Pa(t), a = ja[n], o = !!r.apps.backend, s = Fa(r.apps, Ma), c = Fa(r.packages, Na), l = [];
3850
3857
  s.length > 0 && l.push(...s), c.length > 0 && l.push(...c), l.push("- `stack.json` - Hype Stack workspace config (apps, paths, installed packs)");
3851
3858
  let u = [];
3852
3859
  u.push(`# ${i}`), u.push([
@@ -3954,63 +3961,119 @@ function Na(e) {
3954
3961
  "stays useful."
3955
3962
  ].join("\n")), u.join("\n\n") + "\n";
3956
3963
  }
3957
- async function Pa(e, t) {
3958
- let n = l.join(e, "README.md");
3959
- await o.writeFile(n, Na(t), "utf-8");
3964
+ async function La(e, t) {
3965
+ let n = u.join(e, "README.md");
3966
+ await s.writeFile(n, Ia(t), "utf-8");
3960
3967
  }
3961
3968
  //#endregion
3962
3969
  //#region src/core/tracking.ts
3963
- async function Fa(e) {
3970
+ async function Ra(e) {
3964
3971
  try {
3965
3972
  let t = {
3966
- "X-Device-Id": Bn(),
3967
- "X-Client-Info": Vn()
3968
- }, n = await In(M()).catch(() => null);
3969
- n?.token && (t.Authorization = `Bearer ${n.token}`), await K.createRequest()({
3973
+ "X-Device-Id": Vn(),
3974
+ "X-Client-Info": Hn()
3975
+ }, n = await Ln(N()).catch(() => null);
3976
+ n?.token && (t.Authorization = `Bearer ${n.token}`), await q.createRequest()({
3970
3977
  endpoint: "/cli/track",
3971
3978
  method: "POST"
3972
3979
  }).setPayload({ event: e }).setHeaders(t).send();
3973
3980
  } catch {}
3974
3981
  }
3975
3982
  //#endregion
3983
+ //#region src/ui/swatch.ts
3984
+ function za(e) {
3985
+ let t = e.trim().match(/^oklch\(([^)]+)\)$/i);
3986
+ if (!t) return null;
3987
+ let n = t[1].trim().split(/\s+/);
3988
+ if (n.length < 3) return null;
3989
+ let r = n[0], i = Number(n[1]), a = Number(n[2]);
3990
+ if (Number.isNaN(i) || Number.isNaN(a)) return null;
3991
+ let o;
3992
+ if (r.endsWith("%")) {
3993
+ let e = Number(r.slice(0, -1));
3994
+ if (Number.isNaN(e)) return null;
3995
+ o = e / 100;
3996
+ } else if (o = Number(r), Number.isNaN(o)) return null;
3997
+ return {
3998
+ l: o,
3999
+ c: i,
4000
+ h: a
4001
+ };
4002
+ }
4003
+ function Ba(e) {
4004
+ return Math.min(255, Math.max(0, Math.round(e)));
4005
+ }
4006
+ function Va(e) {
4007
+ return e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055;
4008
+ }
4009
+ function Ha({ l: e, c: t, h: n }) {
4010
+ 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;
4011
+ return [
4012
+ Ba(Va(f) * 255),
4013
+ Ba(Va(p) * 255),
4014
+ Ba(Va(m) * 255)
4015
+ ];
4016
+ }
4017
+ var Ua = "\x1B[49m";
4018
+ function Wa(e, t) {
4019
+ let n = e[t];
4020
+ if (!n) return c.dim(" ");
4021
+ let r = za(n);
4022
+ if (!r) return c.dim(" ");
4023
+ let [i, a, o] = Ha(r);
4024
+ return `\x1b[48;2;${i};${a};${o}m ${Ua}`;
4025
+ }
4026
+ var Ga = [
4027
+ "primary",
4028
+ "secondary",
4029
+ "accent"
4030
+ ];
4031
+ function Ka(e) {
4032
+ return Ga.map((t) => Wa(e, t)).join("");
4033
+ }
4034
+ function qa(e) {
4035
+ return `${Ka(e.light)} ${c.dim("·")} ${Ka(e.dark)}`;
4036
+ }
4037
+ //#endregion
3976
4038
  //#region src/utils/validate.ts
3977
- function Ia(e) {
4039
+ function Ja(e) {
3978
4040
  if (!e.trim()) return "Project name cannot be empty";
3979
- if (!O.test(e)) return "Project name must be lowercase, alphanumeric, and may contain hyphens, dots, or underscores";
4041
+ if (!ee.test(e)) return "Project name must be lowercase, alphanumeric, and may contain hyphens, dots, or underscores";
3980
4042
  if (e.length > 214) return "Project name is too long (max 214 characters)";
3981
4043
  }
3982
4044
  //#endregion
3983
4045
  //#region src/commands/create.ts
3984
- async function La(i) {
3985
- Xi(), a.intro(L.brandBold("Create a new Hype Stack project"));
3986
- let o = i.yes === !0, s;
3987
- if (o && i.name) {
3988
- let e = Ia(i.name);
3989
- e && (a.log.error(e), Z()), s = i.name;
4046
+ async function Ya(a) {
4047
+ Qi(), o.intro(R.brandBold("Create a new Hype Stack project"));
4048
+ let s = a.yes === !0, c;
4049
+ if (s && a.name) {
4050
+ let e = Ja(a.name);
4051
+ e && (o.log.error(e), Z()), c = a.name;
3990
4052
  } else {
3991
- let e = await a.text({
4053
+ let e = await o.text({
3992
4054
  message: "What is your project named?",
3993
4055
  placeholder: "my-app",
3994
- initialValue: i.name ?? "",
3995
- validate: (e) => Ia(e ?? "")
4056
+ initialValue: a.name ?? "",
4057
+ validate: (e) => Ja(e ?? "")
3996
4058
  });
3997
- a.isCancel(e) && Z(), s = e;
4059
+ o.isCancel(e) && Z(), c = e;
3998
4060
  }
3999
- let c;
4000
- if (o) c = i.directory ?? `./${s}`;
4061
+ let l;
4062
+ if (s) l = a.directory ?? `./${c}`;
4001
4063
  else {
4002
- let e = await a.text({
4064
+ let e = await o.text({
4003
4065
  message: "Where should we create it?",
4004
- placeholder: `./${s}`,
4005
- initialValue: i.directory ?? `./${s}`
4066
+ placeholder: `./${c}`,
4067
+ initialValue: a.directory ?? `./${c}`
4006
4068
  });
4007
- a.isCancel(e) && Z(), c = e;
4069
+ o.isCancel(e) && Z(), l = e;
4008
4070
  }
4009
- let u = i.editor && ee.includes(i.editor) ? i.editor : null, d;
4010
- if (u) d = u;
4011
- else if (o) d = "cursor";
4071
+ a.directory === void 0 && (l = tr(l, c));
4072
+ let d = a.editor && A.includes(a.editor) ? a.editor : null, f;
4073
+ if (d) f = d;
4074
+ else if (s) f = "cursor";
4012
4075
  else {
4013
- let e = await a.select({
4076
+ let e = await o.select({
4014
4077
  message: "Which code editor do you use?",
4015
4078
  options: k.map((e) => ({
4016
4079
  value: e.value,
@@ -4019,143 +4082,147 @@ async function La(i) {
4019
4082
  })),
4020
4083
  initialValue: "cursor"
4021
4084
  });
4022
- a.isCancel(e) && Z(), d = e;
4085
+ o.isCancel(e) && Z(), f = e;
4023
4086
  }
4024
- let f = i.theme !== void 0 && r(i.theme), p;
4025
- if (f) p = i.theme;
4026
- else if (o) p = e;
4087
+ let p = a.theme !== void 0 && i(a.theme), m;
4088
+ if (p) m = a.theme;
4089
+ else if (s) m = e;
4027
4090
  else {
4028
- let n = await a.select({
4091
+ let t = await o.select({
4029
4092
  message: "Pick a color theme",
4030
- options: t,
4093
+ options: n.map((e) => ({
4094
+ value: e.name,
4095
+ label: `${qa(e)} ${e.label}`,
4096
+ hint: e.hint
4097
+ })),
4031
4098
  initialValue: e
4032
4099
  });
4033
- a.isCancel(n) && Z(), p = n;
4100
+ o.isCancel(t) && Z(), m = t;
4034
4101
  }
4035
- if (!o) {
4036
- let e = k.find((e) => e.value === d)?.label ?? d, n = t.find((e) => e.value === p)?.label ?? p, r = await a.confirm({ message: `Create ${L.highlight(s)} in ${L.path(c)} with ${L.highlight(e)} config and the ${L.highlight(n)} theme?` });
4037
- (a.isCancel(r) || !r) && Z();
4102
+ if (!s) {
4103
+ let e = k.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(l)} with ${R.highlight(e)} config and the ${R.highlight(n)} theme?` });
4104
+ (o.isCancel(r) || !r) && Z();
4038
4105
  }
4039
- let m = l.resolve(c);
4040
- if (await Jn(m) && !await Yn(m)) {
4041
- let e = await a.confirm({
4042
- message: `Directory ${L.path(m)} is not empty. Continue anyway?`,
4106
+ let h = u.resolve(l);
4107
+ if (await Yn(h) && !await Xn(h)) {
4108
+ let e = await o.confirm({
4109
+ message: `Directory ${R.path(h)} is not empty. Continue anyway?`,
4043
4110
  initialValue: !1
4044
4111
  });
4045
- (a.isCancel(e) || !e) && Z();
4046
- }
4047
- let h = a.spinner();
4048
- h.start("Cloning Hype Stack template..."), await Qi(m), h.stop(L.success("Template cloned"));
4049
- let g = a.spinner();
4050
- g.start("Setting up project..."), await ga(m), await va(m, s), await da(m, d);
4051
- let _ = await ar(m), v = sr(s, _);
4052
- await ir(m, v), await Pa(m, {
4053
- projectName: s,
4054
- editor: d,
4055
- workspace: _
4056
- }), r(p) && (await ia(l.resolve(m, v.paths?.frontend.root ?? "apps/frontend"), n(p)) || a.log.warn(L.muted(`Could not find ${L.path("assets/styles.css")} to apply the ${p} theme`))), g.stop(L.success("Project configured"));
4057
- let y = a.spinner();
4058
- y.start("Installing dependencies..."), (await q("pnpm", ["install"], { cwd: m })).exitCode === 0 ? y.stop(L.success("Dependencies installed")) : (y.stop(L.warning("Dependencies installed with warnings")), a.log.warn(L.muted("You may need to run `pnpm install` manually to resolve issues.")));
4059
- let b = a.spinner();
4060
- b.start("Initializing git repository..."), await _a(m), b.stop(L.success("Git repository initialized with clean history"));
4061
- let x = a.spinner();
4062
- x.start("Creating .env files from examples...");
4063
- let S = await pa(m);
4064
- if (S.length > 0) {
4065
- let e = S.length;
4066
- x.stop(L.success(`Created ${e} .env file${e === 1 ? "" : "s"} from examples`));
4067
- } else x.stop(L.muted("No .env.example files to copy"));
4068
- a.log.success(`${L.brandBold("Hype Stack")} project ${L.highlight(s)} is ready!`);
4069
- let C = l.relative(process.cwd(), m) || ".", w = [`${L.command(`cd ${C}`)}`];
4070
- S.length > 0 ? w.push(`Review your ${L.path(".env")} files and fill in any secrets`) : w.push(`Copy ${L.path(".env.example")} to ${L.path(".env")} and configure`), Zi(w);
4071
- let T = i.setup !== !1 && (o || await a.confirm({
4112
+ (o.isCancel(e) || !e) && Z();
4113
+ }
4114
+ let g = o.spinner();
4115
+ g.start("Cloning Hype Stack template..."), await ta(h), g.stop(R.success("Template cloned"));
4116
+ let _ = o.spinner();
4117
+ _.start("Setting up project..."), await ya(h), await xa(h, c), await ma(h, f);
4118
+ let v = await sr(h), y = lr(c, v);
4119
+ await or(h, y), await La(h, {
4120
+ projectName: c,
4121
+ editor: f,
4122
+ workspace: v
4123
+ }), i(m) && (await sa(u.resolve(h, y.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`))), _.stop(R.success("Project configured"));
4124
+ let b = o.spinner();
4125
+ b.start("Installing dependencies..."), (await J("pnpm", ["install"], { cwd: h })).exitCode === 0 ? b.stop(R.success("Dependencies installed")) : (b.stop(R.warning("Dependencies installed with warnings")), o.log.warn(R.muted("You may need to run `pnpm install` manually to resolve issues.")));
4126
+ let x = o.spinner();
4127
+ x.start("Initializing git repository..."), await ba(h), x.stop(R.success("Git repository initialized with clean history"));
4128
+ let S = o.spinner();
4129
+ S.start("Creating .env files from examples...");
4130
+ let C = await ga(h);
4131
+ if (C.length > 0) {
4132
+ let e = C.length;
4133
+ S.stop(R.success(`Created ${e} .env file${e === 1 ? "" : "s"} from examples`));
4134
+ } else S.stop(R.muted("No .env.example files to copy"));
4135
+ o.log.success(`${R.brandBold("Hype Stack")} project ${R.highlight(c)} is ready!`);
4136
+ let w = u.relative(process.cwd(), h) || ".", T = [`${R.command(`cd ${w}`)}`];
4137
+ C.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`), ea(T);
4138
+ let E = a.setup !== !1 && (s || await o.confirm({
4072
4139
  message: "Would you like to start Docker services and run database migrations now?",
4073
4140
  initialValue: !0
4074
4141
  }));
4075
- a.isCancel(T) && Z(), T ? await Da(m, o) : (a.log.info(L.muted("You can start services later:")), Zi([
4076
- `${L.command("docker compose up -d")} ${L.muted("(in apps/backend - start Postgres, Valkey, RustFS)")}`,
4077
- `${L.command("pnpm --filter @internal/backend migration:latest")} ${L.muted("(apply migrations)")}`,
4078
- `${L.command("pnpm run generate")} ${L.muted("(generate Prisma client)")}`
4079
- ])), Zi([`${L.command("pnpm dev")} ${L.muted("(start frontend + backend)")}`]), await Fa("project_create"), a.outro(L.muted("Happy building!"));
4142
+ o.isCancel(E) && Z(), E ? await Aa(h, s) : (o.log.info(R.muted("You can start services later:")), ea([
4143
+ `${R.command("docker compose up -d")} ${R.muted("(in apps/backend - start Postgres, Valkey, RustFS)")}`,
4144
+ `${R.command("pnpm --filter @internal/backend migration:latest")} ${R.muted("(apply migrations)")}`,
4145
+ `${R.command("pnpm run generate")} ${R.muted("(generate Prisma client)")}`
4146
+ ])), ea([`${R.command("pnpm dev")} ${R.muted("(start frontend + backend)")}`]), await Ra("project_create"), o.outro(R.muted("Happy building!"));
4080
4147
  }
4081
4148
  //#endregion
4082
4149
  //#region src/commands/init.ts
4083
- async function Ra(e) {
4150
+ async function Xa(e) {
4084
4151
  let t = e.cwd ?? process.cwd(), n = e.silent ?? !1;
4085
- if (n || (X(), a.intro(L.brandBold("Initialize Hype Stack configuration"))), !await cr(t)) {
4086
- a.log.error(`This doesn't look like a Hype Stack project. ${L.muted("Expected apps/ directory and package.json")}`), a.outro(L.muted(`Run ${L.command("hype-stack create")} to scaffold a new project.`));
4152
+ if (n || ($i(), o.intro(R.brandBold("Initialize Hype Stack configuration"))), !await ur(t)) {
4153
+ 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("hype-stack create")} to scaffold a new project.`));
4087
4154
  return;
4088
4155
  }
4089
- if (await rr(t)) {
4090
- let e = await nr(t);
4156
+ if (await ar(t)) {
4157
+ let e = await ir(t);
4091
4158
  if (e && !n) {
4092
- a.log.info(`Found existing ${L.path("stack.json")} for project ${L.highlight(e.name)}`);
4093
- let t = await a.confirm({
4159
+ o.log.info(`Found existing ${R.path("stack.json")} for project ${R.highlight(e.name)}`);
4160
+ let t = await o.confirm({
4094
4161
  message: "Overwrite existing configuration?",
4095
4162
  initialValue: !1
4096
4163
  });
4097
- if (a.isCancel(t) || !t) {
4098
- a.outro(L.muted("Keeping existing configuration."));
4164
+ if (o.isCancel(t) || !t) {
4165
+ o.outro(R.muted("Keeping existing configuration."));
4099
4166
  return;
4100
4167
  }
4101
4168
  }
4102
4169
  }
4103
- let r = await ar(t);
4170
+ let r = await sr(t);
4104
4171
  if (!n) {
4105
4172
  let e = Object.entries(r.apps), t = Object.entries(r.packages);
4106
4173
  if (e.length > 0) {
4107
- a.log.info(L.bold("Detected apps:"));
4108
- for (let [t, n] of e) a.log.message(` ${R.arrow} ${L.highlight(t)} ${L.muted(`→ ${n}`)}`);
4174
+ o.log.info(R.bold("Detected apps:"));
4175
+ for (let [t, n] of e) o.log.message(` ${z.arrow} ${R.highlight(t)} ${R.muted(`→ ${n}`)}`);
4109
4176
  }
4110
4177
  if (t.length > 0) {
4111
- a.log.info(L.bold("Detected packages:"));
4112
- for (let [e, n] of t) a.log.message(` ${R.arrow} ${L.highlight(e)} ${L.muted(`→ ${n}`)}`);
4178
+ o.log.info(R.bold("Detected packages:"));
4179
+ for (let [e, n] of t) o.log.message(` ${z.arrow} ${R.highlight(e)} ${R.muted(`→ ${n}`)}`);
4113
4180
  }
4114
- e.length === 0 && t.length === 0 && a.log.warn("No apps or packages detected in the workspace.");
4181
+ e.length === 0 && t.length === 0 && o.log.warn("No apps or packages detected in the workspace.");
4115
4182
  }
4116
- let i = (await Xn(l.join(t, "package.json")))?.name?.replace(/^@/, "").replace(/\/source$/, "") ?? "my-app", o = i;
4183
+ let i = (await Zn(u.join(t, "package.json")))?.name?.replace(/^@/, "").replace(/\/source$/, "") ?? "my-app", a = i;
4117
4184
  if (!n) {
4118
- let e = await a.text({
4185
+ let e = await o.text({
4119
4186
  message: "Project name for stack.json?",
4120
4187
  placeholder: i,
4121
4188
  initialValue: i
4122
4189
  });
4123
- a.isCancel(e) && Z(), o = e;
4190
+ o.isCancel(e) && Z(), a = e;
4124
4191
  }
4125
- await ir(t, sr(o, r)), n || (a.log.success(`${L.path("stack.json")} written successfully`), a.outro(L.muted("Your project is mapped and ready for Hype Stack CLI commands.")));
4192
+ await or(t, lr(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.")));
4126
4193
  }
4127
- async function za(e, t = {}) {
4128
- if (await rr(e)) return !0;
4129
- let n = t.runInit ?? ((e) => Ra({
4194
+ async function Za(e, t = {}) {
4195
+ if (await ar(e)) return !0;
4196
+ let n = t.runInit ?? ((e) => Xa({
4130
4197
  cwd: e,
4131
4198
  silent: !0
4132
- })), r = t.runCreate ?? ((e) => La({ directory: e }));
4133
- if (await cr(e)) {
4134
- a.log.warn(`No ${L.path("stack.json")} found in ${L.path(e)}.`);
4135
- let t = await a.confirm({
4136
- message: `Create ${L.path("stack.json")} now?`,
4199
+ })), r = t.runCreate ?? ((e) => Ya({ directory: e }));
4200
+ if (await ur(e)) {
4201
+ o.log.warn(`No ${R.path("stack.json")} found in ${R.path(e)}.`);
4202
+ let t = await o.confirm({
4203
+ message: `Create ${R.path("stack.json")} now?`,
4137
4204
  initialValue: !0
4138
4205
  });
4139
- if (a.isCancel(t) || !t) return !1;
4206
+ if (o.isCancel(t) || !t) return !1;
4140
4207
  await n(e);
4141
- let r = await rr(e);
4142
- return r && a.log.success(`${L.path("stack.json")} created`), r;
4208
+ let r = await ar(e);
4209
+ return r && o.log.success(`${R.path("stack.json")} created`), r;
4143
4210
  }
4144
- a.log.warn(`This doesn't look like a Hype Stack project, and there's no ${L.path("stack.json")} here.`);
4145
- let i = await a.confirm({
4146
- message: `Is ${L.path(e)} where you want to work?`,
4211
+ o.log.warn(`This doesn't look like a Hype Stack project, and there's no ${R.path("stack.json")} here.`);
4212
+ let i = await o.confirm({
4213
+ message: `Is ${R.path(e)} where you want to work?`,
4147
4214
  initialValue: !0
4148
4215
  });
4149
- if (a.isCancel(i) || !i) return !1;
4150
- let o = await a.confirm({
4216
+ if (o.isCancel(i) || !i) return !1;
4217
+ let a = await o.confirm({
4151
4218
  message: "Create a new Hype Stack project here?",
4152
4219
  initialValue: !0
4153
4220
  });
4154
- return a.isCancel(o) || !o ? !1 : (await r(e), await rr(e));
4221
+ return o.isCancel(a) || !a ? !1 : (await r(e), await ar(e));
4155
4222
  }
4156
4223
  //#endregion
4157
4224
  //#region src/core/npm-deps.ts
4158
- function Ba(e, t) {
4225
+ function Qa(e, t) {
4159
4226
  let n = [], r = [];
4160
4227
  if (!e) return {
4161
4228
  errors: n,
@@ -4186,7 +4253,7 @@ function Ba(e, t) {
4186
4253
  operations: r
4187
4254
  };
4188
4255
  }
4189
- function Va(e) {
4256
+ function $a(e) {
4190
4257
  let t = {};
4191
4258
  for (let n of e) if (n) for (let [e, r] of Object.entries(n)) t[e] = {
4192
4259
  ...t[e],
@@ -4194,15 +4261,15 @@ function Va(e) {
4194
4261
  };
4195
4262
  return t;
4196
4263
  }
4197
- async function Ha(e, t, n = q) {
4264
+ async function eo(e, t, n = J) {
4198
4265
  let r = [];
4199
4266
  for (let i of e) {
4200
- let e = l.join(t, i.relativeDir);
4201
- if (!await J(l.join(e, "package.json"))) {
4267
+ let e = u.join(t, i.relativeDir);
4268
+ if (!await Y(u.join(e, "package.json"))) {
4202
4269
  r.push(`Cannot install npm dependencies under "${i.relativeDir}": package.json not found.`);
4203
4270
  continue;
4204
4271
  }
4205
- let a = l.normalize(i.relativeDir), o;
4272
+ let a = u.normalize(i.relativeDir), o;
4206
4273
  try {
4207
4274
  o = await n("pnpm", [
4208
4275
  "add",
@@ -4230,36 +4297,36 @@ async function Ha(e, t, n = q) {
4230
4297
  function $(e) {
4231
4298
  return e instanceof Error ? e.message : String(e);
4232
4299
  }
4233
- async function Ua(e, t, n) {
4300
+ async function to(e, t, n) {
4234
4301
  let r = e.filter((e) => e.tier === "paid" && !t.has(e.name)).map((e) => e.name);
4235
- return r.length === 0 ? {} : hr(r, n).catch(() => ({}));
4302
+ return r.length === 0 ? {} : _r(r, n).catch(() => ({}));
4236
4303
  }
4237
- function Wa(e, t) {
4238
- return e === "free" ? L.success("free") : e === "owned" ? L.accent("owned") : `${L.highlight(`$${t}`)} ${L.muted("locked")}`;
4304
+ function no(e, t) {
4305
+ return e === "free" ? R.success("free") : e === "owned" ? R.accent("owned") : `${R.highlight(`$${t}`)} ${R.muted("locked")}`;
4239
4306
  }
4240
- async function Ga(e, t, n) {
4307
+ async function ro(e, t, n) {
4241
4308
  let r = e.filter((e) => t(e)), i = e.filter((e) => !t(e));
4242
- i.length > 0 && a.log.warning(`Skipping ${i.join(", ")} because ${i.length === 1 ? "it depends" : "they depend"} on a pack you don't own yet.`), await qn(r.map((e) => n.get(e)).filter((e) => e !== void 0).map((e) => ({
4309
+ 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 Jn(r.map((e) => n.get(e)).filter((e) => e !== void 0).map((e) => ({
4243
4310
  name: e.name,
4244
4311
  displayName: e.displayName,
4245
4312
  price: e.price
4246
4313
  })));
4247
4314
  }
4248
- function Ka(e, t) {
4315
+ function io(e, t) {
4249
4316
  let n = e.map((e, n) => {
4250
4317
  let r = t.get(e), i = r ? r.displayName : e;
4251
- return ` ${L.muted(`${n + 1}.`)} ${L.brand(i)}`;
4318
+ return ` ${R.muted(`${n + 1}.`)} ${R.brand(i)}`;
4252
4319
  });
4253
- a.note([
4320
+ o.note([
4254
4321
  "These packs will be installed, in order:",
4255
4322
  "",
4256
4323
  ...n
4257
4324
  ].join("\n"), "Install Plan");
4258
4325
  }
4259
- async function qa(e, t) {
4326
+ async function ao(e, t) {
4260
4327
  let n = [];
4261
4328
  for (let r of e) {
4262
- let e = await lr(r), i = await ur(r, t);
4329
+ let e = await dr(r), i = await fr(r, t);
4263
4330
  if (i.status === "denied") throw Error(`Access to "${r}" was denied (${i.reason}). Try 'hype-stack login' or check your license.`);
4264
4331
  n.push({
4265
4332
  manifest: e,
@@ -4268,128 +4335,128 @@ async function qa(e, t) {
4268
4335
  }
4269
4336
  return n;
4270
4337
  }
4271
- async function Ja(e) {
4272
- let { prepared: t, paths: n, cwd: r, spinner: i } = e, o = Ba(Va(t.map((e) => e.manifest.dependencies_npm)), n);
4273
- if (o.errors.length > 0) {
4274
- for (let e of o.errors) a.log.error(e);
4338
+ async function oo(e) {
4339
+ let { prepared: t, paths: n, cwd: r, spinner: i } = e, a = Qa($a(t.map((e) => e.manifest.dependencies_npm)), n);
4340
+ if (a.errors.length > 0) {
4341
+ for (let e of a.errors) o.log.error(e);
4275
4342
  return;
4276
4343
  }
4277
- if (o.operations.length === 0) return;
4344
+ if (a.operations.length === 0) return;
4278
4345
  i.start("Installing npm dependencies...");
4279
- let s = await Ha(o.operations, r);
4280
- if (i.stop(s.ok ? "npm dependencies installed" : "npm dependency installation failed"), !s.ok) for (let e of s.errors) a.log.error(e);
4346
+ let s = await eo(a.operations, r);
4347
+ if (i.stop(s.ok ? "npm dependencies installed" : "npm dependency installation failed"), !s.ok) for (let e of s.errors) o.log.error(e);
4281
4348
  }
4282
- function Ya(e) {
4349
+ function so(e) {
4283
4350
  let t = e.flatMap((e) => e.manifest.postInstall ?? []), n = [...new Set(t)];
4284
- n.length !== 0 && a.note(n.map((e) => ` ${L.muted("→")} ${e}`).join("\n"), "Next Steps");
4351
+ n.length !== 0 && o.note(n.map((e) => ` ${R.muted("→")} ${e}`).join("\n"), "Next Steps");
4285
4352
  }
4286
- async function Xa(e) {
4287
- let { prepared: t, config: n, cwd: r, force: i, yes: o, slotsByPack: s } = e, c = /* @__PURE__ */ new Set();
4353
+ async function co(e) {
4354
+ let { prepared: t, config: n, cwd: r, force: i, yes: a, slotsByPack: s } = e, c = /* @__PURE__ */ new Set();
4288
4355
  if (i) return c;
4289
- let u = await xi({
4356
+ let l = await Ci({
4290
4357
  packs: t,
4291
4358
  config: n,
4292
4359
  projectRoot: r,
4293
4360
  slotsByPack: s
4294
4361
  });
4295
- if (u.length === 0) return c;
4296
- if (o) return a.log.warning(`${u.length} existing file${u.length === 1 ? "" : "s"} kept. Pass ${L.command("--force")} to overwrite.`), c;
4297
- a.log.warning(`${u.length} file${u.length === 1 ? "" : "s"} already exist in your project.`);
4298
- for (let e of u) {
4299
- let t = l.relative(r, e.targetPath) || e.target, n = await a.confirm({
4300
- message: `Overwrite ${L.path(t)}? ${L.muted(`(${e.packName})`)}`,
4362
+ if (l.length === 0) return c;
4363
+ if (a) return o.log.warning(`${l.length} existing file${l.length === 1 ? "" : "s"} kept. Pass ${R.command("--force")} to overwrite.`), c;
4364
+ o.log.warning(`${l.length} file${l.length === 1 ? "" : "s"} already exist in your project.`);
4365
+ for (let e of l) {
4366
+ let t = u.relative(r, e.targetPath) || e.target, n = await o.confirm({
4367
+ message: `Overwrite ${R.path(t)}? ${R.muted(`(${e.packName})`)}`,
4301
4368
  initialValue: !1
4302
4369
  });
4303
- a.isCancel(n) && (a.cancel("Installation cancelled."), process.exit(0)), n && c.add(e.targetPath);
4370
+ o.isCancel(n) && (o.cancel("Installation cancelled."), process.exit(0)), n && c.add(e.targetPath);
4304
4371
  }
4305
4372
  return c;
4306
4373
  }
4307
4374
  //#endregion
4308
4375
  //#region src/commands/compose.ts
4309
- async function Za(e = {}) {
4376
+ async function lo(e = {}) {
4310
4377
  let t = e.cwd ?? process.cwd();
4311
- X();
4312
- let n = await za(t), r;
4378
+ $i();
4379
+ let n = await Za(t), r;
4313
4380
  try {
4314
- r = await nr(t);
4381
+ r = await ir(t);
4315
4382
  } catch (e) {
4316
- a.cancel(`Could not parse ${L.path("stack.json")}: ${$(e)} Run 'hype-stack init' to regenerate it.`), process.exit(1);
4383
+ o.cancel(`Could not parse ${R.path("stack.json")}: ${$(e)} Run 'hype-stack init' to regenerate it.`), process.exit(1);
4317
4384
  }
4318
- r || (a.cancel(n ? `Could not read ${L.path("stack.json")}. Run 'hype-stack init' to regenerate it, then run 'hype-stack compose' again.` : `No ${L.path("stack.json")}. Run 'hype-stack init' first, then 'hype-stack compose'.`), process.exit(1)), r.paths || (a.cancel(`${L.path("stack.json")} is missing ${L.path("paths")}. Run 'hype-stack init' again to regenerate it.`), process.exit(1)), a.intro(L.brandBold("Compose your stack"));
4319
- let i = a.spinner();
4385
+ r || (o.cancel(n ? `Could not read ${R.path("stack.json")}. Run 'hype-stack init' to regenerate it, then run 'hype-stack compose' again.` : `No ${R.path("stack.json")}. Run 'hype-stack init' first, then 'hype-stack compose'.`), process.exit(1)), r.paths || (o.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'hype-stack init' again to regenerate it.`), process.exit(1)), o.intro(R.brandBold("Compose your stack"));
4386
+ let i = o.spinner();
4320
4387
  i.start("Loading packs...");
4321
- let s;
4388
+ let a;
4322
4389
  try {
4323
- s = await mr();
4390
+ a = await gr();
4324
4391
  } catch (e) {
4325
- i.stop("Failed to load packs"), a.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4392
+ i.stop("Failed to load packs"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4326
4393
  }
4327
4394
  i.stop("Packs loaded");
4328
- 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 In(M()))?.token ?? null, p = await Ua(s, l, {
4395
+ let c = r.installedPacks ?? [], l = new Set(c), u = new Map(a.map((e) => [e.name, e])), d = e.licenseKey ?? r.licenseKey ?? null, f = (await Ln(N()))?.token ?? null, p = await to(a, l, {
4329
4396
  token: f,
4330
4397
  key: d
4331
4398
  }), m = (e) => {
4332
4399
  let t = u.get(e);
4333
4400
  return !t || t.tier === "free" ? "free" : p[e]?.owned ? "owned" : "locked";
4334
- }, h = (e) => !l.has(e) && m(e) === "locked", g = await Qa({
4335
- packs: s,
4401
+ }, h = (e) => !l.has(e) && m(e) === "locked", g = await uo({
4402
+ packs: a,
4336
4403
  installedSet: l,
4337
4404
  stateOf: m,
4338
4405
  options: e,
4339
4406
  adminAvailable: !!r.apps.admin
4340
4407
  });
4341
- if (g === null && (a.cancel("Cancelled."), process.exit(0)), g.length === 0) {
4342
- a.outro(L.muted("No packs selected. Nothing to do."));
4408
+ if (g === null && (o.cancel("Cancelled."), process.exit(0)), g.length === 0) {
4409
+ o.outro(R.muted("No packs selected. Nothing to do."));
4343
4410
  return;
4344
4411
  }
4345
- let _ = to(g), v = no(g), y = Bi(s, _), b = Ni(Vi(s, y)), x;
4412
+ let _ = mo(g), v = ho(g), y = Hi(a, _), b = Fi(Ui(a, y)), x;
4346
4413
  try {
4347
- x = Fi(_, b, c);
4414
+ x = Li(_, b, c);
4348
4415
  } catch (e) {
4349
- a.cancel($(e)), process.exit(1);
4416
+ o.cancel($(e)), process.exit(1);
4350
4417
  }
4351
4418
  if (x.order.length === 0) {
4352
- a.note(`${x.alreadyInstalled.join(", ")} already installed.`, "Nothing to do"), a.outro(L.muted("Your selection is already part of the project."));
4419
+ o.note(`${x.alreadyInstalled.join(", ")} already installed.`, "Nothing to do"), o.outro(R.muted("Your selection is already part of the project."));
4353
4420
  return;
4354
4421
  }
4355
- let S = Ii({
4422
+ let S = Ri({
4356
4423
  order: x.order,
4357
4424
  graph: b,
4358
4425
  isLocked: h,
4359
4426
  installed: c
4360
4427
  });
4361
4428
  if (S.blocked.length > 0 && !f && !d) {
4362
- let e = await Kn();
4363
- e && (f = e, p = await Ua(s, l, {
4429
+ let e = await qn();
4430
+ e && (f = e, p = await to(a, l, {
4364
4431
  token: f,
4365
4432
  key: d
4366
- }), S = Ii({
4433
+ }), S = Ri({
4367
4434
  order: x.order,
4368
4435
  graph: b,
4369
4436
  isLocked: h,
4370
4437
  installed: c
4371
4438
  }));
4372
4439
  }
4373
- if (S.blocked.length > 0 && await Ga(S.blocked, h, u), S.installable.length === 0) {
4374
- a.outro(L.muted("Nothing left to install once locked packs are removed."));
4440
+ if (S.blocked.length > 0 && await ro(S.blocked, h, u), S.installable.length === 0) {
4441
+ o.outro(R.muted("Nothing left to install once locked packs are removed."));
4375
4442
  return;
4376
4443
  }
4377
- if (Ka(S.installable, u), !e.yes) {
4378
- let e = await a.confirm({ message: `Install ${S.installable.length} pack${S.installable.length === 1 ? "" : "s"}?` });
4379
- (a.isCancel(e) || !e) && (a.cancel("Installation cancelled."), process.exit(0));
4444
+ if (io(S.installable, u), !e.yes) {
4445
+ let e = await o.confirm({ message: `Install ${S.installable.length} pack${S.installable.length === 1 ? "" : "s"}?` });
4446
+ (o.isCancel(e) || !e) && (o.cancel("Installation cancelled."), process.exit(0));
4380
4447
  }
4381
4448
  i.start("Downloading packs...");
4382
4449
  let C;
4383
4450
  try {
4384
- C = await qa(S.installable, {
4451
+ C = await ao(S.installable, {
4385
4452
  token: f,
4386
4453
  key: d
4387
4454
  });
4388
4455
  } catch (e) {
4389
- i.stop("Download failed"), a.cancel($(e)), process.exit(1);
4456
+ i.stop("Download failed"), o.cancel($(e)), process.exit(1);
4390
4457
  }
4391
4458
  i.stop(`Downloaded ${C.length} pack${C.length === 1 ? "" : "s"}`);
4392
- let w = await Xa({
4459
+ let w = await co({
4393
4460
  prepared: C,
4394
4461
  config: r,
4395
4462
  cwd: t,
@@ -4399,7 +4466,7 @@ async function Za(e = {}) {
4399
4466
  });
4400
4467
  try {
4401
4468
  i.start("Installing pack files...");
4402
- let n = await wi({
4469
+ let n = await Ei({
4403
4470
  packs: C,
4404
4471
  config: r,
4405
4472
  projectRoot: t,
@@ -4409,85 +4476,87 @@ async function Za(e = {}) {
4409
4476
  });
4410
4477
  if (n.aborted) {
4411
4478
  i.stop("Installation aborted");
4412
- for (let e of n.errors) a.log.error(e);
4413
- a.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
4479
+ for (let e of n.errors) o.log.error(e);
4480
+ o.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
4414
4481
  }
4415
- i.stop("Files installed"), n.installed.length > 0 && a.log.success(`${L.highlight(String(n.installed.length))} files installed`), n.skipped.length > 0 && a.log.warning(`${n.skipped.length} files skipped (use --force to overwrite)`);
4416
- for (let e of n.errors) a.log.error(e);
4417
- await Ja({
4482
+ i.stop("Files installed"), n.installed.length > 0 && o.log.success(`${R.highlight(String(n.installed.length))} files installed`), n.skipped.length > 0 && o.log.warning(`${n.skipped.length} files skipped (use --force to overwrite)`);
4483
+ for (let e of n.errors) o.log.error(e);
4484
+ await oo({
4418
4485
  prepared: C,
4419
4486
  paths: r.paths,
4420
4487
  cwd: t,
4421
4488
  spinner: i
4422
- }), await tr({
4489
+ }), await rr({
4423
4490
  projectRoot: t,
4424
4491
  paths: r.paths,
4425
4492
  skipPrompts: e.yes ?? !1
4426
- }), Ya(C), a.outro(L.brand(`Installed ${n.appliedPacks.join(", ")}.`));
4493
+ }), so(C), o.outro(R.brand(`Installed ${n.appliedPacks.join(", ")}.`));
4427
4494
  } finally {
4428
- await Promise.all(C.map((e) => o.rm(e.packDir, {
4495
+ await Promise.all(C.map((e) => s.rm(e.packDir, {
4429
4496
  recursive: !0,
4430
4497
  force: !0
4431
4498
  })));
4432
4499
  }
4433
4500
  }
4434
- async function Qa(e) {
4435
- let { packs: t, installedSet: n, stateOf: r, options: i, adminAvailable: o } = e;
4501
+ async function uo(e) {
4502
+ let { packs: t, installedSet: n, stateOf: r, options: i, adminAvailable: a } = e;
4436
4503
  if (i.packs && i.packs.length > 0) {
4437
- let e = i.packs.map(eo), n = e.filter((e) => !t.some((t) => t.name === e.name));
4438
- return n.length > 0 && (a.cancel(`Unknown pack${n.length === 1 ? "" : "s"}: ${n.map((e) => e.name).join(", ")}`), process.exit(1)), e;
4504
+ let e = i.packs.map(po), n = e.filter((e) => !t.some((t) => t.name === e.name));
4505
+ return n.length > 0 && (o.cancel(`Unknown pack${n.length === 1 ? "" : "s"}: ${n.map((e) => e.name).join(", ")}`), process.exit(1)), e;
4439
4506
  }
4440
4507
  let s = t.filter((e) => n.has(e.name));
4441
- s.length > 0 && a.note(s.map((e) => ` ${L.muted("✓")} ${e.displayName}`).join("\n"), "Already Installed");
4508
+ s.length > 0 && o.note(s.map((e) => ` ${R.muted("✓")} ${e.displayName}`).join("\n"), "Already Installed");
4442
4509
  let c = t.filter((e) => !n.has(e.name));
4443
- if (c.length === 0) return a.outro(L.muted("Every available pack is already installed.")), [];
4444
- let l = ji(c, { adminAvailable: o }), u = [];
4445
- for (let e of l) {
4510
+ if (c.length === 0) return o.outro(R.muted("Every available pack is already installed.")), [];
4511
+ let l = P();
4512
+ o.note(c.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${ce(`${l}/packs/${e.name}`)}`).join("\n"), "Browse packs");
4513
+ let u = Ni(c, { adminAvailable: a }), d = [];
4514
+ for (let e of u) {
4446
4515
  let t = e.packs.map((e) => {
4447
4516
  let t = r(e.name);
4448
4517
  return {
4449
4518
  value: e.name,
4450
- label: `${e.displayName} ${Wa(t, e.price)}`,
4519
+ label: `${e.displayName} ${no(t, e.price)}`,
4451
4520
  hint: e.description
4452
4521
  };
4453
4522
  });
4454
4523
  if (e.mode === "single") {
4455
- let n = await a.select({
4524
+ let n = await o.select({
4456
4525
  message: `Choose a ${e.label.toLowerCase()}`,
4457
4526
  options: t,
4458
4527
  initialValue: e.preselect ?? e.packs[0].name
4459
4528
  });
4460
- if (a.isCancel(n)) return null;
4461
- u.push({
4529
+ if (o.isCancel(n)) return null;
4530
+ d.push({
4462
4531
  name: n,
4463
4532
  slot: e.slot
4464
4533
  });
4465
4534
  continue;
4466
4535
  }
4467
- let n = await a.multiselect({
4536
+ let n = await o.multiselect({
4468
4537
  message: `Select ${e.label.toLowerCase()} to add (optional)`,
4469
4538
  options: t,
4470
4539
  required: !1
4471
4540
  });
4472
- if (a.isCancel(n)) return null;
4473
- for (let e of n) u.push({ name: e });
4541
+ if (o.isCancel(n)) return null;
4542
+ for (let e of n) d.push({ name: e });
4474
4543
  }
4475
- return u;
4544
+ return d;
4476
4545
  }
4477
- var $a = /@(frontend|admin)$/;
4478
- function eo(e) {
4479
- let t = e.match($a);
4546
+ var fo = /@(frontend|admin)$/;
4547
+ function po(e) {
4548
+ let t = e.match(fo);
4480
4549
  return t ? {
4481
4550
  name: e.slice(0, -t[0].length),
4482
4551
  slot: t[1]
4483
4552
  } : { name: e };
4484
4553
  }
4485
- function to(e) {
4554
+ function mo(e) {
4486
4555
  let t = /* @__PURE__ */ new Set(), n = [];
4487
4556
  for (let r of e) t.has(r.name) || (t.add(r.name), n.push(r.name));
4488
4557
  return n;
4489
4558
  }
4490
- function no(e) {
4559
+ function ho(e) {
4491
4560
  let t = /* @__PURE__ */ new Map();
4492
4561
  for (let n of e) {
4493
4562
  if (!n.slot) continue;
@@ -4498,42 +4567,42 @@ function no(e) {
4498
4567
  }
4499
4568
  //#endregion
4500
4569
  //#region src/commands/login.ts
4501
- async function ro() {
4502
- X(), a.intro(L.brandBold("Log in to Hype Stack")), a.log.step("Opening your browser to sign in...");
4570
+ async function go() {
4571
+ $i(), o.intro(R.brandBold("Log in to Hype Stack")), o.log.step("Opening your browser to sign in...");
4503
4572
  let e;
4504
4573
  try {
4505
- e = await Gn({ onUrl: (e) => {
4506
- a.log.info(`If your browser didn't open, visit:\n ${L.path(e)}`);
4574
+ e = await Kn({ onUrl: (e) => {
4575
+ o.log.info(`If your browser didn't open, visit:\n ${R.path(e)}`);
4507
4576
  } });
4508
4577
  } catch (e) {
4509
- a.cancel(e instanceof Error ? e.message : String(e)), process.exit(1);
4578
+ o.cancel(e instanceof Error ? e.message : String(e)), process.exit(1);
4510
4579
  }
4511
- a.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."));
4580
+ 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."));
4512
4581
  }
4513
4582
  //#endregion
4514
4583
  //#region src/commands/logout.ts
4515
- async function io() {
4516
- X(), a.intro(L.brandBold("Log out of Hype Stack"));
4517
- let e = M(), t = await In(e);
4584
+ async function _o() {
4585
+ $i(), o.intro(R.brandBold("Log out of Hype Stack"));
4586
+ let e = N(), t = await Ln(e);
4518
4587
  if (!t) {
4519
- a.outro(L.muted("You're not logged in."));
4588
+ o.outro(R.muted("You're not logged in."));
4520
4589
  return;
4521
4590
  }
4522
- await On(t.token).catch(() => null), await Rn(e), a.outro(L.brand("Logged out."));
4591
+ await kn(t.token).catch(() => null), await zn(e), o.outro(R.brand("Logged out."));
4523
4592
  }
4524
4593
  //#endregion
4525
4594
  //#region src/core/templates.ts
4526
- var ao = K.createRequest()({
4595
+ var vo = q.createRequest()({
4527
4596
  endpoint: "/templates/list",
4528
4597
  method: "GET"
4529
4598
  });
4530
- async function oo() {
4531
- let { data: e, error: t } = await ao.send();
4599
+ async function yo() {
4600
+ let { data: e, error: t } = await vo.send();
4532
4601
  if (t || !e) throw Error(`Failed to fetch template list: ${String(t)}`);
4533
4602
  return e.templates;
4534
4603
  }
4535
- async function so(e) {
4536
- let { data: t, error: n, status: r } = await K.createRequest()({
4604
+ async function bo(e) {
4605
+ let { data: t, error: n, status: r } = await q.createRequest()({
4537
4606
  endpoint: `/templates/${encodeURIComponent(e)}/manifest`,
4538
4607
  method: "GET"
4539
4608
  }).send();
@@ -4541,65 +4610,67 @@ async function so(e) {
4541
4610
  if (n || !t) throw Error(`Failed to load manifest for template "${e}": ${String(n)}`);
4542
4611
  return t;
4543
4612
  }
4544
- async function co(e, t = {}) {
4545
- let n = K.createRequest()({
4613
+ async function xo(e, t = {}) {
4614
+ let n = q.createRequest()({
4546
4615
  endpoint: `/templates/${encodeURIComponent(e)}/download`,
4547
4616
  method: "POST"
4548
4617
  }), r = {
4549
- "X-Device-Id": Bn(),
4550
- "X-Client-Info": Vn()
4618
+ "X-Device-Id": Vn(),
4619
+ "X-Client-Info": Hn()
4551
4620
  };
4552
4621
  t.token && (r.Authorization = `Bearer ${t.token}`);
4553
- let { data: i, error: a, success: s } = await n.setPayload({ key: t.licenseKey ?? void 0 }).setHeaders(r).send();
4554
- if (!s || !i) throw Error(`Failed to download template "${e}": ${String(a)}`);
4622
+ let { data: i, error: a, success: o } = await n.setPayload({ key: t.licenseKey ?? void 0 }).setHeaders(r).send();
4623
+ if (!o || !i) throw Error(`Failed to download template "${e}": ${String(a)}`);
4555
4624
  if (!i.ok) return {
4556
4625
  status: "denied",
4557
4626
  reason: i.reason,
4558
4627
  packs: i.packs ?? [],
4559
4628
  expiresAt: i.expiresAt ?? null
4560
4629
  };
4561
- let u = await o.mkdtemp(l.join(c.tmpdir(), `hype-stack-template-${e}-`));
4630
+ let c = await s.mkdtemp(u.join(l.tmpdir(), `hype-stack-template-${e}-`));
4562
4631
  return await Promise.all(i.files.map(async (e) => {
4563
- let t = l.join(u, ...e.path.split("/"));
4564
- await o.mkdir(l.dirname(t), { recursive: !0 }), await o.writeFile(t, Buffer.from(e.content, "base64"));
4632
+ let t = u.join(c, ...e.path.split("/"));
4633
+ await s.mkdir(u.dirname(t), { recursive: !0 }), await s.writeFile(t, Buffer.from(e.content, "base64"));
4565
4634
  })), {
4566
4635
  status: "ok",
4567
- templateDir: u
4636
+ templateDir: c
4568
4637
  };
4569
4638
  }
4570
4639
  //#endregion
4571
4640
  //#region src/commands/template.ts
4572
- async function lo(e = {}) {
4641
+ async function So(e = {}) {
4573
4642
  let t = e.cwd ?? process.cwd();
4574
- X();
4575
- let i = await za(t), s;
4643
+ $i();
4644
+ let n = await Za(t), a;
4576
4645
  try {
4577
- s = await nr(t);
4646
+ a = await ir(t);
4578
4647
  } catch (e) {
4579
- a.cancel(`Could not parse ${L.path("stack.json")}: ${$(e)} Run 'hype-stack init' to regenerate it.`), process.exit(1);
4648
+ o.cancel(`Could not parse ${R.path("stack.json")}: ${$(e)} Run 'hype-stack init' to regenerate it.`), process.exit(1);
4580
4649
  }
4581
- s || (a.cancel(i ? `Could not read ${L.path("stack.json")}. Run 'hype-stack init' to regenerate it, then run 'hype-stack template' again.` : `No ${L.path("stack.json")}. Run 'hype-stack init' first, then 'hype-stack template'.`), process.exit(1)), s.paths || (a.cancel(`${L.path("stack.json")} is missing ${L.path("paths")}. Run 'hype-stack init' again to regenerate it.`), process.exit(1)), a.intro(L.brandBold("Install a template"));
4582
- let c = a.spinner();
4650
+ a || (o.cancel(n ? `Could not read ${R.path("stack.json")}. Run 'hype-stack init' to regenerate it, then run 'hype-stack template' again.` : `No ${R.path("stack.json")}. Run 'hype-stack init' first, then 'hype-stack template'.`), process.exit(1)), a.paths || (o.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'hype-stack init' again to regenerate it.`), process.exit(1)), o.intro(R.brandBold("Install a template"));
4651
+ let c = o.spinner();
4583
4652
  c.start("Loading packs...");
4584
- let u;
4653
+ let l;
4585
4654
  try {
4586
- u = await mr();
4655
+ l = await gr();
4587
4656
  } catch (e) {
4588
- c.stop("Failed to load packs"), a.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4657
+ c.stop("Failed to load packs"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4589
4658
  }
4590
4659
  c.stop("Packs loaded");
4591
- let d = s.installedPacks ?? [], f = new Set(d), p = new Map(u.map((e) => [e.name, e])), m = e.licenseKey ?? s.licenseKey ?? null, h = (await In(M()))?.token ?? null;
4660
+ let d = a.installedPacks ?? [], f = new Set(d), p = new Map(l.map((e) => [e.name, e])), m = e.licenseKey ?? a.licenseKey ?? null, h = (await Ln(N()))?.token ?? null;
4592
4661
  c.start("Loading templates...");
4593
4662
  let g;
4594
4663
  try {
4595
- g = await oo();
4664
+ g = await yo();
4596
4665
  } catch (e) {
4597
- c.stop("Failed to load templates"), a.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4666
+ c.stop("Failed to load templates"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
4598
4667
  }
4599
4668
  let _ = e.templateId;
4600
4669
  if (!_) {
4601
- e.yes && (c.stop("Template id required"), a.cancel("Pass a template id with `hype-stack template <id>` (required in --yes mode)."), process.exit(1)), g.length === 0 && (c.stop("No templates available"), a.cancel("No templates are available yet. Check back later."), process.exit(1)), c.stop("Templates loaded");
4602
- let t = await a.select({
4670
+ e.yes && (c.stop("Template id required"), o.cancel("Pass a template id with `hype-stack template <id>` (required in --yes mode)."), process.exit(1)), g.length === 0 && (c.stop("No templates available"), o.cancel("No templates are available yet. Check back later."), process.exit(1)), c.stop("Templates loaded");
4671
+ let t = P();
4672
+ o.note(g.map((e) => ` ${z.arrow} ${R.highlight(e.name)} ${ce(`${t}/templates/${e.id}`)}`).join("\n"), "Browse templates");
4673
+ let n = await o.select({
4603
4674
  message: "Choose a template",
4604
4675
  options: g.map((e) => ({
4605
4676
  value: e.id,
@@ -4607,130 +4678,130 @@ async function lo(e = {}) {
4607
4678
  hint: e.description
4608
4679
  }))
4609
4680
  });
4610
- a.isCancel(t) && (a.cancel("Cancelled."), process.exit(0)), _ = t;
4681
+ o.isCancel(n) && (o.cancel("Cancelled."), process.exit(0)), _ = n;
4611
4682
  }
4612
4683
  let v = g.find((e) => e.id === _);
4613
- v || (c.stop("Template not found"), a.cancel(`Template "${_}" not found. Available: ${g.map((e) => e.id).join(", ") || "(none)"}`), process.exit(1)), c.stop(`Template: ${v.name}`);
4614
- let y = await uo(v, e.variants, e.yes ?? !1), b = Li(v.slots, y), x = Ri(v.slots, v.packs, b), S = await fo({
4615
- packs: u,
4684
+ v || (c.stop("Template not found"), o.cancel(`Template "${_}" not found. Available: ${g.map((e) => e.id).join(", ") || "(none)"}`), process.exit(1)), c.stop(`Template: ${v.name}`);
4685
+ let y = await Co(v, e.variants, e.yes ?? !1), b = zi(v.slots, y), x = Bi(v.slots, v.packs, b), S = await wo({
4686
+ packs: l,
4616
4687
  templatePacks: x,
4617
4688
  installedSet: f,
4618
4689
  options: e
4619
4690
  }), C = [...x, ...S.filter((e) => !x.includes(e))], w = C.filter((e) => !p.has(e));
4620
- w.length > 0 && (a.cancel(`Unknown pack${w.length === 1 ? "" : "s"}: ${w.join(", ")}`), process.exit(1));
4621
- let T = Vi(u, b), E = Ni(T), D;
4691
+ w.length > 0 && (o.cancel(`Unknown pack${w.length === 1 ? "" : "s"}: ${w.join(", ")}`), process.exit(1));
4692
+ let T = Ui(l, b), E = Fi(T), D;
4622
4693
  try {
4623
- D = Fi(C, E, d);
4694
+ D = Li(C, E, d);
4624
4695
  } catch (e) {
4625
- a.cancel($(e)), process.exit(1);
4696
+ o.cancel($(e)), process.exit(1);
4626
4697
  }
4627
4698
  if (D.order.length === 0) {
4628
- a.outro(L.muted("Every pack in this template is already installed."));
4699
+ o.outro(R.muted("Every pack in this template is already installed."));
4629
4700
  return;
4630
4701
  }
4631
- let O = await Ua(T, f, {
4702
+ let O = await to(T, f, {
4632
4703
  token: h,
4633
4704
  key: m
4634
- }), k = (e) => {
4705
+ }), ee = (e) => {
4635
4706
  let t = p.get(e);
4636
4707
  return !t || t.tier === "free" ? "free" : O[e]?.owned ? "owned" : "locked";
4637
- }, ee = (e) => !f.has(e) && k(e) === "locked", A = Ii({
4708
+ }, k = (e) => !f.has(e) && ee(e) === "locked", A = Ri({
4638
4709
  order: D.order,
4639
4710
  graph: E,
4640
- isLocked: ee,
4711
+ isLocked: k,
4641
4712
  installed: d
4642
4713
  });
4643
4714
  if (A.blocked.length > 0 && !h && !m) {
4644
- let e = await Kn();
4645
- e && (h = e, O = await Ua(T, f, {
4715
+ let e = await qn();
4716
+ e && (h = e, O = await to(T, f, {
4646
4717
  token: h,
4647
4718
  key: m
4648
- }), A = Ii({
4719
+ }), A = Ri({
4649
4720
  order: D.order,
4650
4721
  graph: E,
4651
- isLocked: ee,
4722
+ isLocked: k,
4652
4723
  installed: d
4653
4724
  }));
4654
4725
  }
4655
- if (A.blocked.length > 0 && await Ga(A.blocked, ee, p), A.installable.length === 0) {
4656
- a.outro(L.muted("Nothing left to install once locked packs are removed."));
4726
+ if (A.blocked.length > 0 && await ro(A.blocked, k, p), A.installable.length === 0) {
4727
+ o.outro(R.muted("Nothing left to install once locked packs are removed."));
4657
4728
  return;
4658
4729
  }
4659
- if (Ka(A.installable, p), !e.yes) {
4660
- let e = await a.confirm({ message: `Install template ${L.brandBold(v.name)} (${A.installable.length} pack${A.installable.length === 1 ? "" : "s"})?` });
4661
- (a.isCancel(e) || !e) && (a.cancel("Installation cancelled."), process.exit(0));
4730
+ if (io(A.installable, p), !e.yes) {
4731
+ let e = await o.confirm({ message: `Install template ${R.brandBold(v.name)} (${A.installable.length} pack${A.installable.length === 1 ? "" : "s"})?` });
4732
+ (o.isCancel(e) || !e) && (o.cancel("Installation cancelled."), process.exit(0));
4662
4733
  }
4663
4734
  c.start("Downloading packs...");
4664
4735
  let j;
4665
4736
  try {
4666
- j = await qa(A.installable, {
4737
+ j = await ao(A.installable, {
4667
4738
  token: h,
4668
4739
  key: m
4669
4740
  });
4670
4741
  } catch (e) {
4671
- c.stop("Download failed"), a.cancel($(e)), process.exit(1);
4742
+ c.stop("Download failed"), o.cancel($(e)), process.exit(1);
4672
4743
  }
4673
4744
  c.stop(`Downloaded ${j.length} pack${j.length === 1 ? "" : "s"}`);
4674
- let te = await Xa({
4745
+ let te = await co({
4675
4746
  prepared: j,
4676
- config: s,
4747
+ config: a,
4677
4748
  cwd: t,
4678
4749
  force: e.force ?? !1,
4679
4750
  yes: e.yes ?? !1
4680
- }), N = null;
4751
+ }), M = null;
4681
4752
  try {
4682
4753
  c.start("Installing pack files...");
4683
- let i = await wi({
4754
+ let n = await Ei({
4684
4755
  packs: j,
4685
- config: s,
4756
+ config: a,
4686
4757
  projectRoot: t,
4687
4758
  force: e.force ?? !1,
4688
4759
  overwrite: te
4689
4760
  });
4690
- if (i.aborted) {
4761
+ if (n.aborted) {
4691
4762
  c.stop("Installation aborted");
4692
- for (let e of i.errors) a.log.error(e);
4693
- a.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
4763
+ for (let e of n.errors) o.log.error(e);
4764
+ o.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
4694
4765
  }
4695
- c.stop("Files installed"), i.installed.length > 0 && a.log.success(`${L.highlight(String(i.installed.length))} files installed`), i.skipped.length > 0 && a.log.warning(`${i.skipped.length} files skipped (use --force to overwrite)`);
4696
- for (let e of i.errors) a.log.error(e);
4766
+ c.stop("Files installed"), n.installed.length > 0 && o.log.success(`${R.highlight(String(n.installed.length))} files installed`), n.skipped.length > 0 && o.log.warning(`${n.skipped.length} files skipped (use --force to overwrite)`);
4767
+ for (let e of n.errors) o.log.error(e);
4697
4768
  c.start("Applying template overrides...");
4698
- let o = await so(v.id), u = await co(v.id, {
4769
+ let s = await bo(v.id), l = await xo(v.id, {
4699
4770
  token: h,
4700
4771
  licenseKey: m
4701
4772
  });
4702
- u.status === "denied" && (c.stop("Template download denied"), a.cancel(`Access to template "${v.id}" was denied (${u.reason}). Try 'hype-stack login' or check your license.`), process.exit(1)), N = u.templateDir;
4703
- let d = await Ei({
4704
- manifest: o,
4705
- config: s,
4773
+ l.status === "denied" && (c.stop("Template download denied"), o.cancel(`Access to template "${v.id}" was denied (${l.reason}). Try 'hype-stack login' or check your license.`), process.exit(1)), M = l.templateDir;
4774
+ let d = await Oi({
4775
+ manifest: s,
4776
+ config: a,
4706
4777
  projectRoot: t,
4707
- templateDir: N
4778
+ templateDir: M
4708
4779
  });
4709
- c.stop("Template overrides applied"), d.installed.length > 0 && a.log.success(`${d.installed.length} template file${d.installed.length === 1 ? "" : "s"} applied`);
4710
- for (let e of d.errors) a.log.error(e);
4711
- let f = o.theme ?? "zinc-mono";
4712
- r(f) && (await ia(l.resolve(t, s.paths?.frontend.root ?? "apps/frontend"), n(f)) ? a.log.success(`Applied the ${n(f).label} theme`) : a.log.warning(L.muted(`Could not find ${L.path("assets/styles.css")} to apply the theme`))), await po({
4780
+ c.stop("Template overrides applied"), d.installed.length > 0 && o.log.success(`${d.installed.length} template file${d.installed.length === 1 ? "" : "s"} applied`);
4781
+ for (let e of d.errors) o.log.error(e);
4782
+ let f = s.theme ?? "zinc-mono";
4783
+ i(f) && (await sa(u.resolve(t, a.paths?.frontend.root ?? "apps/frontend"), r(f)) ? o.log.success(`Applied the ${r(f).label} theme`) : o.log.warning(R.muted(`Could not find ${R.path("assets/styles.css")} to apply the theme`))), await To({
4713
4784
  prepared: j,
4714
- templateNpm: o.dependencies_npm,
4715
- paths: s.paths,
4785
+ templateNpm: s.dependencies_npm,
4786
+ paths: a.paths,
4716
4787
  cwd: t,
4717
4788
  spinner: c
4718
- }), await tr({
4789
+ }), await rr({
4719
4790
  projectRoot: t,
4720
- paths: s.paths,
4791
+ paths: a.paths,
4721
4792
  skipPrompts: e.yes ?? !1
4722
- }), Ya(j), o.postInstall && o.postInstall.length > 0 && a.note(o.postInstall.map((e) => ` ${L.muted("→")} ${e}`).join("\n"), "Template Next Steps"), a.outro(L.brand(`Installed template ${v.name}.`));
4793
+ }), so(j), s.postInstall && s.postInstall.length > 0 && o.note(s.postInstall.map((e) => ` ${R.muted("→")} ${e}`).join("\n"), "Template Next Steps"), o.outro(R.brand(`Installed template ${v.name}.`));
4723
4794
  } finally {
4724
- await Promise.all(j.map((e) => o.rm(e.packDir, {
4795
+ await Promise.all(j.map((e) => s.rm(e.packDir, {
4725
4796
  recursive: !0,
4726
4797
  force: !0
4727
- }))), N && await o.rm(N, {
4798
+ }))), M && await s.rm(M, {
4728
4799
  recursive: !0,
4729
4800
  force: !0
4730
4801
  });
4731
4802
  }
4732
4803
  }
4733
- async function uo(e, t, n) {
4804
+ async function Co(e, t, n) {
4734
4805
  let r = {};
4735
4806
  for (let i of e.slots) {
4736
4807
  if (t?.[i.family]) {
@@ -4745,25 +4816,27 @@ async function uo(e, t, n) {
4745
4816
  value: e,
4746
4817
  label: e,
4747
4818
  hint: e === i.default ? "default" : void 0
4748
- })), o = await a.select({
4819
+ })), a = await o.select({
4749
4820
  message: `Choose a ${i.family}`,
4750
4821
  options: e,
4751
4822
  initialValue: i.default
4752
4823
  });
4753
- a.isCancel(o) && (a.cancel("Cancelled."), process.exit(0)), r[i.family] = o;
4824
+ o.isCancel(a) && (o.cancel("Cancelled."), process.exit(0)), r[i.family] = a;
4754
4825
  }
4755
4826
  return r;
4756
4827
  }
4757
- async function fo(e) {
4758
- let { packs: t, templatePacks: n, installedSet: r, options: i } = e, o = new Set(n);
4828
+ async function wo(e) {
4829
+ let { packs: t, templatePacks: n, installedSet: r, options: i } = e, a = new Set(n);
4759
4830
  if (i.packs && i.packs.length > 0) {
4760
4831
  let e = i.packs.filter((e) => !t.some((t) => t.name === e));
4761
- return e.length > 0 && (a.cancel(`Unknown pack${e.length === 1 ? "" : "s"}: ${e.join(", ")}`), process.exit(1)), i.packs.filter((e) => !o.has(e));
4832
+ return e.length > 0 && (o.cancel(`Unknown pack${e.length === 1 ? "" : "s"}: ${e.join(", ")}`), process.exit(1)), i.packs.filter((e) => !a.has(e));
4762
4833
  }
4763
4834
  if (i.yes) return [];
4764
- let s = t.filter((e) => e.category === "feature" && !o.has(e.name) && !r.has(e.name));
4835
+ let s = t.filter((e) => e.category === "feature" && !a.has(e.name) && !r.has(e.name));
4765
4836
  if (s.length === 0) return [];
4766
- let c = await a.multiselect({
4837
+ let c = P();
4838
+ o.note(s.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${ce(`${c}/packs/${e.name}`)}`).join("\n"), "Browse packs");
4839
+ let l = await o.multiselect({
4767
4840
  message: "Add extra packs on top of the template (optional)",
4768
4841
  options: s.map((e) => ({
4769
4842
  value: e.name,
@@ -4772,27 +4845,27 @@ async function fo(e) {
4772
4845
  })),
4773
4846
  required: !1
4774
4847
  });
4775
- return a.isCancel(c) && (a.cancel("Cancelled."), process.exit(0)), c;
4848
+ return o.isCancel(l) && (o.cancel("Cancelled."), process.exit(0)), l;
4776
4849
  }
4777
- async function po(e) {
4778
- let { prepared: t, templateNpm: n, paths: r, cwd: i, spinner: o } = e, s = Va(t.map((e) => e.manifest.dependencies_npm)), c = Ba(n ? Va([s, n]) : s, r);
4850
+ async function To(e) {
4851
+ let { prepared: t, templateNpm: n, paths: r, cwd: i, spinner: a } = e, s = $a(t.map((e) => e.manifest.dependencies_npm)), c = Qa(n ? $a([s, n]) : s, r);
4779
4852
  if (c.errors.length > 0) {
4780
- for (let e of c.errors) a.log.error(e);
4853
+ for (let e of c.errors) o.log.error(e);
4781
4854
  return;
4782
4855
  }
4783
4856
  if (c.operations.length === 0) return;
4784
- o.start("Installing npm dependencies...");
4785
- let l = await Ha(c.operations, i);
4786
- if (o.stop(l.ok ? "npm dependencies installed" : "npm dependency installation failed"), !l.ok) for (let e of l.errors) a.log.error(e);
4857
+ a.start("Installing npm dependencies...");
4858
+ let l = await eo(c.operations, i);
4859
+ if (a.stop(l.ok ? "npm dependencies installed" : "npm dependency installation failed"), !l.ok) for (let e of l.errors) o.log.error(e);
4787
4860
  }
4788
4861
  //#endregion
4789
4862
  //#region src/cli.ts
4790
- function mo(e) {
4863
+ function Eo(e) {
4791
4864
  if (!e) return;
4792
4865
  let t = e.split(",").map((e) => e.trim()).filter((e) => e.length > 0);
4793
4866
  return t.length > 0 ? t : void 0;
4794
4867
  }
4795
- function ho(e) {
4868
+ function Do(e) {
4796
4869
  if (!e) return;
4797
4870
  let t = {};
4798
4871
  for (let n of e.split(",")) {
@@ -4801,10 +4874,10 @@ function ho(e) {
4801
4874
  }
4802
4875
  return Object.keys(t).length > 0 ? t : void 0;
4803
4876
  }
4804
- function go() {
4805
- let e = new i();
4806
- return e.name("hype-stack").description("Build with Hype Stack -- templates, components, modules, and more").version(S, "-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) => {
4807
- await La({
4877
+ function Oo() {
4878
+ let e = new a();
4879
+ return e.name("hype-stack").description("Build with Hype Stack -- templates, components, modules, and more").version(C, "-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) => {
4880
+ await Ya({
4808
4881
  name: e.name,
4809
4882
  directory: e.directory,
4810
4883
  install: e.install,
@@ -4814,32 +4887,32 @@ function go() {
4814
4887
  setup: e.setup
4815
4888
  });
4816
4889
  }), e.command("init").description("Initialize stack.json in the current project").action(async () => {
4817
- await Ra({});
4890
+ await Xa({});
4818
4891
  }), 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) => {
4819
- await Za({
4820
- packs: mo(e.packs),
4892
+ await lo({
4893
+ packs: Eo(e.packs),
4821
4894
  force: e.force,
4822
4895
  yes: e.yes,
4823
4896
  licenseKey: e.key ?? e.licenseKey,
4824
4897
  cwd: e.cwd
4825
4898
  });
4826
- }), e.command("template <id>").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) => {
4827
- await lo({
4899
+ }), 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) => {
4900
+ await So({
4828
4901
  templateId: e,
4829
- variants: ho(t.variants),
4830
- packs: mo(t.packs),
4902
+ variants: Do(t.variants),
4903
+ packs: Eo(t.packs),
4831
4904
  force: t.force,
4832
4905
  yes: t.yes,
4833
4906
  licenseKey: t.key ?? t.licenseKey,
4834
4907
  cwd: t.cwd
4835
4908
  });
4836
4909
  }), e.command("login").description("Log in via your browser to install packs your organization owns").action(async () => {
4837
- await ro();
4910
+ await go();
4838
4911
  }), e.command("logout").description("Log out and remove the saved CLI token").action(async () => {
4839
- await io();
4912
+ await _o();
4840
4913
  }), e.command("auth").description("Alias for `login`").action(async () => {
4841
- await ro();
4914
+ await go();
4842
4915
  }), e;
4843
4916
  }
4844
4917
  //#endregion
4845
- export { za as a, Za as i, io as n, Ra as o, ro as r, La as s, go as t };
4918
+ export { Za as a, lo as i, _o as n, Xa as o, go as r, Ya as s, Oo as t };