@hype-stack/cli 0.5.7 → 0.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -13,7 +13,7 @@ import { Prompt as O } from "@clack/core";
|
|
|
13
13
|
import { styleText as k } from "node:util";
|
|
14
14
|
import { downloadTemplate as ee } from "giget";
|
|
15
15
|
//#region src/constants/constants.ts
|
|
16
|
-
var A = "0.5.
|
|
16
|
+
var A = "0.5.9", te = "gh:BetterTyped/hype-stack", ne = "stack.json", re = "/schema/stack.json", j = "https://api.hype-stack.dev", M = "HYPE_STACK_API_URL", N = "https://www.hype-stack.dev", ie = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/, P = [
|
|
17
17
|
{
|
|
18
18
|
value: "cursor",
|
|
19
19
|
label: "Cursor",
|
|
@@ -31,109 +31,109 @@ var A = "0.5.7", j = "gh:BetterTyped/hype-stack", M = "stack.json", te = "/schem
|
|
|
31
31
|
value: "copilot",
|
|
32
32
|
label: "GitHub Copilot"
|
|
33
33
|
}
|
|
34
|
-
],
|
|
35
|
-
function
|
|
34
|
+
], ae = P.map((e) => e.value), oe = ".cursor/rules", se = ".cursor", ce = ".agents";
|
|
35
|
+
function F() {
|
|
36
36
|
let e = process.env.HYPE_STACK_API_URL;
|
|
37
|
-
return e ? (
|
|
37
|
+
return e ? (ue(e), e.replace(/\/+$/, "")) : j;
|
|
38
38
|
}
|
|
39
|
-
function
|
|
39
|
+
function le() {
|
|
40
40
|
let e = process.env.HYPE_STACK_WEB_URL;
|
|
41
|
-
return e ? (
|
|
41
|
+
return e ? (ue(e), e.replace(/\/+$/, "")) : N;
|
|
42
42
|
}
|
|
43
|
-
function
|
|
43
|
+
function ue(e) {
|
|
44
44
|
try {
|
|
45
45
|
let t = new URL(e);
|
|
46
|
-
if (!t.protocol.startsWith("http")) throw Error(`${
|
|
46
|
+
if (!t.protocol.startsWith("http")) throw Error(`${M} must use http or https protocol, got "${t.protocol}"`);
|
|
47
47
|
} catch (t) {
|
|
48
|
-
throw t instanceof TypeError ? Error(`${
|
|
48
|
+
throw t instanceof TypeError ? Error(`${M} is not a valid URL: "${e}"`, { cause: t }) : t;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
function
|
|
52
|
-
return `${
|
|
51
|
+
function de() {
|
|
52
|
+
return `${F()}${re}`;
|
|
53
53
|
}
|
|
54
54
|
//#endregion
|
|
55
55
|
//#region src/ui/theme.ts
|
|
56
|
-
var
|
|
57
|
-
orange:
|
|
58
|
-
orangeBright:
|
|
59
|
-
amber:
|
|
60
|
-
deepBlue:
|
|
61
|
-
skyBlue:
|
|
62
|
-
lightBlue:
|
|
63
|
-
},
|
|
64
|
-
brand: (e) =>
|
|
65
|
-
brandBold: (e) => b.bold(
|
|
66
|
-
accent: (e) =>
|
|
67
|
-
accentBold: (e) => b.bold(
|
|
56
|
+
var fe = (e) => `\x1b[38;5;208m${e}\x1b[39m`, pe = (e) => `\x1b[38;5;214m${e}\x1b[39m`, I = (e) => `\x1b[38;5;220m${e}\x1b[39m`, me = (e) => `\x1b[38;5;33m${e}\x1b[39m`, L = (e) => `\x1b[38;5;39m${e}\x1b[39m`, he = (e) => `\x1b[38;5;81m${e}\x1b[39m`, ge = {
|
|
57
|
+
orange: fe,
|
|
58
|
+
orangeBright: pe,
|
|
59
|
+
amber: I,
|
|
60
|
+
deepBlue: me,
|
|
61
|
+
skyBlue: L,
|
|
62
|
+
lightBlue: he
|
|
63
|
+
}, R = {
|
|
64
|
+
brand: (e) => fe(e),
|
|
65
|
+
brandBold: (e) => b.bold(fe(e)),
|
|
66
|
+
accent: (e) => L(e),
|
|
67
|
+
accentBold: (e) => b.bold(L(e)),
|
|
68
68
|
success: (e) => b.green(e),
|
|
69
69
|
error: (e) => b.red(e),
|
|
70
70
|
warning: (e) => b.yellow(e),
|
|
71
71
|
muted: (e) => b.dim(e),
|
|
72
72
|
bold: (e) => b.bold(e),
|
|
73
73
|
highlight: (e) => b.bold(b.white(e)),
|
|
74
|
-
path: (e) => b.underline(
|
|
75
|
-
command: (e) => b.bold(
|
|
74
|
+
path: (e) => b.underline(L(e)),
|
|
75
|
+
command: (e) => b.bold(I(e)),
|
|
76
76
|
label: (e) => b.dim(b.bold(e))
|
|
77
77
|
};
|
|
78
|
-
function
|
|
79
|
-
return `\x1b]8;;${e}\x07${
|
|
80
|
-
}
|
|
81
|
-
var
|
|
82
|
-
arrow:
|
|
83
|
-
bullet:
|
|
84
|
-
dash:
|
|
85
|
-
corner:
|
|
86
|
-
pipe:
|
|
87
|
-
dot:
|
|
88
|
-
spark:
|
|
89
|
-
sparkSmall:
|
|
90
|
-
bolt:
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
de,
|
|
95
|
-
ue,
|
|
96
|
-
fe,
|
|
97
|
-
z,
|
|
78
|
+
function _e(e, t = e) {
|
|
79
|
+
return `\x1b]8;;${e}\x07${L(t)}\x1b]8;;\x07`;
|
|
80
|
+
}
|
|
81
|
+
var z = {
|
|
82
|
+
arrow: fe("›"),
|
|
83
|
+
bullet: R.muted("·"),
|
|
84
|
+
dash: R.muted("─"),
|
|
85
|
+
corner: R.muted("╰"),
|
|
86
|
+
pipe: R.muted("│"),
|
|
87
|
+
dot: R.muted("•"),
|
|
88
|
+
spark: I("✦"),
|
|
89
|
+
sparkSmall: pe("✧"),
|
|
90
|
+
bolt: I("⚡")
|
|
91
|
+
}, ve = [
|
|
92
|
+
I,
|
|
93
|
+
I,
|
|
98
94
|
pe,
|
|
99
|
-
|
|
95
|
+
fe,
|
|
96
|
+
me,
|
|
97
|
+
L,
|
|
98
|
+
he,
|
|
99
|
+
he
|
|
100
100
|
];
|
|
101
|
-
function
|
|
101
|
+
function ye(e) {
|
|
102
102
|
let t = [...e], n = t.length;
|
|
103
103
|
return t.map((e, t) => {
|
|
104
104
|
if (e === " " || e === "\n") return e;
|
|
105
105
|
let r = t / Math.max(n - 1, 1);
|
|
106
|
-
return
|
|
106
|
+
return ve[Math.min(Math.floor(r * ve.length), ve.length - 1)](e);
|
|
107
107
|
}).join("");
|
|
108
108
|
}
|
|
109
|
-
function
|
|
109
|
+
function be(e, t, n) {
|
|
110
110
|
return Math.round(e + (t - e) * n);
|
|
111
111
|
}
|
|
112
|
-
function
|
|
112
|
+
function xe(e, t) {
|
|
113
113
|
let { start: n, end: r, angle: i = 1 } = t, a = Math.max(...e.map((e) => e.length), 1), o = Math.max(e.length - 1, 1);
|
|
114
114
|
return e.map((e, t) => [...e].map((e, s) => {
|
|
115
115
|
if (e === " ") return e;
|
|
116
116
|
let c = s / Math.max(a - 1, 1), l = t / o, u = Math.min((c + l * i) / (1 + i), 1);
|
|
117
|
-
return `\x1b[38;2;${
|
|
117
|
+
return `\x1b[38;2;${be(n[0], r[0], u)};${be(n[1], r[1], u)};${be(n[2], r[2], u)}m${e}\x1b[39m`;
|
|
118
118
|
}).join(""));
|
|
119
119
|
}
|
|
120
120
|
//#endregion
|
|
121
121
|
//#region src/core/license.ts
|
|
122
|
-
function
|
|
123
|
-
return `${
|
|
122
|
+
function Se(e) {
|
|
123
|
+
return `${le()}/packs/${e}`;
|
|
124
124
|
}
|
|
125
125
|
//#endregion
|
|
126
126
|
//#region ../../node_modules/.pnpm/@hyper-fetch+core@8.1.1/node_modules/@hyper-fetch/core/dist/index.mjs
|
|
127
|
-
var
|
|
128
|
-
if (t && typeof t == "object" || typeof t == "function") for (var i =
|
|
127
|
+
var Ce = Object.create, we = Object.defineProperty, Te = Object.getOwnPropertyDescriptor, Ee = Object.getOwnPropertyNames, De = Object.getPrototypeOf, Oe = Object.prototype.hasOwnProperty, ke = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), Ae = (e, t, n, r) => {
|
|
128
|
+
if (t && typeof t == "object" || typeof t == "function") for (var i = Ee(t), a = 0, o = i.length, s; a < o; a++) s = i[a], !Oe.call(e, s) && s !== n && we(e, s, {
|
|
129
129
|
get: ((e) => t[e]).bind(null, s),
|
|
130
|
-
enumerable: !(r =
|
|
130
|
+
enumerable: !(r = Te(t, s)) || r.enumerable
|
|
131
131
|
});
|
|
132
132
|
return e;
|
|
133
|
-
},
|
|
133
|
+
}, je = (e, t, n) => (n = e == null ? {} : Ce(De(e)), Ae(t || !e || !e.__esModule ? we(n, "default", {
|
|
134
134
|
value: e,
|
|
135
135
|
enumerable: !0
|
|
136
|
-
}) : n, e)),
|
|
136
|
+
}) : n, e)), Me = (e) => `${e.queryKey}_${Date.now().toString(36)}_${Math.random().toString(36).substring(2)}`, Ne = /* @__PURE__ */ je((/* @__PURE__ */ ke(((e, t) => {
|
|
137
137
|
var n = typeof Reflect == "object" ? Reflect : null, r = n && typeof n.apply == "function" ? n.apply : function(e, t, n) {
|
|
138
138
|
return Function.prototype.apply.call(e, t, n);
|
|
139
139
|
}, i = n && typeof n.ownKeys == "function" ? n.ownKeys : Object.getOwnPropertySymbols ? function(e) {
|
|
@@ -308,7 +308,7 @@ var xe = Object.create, Se = Object.defineProperty, Ce = Object.getOwnPropertyDe
|
|
|
308
308
|
});
|
|
309
309
|
else throw TypeError("The \"emitter\" argument must be of type EventEmitter. Received type " + typeof e);
|
|
310
310
|
}
|
|
311
|
-
})))()),
|
|
311
|
+
})))()), Pe = (e) => `listen_${String(e)}`, Fe = class extends Ne.default {
|
|
312
312
|
emitCallbacks = [];
|
|
313
313
|
constructor(e) {
|
|
314
314
|
super(e);
|
|
@@ -320,26 +320,26 @@ var xe = Object.create, Se = Object.defineProperty, Ce = Object.getOwnPropertyDe
|
|
|
320
320
|
onEmit = (e) => (this.emitCallbacks?.push(e), () => {
|
|
321
321
|
this.emitCallbacks = this.emitCallbacks?.filter((t) => t !== e);
|
|
322
322
|
});
|
|
323
|
-
onListener = (e, t) => (super.on(
|
|
324
|
-
super.off(
|
|
323
|
+
onListener = (e, t) => (super.on(Pe(e), t), () => {
|
|
324
|
+
super.off(Pe(e), t);
|
|
325
325
|
});
|
|
326
|
-
on = (e, t) => (super.on(e, t), super.emit(
|
|
327
|
-
off = (e, t) => (super.off(e, t), super.emit(
|
|
326
|
+
on = (e, t) => (super.on(e, t), super.emit(Pe(e), super.listeners(e).length), this);
|
|
327
|
+
off = (e, t) => (super.off(e, t), super.emit(Pe(e), super.listeners(e).length), this);
|
|
328
328
|
addListener = this.on;
|
|
329
329
|
removeListener = this.off;
|
|
330
|
-
},
|
|
331
|
-
emitter = new
|
|
332
|
-
events =
|
|
330
|
+
}, Ie = class {
|
|
331
|
+
emitter = new Fe();
|
|
332
|
+
events = Ve(this.emitter);
|
|
333
333
|
isBrowser;
|
|
334
334
|
isOnline;
|
|
335
335
|
isFocused;
|
|
336
336
|
constructor(e) {
|
|
337
337
|
this.options = e, this.emitter?.setMaxListeners(1e3);
|
|
338
|
-
let { initiallyFocused: t =
|
|
339
|
-
this.setInitialFocus(t), this.setInitialOnline(n), this.isBrowser =
|
|
338
|
+
let { initiallyFocused: t = He.initiallyFocused, initiallyOnline: n = He.initiallyOnline } = this.options || He;
|
|
339
|
+
this.setInitialFocus(t), this.setInitialOnline(n), this.isBrowser = Re();
|
|
340
340
|
}
|
|
341
341
|
initialize = () => {
|
|
342
|
-
let { focusEvent: e =
|
|
342
|
+
let { focusEvent: e = He.focusEvent, onlineEvent: t = He.onlineEvent } = this.options || He;
|
|
343
343
|
e(this.setFocused), t(this.setOnline);
|
|
344
344
|
};
|
|
345
345
|
setInitialFocus = async (e) => {
|
|
@@ -354,51 +354,51 @@ var xe = Object.create, Se = Object.defineProperty, Ce = Object.getOwnPropertyDe
|
|
|
354
354
|
setOnline = (e) => {
|
|
355
355
|
this.isOnline = e, e ? this.events.emitOnline() : this.events.emitOffline();
|
|
356
356
|
};
|
|
357
|
-
},
|
|
357
|
+
}, Le = () => {
|
|
358
358
|
try {
|
|
359
359
|
return !!(window && window.addEventListener);
|
|
360
360
|
} catch {
|
|
361
361
|
/* istanbul ignore next */
|
|
362
362
|
return !1;
|
|
363
363
|
}
|
|
364
|
-
},
|
|
364
|
+
}, Re = () => {
|
|
365
365
|
try {
|
|
366
|
-
return !!(
|
|
366
|
+
return !!(Le() && window.document && window.document.addEventListener);
|
|
367
367
|
} catch {
|
|
368
368
|
/* istanbul ignore next */
|
|
369
369
|
return !1;
|
|
370
370
|
}
|
|
371
|
-
},
|
|
371
|
+
}, ze = (e, t, n) => Le() ? (window.addEventListener(e, t, n), () => window.removeEventListener(e, t, n)) : () => null, Be = (e, t, n) => Re() ? (window.document.addEventListener(e, t, n), () => window.document.removeEventListener(e, t, n)) : () => null, Ve = (e) => ({
|
|
372
372
|
emitFocus: () => {
|
|
373
|
-
e.emit(
|
|
373
|
+
e.emit(B.FOCUS);
|
|
374
374
|
},
|
|
375
375
|
emitBlur: () => {
|
|
376
|
-
e.emit(
|
|
376
|
+
e.emit(B.BLUR);
|
|
377
377
|
},
|
|
378
378
|
emitOnline: () => {
|
|
379
|
-
e.emit(
|
|
379
|
+
e.emit(B.ONLINE);
|
|
380
380
|
},
|
|
381
381
|
emitOffline: () => {
|
|
382
|
-
e.emit(
|
|
382
|
+
e.emit(B.OFFLINE);
|
|
383
383
|
},
|
|
384
|
-
onFocus: (t) => (e.on(
|
|
385
|
-
onBlur: (t) => (e.on(
|
|
386
|
-
onOnline: (t) => (e.on(
|
|
387
|
-
onOffline: (t) => (e.on(
|
|
388
|
-
}),
|
|
384
|
+
onFocus: (t) => (e.on(B.FOCUS, t), () => e.removeListener(B.FOCUS, t)),
|
|
385
|
+
onBlur: (t) => (e.on(B.BLUR, t), () => e.removeListener(B.BLUR, t)),
|
|
386
|
+
onOnline: (t) => (e.on(B.ONLINE, t), () => e.removeListener(B.ONLINE, t)),
|
|
387
|
+
onOffline: (t) => (e.on(B.OFFLINE, t), () => e.removeListener(B.OFFLINE, t))
|
|
388
|
+
}), B = /* @__PURE__ */ function(e) {
|
|
389
389
|
return e.FOCUS = "focus", e.BLUR = "blur", e.ONLINE = "online", e.OFFLINE = "offline", e;
|
|
390
|
-
}({}),
|
|
390
|
+
}({}), He = {
|
|
391
391
|
initiallyFocused: !0,
|
|
392
392
|
initiallyOnline: !0,
|
|
393
393
|
focusEvent: (e) => {
|
|
394
|
-
|
|
394
|
+
Be("visibilitychange", () => e(!0)), ze("focus", () => e(!0)), ze("blur", () => e(!1));
|
|
395
395
|
},
|
|
396
396
|
onlineEvent: (e) => {
|
|
397
|
-
|
|
397
|
+
ze("online", () => e(!0)), ze("offline", () => e(!1));
|
|
398
398
|
}
|
|
399
|
-
},
|
|
400
|
-
emitter = new
|
|
401
|
-
events =
|
|
399
|
+
}, Ue = class {
|
|
400
|
+
emitter = new Fe();
|
|
401
|
+
events = yt(this.emitter);
|
|
402
402
|
constructor() {
|
|
403
403
|
this.emitter?.setMaxListeners(1e3);
|
|
404
404
|
}
|
|
@@ -435,71 +435,71 @@ var xe = Object.create, Se = Object.defineProperty, Ce = Object.getOwnPropertyDe
|
|
|
435
435
|
});
|
|
436
436
|
});
|
|
437
437
|
};
|
|
438
|
-
},
|
|
438
|
+
}, We = () => "loading-event-any", Ge = (e) => `${e}-loading-event`, Ke = (e) => `${e}-loading-cache-event`, qe = (e) => `${e}-loading-event-by-id`, Je = () => "remove-event-any", Ye = (e) => `${e}-remove-event`, Xe = (e) => `${e}-remove-event-by-id`, Ze = () => "request-abort-any", Qe = (e) => `${e}-request-abort`, $e = (e) => `${e}-request-abort-by-id`, et = () => "response-any", tt = (e) => `${e}-response`, nt = (e) => `${e}-response-by-id`, rt = () => "request-start-any", it = (e) => `${e}-request-start`, at = (e) => `${e}-request-start-by-id`, ot = () => "response-start-any", st = (e) => `${e}-response-start`, ct = (e) => `${e}-response-start-by-id`, lt = () => "request-progress-any", ut = (e) => `${e}-request-progress`, dt = (e) => `${e}-request-progress-by-id`, ft = () => "response-progress-any", pt = (e) => `${e}-response-progress`, mt = (e) => `${e}-response-progress-by-id`, ht = () => "request-deduplicated-any", gt = (e) => `${e}-query-request-deduplicated`, _t = (e) => `${e}-cache-request-deduplicated`, vt = (e) => `${e}-request-deduplicated-by-id`, yt = (e) => ({
|
|
439
439
|
emitDeduplicated: (t, n = !1) => {
|
|
440
|
-
e.emit(
|
|
440
|
+
e.emit(ht(), t, n), e.emit(vt(t.requestId), t, n), e.emit(_t(t.request.cacheKey), t, n), e.emit(gt(t.request.queryKey), t, n);
|
|
441
441
|
},
|
|
442
442
|
emitLoading: (t, n = !1) => {
|
|
443
|
-
e.emit(
|
|
443
|
+
e.emit(We(), t, n), e.emit(qe(t.requestId), t, n), e.emit(Ke(t.request.cacheKey), t, n), e.emit(Ge(t.request.queryKey), t, n);
|
|
444
444
|
},
|
|
445
445
|
emitRequestStart: (t, n = !1) => {
|
|
446
|
-
e.emit(
|
|
446
|
+
e.emit(rt(), t, n), e.emit(at(t.requestId), t, n), e.emit(it(t.request.queryKey), t, n);
|
|
447
447
|
},
|
|
448
448
|
emitResponseStart: (t, n = !1) => {
|
|
449
|
-
e.emit(
|
|
449
|
+
e.emit(ot(), t, n), e.emit(ct(t.requestId), t, n), e.emit(st(t.request.queryKey), t, n);
|
|
450
450
|
},
|
|
451
451
|
emitUploadProgress: (t, n = !1) => {
|
|
452
|
-
e.emit(
|
|
452
|
+
e.emit(lt(), t, n), e.emit(dt(t.requestId), t, n), e.emit(ut(t.request.queryKey), t, n);
|
|
453
453
|
},
|
|
454
454
|
emitDownloadProgress: (t, n = !1) => {
|
|
455
|
-
e.emit(
|
|
455
|
+
e.emit(ft(), t, n), e.emit(mt(t.requestId), t, n), e.emit(pt(t.request.queryKey), t, n);
|
|
456
456
|
},
|
|
457
457
|
emitResponse: (t, n = !1) => {
|
|
458
|
-
e.emit(
|
|
458
|
+
e.emit(et(), t, n), e.emit(nt(t.requestId), t, n), e.emit(tt(t.request.cacheKey), t, n);
|
|
459
459
|
},
|
|
460
460
|
emitAbort: (t, n = !1) => {
|
|
461
|
-
e.emit(
|
|
461
|
+
e.emit(Ze(), t, n), e.emit($e(t.requestId), t, n), e.emit(Qe(t.request.abortKey), t, n);
|
|
462
462
|
},
|
|
463
463
|
emitRemove: (t, n = !1) => {
|
|
464
|
-
e.emit(
|
|
464
|
+
e.emit(Je(), t, n), e.emit(Xe(t.requestId), t, n), e.emit(Ye(t.request.queryKey), t, n);
|
|
465
465
|
},
|
|
466
|
-
onDeduplicated: (t) => (e.on(
|
|
467
|
-
onDeduplicatedByQueue: (t, n) => (e.on(
|
|
468
|
-
onDeduplicatedByCache: (t, n) => (e.on(
|
|
469
|
-
onDeduplicatedById: (t, n) => (e.on(
|
|
470
|
-
onLoading: (t) => (e.on(
|
|
471
|
-
onLoadingByQueue: (t, n) => (e.on(
|
|
472
|
-
onLoadingByCache: (t, n) => (e.on(
|
|
473
|
-
onLoadingById: (t, n) => (e.on(
|
|
474
|
-
onRequestStart: (t) => (e.on(
|
|
475
|
-
onRequestStartByQueue: (t, n) => (e.on(
|
|
476
|
-
onRequestStartById: (t, n) => (e.on(
|
|
477
|
-
onResponseStart: (t) => (e.on(
|
|
478
|
-
onResponseStartByQueue: (t, n) => (e.on(
|
|
479
|
-
onResponseStartById: (t, n) => (e.on(
|
|
480
|
-
onUploadProgress: (t) => (e.on(
|
|
481
|
-
onUploadProgressByQueue: (t, n) => (e.on(
|
|
482
|
-
onUploadProgressById: (t, n) => (e.on(
|
|
483
|
-
onDownloadProgress: (t) => (e.on(
|
|
484
|
-
onDownloadProgressByQueue: (t, n) => (e.on(
|
|
485
|
-
onDownloadProgressById: (t, n) => (e.on(
|
|
486
|
-
onResponse: (t) => (e.on(
|
|
487
|
-
onResponseByCache: (t, n) => (e.on(
|
|
488
|
-
onResponseById: (t, n) => (e.on(
|
|
489
|
-
onAbort: (t) => (e.on(
|
|
490
|
-
onAbortByKey: (t, n) => (e.on(
|
|
491
|
-
onAbortById: (t, n) => (e.on(
|
|
492
|
-
onRemove: (t) => (e.on(
|
|
493
|
-
onRemoveByQueue: (t, n) => (e.on(
|
|
494
|
-
onRemoveById: (t, n) => (e.on(
|
|
495
|
-
}),
|
|
466
|
+
onDeduplicated: (t) => (e.on(ht(), t), () => e.removeListener(ht(), t)),
|
|
467
|
+
onDeduplicatedByQueue: (t, n) => (e.on(gt(t), n), () => e.removeListener(gt(t), n)),
|
|
468
|
+
onDeduplicatedByCache: (t, n) => (e.on(_t(t), n), () => e.removeListener(_t(t), n)),
|
|
469
|
+
onDeduplicatedById: (t, n) => (e.on(vt(t), n), () => e.removeListener(vt(t), n)),
|
|
470
|
+
onLoading: (t) => (e.on(We(), t), () => e.removeListener(We(), t)),
|
|
471
|
+
onLoadingByQueue: (t, n) => (e.on(Ge(t), n), () => e.removeListener(Ge(t), n)),
|
|
472
|
+
onLoadingByCache: (t, n) => (e.on(Ke(t), n), () => e.removeListener(Ke(t), n)),
|
|
473
|
+
onLoadingById: (t, n) => (e.on(qe(t), n), () => e.removeListener(qe(t), n)),
|
|
474
|
+
onRequestStart: (t) => (e.on(rt(), t), () => e.removeListener(rt(), t)),
|
|
475
|
+
onRequestStartByQueue: (t, n) => (e.on(it(t), n), () => e.removeListener(it(t), n)),
|
|
476
|
+
onRequestStartById: (t, n) => (e.on(at(t), n), () => e.removeListener(at(t), n)),
|
|
477
|
+
onResponseStart: (t) => (e.on(ot(), t), () => e.removeListener(ot(), t)),
|
|
478
|
+
onResponseStartByQueue: (t, n) => (e.on(st(t), n), () => e.removeListener(st(t), n)),
|
|
479
|
+
onResponseStartById: (t, n) => (e.on(ct(t), n), () => e.removeListener(ct(t), n)),
|
|
480
|
+
onUploadProgress: (t) => (e.on(lt(), t), () => e.removeListener(lt(), t)),
|
|
481
|
+
onUploadProgressByQueue: (t, n) => (e.on(ut(t), n), () => e.removeListener(ut(t), n)),
|
|
482
|
+
onUploadProgressById: (t, n) => (e.on(dt(t), n), () => e.removeListener(dt(t), n)),
|
|
483
|
+
onDownloadProgress: (t) => (e.on(ft(), t), () => e.removeListener(ft(), t)),
|
|
484
|
+
onDownloadProgressByQueue: (t, n) => (e.on(pt(t), n), () => e.removeListener(pt(t), n)),
|
|
485
|
+
onDownloadProgressById: (t, n) => (e.on(mt(t), n), () => e.removeListener(mt(t), n)),
|
|
486
|
+
onResponse: (t) => (e.on(et(), t), () => e.removeListener(et(), t)),
|
|
487
|
+
onResponseByCache: (t, n) => (e.on(tt(t), n), () => e.removeListener(tt(t), n)),
|
|
488
|
+
onResponseById: (t, n) => (e.on(nt(t), n), () => e.removeListener(nt(t), n)),
|
|
489
|
+
onAbort: (t) => (e.on(Ze(), t), () => e.removeListener(Ze(), t)),
|
|
490
|
+
onAbortByKey: (t, n) => (e.on(Qe(t), n), () => e.removeListener(Qe(t), n)),
|
|
491
|
+
onAbortById: (t, n) => (e.on($e(t), n), () => e.removeListener($e(t), n)),
|
|
492
|
+
onRemove: (t) => (e.on(Je(), t), () => e.removeListener(Je(), t)),
|
|
493
|
+
onRemoveByQueue: (t, n) => (e.on(Ye(t), n), () => e.removeListener(Ye(t), n)),
|
|
494
|
+
onRemoveById: (t, n) => (e.on(Xe(t), n), () => e.removeListener(Xe(t), n))
|
|
495
|
+
}), bt = class {
|
|
496
496
|
logger;
|
|
497
497
|
level;
|
|
498
498
|
modules;
|
|
499
|
-
emitter = new
|
|
499
|
+
emitter = new Ne.default();
|
|
500
500
|
client;
|
|
501
501
|
constructor(e) {
|
|
502
|
-
this.options = e, this.emitter?.setMaxListeners(1e3), this.logger = this.options?.logger ||
|
|
502
|
+
this.options = e, this.emitter?.setMaxListeners(1e3), this.logger = this.options?.logger || Ct, this.level = this.options?.level || "warning", this.modules = this.options?.modules;
|
|
503
503
|
}
|
|
504
504
|
setSeverity = (e) => {
|
|
505
505
|
this.level = e;
|
|
@@ -530,58 +530,58 @@ var xe = Object.create, Se = Object.defineProperty, Ce = Object.getOwnPropertyDe
|
|
|
530
530
|
})
|
|
531
531
|
});
|
|
532
532
|
log = (e) => {
|
|
533
|
-
this.client.debug && (
|
|
533
|
+
this.client.debug && (wt.indexOf(this.level) <= wt.indexOf(e.level) || this.modules && !this.modules.includes(e.module) || this.logger(e));
|
|
534
534
|
};
|
|
535
|
-
},
|
|
536
|
-
let t =
|
|
535
|
+
}, xt = () => `${(/* @__PURE__ */ new Date()).toLocaleTimeString()}`, St = (e) => e.type === "request" || e.type === "response" ? `${e.extra.request.endpoint}` : `[${e.module}]`, Ct = (e) => {
|
|
536
|
+
let t = Et[e.level], n = Dt[e.level], r = `%c[${xt()}]%c${e.title}%c${St(e)}`, i = `${t}${n}font-weight:600;border-radius: 4px 0 0 4px;`, a = `${t}${n}font-weight:600;`, o = `${t}font-weight:normal;border-radius: 0 4px 4px 0;`;
|
|
537
537
|
e.extra && Object.keys(e.extra)?.length ? (console.groupCollapsed(r, i, a, o), console.log(e.extra), console.groupEnd()) : console.log(r, t);
|
|
538
|
-
},
|
|
538
|
+
}, wt = [
|
|
539
539
|
"error",
|
|
540
540
|
"warning",
|
|
541
541
|
"info",
|
|
542
542
|
"debug"
|
|
543
|
-
],
|
|
544
|
-
error: `${
|
|
545
|
-
warning: `${
|
|
546
|
-
info: `${
|
|
547
|
-
debug: `${
|
|
548
|
-
},
|
|
543
|
+
], Tt = "padding:2px 5px;", Et = {
|
|
544
|
+
error: `${Tt};background:#db252520;`,
|
|
545
|
+
warning: `${Tt};background:#e1941e20;`,
|
|
546
|
+
info: `${Tt};background:#1e74e120;`,
|
|
547
|
+
debug: `${Tt};background:#00000020;`
|
|
548
|
+
}, Dt = {
|
|
549
549
|
error: "color:#ff3737;",
|
|
550
550
|
warning: "color:#ffc107;",
|
|
551
551
|
info: "color:#34a8ff;",
|
|
552
552
|
debug: "color:#cccccc;"
|
|
553
|
-
},
|
|
553
|
+
}, Ot = class extends Error {
|
|
554
554
|
constructor() {
|
|
555
555
|
super("Request timeout"), this.name = "TimeoutError";
|
|
556
556
|
}
|
|
557
|
-
},
|
|
557
|
+
}, kt = class extends Error {
|
|
558
558
|
constructor() {
|
|
559
559
|
super("Request aborted"), this.name = "AbortError";
|
|
560
560
|
}
|
|
561
|
-
},
|
|
561
|
+
}, At = class extends Error {
|
|
562
562
|
constructor() {
|
|
563
563
|
super("Request deleted"), this.name = "DeletedError";
|
|
564
564
|
}
|
|
565
|
-
},
|
|
565
|
+
}, jt = class extends Error {
|
|
566
566
|
description;
|
|
567
567
|
constructor(e) {
|
|
568
568
|
super("Request processing error"), this.description = e, this.name = "RequestProcessingError";
|
|
569
569
|
}
|
|
570
|
-
},
|
|
570
|
+
}, Mt = class extends Error {
|
|
571
571
|
description;
|
|
572
572
|
constructor(e) {
|
|
573
573
|
super("Unexpected error"), this.description = e, this.name = "UnexpectedError";
|
|
574
574
|
}
|
|
575
|
-
},
|
|
575
|
+
}, V = (e) => e === "timeout" ? new Ot() : e === "abort" ? new kt() : e === "deleted" ? new At() : e === "processing" ? new jt() : new Mt(), Nt = (e) => {
|
|
576
576
|
try {
|
|
577
577
|
return JSON.stringify(e);
|
|
578
578
|
} catch {
|
|
579
579
|
return "";
|
|
580
580
|
}
|
|
581
|
-
},
|
|
582
|
-
let t =
|
|
581
|
+
}, Pt = (e) => {
|
|
582
|
+
let t = Le() && e.payload instanceof FormData, n = typeof e.payload == "object" && e.payload !== null, r = {};
|
|
583
583
|
return !t && n && (r["Content-Type"] = "application/json"), Object.assign(r, e.headers), r;
|
|
584
|
-
},
|
|
584
|
+
}, Ft = (e) => Le() && e instanceof FormData ? e : Nt(e), It = [
|
|
585
585
|
"onBeforeSent",
|
|
586
586
|
"onRequestStart",
|
|
587
587
|
"onResponseStart",
|
|
@@ -590,7 +590,7 @@ var xe = Object.create, Se = Object.defineProperty, Ce = Object.getOwnPropertyDe
|
|
|
590
590
|
"onResponse",
|
|
591
591
|
"onRemove"
|
|
592
592
|
];
|
|
593
|
-
function
|
|
593
|
+
function Lt(e) {
|
|
594
594
|
let t = {
|
|
595
595
|
onBeforeSent: [],
|
|
596
596
|
onRequestStart: [],
|
|
@@ -600,7 +600,7 @@ function It(e) {
|
|
|
600
600
|
onResponse: [],
|
|
601
601
|
onRemove: []
|
|
602
602
|
};
|
|
603
|
-
e &&
|
|
603
|
+
e && It.forEach((n) => {
|
|
604
604
|
t[n] = [...e[n]];
|
|
605
605
|
});
|
|
606
606
|
let n = (e) => (n) => (t[e].push(n), () => {
|
|
@@ -622,15 +622,15 @@ function It(e) {
|
|
|
622
622
|
},
|
|
623
623
|
__snapshot() {
|
|
624
624
|
let e = {};
|
|
625
|
-
return
|
|
625
|
+
return It.forEach((n) => {
|
|
626
626
|
e[n] = [...t[n]];
|
|
627
627
|
}), e;
|
|
628
628
|
}
|
|
629
629
|
};
|
|
630
630
|
}
|
|
631
|
-
var
|
|
631
|
+
var Rt = /* @__PURE__ */ function(e) {
|
|
632
632
|
return e.GET = "GET", e.POST = "POST", e.PUT = "PUT", e.PATCH = "PATCH", e.DELETE = "DELETE", e;
|
|
633
|
-
}({}),
|
|
633
|
+
}({}), H = (e, t) => t ? `${t}__${e}` : e, zt = (e) => {
|
|
634
634
|
try {
|
|
635
635
|
if (typeof e == "string") return e;
|
|
636
636
|
if (e == null) return "";
|
|
@@ -640,13 +640,13 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
640
640
|
} catch {
|
|
641
641
|
return "";
|
|
642
642
|
}
|
|
643
|
-
},
|
|
643
|
+
}, Bt = ({ loaded: e, total: t }) => !e || !t ? 0 : Number((e * 100 / t).toFixed(0)), Vt = (e, t, { total: n, loaded: r }) => {
|
|
644
644
|
let i = r / (t - +e || 1), a = Math.max(n, r), o = a - r, s = i ? o / i : null;
|
|
645
645
|
return {
|
|
646
646
|
timeLeft: a === r ? 0 : s,
|
|
647
647
|
sizeLeft: o
|
|
648
648
|
};
|
|
649
|
-
},
|
|
649
|
+
}, Ht = (e, t, n) => {
|
|
650
650
|
let { total: r, loaded: i } = n;
|
|
651
651
|
if (Number.isNaN(r) || Number.isNaN(i)) return {
|
|
652
652
|
progress: 0,
|
|
@@ -656,23 +656,23 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
656
656
|
loaded: 0,
|
|
657
657
|
startTimestamp: +e
|
|
658
658
|
};
|
|
659
|
-
let { timeLeft: a, sizeLeft: o } =
|
|
659
|
+
let { timeLeft: a, sizeLeft: o } = Vt(e, t, n);
|
|
660
660
|
return {
|
|
661
|
-
progress:
|
|
661
|
+
progress: Bt(n),
|
|
662
662
|
timeLeft: a,
|
|
663
663
|
sizeLeft: o,
|
|
664
664
|
total: r,
|
|
665
665
|
loaded: i,
|
|
666
666
|
startTimestamp: +e
|
|
667
667
|
};
|
|
668
|
-
},
|
|
669
|
-
let { fetchDispatcher: n, submitDispatcher: r } = e.client, i = e.method ===
|
|
668
|
+
}, Ut = (e) => `${e.method}_${e.requestOptions.endpoint}_${e.cancelable}`, Wt = (e, t) => `${zt(e.method)}_${t ? e.requestOptions.endpoint : zt(e.endpoint)}_${t ? "" : zt(e.queryParams)}`, Gt = (e, t = "auto") => {
|
|
669
|
+
let { fetchDispatcher: n, submitDispatcher: r } = e.client, i = e.method === Rt.GET, a = t === "auto" && i || t === "fetch";
|
|
670
670
|
return [a ? n : r, a];
|
|
671
|
-
},
|
|
671
|
+
}, Kt = async (e, t) => {
|
|
672
672
|
let n = e.unstable_responseMapper?.(t);
|
|
673
673
|
return n instanceof Promise ? await n : n || t;
|
|
674
|
-
},
|
|
675
|
-
let { client: n } = e, { requestManager: r } = n, [i] =
|
|
674
|
+
}, qt = async (e, t) => {
|
|
675
|
+
let { client: n } = e, { requestManager: r } = n, [i] = Gt(e, t?.dispatcherType), a;
|
|
676
676
|
if (e.optimistic) try {
|
|
677
677
|
a = await e.optimistic({
|
|
678
678
|
request: e,
|
|
@@ -748,7 +748,7 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
748
748
|
data: null,
|
|
749
749
|
status: null,
|
|
750
750
|
success: !1,
|
|
751
|
-
error:
|
|
751
|
+
error: V("deleted"),
|
|
752
752
|
extra: e.client.adapter.defaultExtra,
|
|
753
753
|
requestTimestamp: +/* @__PURE__ */ new Date(),
|
|
754
754
|
responseTimestamp: +/* @__PURE__ */ new Date()
|
|
@@ -759,9 +759,9 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
759
759
|
u(), d(), f(), p(), m(), h();
|
|
760
760
|
}
|
|
761
761
|
});
|
|
762
|
-
},
|
|
762
|
+
}, Jt = /* @__PURE__ */ function(e) {
|
|
763
763
|
return e[e.SEC = 1e3] = "SEC", e[e.MIN = 6e4] = "MIN", e[e.HOUR = 36e5] = "HOUR", e[e.DAY = 864e5] = "DAY", e[e.WEEK = 6048e5] = "WEEK", e[e.MONTH_30 = 2592e6] = "MONTH_30", e[e.MONTH_31 = 26784e5] = "MONTH_31", e[e.YEAR = 31536e6] = "YEAR", e[e.YEAR_LEAP = 316224e5] = "YEAR_LEAP", e;
|
|
764
|
-
}({}),
|
|
764
|
+
}({}), Yt = class e {
|
|
765
765
|
endpoint;
|
|
766
766
|
headers;
|
|
767
767
|
auth;
|
|
@@ -785,7 +785,7 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
785
785
|
deduplicate;
|
|
786
786
|
deduplicateTime;
|
|
787
787
|
scope;
|
|
788
|
-
$hooks =
|
|
788
|
+
$hooks = Lt();
|
|
789
789
|
isMockerEnabled = !1;
|
|
790
790
|
unstable_mock;
|
|
791
791
|
unstable_payloadMapper;
|
|
@@ -802,7 +802,7 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
802
802
|
updatedQueryKey;
|
|
803
803
|
constructor(e, t, n) {
|
|
804
804
|
this.client = e, this.requestOptions = t, this.initialRequestConfiguration = n;
|
|
805
|
-
let { endpoint: r, headers: i, auth: a = !0, method: o = e.adapter.defaultMethod, options: s, cancelable: c = !1, retry: l = 0, retryTime: u = 500, cacheTime: d =
|
|
805
|
+
let { endpoint: r, headers: i, auth: a = !0, method: o = e.adapter.defaultMethod, options: s, cancelable: c = !1, retry: l = 0, retryTime: u = 500, cacheTime: d = Jt.MIN * 5, cache: f = !0, staleTime: p = Jt.MIN * 5, queued: m = !1, offline: h = !0, abortKey: g, cacheKey: _, queryKey: v, deduplicate: y = !1, deduplicateTime: b = null } = {
|
|
806
806
|
...this.client.adapter.unstable_getRequestDefaults?.(t),
|
|
807
807
|
...t
|
|
808
808
|
};
|
|
@@ -912,11 +912,11 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
912
912
|
payload: t?.payload || this.payload,
|
|
913
913
|
params: t?.params || this.params
|
|
914
914
|
}, r = new e(this.client, this.requestOptions, n);
|
|
915
|
-
return r.unstable_payloadMapper = this.unstable_payloadMapper, r.unstable_responseMapper = this.unstable_responseMapper, r.unstable_requestMapper = this.unstable_requestMapper, r.retryOnError = this.retryOnError, r.unstable_mock = this.unstable_mock, r.isMockerEnabled = this.isMockerEnabled, r.optimistic = this.optimistic, r.$hooks =
|
|
915
|
+
return r.unstable_payloadMapper = this.unstable_payloadMapper, r.unstable_responseMapper = this.unstable_responseMapper, r.unstable_requestMapper = this.unstable_requestMapper, r.retryOnError = this.retryOnError, r.unstable_mock = this.unstable_mock, r.isMockerEnabled = this.isMockerEnabled, r.optimistic = this.optimistic, r.$hooks = Lt(this.$hooks.__snapshot()), r;
|
|
916
916
|
}
|
|
917
917
|
abort = () => {
|
|
918
918
|
let { requestManager: e } = this.client;
|
|
919
|
-
return e.abortByKey(
|
|
919
|
+
return e.abortByKey(H(this.abortKey, this.scope)), this.clone();
|
|
920
920
|
};
|
|
921
921
|
dehydrate = (e) => {
|
|
922
922
|
let { response: t, override: n = !0 } = e || {};
|
|
@@ -931,7 +931,7 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
931
931
|
cache: !0,
|
|
932
932
|
response: t
|
|
933
933
|
};
|
|
934
|
-
let r = this.client.cache.get(
|
|
934
|
+
let r = this.client.cache.get(H(this.cacheKey, this.scope));
|
|
935
935
|
if (r) return {
|
|
936
936
|
override: n,
|
|
937
937
|
cacheTime: this.cacheTime,
|
|
@@ -953,7 +953,7 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
953
953
|
};
|
|
954
954
|
};
|
|
955
955
|
read() {
|
|
956
|
-
let e = this.client.cache.get(
|
|
956
|
+
let e = this.client.cache.get(H(this.cacheKey, this.scope));
|
|
957
957
|
if (e) return {
|
|
958
958
|
data: e.data,
|
|
959
959
|
error: e.error,
|
|
@@ -965,7 +965,7 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
965
965
|
};
|
|
966
966
|
}
|
|
967
967
|
exec = async (e) => {
|
|
968
|
-
let { adapter: t, requestManager: n } = this.client, r = this.clone(e), i = this.client.unstable_requestIdMapper(this), a =
|
|
968
|
+
let { adapter: t, requestManager: n } = this.client, r = this.clone(e), i = this.client.unstable_requestIdMapper(this), a = H(this.abortKey, this.scope);
|
|
969
969
|
n.addAbortController(a, i);
|
|
970
970
|
let o = await t.fetch(r, i);
|
|
971
971
|
return n.removeAbortController(a, i), r.unstable_responseMapper ? r.unstable_responseMapper(o) : o;
|
|
@@ -975,17 +975,17 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
975
975
|
...e,
|
|
976
976
|
cachePolicy: void 0
|
|
977
977
|
};
|
|
978
|
-
if (n === "network-only") return
|
|
978
|
+
if (n === "network-only") return qt(i, a);
|
|
979
979
|
let o = i.read();
|
|
980
|
-
if (n === "cache-first") return o ?
|
|
980
|
+
if (n === "cache-first") return o ? Kt(i, o) : qt(i, a);
|
|
981
981
|
if (o) {
|
|
982
|
-
let e = await
|
|
983
|
-
return
|
|
982
|
+
let e = await Kt(i, o);
|
|
983
|
+
return qt(i, a), e;
|
|
984
984
|
}
|
|
985
|
-
return
|
|
985
|
+
return qt(i, a);
|
|
986
986
|
};
|
|
987
987
|
static fromJSON = (t, n) => new e(t, n.requestOptions, n);
|
|
988
|
-
},
|
|
988
|
+
}, Xt = async ({ request: e, requestId: t, resolve: n, onStartTime: r, internalErrorMapping: i }) => {
|
|
989
989
|
let { requestManager: a, loggerManager: o } = e.client, { unstable_payloadMapper: s } = e.client.adapter, c = o.initialize(e.client, "Adapter"), l = null, u = null, d = e, f = 1, p = 1, m = 0, h = 0;
|
|
990
990
|
c.debug({
|
|
991
991
|
title: "Running middleware callbacks",
|
|
@@ -995,7 +995,7 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
995
995
|
requestId: t
|
|
996
996
|
}
|
|
997
997
|
}), 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));
|
|
998
|
-
let { client: g, abortKey: _ } = d, v =
|
|
998
|
+
let { client: g, abortKey: _ } = d, v = H(_, d.scope), y = d.payload;
|
|
999
999
|
d.unstable_payloadMapper ? y = await d.unstable_payloadMapper(d.payload) : s && (y = await s(y));
|
|
1000
1000
|
let b = d.options, x = +/* @__PURE__ */ new Date();
|
|
1001
1001
|
r(x);
|
|
@@ -1004,14 +1004,14 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
1004
1004
|
let n = Number(t.total || 0), r = Number(t.loaded || 0);
|
|
1005
1005
|
return Math.max(n, r, e);
|
|
1006
1006
|
}, T = (e, n, r) => {
|
|
1007
|
-
let i =
|
|
1007
|
+
let i = Ht(new Date(e), new Date(n), r);
|
|
1008
1008
|
m !== 100 && (m = i.total, a.events.emitUploadProgress({
|
|
1009
1009
|
...i,
|
|
1010
1010
|
requestId: t,
|
|
1011
1011
|
request: d
|
|
1012
1012
|
}));
|
|
1013
1013
|
}, E = (e, n, r) => {
|
|
1014
|
-
let i =
|
|
1014
|
+
let i = Ht(new Date(e), new Date(n), r);
|
|
1015
1015
|
h !== 100 && (h = i.total, a.events.emitDownloadProgress({
|
|
1016
1016
|
...i,
|
|
1017
1017
|
requestId: t,
|
|
@@ -1067,21 +1067,21 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
1067
1067
|
requestId: t,
|
|
1068
1068
|
request: d
|
|
1069
1069
|
}), u;
|
|
1070
|
-
},
|
|
1070
|
+
}, te = (e) => {
|
|
1071
1071
|
u ||= +/* @__PURE__ */ new Date();
|
|
1072
1072
|
let t = +/* @__PURE__ */ new Date();
|
|
1073
1073
|
return p = w(p, e), E(u, t, {
|
|
1074
1074
|
total: e.total || p,
|
|
1075
1075
|
loaded: e.loaded || 0
|
|
1076
1076
|
}), t;
|
|
1077
|
-
},
|
|
1077
|
+
}, ne = () => {
|
|
1078
1078
|
u ||= +/* @__PURE__ */ new Date();
|
|
1079
1079
|
let e = +/* @__PURE__ */ new Date();
|
|
1080
1080
|
return E(u, e, {
|
|
1081
1081
|
total: p,
|
|
1082
1082
|
loaded: p
|
|
1083
1083
|
}), e;
|
|
1084
|
-
},
|
|
1084
|
+
}, re = async ({ data: e, error: r, status: i, extra: a }) => {
|
|
1085
1085
|
let o = {
|
|
1086
1086
|
data: e,
|
|
1087
1087
|
error: r ?? null,
|
|
@@ -1106,50 +1106,50 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
1106
1106
|
response: o
|
|
1107
1107
|
}
|
|
1108
1108
|
}), o;
|
|
1109
|
-
},
|
|
1109
|
+
}, j = Zt({
|
|
1110
1110
|
request: d,
|
|
1111
1111
|
requestId: t,
|
|
1112
1112
|
startTime: x,
|
|
1113
1113
|
logger: c,
|
|
1114
1114
|
resolve: n
|
|
1115
|
-
}),
|
|
1115
|
+
}), M = ({ status: e, extra: n }) => (c.error({
|
|
1116
1116
|
title: "Abort error",
|
|
1117
1117
|
type: "request",
|
|
1118
1118
|
extra: {
|
|
1119
1119
|
request: d,
|
|
1120
1120
|
requestId: t
|
|
1121
1121
|
}
|
|
1122
|
-
}),
|
|
1123
|
-
error: i(
|
|
1122
|
+
}), j({
|
|
1123
|
+
error: i(V("abort")),
|
|
1124
1124
|
status: e,
|
|
1125
1125
|
extra: n
|
|
1126
|
-
})),
|
|
1126
|
+
})), N = ({ status: e, extra: n }) => (c.error({
|
|
1127
1127
|
title: "Timeout error",
|
|
1128
1128
|
type: "request",
|
|
1129
1129
|
extra: {
|
|
1130
1130
|
request: d,
|
|
1131
1131
|
requestId: t
|
|
1132
1132
|
}
|
|
1133
|
-
}),
|
|
1134
|
-
error:
|
|
1133
|
+
}), j({
|
|
1134
|
+
error: V("timeout"),
|
|
1135
1135
|
status: e,
|
|
1136
1136
|
extra: n
|
|
1137
|
-
})),
|
|
1137
|
+
})), ie = ({ status: e, extra: n }) => (c.error({
|
|
1138
1138
|
title: "Unexpected error",
|
|
1139
1139
|
type: "request",
|
|
1140
1140
|
extra: {
|
|
1141
1141
|
request: d,
|
|
1142
1142
|
requestId: t
|
|
1143
1143
|
}
|
|
1144
|
-
}),
|
|
1145
|
-
error:
|
|
1144
|
+
}), j({
|
|
1145
|
+
error: V(),
|
|
1146
1146
|
status: e,
|
|
1147
1147
|
extra: n
|
|
1148
|
-
})),
|
|
1149
|
-
let i =
|
|
1150
|
-
if (!i) throw new
|
|
1148
|
+
})), P = () => a.getAbortController(v, t), ae = ({ status: e, extra: n, onAbort: r = () => {} }) => {
|
|
1149
|
+
let i = P();
|
|
1150
|
+
if (!i) throw new jt("Controller is not found");
|
|
1151
1151
|
let o = () => {
|
|
1152
|
-
|
|
1152
|
+
M({
|
|
1153
1153
|
status: e,
|
|
1154
1154
|
extra: n
|
|
1155
1155
|
}), r(), a.events.emitAbort({
|
|
@@ -1169,36 +1169,36 @@ var Lt = /* @__PURE__ */ function(e) {
|
|
|
1169
1169
|
adapterOptions: b
|
|
1170
1170
|
}
|
|
1171
1171
|
});
|
|
1172
|
-
let
|
|
1172
|
+
let oe = e.client.adapter.unstable_queryParamsMapper(d.queryParams), se = e.client.adapter.unstable_endpointMapper(d.endpoint), ce = e.client.adapter.unstable_headerMapper(d), { url: F } = e.client;
|
|
1173
1173
|
return {
|
|
1174
1174
|
request: d,
|
|
1175
1175
|
requestId: t,
|
|
1176
|
-
url:
|
|
1177
|
-
endpoint:
|
|
1178
|
-
queryParams:
|
|
1176
|
+
url: F,
|
|
1177
|
+
endpoint: se,
|
|
1178
|
+
queryParams: oe,
|
|
1179
1179
|
payload: y,
|
|
1180
|
-
headers:
|
|
1180
|
+
headers: ce,
|
|
1181
1181
|
adapter: e.client.adapter,
|
|
1182
1182
|
adapterOptions: b,
|
|
1183
|
-
getAbortController:
|
|
1183
|
+
getAbortController: P,
|
|
1184
1184
|
getRequestStartTimestamp: S,
|
|
1185
1185
|
getResponseStartTimestamp: C,
|
|
1186
|
-
createAbortListener:
|
|
1186
|
+
createAbortListener: ae,
|
|
1187
1187
|
onBeforeRequest: D,
|
|
1188
1188
|
onRequestStart: O,
|
|
1189
1189
|
onRequestProgress: k,
|
|
1190
1190
|
onRequestEnd: ee,
|
|
1191
1191
|
onResponseStart: A,
|
|
1192
|
-
onResponseProgress:
|
|
1193
|
-
onResponseEnd:
|
|
1194
|
-
onSuccess:
|
|
1195
|
-
onAbortError:
|
|
1196
|
-
onTimeoutError:
|
|
1197
|
-
onUnexpectedError:
|
|
1198
|
-
onError:
|
|
1192
|
+
onResponseProgress: te,
|
|
1193
|
+
onResponseEnd: ne,
|
|
1194
|
+
onSuccess: re,
|
|
1195
|
+
onAbortError: M,
|
|
1196
|
+
onTimeoutError: N,
|
|
1197
|
+
onUnexpectedError: ie,
|
|
1198
|
+
onError: j
|
|
1199
1199
|
};
|
|
1200
1200
|
};
|
|
1201
|
-
function
|
|
1201
|
+
function Zt({ request: e, requestId: t, startTime: n, resolve: r, logger: i }) {
|
|
1202
1202
|
let { client: a } = e;
|
|
1203
1203
|
return async ({ error: o, status: s, extra: c }) => {
|
|
1204
1204
|
let l = {
|
|
@@ -1227,8 +1227,8 @@ function Xt({ request: e, requestId: t, startTime: n, resolve: r, logger: i }) {
|
|
|
1227
1227
|
}), l;
|
|
1228
1228
|
};
|
|
1229
1229
|
}
|
|
1230
|
-
var
|
|
1231
|
-
if (!e.unstable_mock) throw new
|
|
1230
|
+
var Qt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTimeoutError: i, onRequestEnd: a, createAbortListener: o, onResponseProgress: s, onRequestProgress: c, onResponseStart: l, onBeforeRequest: u, onRequestStart: d, onSuccess: f, onAbortError: p, adapter: m }) => {
|
|
1231
|
+
if (!e.unstable_mock) throw new jt("Mock should be defined when calling mocker");
|
|
1232
1232
|
let h = !1, { requestTime: g = 20, responseTime: _ = 20, totalUploaded: v = 1e3, totalDownloaded: y = 1e3, timeout: b } = e.unstable_mock.config, { data: x, error: S, status: C, success: w = !0, extra: T = e.client.adapter.defaultExtra } = await e.unstable_mock.fn({
|
|
1233
1233
|
request: e,
|
|
1234
1234
|
requestId: t
|
|
@@ -1272,7 +1272,7 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1272
1272
|
status: C,
|
|
1273
1273
|
extra: T
|
|
1274
1274
|
}), h || r();
|
|
1275
|
-
},
|
|
1275
|
+
}, $t = (e) => e, en = class {
|
|
1276
1276
|
unstable_fetcher;
|
|
1277
1277
|
name;
|
|
1278
1278
|
defaultMethod;
|
|
@@ -1294,10 +1294,10 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1294
1294
|
initialize = (e) => (this.logger = e.loggerManager.initialize(e, "Adapter"), this.initialized = !0, this.client = e, this.unstable_onInitializeCallback?.({ client: e }), this);
|
|
1295
1295
|
onInitialize = (e) => (this.unstable_onInitializeCallback = e, this);
|
|
1296
1296
|
unstable_internalErrorMapping = (e) => e;
|
|
1297
|
-
unstable_headerMapper =
|
|
1298
|
-
unstable_payloadMapper =
|
|
1299
|
-
unstable_endpointMapper =
|
|
1300
|
-
unstable_queryParamsMapper =
|
|
1297
|
+
unstable_headerMapper = Pt;
|
|
1298
|
+
unstable_payloadMapper = Ft;
|
|
1299
|
+
unstable_endpointMapper = $t;
|
|
1300
|
+
unstable_queryParamsMapper = $t;
|
|
1301
1301
|
unstable_getAdapterDefaults;
|
|
1302
1302
|
unstable_getRequestDefaults;
|
|
1303
1303
|
unstable_devtoolsEndpointGetter = (e) => e;
|
|
@@ -1321,14 +1321,14 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1321
1321
|
async fetch(e, t) {
|
|
1322
1322
|
let n, r = async (r) => {
|
|
1323
1323
|
try {
|
|
1324
|
-
if (!this.initialized) throw new
|
|
1325
|
-
if (!this.unstable_fetcher) throw new
|
|
1324
|
+
if (!this.initialized) throw new jt(`Adapter ${this.options.name} is not initialized`);
|
|
1325
|
+
if (!this.unstable_fetcher) throw new jt(`Fetcher for ${this.options.name} adapter is not set`);
|
|
1326
1326
|
this.client.triggerPlugins("onAdapterFetch", {
|
|
1327
1327
|
adapter: this,
|
|
1328
1328
|
request: e,
|
|
1329
1329
|
requestId: t
|
|
1330
1330
|
});
|
|
1331
|
-
let i = await
|
|
1331
|
+
let i = await Xt({
|
|
1332
1332
|
request: e,
|
|
1333
1333
|
requestId: t,
|
|
1334
1334
|
resolve: r,
|
|
@@ -1337,9 +1337,9 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1337
1337
|
n = e;
|
|
1338
1338
|
}
|
|
1339
1339
|
});
|
|
1340
|
-
return e.unstable_mock && e.isMockerEnabled && e.client.isMockerEnabled ? await
|
|
1340
|
+
return e.unstable_mock && e.isMockerEnabled && e.client.isMockerEnabled ? await Qt(i) : this.unstable_fetcher(i);
|
|
1341
1341
|
} catch (i) {
|
|
1342
|
-
return
|
|
1342
|
+
return Zt({
|
|
1343
1343
|
request: e,
|
|
1344
1344
|
requestId: t,
|
|
1345
1345
|
startTime: n || Date.now(),
|
|
@@ -1356,66 +1356,66 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1356
1356
|
r(e);
|
|
1357
1357
|
});
|
|
1358
1358
|
}
|
|
1359
|
-
},
|
|
1359
|
+
}, tn = (e) => {
|
|
1360
1360
|
try {
|
|
1361
1361
|
return JSON.parse(e);
|
|
1362
1362
|
} catch {
|
|
1363
1363
|
return e;
|
|
1364
1364
|
}
|
|
1365
|
-
},
|
|
1365
|
+
}, nn = (e) => e ? tn(e) : V(), rn = (e) => (t) => {
|
|
1366
1366
|
let { skipNull: n, skipEmptyString: r } = e;
|
|
1367
1367
|
return !(r && t === void 0 || r && t === "" || n && t === null);
|
|
1368
|
-
},
|
|
1369
|
-
let r = !
|
|
1370
|
-
return !e || r ? "" : `${
|
|
1371
|
-
},
|
|
1368
|
+
}, U = (e, { encode: t, strict: n }) => t && n ? encodeURIComponent(e).replace(/[!'()*]/g, (e) => `%${e.charCodeAt(0).toString(16).toUpperCase()}`) : t ? encodeURIComponent(e) : e, an = (e, t, n) => {
|
|
1369
|
+
let r = !rn(n)(t);
|
|
1370
|
+
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)}`;
|
|
1371
|
+
}, on = (e, t, n) => {
|
|
1372
1372
|
let { arrayFormat: r, arraySeparator: i } = n;
|
|
1373
|
-
return t.filter(
|
|
1373
|
+
return t.filter(rn(n)).reduce((t, a, o) => {
|
|
1374
1374
|
switch (r) {
|
|
1375
1375
|
case "index": {
|
|
1376
|
-
let r = `${
|
|
1377
|
-
t.push(`${r}${
|
|
1376
|
+
let r = `${U(e, n)}[${U(String(o), n)}]=`;
|
|
1377
|
+
t.push(`${r}${U(String(a), n)}`);
|
|
1378
1378
|
break;
|
|
1379
1379
|
}
|
|
1380
1380
|
case "bracket": {
|
|
1381
|
-
let r = `${
|
|
1382
|
-
t.push(`${r}${
|
|
1381
|
+
let r = `${U(e, n)}[]=`;
|
|
1382
|
+
t.push(`${r}${U(String(a), n)}`);
|
|
1383
1383
|
break;
|
|
1384
1384
|
}
|
|
1385
1385
|
case "comma": {
|
|
1386
|
-
let r = !t.length && `${
|
|
1387
|
-
return [[...t, `${r}${
|
|
1386
|
+
let r = !t.length && `${U(e, n)}=` || "";
|
|
1387
|
+
return [[...t, `${r}${U(String(a), n)}`].join(",")];
|
|
1388
1388
|
}
|
|
1389
1389
|
case "separator": {
|
|
1390
|
-
let r = !t.length && `${
|
|
1391
|
-
return [[...t, `${r}${
|
|
1390
|
+
let r = !t.length && `${U(e, n)}=` || "";
|
|
1391
|
+
return [[...t, `${r}${U(String(a), n)}`].join(i || "|")];
|
|
1392
1392
|
}
|
|
1393
1393
|
case "bracket-separator": {
|
|
1394
|
-
let r = !t.length && `${
|
|
1395
|
-
return [[...t, `${r}${
|
|
1394
|
+
let r = !t.length && `${U(e, n)}[]=` || "";
|
|
1395
|
+
return [[...t, `${r}${U(String(a), n)}`].join(i || "|")];
|
|
1396
1396
|
}
|
|
1397
1397
|
default: {
|
|
1398
|
-
let r = `${
|
|
1399
|
-
t.push(`${r}${
|
|
1398
|
+
let r = `${U(e, n)}=`;
|
|
1399
|
+
t.push(`${r}${U(String(a), n)}`);
|
|
1400
1400
|
}
|
|
1401
1401
|
}
|
|
1402
1402
|
return t;
|
|
1403
1403
|
}, []).join("&");
|
|
1404
|
-
},
|
|
1404
|
+
}, sn = (e, t = In) => {
|
|
1405
1405
|
if (!e || !Object.keys(e).length) return "";
|
|
1406
1406
|
if (typeof e == "string") return e[0] === "?" ? e : `?${e}`;
|
|
1407
|
-
let n = Object.entries(e).map(([e, n]) => Array.isArray(n) ?
|
|
1407
|
+
let n = Object.entries(e).map(([e, n]) => Array.isArray(n) ? on(e, n, t) : an(e, n, t)).filter(Boolean).join("&");
|
|
1408
1408
|
return n ? `?${n}` : "";
|
|
1409
|
-
},
|
|
1409
|
+
}, cn = Jt.SEC * 5, ln = { headers: {} }, un = () => new en({
|
|
1410
1410
|
name: "http",
|
|
1411
|
-
defaultMethod:
|
|
1412
|
-
defaultExtra:
|
|
1411
|
+
defaultMethod: Rt.GET,
|
|
1412
|
+
defaultExtra: ln,
|
|
1413
1413
|
systemErrorStatus: 0,
|
|
1414
|
-
systemErrorExtra:
|
|
1415
|
-
}).setQueryParamsMapper(
|
|
1416
|
-
let { method: g, client: _, endpoint: v, queryParams: y } = e, b = y ?
|
|
1414
|
+
systemErrorExtra: ln
|
|
1415
|
+
}).setQueryParamsMapper(sn).setFetcher(async ({ request: e, adapterOptions: t, headers: n, payload: r, onError: i, onResponseEnd: a, onTimeoutError: o, onRequestEnd: s, createAbortListener: c, getAbortController: l, onResponseProgress: u, onResponseStart: d, onBeforeRequest: f, onRequestStart: p, onRequestProgress: m, onSuccess: h }) => {
|
|
1416
|
+
let { method: g, client: _, endpoint: v, queryParams: y } = e, b = y ? sn(y) : "", x = `${_.url}${v}${b}`, S = l(), { timeout: C = cn, streaming: w = !1, ...T } = t || {}, E = !1, D, O = c({
|
|
1417
1417
|
status: 0,
|
|
1418
|
-
extra:
|
|
1418
|
+
extra: ln
|
|
1419
1419
|
});
|
|
1420
1420
|
C > 0 && S && (D = setTimeout(() => {
|
|
1421
1421
|
E = !0, O(), S.abort();
|
|
@@ -1447,7 +1447,7 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1447
1447
|
status: l,
|
|
1448
1448
|
extra: c
|
|
1449
1449
|
}) : i({
|
|
1450
|
-
error:
|
|
1450
|
+
error: nn(await t.text()),
|
|
1451
1451
|
status: l,
|
|
1452
1452
|
extra: c
|
|
1453
1453
|
});
|
|
@@ -1468,11 +1468,11 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1468
1468
|
e = new TextDecoder().decode(o);
|
|
1469
1469
|
} else e = await t.text();
|
|
1470
1470
|
a(), O(), t.ok ? h({
|
|
1471
|
-
data:
|
|
1471
|
+
data: tn(e),
|
|
1472
1472
|
status: l,
|
|
1473
1473
|
extra: c
|
|
1474
1474
|
}) : i({
|
|
1475
|
-
error:
|
|
1475
|
+
error: nn(e),
|
|
1476
1476
|
status: l,
|
|
1477
1477
|
extra: c
|
|
1478
1478
|
});
|
|
@@ -1481,18 +1481,18 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1481
1481
|
if (D && clearTimeout(D), O(), S?.signal?.aborted) {
|
|
1482
1482
|
E && o({
|
|
1483
1483
|
status: 0,
|
|
1484
|
-
extra:
|
|
1484
|
+
extra: ln
|
|
1485
1485
|
});
|
|
1486
1486
|
return;
|
|
1487
1487
|
}
|
|
1488
1488
|
i({
|
|
1489
1489
|
error: e,
|
|
1490
1490
|
status: 0,
|
|
1491
|
-
extra:
|
|
1491
|
+
extra: ln
|
|
1492
1492
|
});
|
|
1493
1493
|
}
|
|
1494
|
-
}),
|
|
1495
|
-
emitter = new
|
|
1494
|
+
}), dn = () => un(), fn = class {
|
|
1495
|
+
emitter = new Fe();
|
|
1496
1496
|
events;
|
|
1497
1497
|
storage;
|
|
1498
1498
|
lazyStorage;
|
|
@@ -1503,7 +1503,7 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1503
1503
|
constructor(e) {
|
|
1504
1504
|
this.options = e;
|
|
1505
1505
|
let { storage: t = /* @__PURE__ */ new Map(), lazyStorage: n, version: r = "0.0.1" } = e ?? {};
|
|
1506
|
-
this.emitter?.setMaxListeners(1e3), this.events =
|
|
1506
|
+
this.emitter?.setMaxListeners(1e3), this.events = bn(this.emitter), this.storage = t, this.version = r, this.lazyStorage = n;
|
|
1507
1507
|
}
|
|
1508
1508
|
initialize = (e) => (this.client = e, this.logger = e.loggerManager.initialize(e, "Cache"), e.appManager.events.onOnline(() => {
|
|
1509
1509
|
[...this.storage.keys()].forEach(this.scheduleGarbageCollector);
|
|
@@ -1517,7 +1517,7 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1517
1517
|
response: t
|
|
1518
1518
|
}
|
|
1519
1519
|
});
|
|
1520
|
-
let { cacheKey: n, cache: r, staleTime: i, cacheTime: a, scope: o } = e, s =
|
|
1520
|
+
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 = pn(c, l), d = {
|
|
1521
1521
|
...u,
|
|
1522
1522
|
scope: o,
|
|
1523
1523
|
staleTime: i,
|
|
@@ -1563,7 +1563,7 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1563
1563
|
partialResponse: t
|
|
1564
1564
|
}
|
|
1565
1565
|
});
|
|
1566
|
-
let { cacheKey: n, scope: r } = e, i =
|
|
1566
|
+
let { cacheKey: n, scope: r } = e, i = H(n, r), a = this.storage.get(i), o = typeof t == "function" ? t(a || null) : t;
|
|
1567
1567
|
a && this.set(e, {
|
|
1568
1568
|
...a,
|
|
1569
1569
|
...o
|
|
@@ -1601,7 +1601,7 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1601
1601
|
cacheKey: t
|
|
1602
1602
|
}), this.events.emitInvalidation(t);
|
|
1603
1603
|
};
|
|
1604
|
-
e instanceof
|
|
1604
|
+
e instanceof Yt ? n(H(e.cacheKey, e.scope), e.cacheKey) : typeof e == "string" ? n(e) : t.length && t.forEach((t) => {
|
|
1605
1605
|
e.test(t) && n(t);
|
|
1606
1606
|
});
|
|
1607
1607
|
};
|
|
@@ -1656,49 +1656,49 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1656
1656
|
clear = async () => {
|
|
1657
1657
|
this.garbageCollectors.forEach((e) => clearTimeout(e)), this.storage.clear();
|
|
1658
1658
|
};
|
|
1659
|
-
},
|
|
1659
|
+
}, pn = (e, t) => {
|
|
1660
1660
|
let { data: n, success: r } = t, i = !r && e ? e.data : null, a = n || i;
|
|
1661
1661
|
return {
|
|
1662
1662
|
...t,
|
|
1663
1663
|
data: a
|
|
1664
1664
|
};
|
|
1665
|
-
},
|
|
1665
|
+
}, mn = () => "invalidate", hn = (e) => `${e}_invalidate`, gn = () => "delete", _n = (e) => `${e}_delete`, vn = (e) => `${e}_cache`, yn = () => "cache", bn = (e) => ({
|
|
1666
1666
|
emitCacheData: (t, n = !1) => {
|
|
1667
|
-
e.emit(
|
|
1667
|
+
e.emit(yn(), t, n), e.emit(vn(t.cacheKey), t, n);
|
|
1668
1668
|
},
|
|
1669
1669
|
emitInvalidation: (t, n = !1) => {
|
|
1670
|
-
e.emit(
|
|
1670
|
+
e.emit(mn(), t, n), e.emit(hn(t), n);
|
|
1671
1671
|
},
|
|
1672
1672
|
emitDelete: (t, n = !1) => {
|
|
1673
|
-
e.emit(
|
|
1673
|
+
e.emit(gn(), t, n), e.emit(_n(t), n);
|
|
1674
1674
|
},
|
|
1675
|
-
onData: (t) => (e.on(
|
|
1676
|
-
onDataByKey: (t, n) => (e.on(
|
|
1677
|
-
onInvalidate: (t) => (e.on(
|
|
1678
|
-
onInvalidateByKey: (t, n) => (e.on(
|
|
1679
|
-
onDelete: (t) => (e.on(
|
|
1680
|
-
onDeleteByKey: (t, n) => (e.on(
|
|
1681
|
-
}),
|
|
1675
|
+
onData: (t) => (e.on(yn(), t), () => e.removeListener(yn(), t)),
|
|
1676
|
+
onDataByKey: (t, n) => (e.on(vn(t), n), () => e.removeListener(vn(t), n)),
|
|
1677
|
+
onInvalidate: (t) => (e.on(mn(), t), () => e.removeListener(mn(), t)),
|
|
1678
|
+
onInvalidateByKey: (t, n) => (e.on(hn(t), n), () => e.removeListener(hn(t), n)),
|
|
1679
|
+
onDelete: (t) => (e.on(gn(), t), () => e.removeListener(gn(), t)),
|
|
1680
|
+
onDeleteByKey: (t, n) => (e.on(_n(t), n), () => e.removeListener(_n(t), n))
|
|
1681
|
+
}), W = /* @__PURE__ */ function(e) {
|
|
1682
1682
|
return e.ONE_BY_ONE = "one-by-one", e.ALL_AT_ONCE = "all-at-once", e.PREVIOUS_CANCELED = "previous-canceled", e.DEDUPLICATED = "deduplicated", e;
|
|
1683
|
-
}({}),
|
|
1683
|
+
}({}), xn = (e) => ({
|
|
1684
1684
|
emitDrained: (t, n) => {
|
|
1685
|
-
e.emit(
|
|
1685
|
+
e.emit(Cn(), t, n), e.emit(wn(t.queryKey), t, n);
|
|
1686
1686
|
},
|
|
1687
1687
|
emitQueueStatusChanged: (t, n) => {
|
|
1688
|
-
e.emit(
|
|
1688
|
+
e.emit(Tn(), t, n), e.emit(En(t.queryKey), t, n);
|
|
1689
1689
|
},
|
|
1690
1690
|
emitQueueChanged: (t, n) => {
|
|
1691
|
-
e.emit(
|
|
1691
|
+
e.emit(Dn(), t, n), e.emit(On(t.queryKey), t, n);
|
|
1692
1692
|
},
|
|
1693
|
-
onDrained: (t) => (e.on(
|
|
1694
|
-
onDrainedByKey: (t, n) => (e.on(
|
|
1695
|
-
onQueueStatusChange: (t) => (e.on(
|
|
1696
|
-
onQueueStatusChangeByKey: (t, n) => (e.on(
|
|
1697
|
-
onQueueChange: (t) => (e.on(
|
|
1698
|
-
onQueueChangeByKey: (t, n) => (e.on(
|
|
1699
|
-
}),
|
|
1700
|
-
emitter = new
|
|
1701
|
-
events =
|
|
1693
|
+
onDrained: (t) => (e.on(Cn(), t), () => e.removeListener(Cn(), t)),
|
|
1694
|
+
onDrainedByKey: (t, n) => (e.on(wn(t), n), () => e.removeListener(wn(t), n)),
|
|
1695
|
+
onQueueStatusChange: (t) => (e.on(Tn(), t), () => e.removeListener(Tn(), t)),
|
|
1696
|
+
onQueueStatusChangeByKey: (t, n) => (e.on(En(t), n), () => e.removeListener(En(t), n)),
|
|
1697
|
+
onQueueChange: (t) => (e.on(Dn(), t), () => e.removeListener(Dn(), t)),
|
|
1698
|
+
onQueueChangeByKey: (t, n) => (e.on(On(t), n), () => e.removeListener(On(t), n))
|
|
1699
|
+
}), Sn = class {
|
|
1700
|
+
emitter = new Fe();
|
|
1701
|
+
events = xn(this.emitter);
|
|
1702
1702
|
storage = /* @__PURE__ */ new Map();
|
|
1703
1703
|
requestCount = /* @__PURE__ */ new Map();
|
|
1704
1704
|
runningRequests = /* @__PURE__ */ new Map();
|
|
@@ -1707,7 +1707,7 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1707
1707
|
constructor(e) {
|
|
1708
1708
|
this.options = e, this.emitter?.setMaxListeners(1e3), this.options?.storage && (this.storage = this.options.storage);
|
|
1709
1709
|
}
|
|
1710
|
-
isRequestJSON = (e) => !(e instanceof
|
|
1710
|
+
isRequestJSON = (e) => !(e instanceof Yt);
|
|
1711
1711
|
initialize = (e) => (this.client = e, this.logger = e.loggerManager.initialize(e, "Dispatcher"), this.client.appManager.events.onOnline(() => {
|
|
1712
1712
|
this.flush();
|
|
1713
1713
|
}), this);
|
|
@@ -1831,14 +1831,14 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1831
1831
|
hasRunningRequest = (e, t) => !!this.getRunningRequests(e).find((e) => e.requestId === t);
|
|
1832
1832
|
cancelRunningRequests = (e) => {
|
|
1833
1833
|
this.runningRequests.get(e)?.forEach((e) => {
|
|
1834
|
-
let t =
|
|
1834
|
+
let t = H(e.request.abortKey, e.request.scope);
|
|
1835
1835
|
this.client.requestManager.abortByRequestId(t, e.requestId);
|
|
1836
1836
|
}), this.deleteRunningRequests(e);
|
|
1837
1837
|
};
|
|
1838
1838
|
cancelRunningRequest = (e, t) => {
|
|
1839
1839
|
let n = this.getRunningRequests(e).filter((e) => {
|
|
1840
1840
|
if (e.requestId === t) {
|
|
1841
|
-
let t =
|
|
1841
|
+
let t = H(e.request.abortKey, e.request.scope);
|
|
1842
1842
|
return this.client.requestManager.abortByRequestId(t, e.requestId), !1;
|
|
1843
1843
|
}
|
|
1844
1844
|
return !0;
|
|
@@ -1866,7 +1866,7 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1866
1866
|
resolved: !1
|
|
1867
1867
|
});
|
|
1868
1868
|
add = (e) => {
|
|
1869
|
-
let t =
|
|
1869
|
+
let t = H(e.queryKey, e.scope), n = this.createStorageItem(e), { requestId: r } = n, [i] = this.getQueue(t).requests.slice(-1), a = jn(e, i);
|
|
1870
1870
|
switch (this.logger.debug({
|
|
1871
1871
|
title: "Adding request to queue",
|
|
1872
1872
|
type: "system",
|
|
@@ -1876,9 +1876,9 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1876
1876
|
requestId: r
|
|
1877
1877
|
}
|
|
1878
1878
|
}), a) {
|
|
1879
|
-
case
|
|
1880
|
-
case
|
|
1881
|
-
case
|
|
1879
|
+
case W.ONE_BY_ONE: return this.addQueueItem(t, n), this.flushQueue(t), r;
|
|
1880
|
+
case W.PREVIOUS_CANCELED: return this.cancelRunningRequests(t), this.clearQueue(t), this.addQueueItem(t, n), this.flushQueue(t), r;
|
|
1881
|
+
case W.DEDUPLICATED: return this.client.requestManager.events.emitDeduplicated({
|
|
1882
1882
|
request: i.request,
|
|
1883
1883
|
requestId: r,
|
|
1884
1884
|
deduplicatedRequest: e
|
|
@@ -1920,7 +1920,7 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1920
1920
|
requestId: n
|
|
1921
1921
|
}
|
|
1922
1922
|
});
|
|
1923
|
-
let { retry: r, retryTime: i, queryKey: a, abortKey: o, offline: s, scope: c } = t, l =
|
|
1923
|
+
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 = kn(e.retries, r), g = !m.isOnline && s, _ = this.hasRunningRequest(l, n), v = e.stopped;
|
|
1924
1924
|
if (g || _ || v) return this.logger.warning({
|
|
1925
1925
|
title: "Unable to perform request",
|
|
1926
1926
|
type: "system",
|
|
@@ -1940,7 +1940,7 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1940
1940
|
}), this.incrementQueueRequestCount(l), f.addAbortController(u, n);
|
|
1941
1941
|
let b = await d.fetch(t, n);
|
|
1942
1942
|
e.resolved = !0, f.removeAbortController(u, n);
|
|
1943
|
-
let x = !m.isOnline, S =
|
|
1943
|
+
let x = !m.isOnline, S = V("abort").message === b.error?.message, C = !this.hasRunningRequest(l, n) || S;
|
|
1944
1944
|
this.deleteRunningRequest(l, n);
|
|
1945
1945
|
let w = b.success || !h || !t.retryOnError || t.retryOnError(b), T = !b.success && h && w && !C && !x, E = {
|
|
1946
1946
|
isCanceled: C,
|
|
@@ -2054,26 +2054,26 @@ var Zt = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
2054
2054
|
}
|
|
2055
2055
|
}), this.delete(l, n, u));
|
|
2056
2056
|
};
|
|
2057
|
-
},
|
|
2058
|
-
let { queued: n, cancelable: r, deduplicate: i } = e, a = t ?
|
|
2059
|
-
return n ?
|
|
2057
|
+
}, Cn = () => "drained-event", wn = (e) => `${e}-drained-event`, Tn = () => "status-event", En = (e) => `${e}-status-event`, Dn = () => "change-event", On = (e) => `${e}-change-event`, kn = (e, t) => !!(t && e < t), An = (e, t) => e.deduplicateTime ? +/* @__PURE__ */ new Date() - t.timestamp <= e.deduplicateTime : !0, jn = (e, t) => {
|
|
2058
|
+
let { queued: n, cancelable: r, deduplicate: i } = e, a = t ? An(e, t) : !1;
|
|
2059
|
+
return n ? W.ONE_BY_ONE : r ? W.PREVIOUS_CANCELED : a && i ? W.DEDUPLICATED : W.ALL_AT_ONCE;
|
|
2060
2060
|
};
|
|
2061
|
-
function
|
|
2061
|
+
function Mn(e) {
|
|
2062
2062
|
return e === "client" || e === "server" ? e : typeof window < "u" && typeof document < "u" ? "client" : "server";
|
|
2063
2063
|
}
|
|
2064
|
-
var
|
|
2064
|
+
var Nn = async (e, t) => {
|
|
2065
2065
|
let n = t;
|
|
2066
2066
|
if (!t.requestOptions.disableRequestInterceptors) {
|
|
2067
2067
|
for (let r of e) if (n = await r(t), !n) throw Error("Request modifier must return request");
|
|
2068
2068
|
}
|
|
2069
2069
|
return n;
|
|
2070
|
-
},
|
|
2070
|
+
}, Pn = async (e, t, n) => {
|
|
2071
2071
|
let r = t;
|
|
2072
2072
|
if (!n.requestOptions.disableResponseInterceptors) {
|
|
2073
2073
|
for (let i of e) if (r = await i(t, n), !r) throw Error("Response modifier must return data");
|
|
2074
2074
|
}
|
|
2075
2075
|
return r;
|
|
2076
|
-
},
|
|
2076
|
+
}, Fn = class {
|
|
2077
2077
|
url;
|
|
2078
2078
|
mode;
|
|
2079
2079
|
debug;
|
|
@@ -2082,8 +2082,8 @@ var Mn = async (e, t) => {
|
|
|
2082
2082
|
unstable_onResponseCallbacks = [];
|
|
2083
2083
|
unstable_onAuthCallbacks = [];
|
|
2084
2084
|
unstable_onRequestCallbacks = [];
|
|
2085
|
-
loggerManager = new
|
|
2086
|
-
requestManager = new
|
|
2085
|
+
loggerManager = new bt();
|
|
2086
|
+
requestManager = new Ue();
|
|
2087
2087
|
appManager;
|
|
2088
2088
|
adapter;
|
|
2089
2089
|
cache;
|
|
@@ -2091,15 +2091,15 @@ var Mn = async (e, t) => {
|
|
|
2091
2091
|
submitDispatcher;
|
|
2092
2092
|
isMockerEnabled = !0;
|
|
2093
2093
|
plugins = [];
|
|
2094
|
-
unstable_abortKeyMapper =
|
|
2095
|
-
unstable_cacheKeyMapper =
|
|
2096
|
-
unstable_queryKeyMapper =
|
|
2097
|
-
unstable_requestIdMapper =
|
|
2094
|
+
unstable_abortKeyMapper = Ut;
|
|
2095
|
+
unstable_cacheKeyMapper = Wt;
|
|
2096
|
+
unstable_queryKeyMapper = Wt;
|
|
2097
|
+
unstable_requestIdMapper = Me;
|
|
2098
2098
|
logger = this.loggerManager.initialize(this, "Client");
|
|
2099
2099
|
constructor(e) {
|
|
2100
2100
|
this.options = e;
|
|
2101
2101
|
let { url: t, appManager: n, cache: r, fetchDispatcher: i, submitDispatcher: a, mode: o } = this.options;
|
|
2102
|
-
this.url = t, this.mode =
|
|
2102
|
+
this.url = t, this.mode = Mn(o), this.adapter = dn(), this.appManager = n?.() || new Ie(), this.cache = r?.() || new fn(), this.fetchDispatcher = i?.() || new Sn(), this.submitDispatcher = a?.() || new Sn(), this.adapter.initialize(this), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
|
|
2103
2103
|
}
|
|
2104
2104
|
setDebug = (e) => (this.debug = e, this);
|
|
2105
2105
|
setLogLevel = (e) => (this.loggerManager.setSeverity(e), this);
|
|
@@ -2128,15 +2128,15 @@ var Mn = async (e, t) => {
|
|
|
2128
2128
|
setCacheKeyMapper = (e) => (this.unstable_cacheKeyMapper = e, this);
|
|
2129
2129
|
setQueryKeyMapper = (e) => (this.unstable_queryKeyMapper = e, this);
|
|
2130
2130
|
setRequestIdMapper = (e) => (this.unstable_requestIdMapper = e, this);
|
|
2131
|
-
unstable_modifyAuth = async (e) =>
|
|
2132
|
-
unstable_modifyRequest = async (e) =>
|
|
2133
|
-
unstable_modifyErrorResponse = async (e, t) =>
|
|
2134
|
-
unstable_modifySuccessResponse = async (e, t) =>
|
|
2135
|
-
unstable_modifyResponse = async (e, t) =>
|
|
2136
|
-
fromJSON = (e) =>
|
|
2131
|
+
unstable_modifyAuth = async (e) => Nn(this.unstable_onAuthCallbacks, e);
|
|
2132
|
+
unstable_modifyRequest = async (e) => Nn(this.unstable_onRequestCallbacks, e);
|
|
2133
|
+
unstable_modifyErrorResponse = async (e, t) => Pn(this.unstable_onErrorCallbacks, e, t);
|
|
2134
|
+
unstable_modifySuccessResponse = async (e, t) => Pn(this.unstable_onSuccessCallbacks, e, t);
|
|
2135
|
+
unstable_modifyResponse = async (e, t) => Pn(this.unstable_onResponseCallbacks, e, t);
|
|
2136
|
+
fromJSON = (e) => Yt.fromJSON(this, e);
|
|
2137
2137
|
clear = () => {
|
|
2138
2138
|
let { appManager: e, cache: t, fetchDispatcher: n, submitDispatcher: r } = this.options;
|
|
2139
|
-
this.requestManager.abortControllers.clear(), this.fetchDispatcher.clear(), this.submitDispatcher.clear(), this.cache.clear(), this.requestManager.emitter.removeAllListeners(), this.fetchDispatcher.emitter.removeAllListeners(), this.submitDispatcher.emitter.removeAllListeners(), this.cache.emitter.removeAllListeners(), this.cache = t?.() || new
|
|
2139
|
+
this.requestManager.abortControllers.clear(), this.fetchDispatcher.clear(), this.submitDispatcher.clear(), this.cache.clear(), this.requestManager.emitter.removeAllListeners(), this.fetchDispatcher.emitter.removeAllListeners(), this.submitDispatcher.emitter.removeAllListeners(), this.cache.emitter.removeAllListeners(), this.cache = t?.() || new fn(), this.appManager = e?.() || new Ie(), this.fetchDispatcher = n?.() || new Sn(), this.submitDispatcher = r?.() || new Sn(), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
|
|
2140
2140
|
};
|
|
2141
2141
|
hydrate = (e, t) => {
|
|
2142
2142
|
e?.forEach((e) => {
|
|
@@ -2153,8 +2153,8 @@ var Mn = async (e, t) => {
|
|
|
2153
2153
|
...a,
|
|
2154
2154
|
...t
|
|
2155
2155
|
};
|
|
2156
|
-
if (!s.override && this.cache.get(
|
|
2157
|
-
let c =
|
|
2156
|
+
if (!s.override && this.cache.get(H(n, r))) return;
|
|
2157
|
+
let c = tn(i);
|
|
2158
2158
|
this.cache.set({
|
|
2159
2159
|
...s,
|
|
2160
2160
|
cacheKey: n,
|
|
@@ -2166,10 +2166,10 @@ var Mn = async (e, t) => {
|
|
|
2166
2166
|
let t = this.adapter.unstable_endpointMapper(e.endpoint), n = {
|
|
2167
2167
|
...e,
|
|
2168
2168
|
endpoint: String(t)
|
|
2169
|
-
}, r = new
|
|
2169
|
+
}, r = new Yt(this, n);
|
|
2170
2170
|
return this.plugins.forEach((e) => e.trigger("onRequestCreate", { request: r })), r;
|
|
2171
2171
|
};
|
|
2172
|
-
},
|
|
2172
|
+
}, In = {
|
|
2173
2173
|
strict: !0,
|
|
2174
2174
|
encode: !0,
|
|
2175
2175
|
arrayFormat: "bracket",
|
|
@@ -2178,101 +2178,101 @@ var Mn = async (e, t) => {
|
|
|
2178
2178
|
skipNull: !0,
|
|
2179
2179
|
skipEmptyString: !0
|
|
2180
2180
|
};
|
|
2181
|
-
function
|
|
2182
|
-
return new
|
|
2181
|
+
function Ln(e) {
|
|
2182
|
+
return new Fn(e);
|
|
2183
2183
|
}
|
|
2184
2184
|
//#endregion
|
|
2185
2185
|
//#region src/core/client.ts
|
|
2186
|
-
var
|
|
2186
|
+
var G = Ln({ url: F() });
|
|
2187
2187
|
//#endregion
|
|
2188
2188
|
//#region src/core/auth-api.ts
|
|
2189
|
-
async function
|
|
2190
|
-
let { data: t, success: n } = await
|
|
2189
|
+
async function Rn(e) {
|
|
2190
|
+
let { data: t, success: n } = await G.createRequest()({
|
|
2191
2191
|
endpoint: "/auth/cli/whoami",
|
|
2192
2192
|
method: "GET"
|
|
2193
2193
|
}).setHeaders({ Authorization: `Bearer ${e}` }).send();
|
|
2194
2194
|
return !n || !t ? null : t;
|
|
2195
2195
|
}
|
|
2196
|
-
async function
|
|
2197
|
-
await
|
|
2196
|
+
async function zn(e) {
|
|
2197
|
+
await G.createRequest()({
|
|
2198
2198
|
endpoint: "/auth/cli/token",
|
|
2199
2199
|
method: "DELETE"
|
|
2200
2200
|
}).setHeaders({ Authorization: `Bearer ${e}` }).send();
|
|
2201
2201
|
}
|
|
2202
2202
|
//#endregion
|
|
2203
2203
|
//#region src/core/auth-store.ts
|
|
2204
|
-
var
|
|
2205
|
-
function
|
|
2204
|
+
var Bn = 1, Vn = "hype-stack", Hn = "auth.json";
|
|
2205
|
+
function Un() {
|
|
2206
2206
|
let e = process.env.HYPE_STACK_CONFIG_DIR;
|
|
2207
|
-
if (e) return T.join(e,
|
|
2207
|
+
if (e) return T.join(e, Vn);
|
|
2208
2208
|
let t = w.homedir();
|
|
2209
2209
|
if (process.platform === "win32") {
|
|
2210
2210
|
let e = process.env.APPDATA ?? T.join(t, "AppData", "Roaming");
|
|
2211
|
-
return T.join(e,
|
|
2211
|
+
return T.join(e, Vn);
|
|
2212
2212
|
}
|
|
2213
|
-
if (process.platform === "darwin") return T.join(t, "Library", "Application Support",
|
|
2213
|
+
if (process.platform === "darwin") return T.join(t, "Library", "Application Support", Vn);
|
|
2214
2214
|
let n = process.env.XDG_CONFIG_HOME ?? T.join(t, ".config");
|
|
2215
|
-
return T.join(n,
|
|
2215
|
+
return T.join(n, Vn);
|
|
2216
2216
|
}
|
|
2217
|
-
function
|
|
2218
|
-
return T.join(
|
|
2217
|
+
function Wn() {
|
|
2218
|
+
return T.join(Un(), Hn);
|
|
2219
2219
|
}
|
|
2220
|
-
async function
|
|
2221
|
-
let e = await y.readFile(
|
|
2220
|
+
async function Gn() {
|
|
2221
|
+
let e = await y.readFile(Wn(), "utf-8").catch(() => null);
|
|
2222
2222
|
if (!e) return {
|
|
2223
|
-
version:
|
|
2223
|
+
version: Bn,
|
|
2224
2224
|
tokens: {}
|
|
2225
2225
|
};
|
|
2226
2226
|
let t = JSON.parse(e);
|
|
2227
2227
|
return {
|
|
2228
|
-
version: t.version ??
|
|
2228
|
+
version: t.version ?? Bn,
|
|
2229
2229
|
tokens: t.tokens ?? {}
|
|
2230
2230
|
};
|
|
2231
2231
|
}
|
|
2232
|
-
async function Gn(e) {
|
|
2233
|
-
let t = Hn();
|
|
2234
|
-
await y.mkdir(t, { recursive: !0 }), await y.writeFile(Un(), `${JSON.stringify(e, null, 2)}\n`, { mode: 384 });
|
|
2235
|
-
}
|
|
2236
2232
|
async function Kn(e) {
|
|
2237
|
-
|
|
2233
|
+
let t = Un();
|
|
2234
|
+
await y.mkdir(t, { recursive: !0 }), await y.writeFile(Wn(), `${JSON.stringify(e, null, 2)}\n`, { mode: 384 });
|
|
2238
2235
|
}
|
|
2239
|
-
async function qn(e
|
|
2240
|
-
|
|
2241
|
-
n.tokens[e] = t, await Gn(n);
|
|
2236
|
+
async function qn(e) {
|
|
2237
|
+
return (await Gn()).tokens[e] ?? null;
|
|
2242
2238
|
}
|
|
2243
|
-
async function Jn(e) {
|
|
2244
|
-
let
|
|
2245
|
-
|
|
2239
|
+
async function Jn(e, t) {
|
|
2240
|
+
let n = await Gn();
|
|
2241
|
+
n.tokens[e] = t, await Kn(n);
|
|
2242
|
+
}
|
|
2243
|
+
async function Yn(e) {
|
|
2244
|
+
let t = await Gn();
|
|
2245
|
+
e in t.tokens && (delete t.tokens[e], await Kn(t));
|
|
2246
2246
|
}
|
|
2247
2247
|
//#endregion
|
|
2248
2248
|
//#region src/core/device.ts
|
|
2249
|
-
function
|
|
2249
|
+
function Xn() {
|
|
2250
2250
|
let e = w.networkInterfaces();
|
|
2251
2251
|
for (let t of Object.values(e)) if (t) {
|
|
2252
2252
|
for (let e of t) if (!e.internal && e.mac !== "00:00:00:00:00:00") return e.mac;
|
|
2253
2253
|
}
|
|
2254
2254
|
return "unknown";
|
|
2255
2255
|
}
|
|
2256
|
-
function
|
|
2257
|
-
let e = `${
|
|
2256
|
+
function Zn() {
|
|
2257
|
+
let e = `${Xn()}:${w.hostname()}:${w.platform()}:${w.arch()}`;
|
|
2258
2258
|
return x("sha256").update(e).digest("hex").slice(0, 16);
|
|
2259
2259
|
}
|
|
2260
|
-
function
|
|
2260
|
+
function Qn() {
|
|
2261
2261
|
return `hype-stack/${A} ${w.platform()} ${w.arch()} node/${process.version.slice(1)}`;
|
|
2262
2262
|
}
|
|
2263
2263
|
//#endregion
|
|
2264
2264
|
//#region src/core/open-browser.ts
|
|
2265
|
-
function
|
|
2265
|
+
function $n(e) {
|
|
2266
2266
|
E(process.platform === "darwin" ? `open "${e}"` : process.platform === "win32" ? `start "" "${e}"` : `xdg-open "${e}"`);
|
|
2267
2267
|
}
|
|
2268
2268
|
//#endregion
|
|
2269
2269
|
//#region src/core/login.ts
|
|
2270
|
-
var
|
|
2271
|
-
async function
|
|
2272
|
-
let t = S(16).toString("hex"), n =
|
|
2270
|
+
var er = 300 * 1e3, tr = (e) => `<!doctype html><html><head><meta charset="utf-8"><title>Hype Stack CLI</title></head><body style="font-family:system-ui,sans-serif;text-align:center;padding-top:4rem;color:#111"><h2>${e}</h2><p>You can close this tab and return to your terminal.</p></body></html>`;
|
|
2271
|
+
async function nr(e = {}) {
|
|
2272
|
+
let t = S(16).toString("hex"), n = F(), r = C.createServer(), i = await new Promise((n, i) => {
|
|
2273
2273
|
let a = setTimeout(() => {
|
|
2274
2274
|
o(), i(/* @__PURE__ */ Error("Login timed out. Run `npx @hype-stack/cli login` again."));
|
|
2275
|
-
},
|
|
2275
|
+
}, er);
|
|
2276
2276
|
function o() {
|
|
2277
2277
|
clearTimeout(a), r.close(), r.closeAllConnections?.();
|
|
2278
2278
|
}
|
|
@@ -2286,7 +2286,7 @@ async function tr(e = {}) {
|
|
|
2286
2286
|
r.writeHead(200, {
|
|
2287
2287
|
"Content-Type": "text/html",
|
|
2288
2288
|
Connection: "close"
|
|
2289
|
-
}), r.end(
|
|
2289
|
+
}), r.end(tr(e));
|
|
2290
2290
|
};
|
|
2291
2291
|
if (a.searchParams.get("state") !== t) {
|
|
2292
2292
|
s("Login failed."), o(), i(/* @__PURE__ */ Error("Login failed: state mismatch. Run `npx @hype-stack/cli login` again."));
|
|
@@ -2301,53 +2301,53 @@ async function tr(e = {}) {
|
|
|
2301
2301
|
}), r.on("error", (e) => {
|
|
2302
2302
|
o(), i(e);
|
|
2303
2303
|
}), r.listen(0, "127.0.0.1", () => {
|
|
2304
|
-
let { port: n } = r.address(), i = encodeURIComponent(
|
|
2305
|
-
e.onUrl?.(a),
|
|
2304
|
+
let { port: n } = r.address(), i = encodeURIComponent(Qn()), a = `${le()}/cli/authorize?port=${n}&state=${t}&label=${i}`;
|
|
2305
|
+
e.onUrl?.(a), $n(a);
|
|
2306
2306
|
});
|
|
2307
|
-
}), a = await
|
|
2307
|
+
}), a = await Rn(i).catch(() => null), o = {
|
|
2308
2308
|
token: i,
|
|
2309
2309
|
email: a?.email,
|
|
2310
2310
|
organizationId: a?.organizationId
|
|
2311
2311
|
};
|
|
2312
|
-
return await
|
|
2312
|
+
return await Jn(n, o), o;
|
|
2313
2313
|
}
|
|
2314
2314
|
//#endregion
|
|
2315
2315
|
//#region src/core/access-prompts.ts
|
|
2316
|
-
async function
|
|
2316
|
+
async function rr() {
|
|
2317
2317
|
let e = await s.confirm({ message: "Log in to install packs your organization owns? (opens your browser)" });
|
|
2318
2318
|
if (s.isCancel(e) || !e) return null;
|
|
2319
2319
|
s.log.step("Opening your browser to sign in...");
|
|
2320
2320
|
try {
|
|
2321
|
-
let e = await
|
|
2322
|
-
s.log.info(`If your browser didn't open, visit:\n ${
|
|
2321
|
+
let e = await nr({ onUrl: (e) => {
|
|
2322
|
+
s.log.info(`If your browser didn't open, visit:\n ${R.path(e)}`);
|
|
2323
2323
|
} });
|
|
2324
2324
|
return s.log.success(e.email ? `Logged in as ${e.email}` : "Logged in"), e.token;
|
|
2325
2325
|
} catch (e) {
|
|
2326
2326
|
return s.log.error(e instanceof Error ? e.message : String(e)), null;
|
|
2327
2327
|
}
|
|
2328
2328
|
}
|
|
2329
|
-
async function
|
|
2329
|
+
async function ir(e) {
|
|
2330
2330
|
if (e.length === 0) return;
|
|
2331
2331
|
s.note([
|
|
2332
2332
|
"These packs need a purchase before they can be installed:",
|
|
2333
2333
|
"",
|
|
2334
|
-
...e.map((e) => ` ${
|
|
2334
|
+
...e.map((e) => ` ${R.brand(e.displayName)} ${R.highlight(`$${e.price}`)}`)
|
|
2335
2335
|
].join("\n"), "Locked Packs");
|
|
2336
2336
|
let t = await s.confirm({ message: `Open the purchase ${e.length === 1 ? "page" : "pages"} in your browser?` });
|
|
2337
2337
|
if (s.isCancel(t) || !t) {
|
|
2338
|
-
s.log.info(
|
|
2338
|
+
s.log.info(R.muted("Run 'npx @hype-stack/cli login' after purchasing, then 'npx @hype-stack/cli compose' again."));
|
|
2339
2339
|
return;
|
|
2340
2340
|
}
|
|
2341
|
-
for (let t of e)
|
|
2341
|
+
for (let t of e) $n(Se(t.name));
|
|
2342
2342
|
s.log.info([
|
|
2343
|
-
|
|
2344
|
-
` ${
|
|
2345
|
-
` ${
|
|
2343
|
+
R.muted("After purchasing, run:"),
|
|
2344
|
+
` ${R.highlight("npx @hype-stack/cli login")} ${R.muted("Save your access")}`,
|
|
2345
|
+
` ${R.highlight("npx @hype-stack/cli compose")} ${R.muted("Install the packs")}`
|
|
2346
2346
|
].join("\n"));
|
|
2347
2347
|
}
|
|
2348
2348
|
//#endregion
|
|
2349
2349
|
//#region src/utils/exec.ts
|
|
2350
|
-
function
|
|
2350
|
+
function K(e, t, n) {
|
|
2351
2351
|
return new Promise((r, i) => {
|
|
2352
2352
|
let a = D(e, t, {
|
|
2353
2353
|
cwd: n.cwd,
|
|
@@ -2378,7 +2378,7 @@ function q(e, t, n) {
|
|
|
2378
2378
|
});
|
|
2379
2379
|
});
|
|
2380
2380
|
}
|
|
2381
|
-
function
|
|
2381
|
+
function ar(e, t, n) {
|
|
2382
2382
|
return new Promise((r, i) => {
|
|
2383
2383
|
let a = D(e, t, {
|
|
2384
2384
|
cwd: n.cwd,
|
|
@@ -2395,7 +2395,7 @@ function ir(e, t, n) {
|
|
|
2395
2395
|
}
|
|
2396
2396
|
//#endregion
|
|
2397
2397
|
//#region src/utils/fs.ts
|
|
2398
|
-
async function
|
|
2398
|
+
async function q(e) {
|
|
2399
2399
|
return (await y.stat(e).catch(() => null))?.isDirectory() ?? !1;
|
|
2400
2400
|
}
|
|
2401
2401
|
async function J(e) {
|
|
@@ -2413,7 +2413,7 @@ async function cr(e, t) {
|
|
|
2413
2413
|
}
|
|
2414
2414
|
async function lr(e) {
|
|
2415
2415
|
let t = {};
|
|
2416
|
-
if (!await
|
|
2416
|
+
if (!await q(e)) return t;
|
|
2417
2417
|
let n = await y.readdir(e, { withFileTypes: !0 });
|
|
2418
2418
|
for (let r of n) r.isDirectory() && await J(T.join(e, r.name, "package.json")) && (t[r.name] = T.relative(T.dirname(e), T.join(e, r.name)));
|
|
2419
2419
|
return t;
|
|
@@ -2430,24 +2430,24 @@ function dr(e, t) {
|
|
|
2430
2430
|
//#endregion
|
|
2431
2431
|
//#region src/core/codegen.ts
|
|
2432
2432
|
function fr(e) {
|
|
2433
|
-
s.log.info(
|
|
2434
|
-
`${
|
|
2435
|
-
`${
|
|
2436
|
-
`${
|
|
2433
|
+
s.log.info(R.muted("Run database setup yourself when ready:")), s.note([
|
|
2434
|
+
`${R.command(`cd ${e}`)}`,
|
|
2435
|
+
`${R.command("pnpm exec prisma generate")} ${R.muted("(regenerate the Prisma client)")}`,
|
|
2436
|
+
`${R.command("pnpm exec prisma migrate dev")} ${R.muted("(create + apply tables for new packs)")}`
|
|
2437
2437
|
].join("\n"), "Database Setup");
|
|
2438
2438
|
}
|
|
2439
2439
|
async function pr(e) {
|
|
2440
|
-
let { projectRoot: t, paths: n, skipPrompts: r, dbReady: i, freshScaffold: a, runCommand: o =
|
|
2440
|
+
let { projectRoot: t, paths: n, skipPrompts: r, dbReady: i, freshScaffold: a, runCommand: o = ar } = e, c = n.backend.root, l = T.join(t, c);
|
|
2441
2441
|
if (!await J(T.join(l, "package.json"))) return;
|
|
2442
2442
|
if (!r) {
|
|
2443
|
-
s.log.step(
|
|
2443
|
+
s.log.step(R.muted(`Generating Prisma client (${R.command("prisma generate")})...`));
|
|
2444
2444
|
let e = await o("pnpm", [
|
|
2445
2445
|
"exec",
|
|
2446
2446
|
"prisma",
|
|
2447
2447
|
"generate"
|
|
2448
2448
|
], { cwd: l });
|
|
2449
2449
|
if (e.exitCode !== 0) {
|
|
2450
|
-
s.log.error(
|
|
2450
|
+
s.log.error(R.muted("prisma generate failed. See the output above, or finish setup manually:")), mr(e), fr(c);
|
|
2451
2451
|
return;
|
|
2452
2452
|
}
|
|
2453
2453
|
s.log.success("Prisma client generated");
|
|
@@ -2457,14 +2457,14 @@ async function pr(e) {
|
|
|
2457
2457
|
return;
|
|
2458
2458
|
}
|
|
2459
2459
|
let u = await s.confirm({
|
|
2460
|
-
message: `Run database setup now? (${
|
|
2460
|
+
message: `Run database setup now? (${R.command("prisma migrate dev")})`,
|
|
2461
2461
|
initialValue: !0
|
|
2462
2462
|
});
|
|
2463
2463
|
if (s.isCancel(u) || !u) {
|
|
2464
2464
|
fr(c);
|
|
2465
2465
|
return;
|
|
2466
2466
|
}
|
|
2467
|
-
s.log.step(
|
|
2467
|
+
s.log.step(R.muted(`Running ${R.command("prisma migrate dev --name add-packs")}...`));
|
|
2468
2468
|
let d = await o("pnpm", [
|
|
2469
2469
|
"exec",
|
|
2470
2470
|
"prisma",
|
|
@@ -2479,7 +2479,7 @@ async function pr(e) {
|
|
|
2479
2479
|
initialValue: !0
|
|
2480
2480
|
});
|
|
2481
2481
|
if (!s.isCancel(e) && e) {
|
|
2482
|
-
s.log.step(
|
|
2482
|
+
s.log.step(R.muted(`Resetting dev database (${R.command("prisma migrate reset --force")})...`));
|
|
2483
2483
|
let e = await o("pnpm", [
|
|
2484
2484
|
"exec",
|
|
2485
2485
|
"prisma",
|
|
@@ -2487,7 +2487,7 @@ async function pr(e) {
|
|
|
2487
2487
|
"reset",
|
|
2488
2488
|
"--force"
|
|
2489
2489
|
], { cwd: l });
|
|
2490
|
-
if (e.exitCode === 0) s.log.step(
|
|
2490
|
+
if (e.exitCode === 0) s.log.step(R.muted(`Running ${R.command("prisma migrate dev --name add-packs")}...`)), d = await o("pnpm", [
|
|
2491
2491
|
"exec",
|
|
2492
2492
|
"prisma",
|
|
2493
2493
|
"migrate",
|
|
@@ -2496,20 +2496,20 @@ async function pr(e) {
|
|
|
2496
2496
|
"add-packs"
|
|
2497
2497
|
], { cwd: l });
|
|
2498
2498
|
else {
|
|
2499
|
-
s.log.error(
|
|
2499
|
+
s.log.error(R.muted("prisma migrate reset did not complete. See the output above, or finish setup manually:")), mr(e), fr(c);
|
|
2500
2500
|
return;
|
|
2501
2501
|
}
|
|
2502
2502
|
}
|
|
2503
2503
|
}
|
|
2504
2504
|
if (d.exitCode !== 0) {
|
|
2505
|
-
s.log.error(
|
|
2505
|
+
s.log.error(R.muted("prisma migrate dev did not complete. See the output above, or finish setup manually:")), mr(d), fr(c);
|
|
2506
2506
|
return;
|
|
2507
2507
|
}
|
|
2508
2508
|
s.log.success("Database schema applied");
|
|
2509
2509
|
}
|
|
2510
2510
|
function mr(e) {
|
|
2511
2511
|
let t = (e.stderr || e.stdout).trim();
|
|
2512
|
-
t && s.log.warn(
|
|
2512
|
+
t && s.log.warn(R.muted(t));
|
|
2513
2513
|
}
|
|
2514
2514
|
//#endregion
|
|
2515
2515
|
//#region src/core/onboard-catalog.ts
|
|
@@ -2623,13 +2623,13 @@ function Dr(e) {
|
|
|
2623
2623
|
//#endregion
|
|
2624
2624
|
//#region src/core/stack-config.ts
|
|
2625
2625
|
async function Or(e) {
|
|
2626
|
-
return sr(T.join(e,
|
|
2626
|
+
return sr(T.join(e, ne));
|
|
2627
2627
|
}
|
|
2628
2628
|
async function kr(e) {
|
|
2629
|
-
return J(T.join(e,
|
|
2629
|
+
return J(T.join(e, ne));
|
|
2630
2630
|
}
|
|
2631
2631
|
async function Ar(e, t) {
|
|
2632
|
-
await cr(T.join(e,
|
|
2632
|
+
await cr(T.join(e, ne), t);
|
|
2633
2633
|
}
|
|
2634
2634
|
async function jr(e) {
|
|
2635
2635
|
let t = T.join(e, "apps"), n = T.join(e, "packages"), [r, i] = await Promise.all([lr(t), lr(n)]);
|
|
@@ -2674,7 +2674,7 @@ function Mr(e) {
|
|
|
2674
2674
|
}
|
|
2675
2675
|
function Nr(e, t) {
|
|
2676
2676
|
return {
|
|
2677
|
-
$schema:
|
|
2677
|
+
$schema: de(),
|
|
2678
2678
|
version: 1,
|
|
2679
2679
|
name: e,
|
|
2680
2680
|
apps: t.apps,
|
|
@@ -2685,7 +2685,7 @@ function Nr(e, t) {
|
|
|
2685
2685
|
};
|
|
2686
2686
|
}
|
|
2687
2687
|
async function Pr(e) {
|
|
2688
|
-
let t = T.join(e, "package.json"), n = T.join(e, "apps"), [r, i] = await Promise.all([J(t),
|
|
2688
|
+
let t = T.join(e, "package.json"), n = T.join(e, "apps"), [r, i] = await Promise.all([J(t), q(n)]);
|
|
2689
2689
|
return r && i;
|
|
2690
2690
|
}
|
|
2691
2691
|
function X(e, t) {
|
|
@@ -2700,7 +2700,7 @@ function X(e, t) {
|
|
|
2700
2700
|
//#endregion
|
|
2701
2701
|
//#region src/core/registry.ts
|
|
2702
2702
|
async function Fr(e) {
|
|
2703
|
-
let { data: t, error: n, status: r } = await
|
|
2703
|
+
let { data: t, error: n, status: r } = await G.createRequest()({
|
|
2704
2704
|
endpoint: `/packs/${encodeURIComponent(e)}/manifest`,
|
|
2705
2705
|
method: "GET"
|
|
2706
2706
|
}).send();
|
|
@@ -2709,12 +2709,12 @@ async function Fr(e) {
|
|
|
2709
2709
|
return t;
|
|
2710
2710
|
}
|
|
2711
2711
|
async function Ir(e, t = {}) {
|
|
2712
|
-
let n =
|
|
2712
|
+
let n = G.createRequest()({
|
|
2713
2713
|
endpoint: `/packs/${encodeURIComponent(e)}/download`,
|
|
2714
2714
|
method: "POST"
|
|
2715
2715
|
}), r = {
|
|
2716
|
-
"X-Device-Id":
|
|
2717
|
-
"X-Client-Info":
|
|
2716
|
+
"X-Device-Id": Zn(),
|
|
2717
|
+
"X-Client-Info": Qn()
|
|
2718
2718
|
};
|
|
2719
2719
|
t.token && (r.Authorization = `Bearer ${t.token}`);
|
|
2720
2720
|
let { data: i, error: a, success: o } = await n.setPayload({ key: t.licenseKey ?? void 0 }).setHeaders(r).send();
|
|
@@ -2741,7 +2741,7 @@ function Lr(e, t, n) {
|
|
|
2741
2741
|
function Rr(e, t) {
|
|
2742
2742
|
return T.join(t, e);
|
|
2743
2743
|
}
|
|
2744
|
-
var zr =
|
|
2744
|
+
var zr = G.createRequest()({
|
|
2745
2745
|
endpoint: "/packs/list",
|
|
2746
2746
|
method: "GET"
|
|
2747
2747
|
});
|
|
@@ -2752,7 +2752,7 @@ async function Br() {
|
|
|
2752
2752
|
}
|
|
2753
2753
|
async function Vr(e, t = {}) {
|
|
2754
2754
|
if (e.length === 0) return {};
|
|
2755
|
-
let n =
|
|
2755
|
+
let n = G.createRequest()({
|
|
2756
2756
|
endpoint: "/packs/authorize",
|
|
2757
2757
|
method: "POST"
|
|
2758
2758
|
}), r = {};
|
|
@@ -2771,21 +2771,16 @@ function Ur(e, t) {
|
|
|
2771
2771
|
return X(e === "admin" ? "{{admin.root}}" : "{{frontend.root}}", t);
|
|
2772
2772
|
}
|
|
2773
2773
|
async function Wr(e, t, n) {
|
|
2774
|
-
let r = X("{{backend.root}}", t), i = T.resolve(n, r, "src/config/env/env.config.ts"), a = T.resolve(n, r, ".env.example"), o = T.resolve(n, r, ".env.test");
|
|
2774
|
+
let r = X("{{backend.root}}", t), i = T.resolve(n, r, "src/config/env/env.config.ts"), a = T.resolve(n, r, ".env.example"), o = T.resolve(n, r, ".env"), s = T.resolve(n, r, ".env.test");
|
|
2775
2775
|
if (await J(i)) {
|
|
2776
2776
|
let t = await y.readFile(i, "utf-8");
|
|
2777
2777
|
for (let n of e) t.includes(`from "${n.from}"`) || (t = Gr(t, n), t = Kr(t, n));
|
|
2778
2778
|
await y.writeFile(i, t, "utf-8");
|
|
2779
2779
|
}
|
|
2780
|
-
if (await
|
|
2781
|
-
let t = await y.readFile(
|
|
2782
|
-
for (let n of e) t =
|
|
2783
|
-
await y.writeFile(
|
|
2784
|
-
}
|
|
2785
|
-
if (await J(o)) {
|
|
2786
|
-
let t = await y.readFile(o, "utf-8");
|
|
2787
|
-
for (let n of e) t = Jr(t, n);
|
|
2788
|
-
await y.writeFile(o, t, "utf-8");
|
|
2780
|
+
if (await Promise.all([a, o].map((t) => qr(t, e))), await J(s)) {
|
|
2781
|
+
let t = await y.readFile(s, "utf-8");
|
|
2782
|
+
for (let n of e) t = Yr(t, n);
|
|
2783
|
+
await y.writeFile(s, t, "utf-8");
|
|
2789
2784
|
}
|
|
2790
2785
|
}
|
|
2791
2786
|
function Gr(e, t) {
|
|
@@ -2809,27 +2804,33 @@ function Kr(e, t) {
|
|
|
2809
2804
|
let o = a + 2;
|
|
2810
2805
|
return e.slice(0, o) + n + e.slice(o);
|
|
2811
2806
|
}
|
|
2812
|
-
function qr(e, t) {
|
|
2807
|
+
async function qr(e, t) {
|
|
2808
|
+
if (!await J(e)) return;
|
|
2809
|
+
let n = await y.readFile(e, "utf-8");
|
|
2810
|
+
for (let e of t) n = Jr(n, e);
|
|
2811
|
+
await y.writeFile(e, n, "utf-8");
|
|
2812
|
+
}
|
|
2813
|
+
function Jr(e, t) {
|
|
2813
2814
|
for (let n of Object.keys(t.envExample.vars)) if (e.includes(`${n}=`)) return e;
|
|
2814
2815
|
let n = [];
|
|
2815
2816
|
n.push(""), n.push(`# ${hr[t.envExample.section]}`);
|
|
2816
2817
|
for (let [e, r] of Object.entries(t.envExample.vars)) n.push(`${e}=${r}`);
|
|
2817
2818
|
return e.trimEnd() + "\n" + n.join("\n") + "\n";
|
|
2818
2819
|
}
|
|
2819
|
-
function
|
|
2820
|
+
function Yr(e, t) {
|
|
2820
2821
|
for (let n of Object.keys(t.envTest)) if (e.includes(`${n}=`)) return e;
|
|
2821
2822
|
let n = [""];
|
|
2822
2823
|
for (let [e, r] of Object.entries(t.envTest)) n.push(`${e}=${r}`);
|
|
2823
2824
|
return e.trimEnd() + "\n" + n.join("\n") + "\n";
|
|
2824
2825
|
}
|
|
2825
|
-
async function
|
|
2826
|
+
async function Xr(e, t, n) {
|
|
2826
2827
|
let r = T.resolve(n, X("{{backend.routes}}", t), "index.ts");
|
|
2827
2828
|
if (!await J(r)) return;
|
|
2828
2829
|
let i = await y.readFile(r, "utf-8");
|
|
2829
|
-
for (let t of e) i.includes(`from "${t.from}"`) || (i =
|
|
2830
|
+
for (let t of e) i.includes(`from "${t.from}"`) || (i = Zr(i, t), i = Qr(i, t));
|
|
2830
2831
|
await y.writeFile(r, i, "utf-8");
|
|
2831
2832
|
}
|
|
2832
|
-
function
|
|
2833
|
+
function Zr(e, t) {
|
|
2833
2834
|
let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("from \"./");
|
|
2834
2835
|
if (r !== -1) {
|
|
2835
2836
|
let t = e.indexOf("\n", r);
|
|
@@ -2838,7 +2839,7 @@ function Xr(e, t) {
|
|
|
2838
2839
|
let i = e.indexOf("export const registerRoutes");
|
|
2839
2840
|
return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
|
|
2840
2841
|
}
|
|
2841
|
-
function
|
|
2842
|
+
function Qr(e, t) {
|
|
2842
2843
|
let n = `.route("${t.prefix}", ${t.import})`, r = e.match(/\.route\([^)]+\);/g);
|
|
2843
2844
|
if (r) {
|
|
2844
2845
|
let t = r[r.length - 1], i = e.lastIndexOf(t) + t.length - 1;
|
|
@@ -2846,14 +2847,14 @@ function Zr(e, t) {
|
|
|
2846
2847
|
}
|
|
2847
2848
|
return e.replace("return app;", `return app\n ${n};`);
|
|
2848
2849
|
}
|
|
2849
|
-
async function
|
|
2850
|
+
async function $r(e, t, n) {
|
|
2850
2851
|
let r = T.resolve(n, X("{{backend.root}}", t), "src/context.ts");
|
|
2851
2852
|
if (!await J(r)) return;
|
|
2852
2853
|
let i = await y.readFile(r, "utf-8");
|
|
2853
|
-
for (let t of e) i.includes(`export let ${t.export}`) || (i =
|
|
2854
|
+
for (let t of e) i.includes(`export let ${t.export}`) || (i = ei(i, t), i = ti(i, t), i = ni(i, t), i = ii(i, t));
|
|
2854
2855
|
await y.writeFile(r, i, "utf-8");
|
|
2855
2856
|
}
|
|
2856
|
-
function
|
|
2857
|
+
function ei(e, t) {
|
|
2857
2858
|
let n = `import { ${t.typeImport.name} } from "${t.typeImport.from}";`;
|
|
2858
2859
|
if (e.includes(`from "${t.typeImport.from}"`)) return e;
|
|
2859
2860
|
let r = e.lastIndexOf("import ");
|
|
@@ -2861,7 +2862,7 @@ function $r(e, t) {
|
|
|
2861
2862
|
let i = e.indexOf("\n", e.indexOf(";", r));
|
|
2862
2863
|
return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
|
|
2863
2864
|
}
|
|
2864
|
-
function
|
|
2865
|
+
function ti(e, t) {
|
|
2865
2866
|
let n = `export let ${t.export}: ${t.type};`, r = e.lastIndexOf("export let ");
|
|
2866
2867
|
if (r === -1) {
|
|
2867
2868
|
let t = e.indexOf("export const setupContext");
|
|
@@ -2870,15 +2871,15 @@ function ei(e, t) {
|
|
|
2870
2871
|
let i = e.indexOf("\n", r);
|
|
2871
2872
|
return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
|
|
2872
2873
|
}
|
|
2873
|
-
function
|
|
2874
|
+
function ni(e, t) {
|
|
2874
2875
|
let n = ` ${t.export} = ${t.init};`, r = e.match(/export const setupContext\s*=\s*async\s*\([^)]*\)\s*=>\s*\{/);
|
|
2875
2876
|
if (!r) return e;
|
|
2876
2877
|
let i = e.indexOf("{", e.indexOf(r[0]));
|
|
2877
2878
|
if (i === -1) return e;
|
|
2878
|
-
let a =
|
|
2879
|
+
let a = ri(e, i);
|
|
2879
2880
|
return a === -1 ? e : e.slice(0, a) + n + "\n" + e.slice(a);
|
|
2880
2881
|
}
|
|
2881
|
-
function
|
|
2882
|
+
function ri(e, t) {
|
|
2882
2883
|
let n = 0;
|
|
2883
2884
|
for (let r = t; r < e.length; r++) {
|
|
2884
2885
|
let t = e[r];
|
|
@@ -2887,20 +2888,20 @@ function ni(e, t) {
|
|
|
2887
2888
|
}
|
|
2888
2889
|
return -1;
|
|
2889
2890
|
}
|
|
2890
|
-
function
|
|
2891
|
+
function ii(e, t) {
|
|
2891
2892
|
let n = ` ${t.export}: ${t.type};`, r = e.indexOf("export type ContextVariables = {");
|
|
2892
2893
|
if (r === -1) return e;
|
|
2893
2894
|
let i = e.indexOf("};", r);
|
|
2894
2895
|
return i === -1 ? e : e.slice(0, i) + n + "\n" + e.slice(i);
|
|
2895
2896
|
}
|
|
2896
|
-
async function
|
|
2897
|
+
async function ai(e, t, n) {
|
|
2897
2898
|
let r = T.resolve(n, X("{{enums.src}}", t), "index.ts");
|
|
2898
2899
|
if (!await J(r)) return;
|
|
2899
2900
|
let i = await y.readFile(r, "utf-8");
|
|
2900
|
-
for (let t of e) i.includes(`from "${t.from}"`) || (i =
|
|
2901
|
+
for (let t of e) i.includes(`from "${t.from}"`) || (i = oi(i, t));
|
|
2901
2902
|
await y.writeFile(r, i, "utf-8");
|
|
2902
2903
|
}
|
|
2903
|
-
function
|
|
2904
|
+
function oi(e, t) {
|
|
2904
2905
|
let n = `export * from "${t.from}";`, r = e.lastIndexOf("export * from");
|
|
2905
2906
|
if (r !== -1) {
|
|
2906
2907
|
let t = e.indexOf("\n", r);
|
|
@@ -2908,14 +2909,14 @@ function ai(e, t) {
|
|
|
2908
2909
|
}
|
|
2909
2910
|
return e.trim() === "" ? n + "\n" : e.trimEnd() + "\n" + n + "\n";
|
|
2910
2911
|
}
|
|
2911
|
-
async function
|
|
2912
|
+
async function si(e, t, n) {
|
|
2912
2913
|
let r = X("{{backend.root}}", t), i = T.resolve(n, r, "src/sockets/index.ts");
|
|
2913
2914
|
if (!await J(i)) return;
|
|
2914
2915
|
let a = await y.readFile(i, "utf-8");
|
|
2915
|
-
for (let t of e) a.includes(`from "${t.from}"`) || (a =
|
|
2916
|
-
await J(T.resolve(n, r, "src/libs/websocket/ws-authenticate.ts")) && (a =
|
|
2916
|
+
for (let t of e) a.includes(`from "${t.from}"`) || (a = ci(a, t), a = li(a, t));
|
|
2917
|
+
await J(T.resolve(n, r, "src/libs/websocket/ws-authenticate.ts")) && (a = ui(a)), await y.writeFile(i, a, "utf-8");
|
|
2917
2918
|
}
|
|
2918
|
-
function
|
|
2919
|
+
function ci(e, t) {
|
|
2919
2920
|
let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("from \"./");
|
|
2920
2921
|
if (r !== -1) {
|
|
2921
2922
|
let t = e.indexOf("\n", r);
|
|
@@ -2924,7 +2925,7 @@ function si(e, t) {
|
|
|
2924
2925
|
let i = e.indexOf("const sockets");
|
|
2925
2926
|
return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
|
|
2926
2927
|
}
|
|
2927
|
-
function
|
|
2928
|
+
function li(e, t) {
|
|
2928
2929
|
let n = `.socket("${t.prefix}", ${t.import})`, r = e.indexOf("const sockets");
|
|
2929
2930
|
if (r === -1) return e;
|
|
2930
2931
|
let i = e.indexOf("new SocketRouter", r);
|
|
@@ -2938,7 +2939,7 @@ function ci(e, t) {
|
|
|
2938
2939
|
}
|
|
2939
2940
|
return e;
|
|
2940
2941
|
}
|
|
2941
|
-
function
|
|
2942
|
+
function ui(e) {
|
|
2942
2943
|
if (e.includes("wsAuthenticate")) return e;
|
|
2943
2944
|
let t = e.indexOf("from \"@backend/libs/websocket/socket-router\""), n = e;
|
|
2944
2945
|
if (t !== -1) {
|
|
@@ -2947,14 +2948,14 @@ function li(e) {
|
|
|
2947
2948
|
}
|
|
2948
2949
|
return n.replace("new SocketRouter()", "new SocketRouter({ authenticate: wsAuthenticate })");
|
|
2949
2950
|
}
|
|
2950
|
-
async function
|
|
2951
|
+
async function di(e, t, n) {
|
|
2951
2952
|
let r = X("{{frontend.root}}", t), i = T.resolve(n, r, "src/api/sdk.ts");
|
|
2952
2953
|
if (!await J(i)) return;
|
|
2953
2954
|
let a = await y.readFile(i, "utf-8");
|
|
2954
|
-
for (let t of e) a.includes(`.$configure(${t.import})`) || (a =
|
|
2955
|
+
for (let t of e) a.includes(`.$configure(${t.import})`) || (a = fi(a, t), a = pi(a, t));
|
|
2955
2956
|
await y.writeFile(i, a, "utf-8");
|
|
2956
2957
|
}
|
|
2957
|
-
function
|
|
2958
|
+
function fi(e, t) {
|
|
2958
2959
|
let n = `import { ${t.import} } from "${t.from}";`;
|
|
2959
2960
|
if (e.includes(n)) return e;
|
|
2960
2961
|
let r = e.lastIndexOf("from \"./");
|
|
@@ -2965,20 +2966,20 @@ function di(e, t) {
|
|
|
2965
2966
|
let i = e.indexOf("export const sdk");
|
|
2966
2967
|
return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
|
|
2967
2968
|
}
|
|
2968
|
-
function
|
|
2969
|
+
function pi(e, t) {
|
|
2969
2970
|
let n = `.$configure(${t.import})`, r = e.indexOf("export const sdk");
|
|
2970
2971
|
if (r === -1) return e;
|
|
2971
2972
|
let i = e.indexOf(";", r);
|
|
2972
2973
|
return i === -1 ? e : e.slice(0, i) + "\n " + n + e.slice(i);
|
|
2973
2974
|
}
|
|
2974
|
-
async function
|
|
2975
|
+
async function mi(e, t, n) {
|
|
2975
2976
|
let r = T.resolve(n, X("{{backend.utils}}", t), "frontend-url/frontend-url.ts");
|
|
2976
2977
|
if (!await J(r)) return;
|
|
2977
2978
|
let i = await y.readFile(r, "utf-8");
|
|
2978
|
-
for (let t of e) i.includes(`"${t.path}"`) || (i =
|
|
2979
|
+
for (let t of e) i.includes(`"${t.path}"`) || (i = hi(i, t));
|
|
2979
2980
|
await y.writeFile(r, i, "utf-8");
|
|
2980
2981
|
}
|
|
2981
|
-
function
|
|
2982
|
+
function hi(e, t) {
|
|
2982
2983
|
let n = ` "${t.path}": ${t.search};`, r = e.indexOf("type RouteDefinitions = {");
|
|
2983
2984
|
if (r === -1) return e;
|
|
2984
2985
|
let i = e.indexOf("{", r);
|
|
@@ -2994,20 +2995,20 @@ function mi(e, t) {
|
|
|
2994
2995
|
}
|
|
2995
2996
|
return o === -1 ? e : e.slice(0, o) + n + "\n" + e.slice(o);
|
|
2996
2997
|
}
|
|
2997
|
-
var
|
|
2998
|
+
var gi = "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", _i = {
|
|
2998
2999
|
primary: "primaryNav",
|
|
2999
3000
|
secondary: "secondaryNav",
|
|
3000
3001
|
tertiary: "tertiaryNav",
|
|
3001
3002
|
settings: "settingsNav"
|
|
3002
3003
|
};
|
|
3003
|
-
async function
|
|
3004
|
+
async function vi(e) {
|
|
3004
3005
|
let { entries: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = Ur(i, n), o = T.resolve(r, a, "src/constants/nav.constants.ts"), s;
|
|
3005
|
-
await J(o) ? s = await y.readFile(o, "utf-8") : (await y.mkdir(T.dirname(o), { recursive: !0 }), s =
|
|
3006
|
-
for (let e of t) s.includes(`label: "${e.label}"`) || (s =
|
|
3007
|
-
for (let e of t.toReversed()) s.includes(`label: "${e.label}"`) || (s =
|
|
3006
|
+
await J(o) ? s = await y.readFile(o, "utf-8") : (await y.mkdir(T.dirname(o), { recursive: !0 }), s = gi);
|
|
3007
|
+
for (let e of t) s.includes(`label: "${e.label}"`) || (s = xi(s, e));
|
|
3008
|
+
for (let e of t.toReversed()) s.includes(`label: "${e.label}"`) || (s = Ci(s, e));
|
|
3008
3009
|
await y.writeFile(o, s, "utf-8");
|
|
3009
3010
|
}
|
|
3010
|
-
async function
|
|
3011
|
+
async function yi(e) {
|
|
3011
3012
|
let { postLoginRedirect: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = Ur(i, n), o = T.resolve(r, a, "src/features/auth/constants/auth.constants.ts");
|
|
3012
3013
|
if (!await J(o)) return;
|
|
3013
3014
|
let s = await y.readFile(o, "utf-8"), c = /export const POST_LOGIN_REDIRECT_PATH = "[^"]*";/;
|
|
@@ -3015,17 +3016,17 @@ async function vi(e) {
|
|
|
3015
3016
|
let l = s.replace(c, `export const POST_LOGIN_REDIRECT_PATH = "${t}";`);
|
|
3016
3017
|
await y.writeFile(o, l, "utf-8");
|
|
3017
3018
|
}
|
|
3018
|
-
function
|
|
3019
|
+
function bi(e) {
|
|
3019
3020
|
let t = [e.icon];
|
|
3020
3021
|
if (e.items) for (let n of e.items) t.includes(n.icon) || t.push(n.icon);
|
|
3021
3022
|
return t;
|
|
3022
3023
|
}
|
|
3023
|
-
function
|
|
3024
|
-
let n =
|
|
3025
|
-
for (let e of n) r =
|
|
3024
|
+
function xi(e, t) {
|
|
3025
|
+
let n = bi(t), r = e;
|
|
3026
|
+
for (let e of n) r = Si(r, e);
|
|
3026
3027
|
return r;
|
|
3027
3028
|
}
|
|
3028
|
-
function
|
|
3029
|
+
function Si(e, t) {
|
|
3029
3030
|
let n = e.match(/import \{([^}]+)\} from "lucide-react";/);
|
|
3030
3031
|
if (!n) return e;
|
|
3031
3032
|
let r = n[1].split(",").map((e) => e.trim()).filter(Boolean);
|
|
@@ -3033,21 +3034,21 @@ function xi(e, t) {
|
|
|
3033
3034
|
let i = r.findIndex((e) => e.startsWith("type "));
|
|
3034
3035
|
return i === -1 ? r.push(t) : r.splice(i, 0, t), e.replace(n[0], `import { ${r.join(", ")} } from "lucide-react";`);
|
|
3035
3036
|
}
|
|
3036
|
-
function
|
|
3037
|
-
let n =
|
|
3037
|
+
function Ci(e, t) {
|
|
3038
|
+
let n = _i[t.group];
|
|
3038
3039
|
if (!n) return e;
|
|
3039
|
-
let r =
|
|
3040
|
+
let r = Ti(t), i = RegExp(`export const ${n}: NavEntry\\[\\] = \\[`), a = e.match(i);
|
|
3040
3041
|
if (!a) return e;
|
|
3041
|
-
let o = e.indexOf(a[0]) + a[0].length, s =
|
|
3042
|
+
let o = e.indexOf(a[0]) + a[0].length, s = wi(e, o - 1);
|
|
3042
3043
|
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);
|
|
3043
3044
|
}
|
|
3044
|
-
function
|
|
3045
|
+
function wi(e, t) {
|
|
3045
3046
|
let n = 0;
|
|
3046
3047
|
for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
|
|
3047
3048
|
else if (e[r] === "]" && (n--, n === 0)) return r;
|
|
3048
3049
|
return -1;
|
|
3049
3050
|
}
|
|
3050
|
-
function
|
|
3051
|
+
function Ti(e) {
|
|
3051
3052
|
let t = [];
|
|
3052
3053
|
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) {
|
|
3053
3054
|
t.push(" items: [");
|
|
@@ -3063,14 +3064,14 @@ function wi(e) {
|
|
|
3063
3064
|
} else t.push(" items: [],");
|
|
3064
3065
|
return t.push(" },"), t.join("\n");
|
|
3065
3066
|
}
|
|
3066
|
-
async function
|
|
3067
|
+
async function Ei(e, t, n) {
|
|
3067
3068
|
let r = X("{{backend.features}}", t), i = T.resolve(n, r, "organizations/modules/setup-organization/steps/index.ts");
|
|
3068
3069
|
if (!await J(i)) return;
|
|
3069
3070
|
let a = await y.readFile(i, "utf-8");
|
|
3070
|
-
for (let t of e) a.includes(`from "${t.from}"`) || (a =
|
|
3071
|
+
for (let t of e) a.includes(`from "${t.from}"`) || (a = Di(a, t), a = Oi(a, t));
|
|
3071
3072
|
await y.writeFile(i, a, "utf-8");
|
|
3072
3073
|
}
|
|
3073
|
-
function
|
|
3074
|
+
function Di(e, t) {
|
|
3074
3075
|
let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("import ");
|
|
3075
3076
|
if (r !== -1) {
|
|
3076
3077
|
let t = e.indexOf("\n", e.indexOf(";", r));
|
|
@@ -3078,38 +3079,38 @@ function Ei(e, t) {
|
|
|
3078
3079
|
}
|
|
3079
3080
|
return e.indexOf("type "), n + "\n\n" + e;
|
|
3080
3081
|
}
|
|
3081
|
-
function
|
|
3082
|
+
function Oi(e, t) {
|
|
3082
3083
|
let n = ` { id: "${t.id}", execute: (ctx) => ${t.import}(ctx) },`, r = e.match(/export const steps:\s*Step\[\]\s*=\s*\[/);
|
|
3083
3084
|
if (!r) return e;
|
|
3084
|
-
let i = e.indexOf(r[0]) + r[0].length, a =
|
|
3085
|
+
let i = e.indexOf(r[0]) + r[0].length, a = ki(e, i - 1);
|
|
3085
3086
|
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);
|
|
3086
3087
|
}
|
|
3087
|
-
function
|
|
3088
|
+
function ki(e, t) {
|
|
3088
3089
|
let n = 0;
|
|
3089
3090
|
for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
|
|
3090
3091
|
else if (e[r] === "]" && (n--, n === 0)) return r;
|
|
3091
3092
|
return -1;
|
|
3092
3093
|
}
|
|
3093
|
-
var
|
|
3094
|
-
async function
|
|
3095
|
-
await
|
|
3094
|
+
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";
|
|
3095
|
+
async function ji(e) {
|
|
3096
|
+
await Ni({
|
|
3096
3097
|
...e,
|
|
3097
3098
|
arrayName: "navbarActions"
|
|
3098
3099
|
});
|
|
3099
3100
|
}
|
|
3100
|
-
async function
|
|
3101
|
-
await
|
|
3101
|
+
async function Mi(e) {
|
|
3102
|
+
await Ni({
|
|
3102
3103
|
...e,
|
|
3103
3104
|
arrayName: "userMenuActions"
|
|
3104
3105
|
});
|
|
3105
3106
|
}
|
|
3106
|
-
async function
|
|
3107
|
+
async function Ni({ actions: e, arrayName: t, paths: n, projectRoot: r, slot: i }) {
|
|
3107
3108
|
let a = Ur(i, n), o = T.resolve(r, a, "src/constants/navbar-actions.tsx"), s;
|
|
3108
|
-
await J(o) ? s = await y.readFile(o, "utf-8") : (await y.mkdir(T.dirname(o), { recursive: !0 }), s =
|
|
3109
|
-
for (let n of e) s =
|
|
3109
|
+
await J(o) ? s = await y.readFile(o, "utf-8") : (await y.mkdir(T.dirname(o), { recursive: !0 }), s = Ai);
|
|
3110
|
+
for (let n of e) s = Pi(s, n), s = Fi(s, n, t);
|
|
3110
3111
|
await y.writeFile(o, s, "utf-8");
|
|
3111
3112
|
}
|
|
3112
|
-
function
|
|
3113
|
+
function Pi(e, t) {
|
|
3113
3114
|
let n = `import { ${t.import} } from "${t.from}";`;
|
|
3114
3115
|
if (e.includes(n)) return e;
|
|
3115
3116
|
let r = e.lastIndexOf("import ");
|
|
@@ -3117,38 +3118,38 @@ function Ni(e, t) {
|
|
|
3117
3118
|
let i = e.indexOf("\n", r);
|
|
3118
3119
|
return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
|
|
3119
3120
|
}
|
|
3120
|
-
function
|
|
3121
|
+
function Fi(e, t, n) {
|
|
3121
3122
|
let r = e.match(RegExp(`export const ${n}:\\s*NavbarAction\\[\\]\\s*=\\s*\\[`));
|
|
3122
3123
|
if (!r) return e;
|
|
3123
|
-
let i = e.indexOf(r[0]) + r[0].length, a =
|
|
3124
|
+
let i = e.indexOf(r[0]) + r[0].length, a = Ii(e, i - 1);
|
|
3124
3125
|
if (a === -1) return e;
|
|
3125
3126
|
let o = e.slice(i, a);
|
|
3126
3127
|
if (o.includes(`id: "${t.id}"`)) return e;
|
|
3127
3128
|
let s = ` { id: "${t.id}", component: ${t.import} },`;
|
|
3128
3129
|
return o.trim() === "" ? e.slice(0, a) + "\n" + s + "\n" + e.slice(a) : e.slice(0, a) + s + "\n" + e.slice(a);
|
|
3129
3130
|
}
|
|
3130
|
-
function
|
|
3131
|
+
function Ii(e, t) {
|
|
3131
3132
|
let n = 0;
|
|
3132
3133
|
for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
|
|
3133
3134
|
else if (e[r] === "]" && (n--, n === 0)) return r;
|
|
3134
3135
|
return -1;
|
|
3135
3136
|
}
|
|
3136
|
-
var
|
|
3137
|
+
var Li = new Set([
|
|
3137
3138
|
".ts",
|
|
3138
3139
|
".tsx",
|
|
3139
3140
|
".js",
|
|
3140
3141
|
".jsx"
|
|
3141
3142
|
]);
|
|
3142
|
-
async function
|
|
3143
|
+
async function Ri(e) {
|
|
3143
3144
|
let { files: t, paths: n, projectRoot: r, projectName: i } = e;
|
|
3144
3145
|
if (i === "hype-stack") return;
|
|
3145
3146
|
let a = `@${i}/`;
|
|
3146
3147
|
await Promise.all(t.map(async (e) => {
|
|
3147
3148
|
let t = Lr(e.target, n, r), i = await y.stat(t).catch(() => null);
|
|
3148
|
-
i?.isDirectory() ? await
|
|
3149
|
+
i?.isDirectory() ? await Vi(t, a) : i?.isFile() && Li.has(T.extname(t)) && await Hi(t, a);
|
|
3149
3150
|
}));
|
|
3150
3151
|
}
|
|
3151
|
-
var
|
|
3152
|
+
var zi = new Set([
|
|
3152
3153
|
".git",
|
|
3153
3154
|
"node_modules",
|
|
3154
3155
|
"dist",
|
|
@@ -3157,20 +3158,20 @@ var Ri = new Set([
|
|
|
3157
3158
|
".next",
|
|
3158
3159
|
"coverage"
|
|
3159
3160
|
]);
|
|
3160
|
-
async function zi(e, t) {
|
|
3161
|
-
t !== "hype-stack" && await Bi(e, `@${t}/`);
|
|
3162
|
-
}
|
|
3163
3161
|
async function Bi(e, t) {
|
|
3162
|
+
t !== "hype-stack" && await Vi(e, `@${t}/`);
|
|
3163
|
+
}
|
|
3164
|
+
async function Vi(e, t) {
|
|
3164
3165
|
let n = await y.readdir(e, { withFileTypes: !0 });
|
|
3165
3166
|
await Promise.all(n.map(async (n) => {
|
|
3166
3167
|
let r = T.join(e, n.name);
|
|
3167
3168
|
if (n.isDirectory()) {
|
|
3168
|
-
if (
|
|
3169
|
-
await
|
|
3170
|
-
} else n.isFile() &&
|
|
3169
|
+
if (zi.has(n.name)) return;
|
|
3170
|
+
await Vi(r, t);
|
|
3171
|
+
} else n.isFile() && Li.has(T.extname(n.name)) && await Hi(r, t);
|
|
3171
3172
|
}));
|
|
3172
3173
|
}
|
|
3173
|
-
async function
|
|
3174
|
+
async function Hi(e, t) {
|
|
3174
3175
|
let n = await y.readFile(e, "utf-8");
|
|
3175
3176
|
if (!n.includes(Hr)) return;
|
|
3176
3177
|
let r = n.replaceAll(Hr, t);
|
|
@@ -3178,22 +3179,22 @@ async function Vi(e, t) {
|
|
|
3178
3179
|
}
|
|
3179
3180
|
//#endregion
|
|
3180
3181
|
//#region src/core/installer.ts
|
|
3181
|
-
function
|
|
3182
|
+
function Ui(e, t) {
|
|
3182
3183
|
return e.slot ? t ? t.includes(e.slot) : e.slot === "frontend" : !0;
|
|
3183
3184
|
}
|
|
3184
|
-
async function
|
|
3185
|
+
async function Wi(e, t) {
|
|
3185
3186
|
if ((await y.stat(e)).isDirectory()) {
|
|
3186
3187
|
await y.mkdir(t, { recursive: !0 });
|
|
3187
3188
|
let n = await y.readdir(e, { withFileTypes: !0 });
|
|
3188
|
-
for (let r of n) await
|
|
3189
|
+
for (let r of n) await Wi(T.join(e, r.name), T.join(t, r.name));
|
|
3189
3190
|
} else await y.mkdir(T.dirname(t), { recursive: !0 }), await y.copyFile(e, t);
|
|
3190
3191
|
}
|
|
3191
|
-
async function
|
|
3192
|
+
async function Gi(e) {
|
|
3192
3193
|
let { src: t, dest: n, projectRoot: r, skip: i } = e;
|
|
3193
3194
|
if ((await y.stat(t)).isDirectory()) {
|
|
3194
3195
|
await y.mkdir(n, { recursive: !0 });
|
|
3195
3196
|
let e = await y.readdir(t, { withFileTypes: !0 });
|
|
3196
|
-
return (await Promise.all(e.map((e) =>
|
|
3197
|
+
return (await Promise.all(e.map((e) => Gi({
|
|
3197
3198
|
src: T.join(t, e.name),
|
|
3198
3199
|
dest: T.join(n, e.name),
|
|
3199
3200
|
projectRoot: r,
|
|
@@ -3202,17 +3203,17 @@ async function Wi(e) {
|
|
|
3202
3203
|
}
|
|
3203
3204
|
return i.has(t) ? [] : (await y.mkdir(T.dirname(n), { recursive: !0 }), await y.copyFile(t, n), [T.relative(r, n)]);
|
|
3204
3205
|
}
|
|
3205
|
-
async function
|
|
3206
|
+
async function Ki(e) {
|
|
3206
3207
|
let { file: t, packDir: n, paths: r, projectRoot: i } = e, a = Rr(t.source, n), o = Lr(t.target, r, i);
|
|
3207
3208
|
return {
|
|
3208
3209
|
sourcePath: a,
|
|
3209
3210
|
targetPath: o,
|
|
3210
|
-
sourceExists: await J(a) || await
|
|
3211
|
-
targetExists: await J(o) || await
|
|
3211
|
+
sourceExists: await J(a) || await q(a),
|
|
3212
|
+
targetExists: await J(o) || await q(o)
|
|
3212
3213
|
};
|
|
3213
3214
|
}
|
|
3214
|
-
async function
|
|
3215
|
-
let { file: t, packDir: n, paths: r, projectRoot: i } = e, { sourcePath: a, targetPath: o, sourceExists: s, targetExists: c } = await
|
|
3215
|
+
async function qi(e) {
|
|
3216
|
+
let { file: t, packDir: n, paths: r, projectRoot: i } = e, { sourcePath: a, targetPath: o, sourceExists: s, targetExists: c } = await Ki({
|
|
3216
3217
|
file: t,
|
|
3217
3218
|
packDir: n,
|
|
3218
3219
|
paths: r,
|
|
@@ -3227,8 +3228,8 @@ async function Ki(e) {
|
|
|
3227
3228
|
default: return `${t.target}: Unknown strategy: ${String(t.strategy)}`;
|
|
3228
3229
|
}
|
|
3229
3230
|
}
|
|
3230
|
-
async function
|
|
3231
|
-
let { file: t, packDir: n, paths: r, projectRoot: i, force: a, overwrite: o } = e, { sourcePath: s, targetPath: c, sourceExists: l, targetExists: u } = await
|
|
3231
|
+
async function Ji(e) {
|
|
3232
|
+
let { file: t, packDir: n, paths: r, projectRoot: i, force: a, overwrite: o } = e, { sourcePath: s, targetPath: c, sourceExists: l, targetExists: u } = await Ki({
|
|
3232
3233
|
file: t,
|
|
3233
3234
|
packDir: n,
|
|
3234
3235
|
paths: r,
|
|
@@ -3246,7 +3247,7 @@ async function qi(e) {
|
|
|
3246
3247
|
status: "skipped",
|
|
3247
3248
|
path: t.target,
|
|
3248
3249
|
reason: "Already exists"
|
|
3249
|
-
} : (await
|
|
3250
|
+
} : (await Wi(s, c), {
|
|
3250
3251
|
status: "installed",
|
|
3251
3252
|
path: t.target
|
|
3252
3253
|
});
|
|
@@ -3255,16 +3256,16 @@ async function qi(e) {
|
|
|
3255
3256
|
status: "skipped",
|
|
3256
3257
|
path: t.target,
|
|
3257
3258
|
reason: "Already exists (skip-if-exists)"
|
|
3258
|
-
} : (await
|
|
3259
|
+
} : (await Wi(s, c), {
|
|
3259
3260
|
status: "installed",
|
|
3260
3261
|
path: t.target
|
|
3261
3262
|
});
|
|
3262
|
-
case "override": return await
|
|
3263
|
+
case "override": return await Wi(s, c), {
|
|
3263
3264
|
status: "installed",
|
|
3264
3265
|
path: t.target
|
|
3265
3266
|
};
|
|
3266
3267
|
case "merge": {
|
|
3267
|
-
if (!u) return await
|
|
3268
|
+
if (!u) return await Wi(s, c), {
|
|
3268
3269
|
status: "installed",
|
|
3269
3270
|
path: t.target
|
|
3270
3271
|
};
|
|
@@ -3294,15 +3295,15 @@ async function qi(e) {
|
|
|
3294
3295
|
};
|
|
3295
3296
|
}
|
|
3296
3297
|
}
|
|
3297
|
-
async function
|
|
3298
|
+
async function Yi(e) {
|
|
3298
3299
|
let { packs: t, config: n, projectRoot: r, slotsByPack: i } = e, a = n.paths;
|
|
3299
3300
|
if (!a) throw Error("stack.json is missing 'paths' configuration. Run 'npx @hype-stack/cli init' to set it up.");
|
|
3300
3301
|
let o = [], s = /* @__PURE__ */ new Set();
|
|
3301
3302
|
for (let e of t) {
|
|
3302
3303
|
let t = i?.get(e.manifest.name);
|
|
3303
3304
|
for (let n of e.manifest.files) {
|
|
3304
|
-
if (n.strategy !== "create" || !
|
|
3305
|
-
let { targetPath: i, targetExists: c } = await
|
|
3305
|
+
if (n.strategy !== "create" || !Ui(n, t)) continue;
|
|
3306
|
+
let { targetPath: i, targetExists: c } = await Ki({
|
|
3306
3307
|
file: n,
|
|
3307
3308
|
packDir: e.packDir,
|
|
3308
3309
|
paths: a,
|
|
@@ -3317,13 +3318,13 @@ async function Ji(e) {
|
|
|
3317
3318
|
}
|
|
3318
3319
|
return o;
|
|
3319
3320
|
}
|
|
3320
|
-
async function
|
|
3321
|
+
async function Xi(e) {
|
|
3321
3322
|
let { manifest: t, config: n, projectRoot: r, force: i, packDir: a, slots: o } = e, s = n.paths;
|
|
3322
3323
|
if (!s) throw Error("stack.json is missing 'paths' configuration. Run 'npx @hype-stack/cli init' to set it up.");
|
|
3323
3324
|
let c = [];
|
|
3324
3325
|
for (let e of t.files) {
|
|
3325
|
-
if (!
|
|
3326
|
-
let t = await
|
|
3326
|
+
if (!Ui(e, o)) continue;
|
|
3327
|
+
let t = await qi({
|
|
3327
3328
|
file: e,
|
|
3328
3329
|
packDir: a,
|
|
3329
3330
|
paths: s,
|
|
@@ -3334,16 +3335,16 @@ async function Yi(e) {
|
|
|
3334
3335
|
}
|
|
3335
3336
|
return c;
|
|
3336
3337
|
}
|
|
3337
|
-
async function
|
|
3338
|
+
async function Zi(e) {
|
|
3338
3339
|
let { manifest: t, config: n, projectRoot: r, force: i, overwrite: a, packDir: o, slots: s } = e, c = n.paths;
|
|
3339
3340
|
if (!c) throw Error("stack.json is missing 'paths' configuration. Run 'npx @hype-stack/cli init' to set it up.");
|
|
3340
3341
|
let l = {
|
|
3341
3342
|
installed: [],
|
|
3342
3343
|
skipped: [],
|
|
3343
3344
|
errors: []
|
|
3344
|
-
}, u = t.files.filter((e) =>
|
|
3345
|
+
}, u = t.files.filter((e) => Ui(e, s));
|
|
3345
3346
|
for (let e of u) {
|
|
3346
|
-
let t = await
|
|
3347
|
+
let t = await Ji({
|
|
3347
3348
|
file: e,
|
|
3348
3349
|
packDir: o,
|
|
3349
3350
|
paths: c,
|
|
@@ -3363,40 +3364,40 @@ async function Xi(e) {
|
|
|
3363
3364
|
break;
|
|
3364
3365
|
}
|
|
3365
3366
|
}
|
|
3366
|
-
await
|
|
3367
|
+
await Ri({
|
|
3367
3368
|
files: u,
|
|
3368
3369
|
paths: c,
|
|
3369
3370
|
projectRoot: r,
|
|
3370
3371
|
projectName: n.name
|
|
3371
|
-
}), t.env && t.env.length > 0 && await Wr(t.env, c, r), t.routes && t.routes.length > 0 && await
|
|
3372
|
+
}), t.env && t.env.length > 0 && await Wr(t.env, c, r), t.routes && t.routes.length > 0 && await Xr(t.routes, c, r), t.context && t.context.length > 0 && await $r(t.context, c, r), t.sockets && t.sockets.length > 0 && await si(t.sockets, c, r), t.sdkConfigurations && t.sdkConfigurations.length > 0 && await di(t.sdkConfigurations, c, r), t.enums && t.enums.length > 0 && await ai(t.enums, c, r), t.frontendRoutes && t.frontendRoutes.length > 0 && await mi(t.frontendRoutes, c, r);
|
|
3372
3373
|
let d = s && s.length > 0 ? s : ["frontend"];
|
|
3373
|
-
for (let e of d) t.nav && t.nav.length > 0 && await
|
|
3374
|
+
for (let e of d) t.nav && t.nav.length > 0 && await vi({
|
|
3374
3375
|
entries: t.nav,
|
|
3375
3376
|
paths: c,
|
|
3376
3377
|
projectRoot: r,
|
|
3377
3378
|
slot: e
|
|
3378
|
-
}), t.navbarActions && t.navbarActions.length > 0 && await
|
|
3379
|
+
}), t.navbarActions && t.navbarActions.length > 0 && await ji({
|
|
3379
3380
|
actions: t.navbarActions,
|
|
3380
3381
|
paths: c,
|
|
3381
3382
|
projectRoot: r,
|
|
3382
3383
|
slot: e
|
|
3383
|
-
}), t.userMenuActions && t.userMenuActions.length > 0 && await
|
|
3384
|
+
}), t.userMenuActions && t.userMenuActions.length > 0 && await Mi({
|
|
3384
3385
|
actions: t.userMenuActions,
|
|
3385
3386
|
paths: c,
|
|
3386
3387
|
projectRoot: r,
|
|
3387
3388
|
slot: e
|
|
3388
3389
|
});
|
|
3389
|
-
return t.onboardingSteps && t.onboardingSteps.length > 0 && await
|
|
3390
|
+
return t.onboardingSteps && t.onboardingSteps.length > 0 && await Ei(t.onboardingSteps, c, r), t.postLoginRedirect && await yi({
|
|
3390
3391
|
postLoginRedirect: t.postLoginRedirect,
|
|
3391
3392
|
paths: c,
|
|
3392
3393
|
projectRoot: r,
|
|
3393
3394
|
slot: d[0]
|
|
3394
3395
|
}), l;
|
|
3395
3396
|
}
|
|
3396
|
-
async function
|
|
3397
|
+
async function Qi(e) {
|
|
3397
3398
|
let { packs: t, config: n, projectRoot: r, force: i, overwrite: a, slotsByPack: o } = e, s = [];
|
|
3398
3399
|
for (let e of t) {
|
|
3399
|
-
let t = o?.get(e.manifest.name), a = await
|
|
3400
|
+
let t = o?.get(e.manifest.name), a = await Xi({
|
|
3400
3401
|
manifest: e.manifest,
|
|
3401
3402
|
config: n,
|
|
3402
3403
|
projectRoot: r,
|
|
@@ -3416,7 +3417,7 @@ async function Zi(e) {
|
|
|
3416
3417
|
};
|
|
3417
3418
|
let c = [], l = [], u = [], d = [], f = n;
|
|
3418
3419
|
for (let e of t) {
|
|
3419
|
-
let t = o?.get(e.manifest.name), n = await
|
|
3420
|
+
let t = o?.get(e.manifest.name), n = await Zi({
|
|
3420
3421
|
manifest: e.manifest,
|
|
3421
3422
|
config: f,
|
|
3422
3423
|
projectRoot: r,
|
|
@@ -3425,7 +3426,7 @@ async function Zi(e) {
|
|
|
3425
3426
|
packDir: e.packDir,
|
|
3426
3427
|
slots: t
|
|
3427
3428
|
});
|
|
3428
|
-
c.push(...n.installed), l.push(...n.skipped), u.push(...n.errors), f = await
|
|
3429
|
+
c.push(...n.installed), l.push(...n.skipped), u.push(...n.errors), f = await $i(f, e.manifest, r), d.push(e.manifest.name);
|
|
3429
3430
|
}
|
|
3430
3431
|
return {
|
|
3431
3432
|
installed: c,
|
|
@@ -3436,7 +3437,7 @@ async function Zi(e) {
|
|
|
3436
3437
|
config: f
|
|
3437
3438
|
};
|
|
3438
3439
|
}
|
|
3439
|
-
async function
|
|
3440
|
+
async function $i(e, t, n) {
|
|
3440
3441
|
let r = typeof t == "string" ? t : t.name, i = typeof t == "string" ? [] : wr(t.env), a = Tr([...e.onboarding?.envSections ?? [], ...i]), o = {
|
|
3441
3442
|
...e,
|
|
3442
3443
|
installedPacks: [...e.installedPacks ?? [], r],
|
|
@@ -3447,17 +3448,17 @@ async function Qi(e, t, n) {
|
|
|
3447
3448
|
};
|
|
3448
3449
|
return await Ar(n, o), o;
|
|
3449
3450
|
}
|
|
3450
|
-
async function
|
|
3451
|
+
async function ea(e) {
|
|
3451
3452
|
let { manifest: t, config: n, projectRoot: r, templateDir: i } = e, a = n.paths;
|
|
3452
3453
|
if (!a) throw Error("stack.json is missing 'paths' configuration. Run 'npx @hype-stack/cli init' to set it up.");
|
|
3453
3454
|
let o = [], s = [], c = t.files.filter((e) => e.strategy === "merge"), l = new Set(c.map((e) => Rr(e.source, i))), u = T.join(i, "files");
|
|
3454
|
-
if (await
|
|
3455
|
+
if (await q(u)) {
|
|
3455
3456
|
let e = await y.readdir(u, { withFileTypes: !0 });
|
|
3456
3457
|
for (let t of e) {
|
|
3457
3458
|
if (!t.isDirectory()) continue;
|
|
3458
3459
|
let e = a[t.name]?.root;
|
|
3459
3460
|
if (!e) continue;
|
|
3460
|
-
let n = await
|
|
3461
|
+
let n = await Gi({
|
|
3461
3462
|
src: T.join(u, t.name),
|
|
3462
3463
|
dest: T.resolve(r, e),
|
|
3463
3464
|
projectRoot: r,
|
|
@@ -3467,7 +3468,7 @@ async function $i(e) {
|
|
|
3467
3468
|
}
|
|
3468
3469
|
}
|
|
3469
3470
|
for (let e of c) {
|
|
3470
|
-
let t = await
|
|
3471
|
+
let t = await Ji({
|
|
3471
3472
|
file: e,
|
|
3472
3473
|
packDir: i,
|
|
3473
3474
|
paths: a,
|
|
@@ -3478,11 +3479,11 @@ async function $i(e) {
|
|
|
3478
3479
|
t.status === "installed" ? o.push(t.path) : t.status === "error" && s.push(`${t.path}: ${t.reason}`);
|
|
3479
3480
|
}
|
|
3480
3481
|
let d = T.join(Lr("{{frontend.root}}", a, r), "src", "routes"), f = T.join(d, "(public)", "index.tsx"), p = T.join(d, "(private)", "index.tsx");
|
|
3481
|
-
return await J(f) && await J(p) && await y.rm(p, { force: !0 }), t.frontendRoutes && t.frontendRoutes.length > 0 && await
|
|
3482
|
+
return await J(f) && await J(p) && await y.rm(p, { force: !0 }), t.frontendRoutes && t.frontendRoutes.length > 0 && await mi(t.frontendRoutes, a, r), t.nav && t.nav.length > 0 && await vi({
|
|
3482
3483
|
entries: t.nav,
|
|
3483
3484
|
paths: a,
|
|
3484
3485
|
projectRoot: r
|
|
3485
|
-
}), t.postLoginRedirect && await
|
|
3486
|
+
}), t.postLoginRedirect && await yi({
|
|
3486
3487
|
postLoginRedirect: t.postLoginRedirect,
|
|
3487
3488
|
paths: a,
|
|
3488
3489
|
projectRoot: r
|
|
@@ -3493,32 +3494,32 @@ async function $i(e) {
|
|
|
3493
3494
|
}
|
|
3494
3495
|
//#endregion
|
|
3495
3496
|
//#region src/core/pack-categories.ts
|
|
3496
|
-
var
|
|
3497
|
+
var ta = [
|
|
3497
3498
|
"starter",
|
|
3498
3499
|
"layout",
|
|
3499
3500
|
"feature"
|
|
3500
|
-
],
|
|
3501
|
+
], na = {
|
|
3501
3502
|
starter: "Starter",
|
|
3502
3503
|
layout: "Layout",
|
|
3503
3504
|
feature: "Features"
|
|
3504
|
-
},
|
|
3505
|
-
function
|
|
3505
|
+
}, ra = new Set(["starter", "layout"]), ia = "starter-saas-betterauth", aa = "layout-basic";
|
|
3506
|
+
function oa(e, t = {}) {
|
|
3506
3507
|
let n = [];
|
|
3507
|
-
for (let r of
|
|
3508
|
+
for (let r of ta) {
|
|
3508
3509
|
let i = e.filter((e) => e.category === r);
|
|
3509
3510
|
if (i.length === 0) continue;
|
|
3510
|
-
let a =
|
|
3511
|
+
let a = ra.has(r) ? "single" : "multiple";
|
|
3511
3512
|
if (r === "layout") {
|
|
3512
|
-
n.push(
|
|
3513
|
+
n.push(ca("frontend", i)), t.adminAvailable && n.push(ca("admin", i));
|
|
3513
3514
|
continue;
|
|
3514
3515
|
}
|
|
3515
3516
|
if (r === "starter") {
|
|
3516
|
-
n.push(
|
|
3517
|
+
n.push(sa(i));
|
|
3517
3518
|
continue;
|
|
3518
3519
|
}
|
|
3519
3520
|
n.push({
|
|
3520
3521
|
category: r,
|
|
3521
|
-
label:
|
|
3522
|
+
label: na[r],
|
|
3522
3523
|
mode: a,
|
|
3523
3524
|
packs: i,
|
|
3524
3525
|
preselect: null
|
|
@@ -3526,65 +3527,65 @@ function aa(e, t = {}) {
|
|
|
3526
3527
|
}
|
|
3527
3528
|
return n;
|
|
3528
3529
|
}
|
|
3529
|
-
function
|
|
3530
|
-
let t = e.some((e) => e.name ===
|
|
3530
|
+
function sa(e) {
|
|
3531
|
+
let t = e.some((e) => e.name === ia);
|
|
3531
3532
|
return {
|
|
3532
3533
|
category: "starter",
|
|
3533
|
-
label:
|
|
3534
|
+
label: na.starter,
|
|
3534
3535
|
mode: "single",
|
|
3535
3536
|
packs: e,
|
|
3536
|
-
preselect: t ?
|
|
3537
|
+
preselect: t ? ia : null
|
|
3537
3538
|
};
|
|
3538
3539
|
}
|
|
3539
|
-
function
|
|
3540
|
-
let n = t.some((e) => e.name ===
|
|
3540
|
+
function ca(e, t) {
|
|
3541
|
+
let n = t.some((e) => e.name === aa);
|
|
3541
3542
|
return {
|
|
3542
3543
|
category: "layout",
|
|
3543
3544
|
label: e === "admin" ? "Admin Layout" : "Layout",
|
|
3544
3545
|
mode: "single",
|
|
3545
3546
|
packs: t,
|
|
3546
|
-
preselect: n ?
|
|
3547
|
+
preselect: n ? aa : null,
|
|
3547
3548
|
slot: e
|
|
3548
3549
|
};
|
|
3549
3550
|
}
|
|
3550
3551
|
//#endregion
|
|
3551
3552
|
//#region src/ui/logger.ts
|
|
3552
|
-
function
|
|
3553
|
-
s.note(e.map((e) => `${
|
|
3553
|
+
function la(e) {
|
|
3554
|
+
s.note(e.map((e) => `${z.arrow} ${e}`).join("\n"), "Next steps");
|
|
3554
3555
|
}
|
|
3555
3556
|
function Z() {
|
|
3556
|
-
s.cancel(
|
|
3557
|
+
s.cancel(R.muted("Operation cancelled.")), process.exit(0);
|
|
3557
3558
|
}
|
|
3558
3559
|
//#endregion
|
|
3559
3560
|
//#region src/core/post-setup.ts
|
|
3560
|
-
async function
|
|
3561
|
-
return (await
|
|
3561
|
+
async function ua() {
|
|
3562
|
+
return (await K("docker", ["info"], { cwd: process.cwd() })).exitCode === 0;
|
|
3562
3563
|
}
|
|
3563
|
-
async function
|
|
3564
|
+
async function da(e) {
|
|
3564
3565
|
return J(`${e}/apps/backend/.env`);
|
|
3565
3566
|
}
|
|
3566
|
-
async function
|
|
3567
|
-
let r = n ? `Start services with ${
|
|
3567
|
+
async function fa(e, t, n) {
|
|
3568
|
+
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 s.confirm({
|
|
3568
3569
|
message: r,
|
|
3569
3570
|
initialValue: !0
|
|
3570
3571
|
});
|
|
3571
|
-
if (s.isCancel(i) && Z(), !i) return s.log.info(
|
|
3572
|
+
if (s.isCancel(i) && Z(), !i) return s.log.info(R.muted("Skipping Docker services and database migrations.")), !1;
|
|
3572
3573
|
let a = s.spinner();
|
|
3573
3574
|
a.start("Starting Docker services...");
|
|
3574
|
-
let o = await
|
|
3575
|
+
let o = await K("docker", [
|
|
3575
3576
|
"compose",
|
|
3576
3577
|
"up",
|
|
3577
3578
|
"-d"
|
|
3578
3579
|
], { cwd: `${e}/apps/backend` });
|
|
3579
|
-
return o.exitCode === 0 ? (a.stop(
|
|
3580
|
+
return o.exitCode === 0 ? (a.stop(R.success("Docker services started")), !0) : (a.error("Failed to start Docker services"), pa(o), !1);
|
|
3580
3581
|
}
|
|
3581
|
-
function
|
|
3582
|
+
function pa(e) {
|
|
3582
3583
|
let t = (e.stderr || e.stdout).trim();
|
|
3583
|
-
t && s.log.warn(
|
|
3584
|
+
t && s.log.warn(R.muted(t));
|
|
3584
3585
|
}
|
|
3585
|
-
async function
|
|
3586
|
+
async function ma(e, t = 15, n = 2e3) {
|
|
3586
3587
|
for (let r = 0; r < t; r++) {
|
|
3587
|
-
if ((await
|
|
3588
|
+
if ((await K("docker", [
|
|
3588
3589
|
"compose",
|
|
3589
3590
|
"exec",
|
|
3590
3591
|
"-T",
|
|
@@ -3597,9 +3598,9 @@ async function pa(e, t = 15, n = 2e3) {
|
|
|
3597
3598
|
}
|
|
3598
3599
|
return !1;
|
|
3599
3600
|
}
|
|
3600
|
-
var
|
|
3601
|
-
async function
|
|
3602
|
-
let t = await
|
|
3601
|
+
var ha = "Database schema is up to date";
|
|
3602
|
+
async function ga(e) {
|
|
3603
|
+
let t = await K("pnpm", [
|
|
3603
3604
|
"--filter",
|
|
3604
3605
|
"@internal/backend",
|
|
3605
3606
|
"exec",
|
|
@@ -3607,48 +3608,48 @@ async function ha(e) {
|
|
|
3607
3608
|
"migrate",
|
|
3608
3609
|
"status"
|
|
3609
3610
|
], { cwd: e });
|
|
3610
|
-
return t.exitCode === 0 ? `${t.stdout}\n${t.stderr}`.includes(
|
|
3611
|
+
return t.exitCode === 0 ? `${t.stdout}\n${t.stderr}`.includes(ha) : !1;
|
|
3611
3612
|
}
|
|
3612
|
-
async function
|
|
3613
|
+
async function _a(e) {
|
|
3613
3614
|
let t = s.spinner();
|
|
3614
3615
|
t.start("Running database migrations...");
|
|
3615
|
-
let n = await
|
|
3616
|
+
let n = await K("pnpm", [
|
|
3616
3617
|
"--filter",
|
|
3617
3618
|
"@internal/backend",
|
|
3618
3619
|
"migration:latest"
|
|
3619
3620
|
], { cwd: e });
|
|
3620
|
-
return n.exitCode === 0 ? (t.stop(
|
|
3621
|
+
return n.exitCode === 0 ? (t.stop(R.success("Database migrations applied")), !0) : (t.error("Migrations failed"), pa(n), s.log.warn(R.muted("Run `pnpm --filter @internal/backend migration:latest` manually to apply migrations.")), !1);
|
|
3621
3622
|
}
|
|
3622
|
-
async function
|
|
3623
|
-
if (!await
|
|
3623
|
+
async function va(e, t, n = {}) {
|
|
3624
|
+
if (!await fa(e, t, await ua())) return !1;
|
|
3624
3625
|
let r = s.spinner();
|
|
3625
|
-
return r.start("Waiting for Postgres to be ready..."), await
|
|
3626
|
+
return r.start("Waiting for Postgres to be ready..."), await ma(e, n.postgresMaxAttempts ?? 15, n.postgresCheckIntervalMs ?? 2e3) ? (r.stop(R.success("Postgres is ready")), !0) : (r.error("Postgres health check timed out"), s.log.warn(R.muted("Run migrations manually once Postgres is ready: pnpm --filter @internal/backend migration:latest")), !1);
|
|
3626
3627
|
}
|
|
3627
|
-
async function
|
|
3628
|
-
if (!await
|
|
3628
|
+
async function ya(e, t, n = {}) {
|
|
3629
|
+
if (!await va(e, t, n)) return;
|
|
3629
3630
|
let r = t ? !0 : await s.confirm({
|
|
3630
|
-
message: `Run database migrations with ${
|
|
3631
|
+
message: `Run database migrations with ${R.command("prisma migrate deploy")}?`,
|
|
3631
3632
|
initialValue: !0
|
|
3632
3633
|
});
|
|
3633
3634
|
if (s.isCancel(r) && Z(), !r) {
|
|
3634
|
-
s.log.info(
|
|
3635
|
+
s.log.info(R.muted("Skipping database migrations."));
|
|
3635
3636
|
return;
|
|
3636
3637
|
}
|
|
3637
|
-
await
|
|
3638
|
+
await _a(e);
|
|
3638
3639
|
}
|
|
3639
|
-
async function
|
|
3640
|
-
if (!await
|
|
3641
|
-
s.log.warn(`${
|
|
3640
|
+
async function ba(e, t, n = {}) {
|
|
3641
|
+
if (!await da(e)) {
|
|
3642
|
+
s.log.warn(`${R.path(".env")} not found in ${R.path("apps/backend")}. Skipping Docker and migrations - configure it first.`);
|
|
3642
3643
|
return;
|
|
3643
3644
|
}
|
|
3644
|
-
await
|
|
3645
|
+
await ya(e, t, n);
|
|
3645
3646
|
}
|
|
3646
|
-
async function
|
|
3647
|
-
return await
|
|
3647
|
+
async function xa(e, t, n = {}) {
|
|
3648
|
+
return await da(e) ? va(e, t, n) : (s.log.warn(`${R.path(".env")} not found in ${R.path("apps/backend")}. Skipping Docker - configure it first.`), !1);
|
|
3648
3649
|
}
|
|
3649
3650
|
//#endregion
|
|
3650
3651
|
//#region src/core/resolve.ts
|
|
3651
|
-
function
|
|
3652
|
+
function Sa(e) {
|
|
3652
3653
|
let t = /* @__PURE__ */ new Map();
|
|
3653
3654
|
for (let n of e) t.set(n.name, {
|
|
3654
3655
|
name: n.name,
|
|
@@ -3656,7 +3657,7 @@ function xa(e) {
|
|
|
3656
3657
|
});
|
|
3657
3658
|
return t;
|
|
3658
3659
|
}
|
|
3659
|
-
function
|
|
3660
|
+
function Ca(e, t, n = /* @__PURE__ */ new Set()) {
|
|
3660
3661
|
let r = /* @__PURE__ */ new Set();
|
|
3661
3662
|
function i(e) {
|
|
3662
3663
|
if (n.has(e)) return [];
|
|
@@ -3670,10 +3671,10 @@ function Sa(e, t, n = /* @__PURE__ */ new Set()) {
|
|
|
3670
3671
|
}
|
|
3671
3672
|
return i(e);
|
|
3672
3673
|
}
|
|
3673
|
-
function
|
|
3674
|
+
function wa(e, t, n = []) {
|
|
3674
3675
|
let r = new Set(n), i = new Set(n), a = [];
|
|
3675
3676
|
for (let n of e) {
|
|
3676
|
-
let e =
|
|
3677
|
+
let e = Ca(n, t, new Set(i));
|
|
3677
3678
|
for (let t of e) i.has(t) || (i.add(t), a.push(t));
|
|
3678
3679
|
}
|
|
3679
3680
|
return {
|
|
@@ -3681,7 +3682,7 @@ function Ca(e, t, n = []) {
|
|
|
3681
3682
|
alreadyInstalled: e.filter((e) => r.has(e))
|
|
3682
3683
|
};
|
|
3683
3684
|
}
|
|
3684
|
-
function
|
|
3685
|
+
function Ta(e) {
|
|
3685
3686
|
let { order: t, graph: n, isLocked: r, installed: i = [] } = e, a = new Set(i), o = /* @__PURE__ */ new Set();
|
|
3686
3687
|
for (let e of t) {
|
|
3687
3688
|
let t = n.get(e)?.dependencies.some((e) => !a.has(e) && o.has(e)) ?? !1;
|
|
@@ -3694,7 +3695,7 @@ function wa(e) {
|
|
|
3694
3695
|
}
|
|
3695
3696
|
//#endregion
|
|
3696
3697
|
//#region src/core/variants.ts
|
|
3697
|
-
function
|
|
3698
|
+
function Ea(e, t = {}) {
|
|
3698
3699
|
let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
|
|
3699
3700
|
for (let i of e) {
|
|
3700
3701
|
let e = t[i.family] ?? i.default;
|
|
@@ -3706,14 +3707,14 @@ function Ta(e, t = {}) {
|
|
|
3706
3707
|
familyOf: r
|
|
3707
3708
|
};
|
|
3708
3709
|
}
|
|
3709
|
-
function
|
|
3710
|
+
function Da(e, t, n) {
|
|
3710
3711
|
return [...e.map((e) => n.chosen.get(e.family) ?? e.default), ...t];
|
|
3711
3712
|
}
|
|
3712
|
-
function
|
|
3713
|
+
function Oa(e, t) {
|
|
3713
3714
|
let n = t.familyOf.get(e);
|
|
3714
3715
|
return n ? t.chosen.get(n) ?? e : e;
|
|
3715
3716
|
}
|
|
3716
|
-
function
|
|
3717
|
+
function ka(e, t) {
|
|
3717
3718
|
let n = /* @__PURE__ */ new Map();
|
|
3718
3719
|
for (let t of e) t.family && n.set(t.name, t.family);
|
|
3719
3720
|
let r = new Set(t), i = /* @__PURE__ */ new Map();
|
|
@@ -3729,65 +3730,65 @@ function Oa(e, t) {
|
|
|
3729
3730
|
familyOf: n
|
|
3730
3731
|
};
|
|
3731
3732
|
}
|
|
3732
|
-
function
|
|
3733
|
+
function Aa(e, t) {
|
|
3733
3734
|
return e.map((e) => ({
|
|
3734
3735
|
...e,
|
|
3735
|
-
dependencies: e.dependencies.map((e) =>
|
|
3736
|
+
dependencies: e.dependencies.map((e) => Oa(e, t))
|
|
3736
3737
|
}));
|
|
3737
3738
|
}
|
|
3738
3739
|
//#endregion
|
|
3739
3740
|
//#region src/ui/banner.ts
|
|
3740
|
-
var
|
|
3741
|
+
var ja = [
|
|
3741
3742
|
" ██╗ ██╗ ██╗ ██╗ ██████╗ ███████╗",
|
|
3742
3743
|
" ██║ ██║ ╚██╗ ██╔╝ ██╔══██╗ ██╔════╝",
|
|
3743
3744
|
" ███████║ ╚████╔╝ ██████╔╝ █████╗ ",
|
|
3744
3745
|
" ██╔══██║ ╚██╔╝ ██╔═══╝ ██╔══╝ ",
|
|
3745
3746
|
" ██║ ██║ ██║ ██║ ███████╗",
|
|
3746
3747
|
" ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝"
|
|
3747
|
-
],
|
|
3748
|
+
], Ma = [
|
|
3748
3749
|
" ███████╗ ████████╗ █████╗ ██████╗ ██╗ ██╗",
|
|
3749
3750
|
" ██╔════╝ ╚══██╔══╝ ██╔══██╗ ██╔════╝ ██║ ██╔╝",
|
|
3750
3751
|
" ███████╗ ██║ ███████║ ██║ █████╔╝ ",
|
|
3751
3752
|
" ╚════██║ ██║ ██╔══██║ ██║ ██╔═██╗ ",
|
|
3752
3753
|
" ███████║ ██║ ██║ ██║ ╚██████╗ ██║ ██╗",
|
|
3753
3754
|
" ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝"
|
|
3754
|
-
],
|
|
3755
|
+
], Na = [
|
|
3755
3756
|
253,
|
|
3756
3757
|
176,
|
|
3757
3758
|
21
|
|
3758
|
-
],
|
|
3759
|
+
], Pa = [
|
|
3759
3760
|
245,
|
|
3760
3761
|
76,
|
|
3761
3762
|
2
|
|
3762
|
-
],
|
|
3763
|
+
], Fa = 5, Ia = [
|
|
3763
3764
|
17,
|
|
3764
3765
|
103,
|
|
3765
3766
|
248
|
|
3766
|
-
],
|
|
3767
|
+
], La = [
|
|
3767
3768
|
42,
|
|
3768
3769
|
160,
|
|
3769
3770
|
250
|
|
3770
|
-
],
|
|
3771
|
-
function
|
|
3771
|
+
], Ra = .2;
|
|
3772
|
+
function za() {
|
|
3772
3773
|
console.log();
|
|
3773
|
-
for (let e of
|
|
3774
|
-
start:
|
|
3775
|
-
end:
|
|
3776
|
-
angle:
|
|
3774
|
+
for (let e of xe(ja, {
|
|
3775
|
+
start: Na,
|
|
3776
|
+
end: Pa,
|
|
3777
|
+
angle: Fa
|
|
3777
3778
|
})) console.log(b.bold(e));
|
|
3778
|
-
for (let e of
|
|
3779
|
-
start:
|
|
3780
|
-
end:
|
|
3781
|
-
angle:
|
|
3779
|
+
for (let e of xe(Ma, {
|
|
3780
|
+
start: Ia,
|
|
3781
|
+
end: La,
|
|
3782
|
+
angle: Ra
|
|
3782
3783
|
})) console.log(b.bold(e));
|
|
3783
|
-
console.log(), console.log(` ${
|
|
3784
|
+
console.log(), console.log(` ${z.spark} ${b.dim("v" + A)} ${b.dim("·")} ${ye("Ship web + desktop apps from one codebase")}`), console.log();
|
|
3784
3785
|
}
|
|
3785
|
-
function
|
|
3786
|
-
console.log(), console.log(` ${
|
|
3786
|
+
function Ba() {
|
|
3787
|
+
console.log(), console.log(` ${z.bolt} ${ge.orange("Hype")}${ge.skyBlue("Stack")} ${b.dim("v" + A)}`), console.log();
|
|
3787
3788
|
}
|
|
3788
3789
|
//#endregion
|
|
3789
3790
|
//#region src/ui/pack-multiselect.ts
|
|
3790
|
-
var
|
|
3791
|
+
var Va = class extends O {
|
|
3791
3792
|
options;
|
|
3792
3793
|
cursor = 0;
|
|
3793
3794
|
selected;
|
|
@@ -3891,99 +3892,107 @@ var Ba = class extends O {
|
|
|
3891
3892
|
}
|
|
3892
3893
|
}
|
|
3893
3894
|
};
|
|
3894
|
-
function
|
|
3895
|
-
return new
|
|
3895
|
+
function Ha(e) {
|
|
3896
|
+
return new Va(e).prompt();
|
|
3896
3897
|
}
|
|
3897
3898
|
//#endregion
|
|
3898
3899
|
//#region src/utils/naming.ts
|
|
3899
|
-
function
|
|
3900
|
+
function Ua(e) {
|
|
3900
3901
|
return e.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
3901
3902
|
}
|
|
3902
|
-
function
|
|
3903
|
+
function Wa(e) {
|
|
3903
3904
|
return e.split(/[-_]/).filter(Boolean).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" ");
|
|
3904
3905
|
}
|
|
3905
3906
|
//#endregion
|
|
3906
3907
|
//#region src/utils/validate.ts
|
|
3907
|
-
function
|
|
3908
|
+
function Ga(e) {
|
|
3908
3909
|
if (!e.trim()) return "Project name cannot be empty";
|
|
3909
3910
|
if (e.length > 214) return "Project name is too long (max 214 characters)";
|
|
3910
|
-
let t =
|
|
3911
|
-
if (!
|
|
3911
|
+
let t = Ua(e);
|
|
3912
|
+
if (!ie.test(t)) return "Project name must contain at least one letter or number";
|
|
3912
3913
|
}
|
|
3913
3914
|
//#endregion
|
|
3914
3915
|
//#region src/core/apply-mode.ts
|
|
3915
|
-
var
|
|
3916
|
-
function
|
|
3917
|
-
return e.replace(
|
|
3916
|
+
var Ka = "src/hooks/use-theme.ts", qa = /(\bexport\s+const\s+defaultTheme\s*=\s*)(["'])(?:light|dark)\2/;
|
|
3917
|
+
function Ja(e, t) {
|
|
3918
|
+
return e.replace(qa, (e, n, r) => `${n}${r}${t}${r}`);
|
|
3918
3919
|
}
|
|
3919
|
-
async function
|
|
3920
|
-
let n = T.resolve(e,
|
|
3920
|
+
async function Ya(e, t) {
|
|
3921
|
+
let n = T.resolve(e, Ka), r;
|
|
3921
3922
|
try {
|
|
3922
3923
|
r = await y.readFile(n, "utf-8");
|
|
3923
3924
|
} catch {
|
|
3924
3925
|
return !1;
|
|
3925
3926
|
}
|
|
3926
|
-
let i =
|
|
3927
|
+
let i = Ja(r, t);
|
|
3927
3928
|
return i === r || await y.writeFile(n, i, "utf-8"), !0;
|
|
3928
3929
|
}
|
|
3929
3930
|
//#endregion
|
|
3930
3931
|
//#region src/core/apply-theme.ts
|
|
3931
|
-
function
|
|
3932
|
-
let n =
|
|
3933
|
-
|
|
3934
|
-
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
|
|
3938
|
-
|
|
3939
|
-
|
|
3932
|
+
function Xa(e, t) {
|
|
3933
|
+
let n = 0;
|
|
3934
|
+
for (; n < e.length;) {
|
|
3935
|
+
let r = e.indexOf(t, n);
|
|
3936
|
+
if (r === -1) return null;
|
|
3937
|
+
let i = e.indexOf("{", r);
|
|
3938
|
+
if (i === -1) return null;
|
|
3939
|
+
if (e.slice(r + t.length, i).trim() !== "") {
|
|
3940
|
+
n = r + t.length;
|
|
3941
|
+
continue;
|
|
3942
|
+
}
|
|
3943
|
+
let a = 1, o = i + 1;
|
|
3944
|
+
for (; o < e.length && a > 0;) {
|
|
3945
|
+
let t = e[o];
|
|
3946
|
+
t === "{" ? a++ : t === "}" && a--, o++;
|
|
3947
|
+
}
|
|
3948
|
+
return a === 0 ? {
|
|
3949
|
+
bodyStart: i + 1,
|
|
3950
|
+
bodyEnd: o - 1
|
|
3951
|
+
} : null;
|
|
3940
3952
|
}
|
|
3941
|
-
return
|
|
3942
|
-
bodyStart: r + 1,
|
|
3943
|
-
bodyEnd: a - 1
|
|
3944
|
-
} : null;
|
|
3953
|
+
return null;
|
|
3945
3954
|
}
|
|
3946
|
-
function
|
|
3955
|
+
function Za(e, t) {
|
|
3947
3956
|
let n = e;
|
|
3948
3957
|
for (let [e, r] of Object.entries(t)) {
|
|
3949
|
-
let t = RegExp(`(^[ \\t]*--${
|
|
3958
|
+
let t = RegExp(`(^[ \\t]*--${Qa(e)}[ \\t]*:[ \\t]*)([^;\\n]*);`, "m");
|
|
3950
3959
|
n = n.replace(t, (e, t) => `${t}${r};`);
|
|
3951
3960
|
}
|
|
3952
3961
|
return n;
|
|
3953
3962
|
}
|
|
3954
|
-
function
|
|
3963
|
+
function Qa(e) {
|
|
3955
3964
|
return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
3956
3965
|
}
|
|
3957
|
-
function
|
|
3958
|
-
let n =
|
|
3966
|
+
function $a(e, t) {
|
|
3967
|
+
let n = Xa(e, ":root"), r = Xa(e, ".dark"), i = e;
|
|
3959
3968
|
if (n) {
|
|
3960
3969
|
let e = i.slice(0, n.bodyStart), r = i.slice(n.bodyStart, n.bodyEnd), a = i.slice(n.bodyEnd);
|
|
3961
|
-
i = e +
|
|
3970
|
+
i = e + Za(r, t.light) + a;
|
|
3962
3971
|
}
|
|
3963
3972
|
if (r) {
|
|
3964
|
-
let e =
|
|
3973
|
+
let e = Xa(i, ".dark");
|
|
3965
3974
|
if (e) {
|
|
3966
3975
|
let n = i.slice(0, e.bodyStart), r = i.slice(e.bodyStart, e.bodyEnd), a = i.slice(e.bodyEnd);
|
|
3967
|
-
i = n +
|
|
3976
|
+
i = n + Za(r, t.dark) + a;
|
|
3968
3977
|
}
|
|
3969
3978
|
}
|
|
3970
3979
|
return i;
|
|
3971
3980
|
}
|
|
3972
|
-
var
|
|
3973
|
-
async function
|
|
3974
|
-
let n = T.resolve(e,
|
|
3981
|
+
var eo = "assets/styles.css";
|
|
3982
|
+
async function to(e, t) {
|
|
3983
|
+
let n = T.resolve(e, eo), r;
|
|
3975
3984
|
try {
|
|
3976
3985
|
r = await y.readFile(n, "utf-8");
|
|
3977
3986
|
} catch {
|
|
3978
3987
|
return !1;
|
|
3979
3988
|
}
|
|
3980
|
-
let i =
|
|
3989
|
+
let i = $a(r, t);
|
|
3981
3990
|
return i === r || await y.writeFile(n, i, "utf-8"), !0;
|
|
3982
3991
|
}
|
|
3983
3992
|
//#endregion
|
|
3984
3993
|
//#region src/core/clone.ts
|
|
3985
|
-
async function
|
|
3986
|
-
let t = await ee(
|
|
3994
|
+
async function no(e) {
|
|
3995
|
+
let t = await ee(te, {
|
|
3987
3996
|
dir: e,
|
|
3988
3997
|
force: !0
|
|
3989
3998
|
});
|
|
@@ -3994,7 +4003,7 @@ async function to(e) {
|
|
|
3994
4003
|
}
|
|
3995
4004
|
//#endregion
|
|
3996
4005
|
//#region src/core/editor-config.ts
|
|
3997
|
-
function
|
|
4006
|
+
function ro(e) {
|
|
3998
4007
|
let t = {
|
|
3999
4008
|
globs: [],
|
|
4000
4009
|
alwaysApply: !1
|
|
@@ -4029,10 +4038,10 @@ function no(e) {
|
|
|
4029
4038
|
content: i
|
|
4030
4039
|
};
|
|
4031
4040
|
}
|
|
4032
|
-
function
|
|
4041
|
+
function io(e) {
|
|
4033
4042
|
return e.frontmatter.globs.length > 0 ? `---\npaths:\n${e.frontmatter.globs.map((e) => ` - "${e}"`).join("\n")}\n---\n\n${e.content}` : e.content;
|
|
4034
4043
|
}
|
|
4035
|
-
function
|
|
4044
|
+
function ao(e) {
|
|
4036
4045
|
let t;
|
|
4037
4046
|
t = e.frontmatter.alwaysApply ? "always_on" : e.frontmatter.globs.length > 0 ? "glob" : "model_decision";
|
|
4038
4047
|
let n = [`trigger: ${t}`];
|
|
@@ -4042,30 +4051,30 @@ function io(e) {
|
|
|
4042
4051
|
}
|
|
4043
4052
|
return e.frontmatter.description && n.push(`description: ${e.frontmatter.description}`), `---\n${n.join("\n")}\n---\n\n${e.content}`;
|
|
4044
4053
|
}
|
|
4045
|
-
function
|
|
4054
|
+
function oo(e) {
|
|
4046
4055
|
return e.frontmatter.globs.length > 0 ? `---\napplyTo: "${e.frontmatter.globs.join(", ")}"\n---\n\n${e.content}` : e.content;
|
|
4047
4056
|
}
|
|
4048
|
-
var
|
|
4057
|
+
var so = {
|
|
4049
4058
|
claude: {
|
|
4050
4059
|
rulesDir: ".claude/rules",
|
|
4051
4060
|
extension: ".md",
|
|
4052
|
-
convert:
|
|
4061
|
+
convert: io
|
|
4053
4062
|
},
|
|
4054
4063
|
windsurf: {
|
|
4055
4064
|
rulesDir: ".windsurf/rules",
|
|
4056
4065
|
extension: ".md",
|
|
4057
|
-
convert:
|
|
4066
|
+
convert: ao
|
|
4058
4067
|
},
|
|
4059
4068
|
copilot: {
|
|
4060
4069
|
rulesDir: ".github/instructions",
|
|
4061
4070
|
extension: ".instructions.md",
|
|
4062
|
-
convert:
|
|
4071
|
+
convert: oo
|
|
4063
4072
|
}
|
|
4064
4073
|
};
|
|
4065
|
-
async function
|
|
4066
|
-
let t = T.join(e,
|
|
4074
|
+
async function co(e) {
|
|
4075
|
+
let t = T.join(e, oe), n = (await y.readdir(t, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isFile() && e.name.endsWith(".mdc"));
|
|
4067
4076
|
return await Promise.all(n.map(async (e) => {
|
|
4068
|
-
let n = T.join(t, e.name), { frontmatter: r, content: i } =
|
|
4077
|
+
let n = T.join(t, e.name), { frontmatter: r, content: i } = ro(await y.readFile(n, "utf-8"));
|
|
4069
4078
|
return {
|
|
4070
4079
|
frontmatter: r,
|
|
4071
4080
|
content: i,
|
|
@@ -4073,31 +4082,31 @@ async function so(e) {
|
|
|
4073
4082
|
};
|
|
4074
4083
|
}));
|
|
4075
4084
|
}
|
|
4076
|
-
async function
|
|
4085
|
+
async function lo(e, t) {
|
|
4077
4086
|
if (t === "cursor") return;
|
|
4078
|
-
let n =
|
|
4087
|
+
let n = so[t], r = await co(e), i = T.join(e, n.rulesDir);
|
|
4079
4088
|
await y.mkdir(i, { recursive: !0 }), await Promise.all(r.map((e) => {
|
|
4080
4089
|
let t = n.convert(e), r = e.filename.replace(/\.mdc$/, n.extension);
|
|
4081
4090
|
return y.writeFile(T.join(i, r), t, "utf-8");
|
|
4082
|
-
})), await ur(T.join(e,
|
|
4091
|
+
})), await ur(T.join(e, se)), await ur(T.join(e, ce));
|
|
4083
4092
|
}
|
|
4084
4093
|
//#endregion
|
|
4085
4094
|
//#region src/core/env-files.ts
|
|
4086
|
-
var
|
|
4095
|
+
var uo = [
|
|
4087
4096
|
"apps",
|
|
4088
4097
|
"packages",
|
|
4089
4098
|
"libs",
|
|
4090
4099
|
"shared"
|
|
4091
4100
|
];
|
|
4092
|
-
async function
|
|
4093
|
-
let t = await
|
|
4101
|
+
async function fo(e) {
|
|
4102
|
+
let t = await po(e);
|
|
4094
4103
|
return (await Promise.all(t.map(async (t) => {
|
|
4095
4104
|
let n = T.join(T.dirname(t), ".env");
|
|
4096
4105
|
return await J(n) ? null : (await y.copyFile(t, n), T.relative(e, n));
|
|
4097
4106
|
}))).filter((e) => e !== null).sort();
|
|
4098
4107
|
}
|
|
4099
|
-
async function
|
|
4100
|
-
let t = [T.join(e, ".env.example")], n = await Promise.all(
|
|
4108
|
+
async function po(e) {
|
|
4109
|
+
let t = [T.join(e, ".env.example")], n = await Promise.all(uo.map(async (t) => {
|
|
4101
4110
|
let n = T.join(e, t);
|
|
4102
4111
|
return (await y.readdir(n, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isDirectory()).map((e) => T.join(n, e.name, ".env.example"));
|
|
4103
4112
|
}));
|
|
@@ -4105,12 +4114,12 @@ async function fo(e) {
|
|
|
4105
4114
|
}
|
|
4106
4115
|
//#endregion
|
|
4107
4116
|
//#region src/core/post-clone.ts
|
|
4108
|
-
var Q = "@hype-stack/",
|
|
4109
|
-
async function
|
|
4117
|
+
var Q = "@hype-stack/", mo = "hype-stack";
|
|
4118
|
+
async function ho(e) {
|
|
4110
4119
|
await ur(T.join(e, ".git"));
|
|
4111
4120
|
}
|
|
4112
|
-
async function
|
|
4113
|
-
await
|
|
4121
|
+
async function go(e) {
|
|
4122
|
+
await K("git", ["init"], { cwd: e }), await K("git", ["add", "."], { cwd: e }), await K("git", [
|
|
4114
4123
|
"-c",
|
|
4115
4124
|
"user.name=Hype Stack CLI",
|
|
4116
4125
|
"-c",
|
|
@@ -4120,22 +4129,22 @@ async function ho(e) {
|
|
|
4120
4129
|
"Initial commit from Hype Stack CLI"
|
|
4121
4130
|
], { cwd: e });
|
|
4122
4131
|
}
|
|
4123
|
-
async function
|
|
4124
|
-
let n = `@${t}/`, r = await
|
|
4132
|
+
async function _o(e, t) {
|
|
4133
|
+
let n = `@${t}/`, r = await To(e);
|
|
4125
4134
|
for (let e of r) {
|
|
4126
4135
|
let t = await sr(e);
|
|
4127
4136
|
if (!t) continue;
|
|
4128
4137
|
let r = !1;
|
|
4129
|
-
t.name?.startsWith(Q) && (t.name = t.name.replace(Q, n), r = !0),
|
|
4138
|
+
t.name?.startsWith(Q) && (t.name = t.name.replace(Q, n), r = !0), So(t.dependencies, n) && (r = !0), So(t.devDependencies, n) && (r = !0), t.nx && Co(t.nx, n) && (r = !0);
|
|
4130
4139
|
let i = await y.readFile(e, "utf-8");
|
|
4131
4140
|
if (i.includes(Q)) {
|
|
4132
4141
|
let t = i.replaceAll(Q, n);
|
|
4133
4142
|
await y.writeFile(e, t, "utf-8");
|
|
4134
4143
|
} else r && await cr(e, t);
|
|
4135
4144
|
}
|
|
4136
|
-
await
|
|
4145
|
+
await Bi(e, t), await bo(e, t), await wo(e, t);
|
|
4137
4146
|
}
|
|
4138
|
-
var
|
|
4147
|
+
var vo = new Set([
|
|
4139
4148
|
".git",
|
|
4140
4149
|
"node_modules",
|
|
4141
4150
|
"dist",
|
|
@@ -4143,10 +4152,10 @@ var _o = new Set([
|
|
|
4143
4152
|
".nx",
|
|
4144
4153
|
".next",
|
|
4145
4154
|
"coverage"
|
|
4146
|
-
]),
|
|
4147
|
-
async function
|
|
4148
|
-
if (t ===
|
|
4149
|
-
let n = await
|
|
4155
|
+
]), yo = /^(docker-compose|compose)(\.[\w.-]+)?\.ya?ml$/;
|
|
4156
|
+
async function bo(e, t) {
|
|
4157
|
+
if (t === mo) return;
|
|
4158
|
+
let n = await xo(e);
|
|
4150
4159
|
await Promise.all(n.map(async (e) => {
|
|
4151
4160
|
let n = await y.readFile(e, "utf-8").catch(() => null);
|
|
4152
4161
|
if (!n || !/^name:[ \t]*hype-stack/m.test(n)) return;
|
|
@@ -4154,14 +4163,14 @@ async function yo(e, t) {
|
|
|
4154
4163
|
await y.writeFile(e, r, "utf-8");
|
|
4155
4164
|
}));
|
|
4156
4165
|
}
|
|
4157
|
-
async function
|
|
4166
|
+
async function xo(e) {
|
|
4158
4167
|
let t = await y.readdir(e, { withFileTypes: !0 }).catch(() => []);
|
|
4159
4168
|
return (await Promise.all(t.map(async (t) => {
|
|
4160
4169
|
let n = T.join(e, t.name);
|
|
4161
|
-
return t.isDirectory() ?
|
|
4170
|
+
return t.isDirectory() ? vo.has(t.name) ? [] : xo(n) : t.isFile() && yo.test(t.name) ? [n] : [];
|
|
4162
4171
|
}))).flat();
|
|
4163
4172
|
}
|
|
4164
|
-
function
|
|
4173
|
+
function So(e, t) {
|
|
4165
4174
|
if (!e) return !1;
|
|
4166
4175
|
let n = !1;
|
|
4167
4176
|
for (let r of Object.keys(e)) if (r.startsWith(Q)) {
|
|
@@ -4170,7 +4179,7 @@ function xo(e, t) {
|
|
|
4170
4179
|
}
|
|
4171
4180
|
return n;
|
|
4172
4181
|
}
|
|
4173
|
-
function
|
|
4182
|
+
function Co(e, t) {
|
|
4174
4183
|
if (!e) return !1;
|
|
4175
4184
|
let n = !1;
|
|
4176
4185
|
if (e.implicitDependencies &&= e.implicitDependencies.map((e) => e.startsWith(Q) ? (n = !0, e.replace(Q, t)) : e), e.targets) {
|
|
@@ -4178,13 +4187,13 @@ function So(e, t) {
|
|
|
4178
4187
|
}
|
|
4179
4188
|
return n;
|
|
4180
4189
|
}
|
|
4181
|
-
async function
|
|
4190
|
+
async function wo(e, t) {
|
|
4182
4191
|
let n = T.join(e, "packages/enums/src/app/index.ts"), r = await y.readFile(n, "utf-8").catch(() => null);
|
|
4183
4192
|
if (!r) return;
|
|
4184
|
-
let i =
|
|
4193
|
+
let i = Wa(t), a = r.replaceAll(`id: "${mo}"`, `id: "${t}"`).replaceAll(`name: "${mo}"`, `name: "${t}"`).replace(/name: "Hype Stack"/, `name: "${i}"`).replace(/description: ".*?"/, `description: "${i} application"`);
|
|
4185
4194
|
await y.writeFile(n, a, "utf-8");
|
|
4186
4195
|
}
|
|
4187
|
-
async function
|
|
4196
|
+
async function To(e) {
|
|
4188
4197
|
let t = [], n = T.join(e, "package.json");
|
|
4189
4198
|
(await y.stat(n).catch(() => null))?.isFile() && t.push(n);
|
|
4190
4199
|
for (let n of [
|
|
@@ -4204,7 +4213,7 @@ async function wo(e) {
|
|
|
4204
4213
|
}
|
|
4205
4214
|
//#endregion
|
|
4206
4215
|
//#region src/core/readme.ts
|
|
4207
|
-
var
|
|
4216
|
+
var Eo = {
|
|
4208
4217
|
cursor: {
|
|
4209
4218
|
label: "Cursor",
|
|
4210
4219
|
rulesDir: ".cursor/rules"
|
|
@@ -4221,21 +4230,21 @@ var To = {
|
|
|
4221
4230
|
label: "GitHub Copilot",
|
|
4222
4231
|
rulesDir: ".github/instructions"
|
|
4223
4232
|
}
|
|
4224
|
-
},
|
|
4233
|
+
}, Do = {
|
|
4225
4234
|
backend: "Hono API server (Postgres, Prisma, Kysely, Valkey cache, WorkOS auth)",
|
|
4226
4235
|
frontend: "React + Vite app talking to the backend through the typed HyperFetch SDK"
|
|
4227
|
-
},
|
|
4236
|
+
}, Oo = {
|
|
4228
4237
|
enums: "Shared enums and app config used across apps",
|
|
4229
4238
|
cli: "Project tooling and code generators"
|
|
4230
4239
|
};
|
|
4231
|
-
function
|
|
4240
|
+
function ko(e, t) {
|
|
4232
4241
|
return Object.entries(e).toSorted(([e], [t]) => e.localeCompare(t)).map(([e, n]) => {
|
|
4233
4242
|
let r = t[e];
|
|
4234
4243
|
return r ? `- \`${n}\` - ${r}` : `- \`${n}\``;
|
|
4235
4244
|
});
|
|
4236
4245
|
}
|
|
4237
|
-
function
|
|
4238
|
-
let { projectName: t, editor: n, workspace: r } = e, i =
|
|
4246
|
+
function Ao(e) {
|
|
4247
|
+
let { projectName: t, editor: n, workspace: r } = e, i = Wa(t), a = Eo[n], o = !!r.apps.backend, s = ko(r.apps, Do), c = ko(r.packages, Oo), l = [];
|
|
4239
4248
|
s.length > 0 && l.push(...s), c.length > 0 && l.push(...c), l.push("- `stack.json` - Hype Stack workspace config (apps, paths, installed packs)");
|
|
4240
4249
|
let u = [];
|
|
4241
4250
|
u.push(`# ${i}`), u.push([
|
|
@@ -4338,19 +4347,19 @@ function ko(e) {
|
|
|
4338
4347
|
"stays useful."
|
|
4339
4348
|
].join("\n")), u.join("\n\n") + "\n";
|
|
4340
4349
|
}
|
|
4341
|
-
async function
|
|
4350
|
+
async function jo(e, t) {
|
|
4342
4351
|
let n = T.join(e, "README.md");
|
|
4343
|
-
await y.writeFile(n,
|
|
4352
|
+
await y.writeFile(n, Ao(t), "utf-8");
|
|
4344
4353
|
}
|
|
4345
4354
|
//#endregion
|
|
4346
4355
|
//#region src/core/tracking.ts
|
|
4347
|
-
async function
|
|
4356
|
+
async function Mo(e) {
|
|
4348
4357
|
try {
|
|
4349
4358
|
let t = {
|
|
4350
|
-
"X-Device-Id":
|
|
4351
|
-
"X-Client-Info":
|
|
4352
|
-
}, n = await
|
|
4353
|
-
n?.token && (t.Authorization = `Bearer ${n.token}`), await
|
|
4359
|
+
"X-Device-Id": Zn(),
|
|
4360
|
+
"X-Client-Info": Qn()
|
|
4361
|
+
}, n = await qn(F()).catch(() => null);
|
|
4362
|
+
n?.token && (t.Authorization = `Bearer ${n.token}`), await G.createRequest()({
|
|
4354
4363
|
endpoint: "/cli/track",
|
|
4355
4364
|
method: "POST"
|
|
4356
4365
|
}).setPayload({ event: e }).setHeaders(t).send();
|
|
@@ -4358,7 +4367,7 @@ async function jo(e) {
|
|
|
4358
4367
|
}
|
|
4359
4368
|
//#endregion
|
|
4360
4369
|
//#region src/core/npm-deps.ts
|
|
4361
|
-
function
|
|
4370
|
+
function No(e, t) {
|
|
4362
4371
|
let n = [], r = [];
|
|
4363
4372
|
if (!e) return {
|
|
4364
4373
|
errors: n,
|
|
@@ -4389,7 +4398,7 @@ function Mo(e, t) {
|
|
|
4389
4398
|
operations: r
|
|
4390
4399
|
};
|
|
4391
4400
|
}
|
|
4392
|
-
function
|
|
4401
|
+
function Po(e) {
|
|
4393
4402
|
let t = {};
|
|
4394
4403
|
for (let n of e) if (n) for (let [e, r] of Object.entries(n)) t[e] = {
|
|
4395
4404
|
...t[e],
|
|
@@ -4397,7 +4406,7 @@ function No(e) {
|
|
|
4397
4406
|
};
|
|
4398
4407
|
return t;
|
|
4399
4408
|
}
|
|
4400
|
-
async function
|
|
4409
|
+
async function Fo(e, t, n = K) {
|
|
4401
4410
|
let r = [];
|
|
4402
4411
|
for (let i of e) {
|
|
4403
4412
|
let e = T.join(t, i.relativeDir);
|
|
@@ -4433,25 +4442,25 @@ async function Po(e, t, n = q) {
|
|
|
4433
4442
|
function $(e) {
|
|
4434
4443
|
return e instanceof Error ? e.message : String(e);
|
|
4435
4444
|
}
|
|
4436
|
-
async function
|
|
4445
|
+
async function Io(e, t, n) {
|
|
4437
4446
|
let r = e.filter((e) => e.tier === "paid" && !t.has(e.name)).map((e) => e.name);
|
|
4438
4447
|
return r.length === 0 ? {} : Vr(r, n).catch(() => ({}));
|
|
4439
4448
|
}
|
|
4440
|
-
function
|
|
4441
|
-
return e === "free" ?
|
|
4449
|
+
function Lo(e, t) {
|
|
4450
|
+
return e === "free" ? R.success("free") : e === "owned" ? R.accent("owned") : `${R.highlight(`$${t}`)} ${R.muted("locked")}`;
|
|
4442
4451
|
}
|
|
4443
|
-
async function
|
|
4452
|
+
async function Ro(e, t, n) {
|
|
4444
4453
|
let r = e.filter((e) => t(e)), i = e.filter((e) => !t(e));
|
|
4445
|
-
i.length > 0 && s.log.warning(`Skipping ${i.join(", ")} because ${i.length === 1 ? "it depends" : "they depend"} on a pack you don't own yet.`), await
|
|
4454
|
+
i.length > 0 && s.log.warning(`Skipping ${i.join(", ")} because ${i.length === 1 ? "it depends" : "they depend"} on a pack you don't own yet.`), await ir(r.map((e) => n.get(e)).filter((e) => e !== void 0).map((e) => ({
|
|
4446
4455
|
name: e.name,
|
|
4447
4456
|
displayName: e.displayName,
|
|
4448
4457
|
price: e.price
|
|
4449
4458
|
})));
|
|
4450
4459
|
}
|
|
4451
|
-
function
|
|
4460
|
+
function zo(e, t) {
|
|
4452
4461
|
let n = e.map((e, n) => {
|
|
4453
4462
|
let r = t.get(e), i = r ? r.displayName : e;
|
|
4454
|
-
return ` ${
|
|
4463
|
+
return ` ${R.muted(`${n + 1}.`)} ${R.brand(i)}`;
|
|
4455
4464
|
});
|
|
4456
4465
|
s.note([
|
|
4457
4466
|
"These packs will be installed, in order:",
|
|
@@ -4459,7 +4468,7 @@ function Ro(e, t) {
|
|
|
4459
4468
|
...n
|
|
4460
4469
|
].join("\n"), "Install Plan");
|
|
4461
4470
|
}
|
|
4462
|
-
async function
|
|
4471
|
+
async function Bo(e, t) {
|
|
4463
4472
|
let n = [];
|
|
4464
4473
|
for (let r of e) {
|
|
4465
4474
|
let e = await Fr(r), i = await Ir(r, t);
|
|
@@ -4471,32 +4480,32 @@ async function zo(e, t) {
|
|
|
4471
4480
|
}
|
|
4472
4481
|
return n;
|
|
4473
4482
|
}
|
|
4474
|
-
async function
|
|
4475
|
-
let { prepared: t, paths: n, cwd: r, spinner: i } = e, a =
|
|
4483
|
+
async function Vo(e) {
|
|
4484
|
+
let { prepared: t, paths: n, cwd: r, spinner: i } = e, a = No(Po(t.map((e) => e.manifest.dependencies_npm)), n);
|
|
4476
4485
|
if (a.errors.length > 0) {
|
|
4477
4486
|
for (let e of a.errors) s.log.error(e);
|
|
4478
4487
|
return;
|
|
4479
4488
|
}
|
|
4480
4489
|
if (a.operations.length === 0) return;
|
|
4481
4490
|
i.start("Installing npm dependencies...");
|
|
4482
|
-
let o = await
|
|
4491
|
+
let o = await Fo(a.operations, r);
|
|
4483
4492
|
if (i.stop(o.ok ? "npm dependencies installed" : "npm dependency installation failed"), !o.ok) for (let e of o.errors) s.log.error(e);
|
|
4484
4493
|
}
|
|
4485
|
-
function
|
|
4486
|
-
s.note([` ${
|
|
4494
|
+
function Ho() {
|
|
4495
|
+
s.note([` ${R.command("1. npx @hype-stack/cli onboard")} ${R.muted("(set up env vars + run migrations)")}`, ` ${R.command("2. pnpm dev")} ${R.muted("(start frontend + backend)")}`].join("\n"), "Next steps");
|
|
4487
4496
|
}
|
|
4488
|
-
function
|
|
4497
|
+
function Uo(e) {
|
|
4489
4498
|
if (e.length === 0) return;
|
|
4490
4499
|
let t = e.map((e) => {
|
|
4491
4500
|
let t = e.replace(/^\{\{[^}]+\}\}\//, "");
|
|
4492
|
-
return ` ${
|
|
4501
|
+
return ` ${R.muted("•")} ${R.path(t)}`;
|
|
4493
4502
|
});
|
|
4494
4503
|
s.note(t.join("\n"), "Skipped (already exist)");
|
|
4495
4504
|
}
|
|
4496
|
-
async function
|
|
4505
|
+
async function Wo(e) {
|
|
4497
4506
|
let { prepared: t, config: n, cwd: r, force: i, yes: a, slotsByPack: o } = e, c = /* @__PURE__ */ new Set();
|
|
4498
4507
|
if (i) return c;
|
|
4499
|
-
let l = await
|
|
4508
|
+
let l = await Yi({
|
|
4500
4509
|
packs: t,
|
|
4501
4510
|
config: n,
|
|
4502
4511
|
projectRoot: r,
|
|
@@ -4504,17 +4513,17 @@ async function Uo(e) {
|
|
|
4504
4513
|
});
|
|
4505
4514
|
if (l.length === 0) return c;
|
|
4506
4515
|
if (a) {
|
|
4507
|
-
s.log.warning(`${l.length} existing file${l.length === 1 ? "" : "s"} kept. Pass ${
|
|
4516
|
+
s.log.warning(`${l.length} existing file${l.length === 1 ? "" : "s"} kept. Pass ${R.command("--force")} to overwrite.`);
|
|
4508
4517
|
let e = l.map((e) => {
|
|
4509
4518
|
let t = T.relative(r, e.targetPath) || e.target;
|
|
4510
|
-
return ` ${
|
|
4519
|
+
return ` ${R.muted("•")} ${R.path(t)} ${R.muted(`(${e.packName})`)}`;
|
|
4511
4520
|
});
|
|
4512
4521
|
return s.note(e.join("\n"), "Kept existing files"), c;
|
|
4513
4522
|
}
|
|
4514
4523
|
s.log.warning(`${l.length} file${l.length === 1 ? "" : "s"} already exist in your project.`);
|
|
4515
4524
|
for (let e of l) {
|
|
4516
4525
|
let t = T.relative(r, e.targetPath) || e.target, n = await s.confirm({
|
|
4517
|
-
message: `Overwrite ${
|
|
4526
|
+
message: `Overwrite ${R.path(t)}? ${R.muted(`(${e.packName})`)}`,
|
|
4518
4527
|
initialValue: !1
|
|
4519
4528
|
});
|
|
4520
4529
|
s.isCancel(n) && (s.cancel("Installation cancelled."), process.exit(0)), n && c.add(e.targetPath);
|
|
@@ -4523,7 +4532,7 @@ async function Uo(e) {
|
|
|
4523
4532
|
}
|
|
4524
4533
|
//#endregion
|
|
4525
4534
|
//#region src/ui/swatch.ts
|
|
4526
|
-
function
|
|
4535
|
+
function Go(e) {
|
|
4527
4536
|
let t = e.trim().match(/^oklch\(([^)]+)\)$/i);
|
|
4528
4537
|
if (!t) return null;
|
|
4529
4538
|
let n = t[1].trim().split(/\s+/);
|
|
@@ -4542,58 +4551,58 @@ function Wo(e) {
|
|
|
4542
4551
|
h: a
|
|
4543
4552
|
};
|
|
4544
4553
|
}
|
|
4545
|
-
function
|
|
4554
|
+
function Ko(e) {
|
|
4546
4555
|
return Math.min(255, Math.max(0, Math.round(e)));
|
|
4547
4556
|
}
|
|
4548
|
-
function
|
|
4557
|
+
function qo(e) {
|
|
4549
4558
|
return e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055;
|
|
4550
4559
|
}
|
|
4551
|
-
function
|
|
4560
|
+
function Jo({ l: e, c: t, h: n }) {
|
|
4552
4561
|
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;
|
|
4553
4562
|
return [
|
|
4554
|
-
|
|
4555
|
-
|
|
4556
|
-
|
|
4563
|
+
Ko(qo(f) * 255),
|
|
4564
|
+
Ko(qo(p) * 255),
|
|
4565
|
+
Ko(qo(m) * 255)
|
|
4557
4566
|
];
|
|
4558
4567
|
}
|
|
4559
|
-
var
|
|
4560
|
-
function
|
|
4568
|
+
var Yo = "\x1B[49m";
|
|
4569
|
+
function Xo(e, t) {
|
|
4561
4570
|
let n = e[t];
|
|
4562
4571
|
if (!n) return b.dim(" ");
|
|
4563
|
-
let r =
|
|
4572
|
+
let r = Go(n);
|
|
4564
4573
|
if (!r) return b.dim(" ");
|
|
4565
|
-
let [i, a, o] =
|
|
4566
|
-
return `\x1b[48;2;${i};${a};${o}m ${
|
|
4574
|
+
let [i, a, o] = Jo(r);
|
|
4575
|
+
return `\x1b[48;2;${i};${a};${o}m ${Yo}`;
|
|
4567
4576
|
}
|
|
4568
|
-
var
|
|
4577
|
+
var Zo = [
|
|
4569
4578
|
"primary",
|
|
4570
4579
|
"secondary",
|
|
4571
4580
|
"accent"
|
|
4572
4581
|
];
|
|
4573
|
-
function Zo(e) {
|
|
4574
|
-
return Xo.map((t) => Yo(e, t)).join("");
|
|
4575
|
-
}
|
|
4576
4582
|
function Qo(e) {
|
|
4577
|
-
return
|
|
4583
|
+
return Zo.map((t) => Xo(e, t)).join("");
|
|
4584
|
+
}
|
|
4585
|
+
function $o(e) {
|
|
4586
|
+
return `${Qo(e.light)} ${b.dim("·")} ${Qo(e.dark)}`;
|
|
4578
4587
|
}
|
|
4579
4588
|
//#endregion
|
|
4580
4589
|
//#region src/commands/create.ts
|
|
4581
|
-
async function
|
|
4582
|
-
e.skipBanner ||
|
|
4590
|
+
async function es(e) {
|
|
4591
|
+
e.skipBanner || za(), s.intro(R.brandBold("Create a new Hype Stack project"));
|
|
4583
4592
|
let o = e.yes === !0, c, l;
|
|
4584
4593
|
if (o && e.name) {
|
|
4585
|
-
let t =
|
|
4586
|
-
t && (s.log.error(t), Z()), l = e.name, c =
|
|
4594
|
+
let t = Ga(e.name);
|
|
4595
|
+
t && (s.log.error(t), Z()), l = e.name, c = Ua(e.name);
|
|
4587
4596
|
} else {
|
|
4588
4597
|
let t = await s.text({
|
|
4589
4598
|
message: "What is your project named?",
|
|
4590
4599
|
placeholder: "my-app",
|
|
4591
4600
|
initialValue: e.name ?? "",
|
|
4592
|
-
validate: (e) =>
|
|
4601
|
+
validate: (e) => Ga(e ?? "")
|
|
4593
4602
|
});
|
|
4594
|
-
s.isCancel(t) && Z(), l = t, c =
|
|
4603
|
+
s.isCancel(t) && Z(), l = t, c = Ua(l);
|
|
4595
4604
|
}
|
|
4596
|
-
l.trim() !== c && s.log.info(
|
|
4605
|
+
l.trim() !== c && s.log.info(R.muted(`Using "${R.highlight(c)}" as the project name`));
|
|
4597
4606
|
let u;
|
|
4598
4607
|
if (e.directory !== void 0) u = e.directory;
|
|
4599
4608
|
else {
|
|
@@ -4611,14 +4620,14 @@ async function $o(e) {
|
|
|
4611
4620
|
u = dr(t, c);
|
|
4612
4621
|
}
|
|
4613
4622
|
let d = T.resolve(u);
|
|
4614
|
-
o || s.note(
|
|
4615
|
-
let f = e.editor &&
|
|
4623
|
+
o || s.note(R.path(d), "Project will be created at");
|
|
4624
|
+
let f = e.editor && ae.includes(e.editor) ? e.editor : null, p;
|
|
4616
4625
|
if (f) p = f;
|
|
4617
4626
|
else if (o) p = "cursor";
|
|
4618
4627
|
else {
|
|
4619
4628
|
let e = await s.select({
|
|
4620
4629
|
message: "Which code editor do you use?",
|
|
4621
|
-
options:
|
|
4630
|
+
options: P.map((e) => ({
|
|
4622
4631
|
value: e.value,
|
|
4623
4632
|
label: e.label,
|
|
4624
4633
|
hint: "hint" in e ? e.hint : void 0
|
|
@@ -4635,78 +4644,78 @@ async function $o(e) {
|
|
|
4635
4644
|
message: "Pick a color theme",
|
|
4636
4645
|
options: r.map((e) => ({
|
|
4637
4646
|
value: e.name,
|
|
4638
|
-
label: `${
|
|
4647
|
+
label: `${$o(e)} ${e.label}`
|
|
4639
4648
|
})),
|
|
4640
4649
|
initialValue: h
|
|
4641
4650
|
});
|
|
4642
4651
|
s.isCancel(e) && Z(), g = e;
|
|
4643
4652
|
}
|
|
4644
4653
|
if (!o) {
|
|
4645
|
-
let e =
|
|
4654
|
+
let e = P.find((e) => e.value === p)?.label ?? p, t = n.find((e) => e.value === g)?.label ?? g, r = await s.confirm({ message: `Create ${R.highlight(c)} in ${R.path(d)} with ${R.highlight(e)} config and the ${R.highlight(t)} theme?` });
|
|
4646
4655
|
(s.isCancel(r) || !r) && Z();
|
|
4647
4656
|
}
|
|
4648
|
-
if (await
|
|
4657
|
+
if (await q(d) && !await or(d)) {
|
|
4649
4658
|
let e = await s.confirm({
|
|
4650
|
-
message: `Directory ${
|
|
4659
|
+
message: `Directory ${R.path(d)} is not empty. Continue anyway?`,
|
|
4651
4660
|
initialValue: !1
|
|
4652
4661
|
});
|
|
4653
4662
|
(s.isCancel(e) || !e) && Z();
|
|
4654
4663
|
}
|
|
4655
4664
|
let _ = s.spinner();
|
|
4656
|
-
_.start("Cloning Hype Stack template..."), await
|
|
4665
|
+
_.start("Cloning Hype Stack template..."), await no(d), _.stop(R.success("Template cloned"));
|
|
4657
4666
|
let v = s.spinner();
|
|
4658
|
-
v.start("Setting up project..."), await
|
|
4667
|
+
v.start("Setting up project..."), await ho(d), await _o(d, c), await lo(d, p);
|
|
4659
4668
|
let y = await jr(d), b = Nr(c, y);
|
|
4660
|
-
await Ar(d, b), await
|
|
4669
|
+
await Ar(d, b), await jo(d, {
|
|
4661
4670
|
projectName: c,
|
|
4662
4671
|
editor: p,
|
|
4663
4672
|
workspace: y
|
|
4664
4673
|
});
|
|
4665
4674
|
let x = T.resolve(d, b.paths?.frontend.root ?? "apps/frontend");
|
|
4666
|
-
a(g) && (await
|
|
4675
|
+
a(g) && (await to(x, i(g)) || s.log.warn(R.muted(`Could not find ${R.path("assets/styles.css")} to apply the ${g} theme`))), await Ya(x, e.defaultMode === "dark" || e.defaultMode === "light" ? e.defaultMode : "light") || s.log.warn(R.muted(`Could not find ${R.path("src/hooks/use-theme.ts")} to set the default color mode`)), v.stop(R.success("Project configured"));
|
|
4667
4676
|
let S = s.spinner();
|
|
4668
|
-
S.start("Installing dependencies..."), (await
|
|
4677
|
+
S.start("Installing dependencies..."), (await K("pnpm", ["install"], { cwd: d })).exitCode === 0 ? S.stop(R.success("Dependencies installed")) : (S.stop(R.warning("Dependencies installed with warnings")), s.log.warn(R.muted("You may need to run `pnpm install` manually to resolve issues.")));
|
|
4669
4678
|
let C = s.spinner();
|
|
4670
|
-
C.start("Initializing git repository..."), await
|
|
4679
|
+
C.start("Initializing git repository..."), await go(d), C.stop(R.success("Git repository initialized with clean history"));
|
|
4671
4680
|
let w = s.spinner();
|
|
4672
4681
|
w.start("Creating .env files from examples...");
|
|
4673
|
-
let E = await
|
|
4682
|
+
let E = await fo(d);
|
|
4674
4683
|
if (E.length > 0) {
|
|
4675
4684
|
let e = E.length;
|
|
4676
|
-
w.stop(
|
|
4677
|
-
} else w.stop(
|
|
4678
|
-
s.log.success(`${
|
|
4679
|
-
let D = T.relative(process.cwd(), d) || ".", O = [`${
|
|
4680
|
-
E.length > 0 ? O.push(`Review your ${
|
|
4685
|
+
w.stop(R.success(`Created ${e} .env file${e === 1 ? "" : "s"} from examples`));
|
|
4686
|
+
} else w.stop(R.muted("No .env.example files to copy"));
|
|
4687
|
+
s.log.success(`${R.brandBold("Hype Stack")} project ${R.highlight(c)} is ready!`);
|
|
4688
|
+
let D = T.relative(process.cwd(), d) || ".", O = [`${R.command(`cd ${D}`)}`];
|
|
4689
|
+
E.length > 0 ? O.push(`Review your ${R.path(".env")} files and fill in any secrets`) : O.push(`Copy ${R.path(".env.example")} to ${R.path(".env")} and configure`), la(O);
|
|
4681
4690
|
let k = e.setup === !1;
|
|
4682
|
-
if (e.deferSetup) s.log.info(
|
|
4691
|
+
if (e.deferSetup) s.log.info(R.muted("Docker and migrations will run after your packs are installed."));
|
|
4683
4692
|
else {
|
|
4684
4693
|
let e = !k && (o || await s.confirm({
|
|
4685
4694
|
message: "Would you like to start Docker services and run database migrations now?",
|
|
4686
4695
|
initialValue: !0
|
|
4687
4696
|
}));
|
|
4688
|
-
s.isCancel(e) && Z(), e ? await
|
|
4697
|
+
s.isCancel(e) && Z(), e ? await ba(d, o) : s.log.info(R.muted("Docker and migrations can run later via `npx @hype-stack/cli onboard`.")), Ho();
|
|
4689
4698
|
}
|
|
4690
|
-
return await
|
|
4699
|
+
return await Mo("project_create"), s.outro(R.muted("Happy building!")), d;
|
|
4691
4700
|
}
|
|
4692
4701
|
//#endregion
|
|
4693
4702
|
//#region src/commands/init.ts
|
|
4694
|
-
async function
|
|
4703
|
+
async function ts(e) {
|
|
4695
4704
|
let t = e.cwd ?? process.cwd(), n = e.silent ?? !1;
|
|
4696
|
-
if (n || (
|
|
4697
|
-
s.log.error(`This doesn't look like a Hype Stack project. ${
|
|
4705
|
+
if (n || (Ba(), s.intro(R.brandBold("Initialize Hype Stack configuration"))), !await Pr(t)) {
|
|
4706
|
+
s.log.error(`This doesn't look like a Hype Stack project. ${R.muted("Expected apps/ directory and package.json")}`), s.outro(R.muted(`Run ${R.command("npx @hype-stack/cli create")} to scaffold a new project.`));
|
|
4698
4707
|
return;
|
|
4699
4708
|
}
|
|
4700
4709
|
if (await kr(t)) {
|
|
4701
4710
|
let e = await Or(t);
|
|
4702
4711
|
if (e && !n) {
|
|
4703
|
-
s.log.info(`Found existing ${
|
|
4712
|
+
s.log.info(`Found existing ${R.path("stack.json")} for project ${R.highlight(e.name)}`);
|
|
4704
4713
|
let t = await s.confirm({
|
|
4705
4714
|
message: "Overwrite existing configuration?",
|
|
4706
4715
|
initialValue: !1
|
|
4707
4716
|
});
|
|
4708
4717
|
if (s.isCancel(t) || !t) {
|
|
4709
|
-
s.outro(
|
|
4718
|
+
s.outro(R.muted("Keeping existing configuration."));
|
|
4710
4719
|
return;
|
|
4711
4720
|
}
|
|
4712
4721
|
}
|
|
@@ -4715,12 +4724,12 @@ async function es(e) {
|
|
|
4715
4724
|
if (!n) {
|
|
4716
4725
|
let e = Object.entries(r.apps), t = Object.entries(r.packages);
|
|
4717
4726
|
if (e.length > 0) {
|
|
4718
|
-
s.log.info(
|
|
4719
|
-
for (let [t, n] of e) s.log.message(` ${
|
|
4727
|
+
s.log.info(R.bold("Detected apps:"));
|
|
4728
|
+
for (let [t, n] of e) s.log.message(` ${z.arrow} ${R.highlight(t)} ${R.muted(`→ ${n}`)}`);
|
|
4720
4729
|
}
|
|
4721
4730
|
if (t.length > 0) {
|
|
4722
|
-
s.log.info(
|
|
4723
|
-
for (let [e, n] of t) s.log.message(` ${
|
|
4731
|
+
s.log.info(R.bold("Detected packages:"));
|
|
4732
|
+
for (let [e, n] of t) s.log.message(` ${z.arrow} ${R.highlight(e)} ${R.muted(`→ ${n}`)}`);
|
|
4724
4733
|
}
|
|
4725
4734
|
e.length === 0 && t.length === 0 && s.log.warn("No apps or packages detected in the workspace.");
|
|
4726
4735
|
}
|
|
@@ -4730,21 +4739,21 @@ async function es(e) {
|
|
|
4730
4739
|
message: "Project name for stack.json?",
|
|
4731
4740
|
placeholder: i,
|
|
4732
4741
|
initialValue: i,
|
|
4733
|
-
validate: (e) =>
|
|
4742
|
+
validate: (e) => Ga(e ?? "")
|
|
4734
4743
|
});
|
|
4735
|
-
s.isCancel(e) && Z(), a =
|
|
4744
|
+
s.isCancel(e) && Z(), a = Ua(e);
|
|
4736
4745
|
}
|
|
4737
|
-
await Ar(t, Nr(a, r)), n || (s.log.success(`${
|
|
4746
|
+
await Ar(t, Nr(a, r)), n || (s.log.success(`${R.path("stack.json")} written successfully`), s.outro(R.muted("Your project is mapped and ready for Hype Stack CLI commands.")));
|
|
4738
4747
|
}
|
|
4739
|
-
async function
|
|
4748
|
+
async function ns(e, t = {}, n) {
|
|
4740
4749
|
if (await kr(e)) return {
|
|
4741
4750
|
projectRoot: e,
|
|
4742
4751
|
scaffolded: !1
|
|
4743
4752
|
};
|
|
4744
|
-
let r = t.runInit ?? ((e) =>
|
|
4753
|
+
let r = t.runInit ?? ((e) => ts({
|
|
4745
4754
|
cwd: e,
|
|
4746
4755
|
silent: !0
|
|
4747
|
-
})), i = t.runCreate ?? ((e, t) =>
|
|
4756
|
+
})), i = t.runCreate ?? ((e, t) => es({
|
|
4748
4757
|
parentDirectory: e,
|
|
4749
4758
|
deferSetup: !0,
|
|
4750
4759
|
skipBanner: !0,
|
|
@@ -4752,22 +4761,22 @@ async function ts(e, t = {}, n) {
|
|
|
4752
4761
|
defaultMode: t?.defaultMode
|
|
4753
4762
|
}));
|
|
4754
4763
|
if (await Pr(e)) {
|
|
4755
|
-
s.log.warn(`No ${
|
|
4764
|
+
s.log.warn(`No ${R.path("stack.json")} found in ${R.path(e)}.`);
|
|
4756
4765
|
let t = await s.confirm({
|
|
4757
|
-
message: `Create ${
|
|
4766
|
+
message: `Create ${R.path("stack.json")} now?`,
|
|
4758
4767
|
initialValue: !0
|
|
4759
4768
|
});
|
|
4760
4769
|
if (s.isCancel(t) || !t) return null;
|
|
4761
4770
|
await r(e);
|
|
4762
4771
|
let n = await kr(e);
|
|
4763
|
-
return n && s.log.success(`${
|
|
4772
|
+
return n && s.log.success(`${R.path("stack.json")} created`), n ? {
|
|
4764
4773
|
projectRoot: e,
|
|
4765
4774
|
scaffolded: !1
|
|
4766
4775
|
} : null;
|
|
4767
4776
|
}
|
|
4768
|
-
s.log.warn(`This doesn't look like a Hype Stack project, and there's no ${
|
|
4777
|
+
s.log.warn(`This doesn't look like a Hype Stack project, and there's no ${R.path("stack.json")} here.`);
|
|
4769
4778
|
let a = await s.confirm({
|
|
4770
|
-
message: `Is ${
|
|
4779
|
+
message: `Is ${R.path(e)} where you want to work?`,
|
|
4771
4780
|
initialValue: !0
|
|
4772
4781
|
});
|
|
4773
4782
|
if (s.isCancel(a) || !a) return null;
|
|
@@ -4784,18 +4793,18 @@ async function ts(e, t = {}, n) {
|
|
|
4784
4793
|
}
|
|
4785
4794
|
//#endregion
|
|
4786
4795
|
//#region src/commands/compose.ts
|
|
4787
|
-
async function
|
|
4796
|
+
async function rs(e = {}) {
|
|
4788
4797
|
let t = e.cwd ?? process.cwd();
|
|
4789
|
-
|
|
4790
|
-
let n = await
|
|
4798
|
+
za();
|
|
4799
|
+
let n = await ns(t), r = n?.projectRoot ?? null, i = n?.scaffolded ?? !1, a;
|
|
4791
4800
|
try {
|
|
4792
4801
|
a = await Or(r ?? t);
|
|
4793
4802
|
} catch (e) {
|
|
4794
|
-
s.cancel(`Could not parse ${
|
|
4803
|
+
s.cancel(`Could not parse ${R.path("stack.json")}: ${$(e)} Run 'npx @hype-stack/cli init' to regenerate it.`), process.exit(1);
|
|
4795
4804
|
}
|
|
4796
|
-
a || (s.cancel(r ? `Could not read ${
|
|
4805
|
+
a || (s.cancel(r ? `Could not read ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' to regenerate it, then run 'npx @hype-stack/cli compose' again.` : `No ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' first, then 'npx @hype-stack/cli compose'.`), process.exit(1)), a.paths || (s.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'npx @hype-stack/cli init' again to regenerate it.`), process.exit(1));
|
|
4797
4806
|
let o = r ?? t;
|
|
4798
|
-
s.intro(
|
|
4807
|
+
s.intro(R.brandBold("Compose your stack"));
|
|
4799
4808
|
let c = s.spinner();
|
|
4800
4809
|
c.start("Loading packs...");
|
|
4801
4810
|
let l;
|
|
@@ -4805,13 +4814,13 @@ async function ns(e = {}) {
|
|
|
4805
4814
|
c.stop("Failed to load packs"), s.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
|
|
4806
4815
|
}
|
|
4807
4816
|
c.stop("Packs loaded");
|
|
4808
|
-
let u = a.installedPacks ?? [], d = new Set(u), f = new Map(l.map((e) => [e.name, e])), p = e.licenseKey ?? a.licenseKey ?? null, m = (await
|
|
4817
|
+
let u = a.installedPacks ?? [], d = new Set(u), f = new Map(l.map((e) => [e.name, e])), p = e.licenseKey ?? a.licenseKey ?? null, m = (await qn(F()))?.token ?? null, h = await Io(l, d, {
|
|
4809
4818
|
token: m,
|
|
4810
4819
|
key: p
|
|
4811
4820
|
}), g = (e) => {
|
|
4812
4821
|
let t = f.get(e);
|
|
4813
4822
|
return !t || t.tier === "free" ? "free" : h[e]?.owned ? "owned" : "locked";
|
|
4814
|
-
}, _ = (e) => !d.has(e) && g(e) === "locked", v = await
|
|
4823
|
+
}, _ = (e) => !d.has(e) && g(e) === "locked", v = await is({
|
|
4815
4824
|
packs: l,
|
|
4816
4825
|
installedSet: d,
|
|
4817
4826
|
stateOf: g,
|
|
@@ -4819,49 +4828,49 @@ async function ns(e = {}) {
|
|
|
4819
4828
|
adminAvailable: !!a.apps.admin
|
|
4820
4829
|
});
|
|
4821
4830
|
if (v === null && (s.cancel("Cancelled."), process.exit(0)), v.length === 0) {
|
|
4822
|
-
s.outro(
|
|
4831
|
+
s.outro(R.muted("No packs selected. Nothing to do."));
|
|
4823
4832
|
return;
|
|
4824
4833
|
}
|
|
4825
|
-
let b =
|
|
4834
|
+
let b = ss(v), x = cs(v), S = ka(l, b), C = Sa(Aa(l, S)), w;
|
|
4826
4835
|
try {
|
|
4827
|
-
w =
|
|
4836
|
+
w = wa(b, C, u);
|
|
4828
4837
|
} catch (e) {
|
|
4829
4838
|
s.cancel($(e)), process.exit(1);
|
|
4830
4839
|
}
|
|
4831
4840
|
if (w.order.length === 0) {
|
|
4832
|
-
s.note(`${w.alreadyInstalled.join(", ")} already installed.`, "Nothing to do"), s.outro(
|
|
4841
|
+
s.note(`${w.alreadyInstalled.join(", ")} already installed.`, "Nothing to do"), s.outro(R.muted("Your selection is already part of the project."));
|
|
4833
4842
|
return;
|
|
4834
4843
|
}
|
|
4835
|
-
let T =
|
|
4844
|
+
let T = Ta({
|
|
4836
4845
|
order: w.order,
|
|
4837
4846
|
graph: C,
|
|
4838
4847
|
isLocked: _,
|
|
4839
4848
|
installed: u
|
|
4840
4849
|
});
|
|
4841
4850
|
if (T.blocked.length > 0 && !m && !p) {
|
|
4842
|
-
let e = await
|
|
4843
|
-
e && (m = e, h = await
|
|
4851
|
+
let e = await rr();
|
|
4852
|
+
e && (m = e, h = await Io(l, d, {
|
|
4844
4853
|
token: m,
|
|
4845
4854
|
key: p
|
|
4846
|
-
}), T =
|
|
4855
|
+
}), T = Ta({
|
|
4847
4856
|
order: w.order,
|
|
4848
4857
|
graph: C,
|
|
4849
4858
|
isLocked: _,
|
|
4850
4859
|
installed: u
|
|
4851
4860
|
}));
|
|
4852
4861
|
}
|
|
4853
|
-
if (T.blocked.length > 0 && await
|
|
4854
|
-
s.outro(
|
|
4862
|
+
if (T.blocked.length > 0 && await Ro(T.blocked, _, f), T.installable.length === 0) {
|
|
4863
|
+
s.outro(R.muted("Nothing left to install once locked packs are removed."));
|
|
4855
4864
|
return;
|
|
4856
4865
|
}
|
|
4857
|
-
if (
|
|
4866
|
+
if (zo(T.installable, f), !e.yes) {
|
|
4858
4867
|
let e = await s.confirm({ message: `Install ${T.installable.length} pack${T.installable.length === 1 ? "" : "s"}?` });
|
|
4859
4868
|
(s.isCancel(e) || !e) && (s.cancel("Installation cancelled."), process.exit(0));
|
|
4860
4869
|
}
|
|
4861
4870
|
c.start("Downloading packs...");
|
|
4862
4871
|
let E;
|
|
4863
4872
|
try {
|
|
4864
|
-
E = await
|
|
4873
|
+
E = await Bo(T.installable, {
|
|
4865
4874
|
token: m,
|
|
4866
4875
|
key: p
|
|
4867
4876
|
});
|
|
@@ -4869,7 +4878,7 @@ async function ns(e = {}) {
|
|
|
4869
4878
|
c.stop("Download failed"), s.cancel($(e)), process.exit(1);
|
|
4870
4879
|
}
|
|
4871
4880
|
c.stop(`Downloaded ${E.length} pack${E.length === 1 ? "" : "s"}`);
|
|
4872
|
-
let D = await
|
|
4881
|
+
let D = await Wo({
|
|
4873
4882
|
prepared: E,
|
|
4874
4883
|
config: a,
|
|
4875
4884
|
cwd: o,
|
|
@@ -4879,7 +4888,7 @@ async function ns(e = {}) {
|
|
|
4879
4888
|
});
|
|
4880
4889
|
try {
|
|
4881
4890
|
c.start("Installing pack files...");
|
|
4882
|
-
let t = await
|
|
4891
|
+
let t = await Qi({
|
|
4883
4892
|
packs: E,
|
|
4884
4893
|
config: a,
|
|
4885
4894
|
projectRoot: o,
|
|
@@ -4892,22 +4901,22 @@ async function ns(e = {}) {
|
|
|
4892
4901
|
for (let e of t.errors) s.log.error(e);
|
|
4893
4902
|
s.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
|
|
4894
4903
|
}
|
|
4895
|
-
c.stop("Files installed"), t.installed.length > 0 && s.log.success(`${
|
|
4904
|
+
c.stop("Files installed"), t.installed.length > 0 && s.log.success(`${R.highlight(String(t.installed.length))} files installed`), t.skipped.length > 0 && (s.log.warning(`${t.skipped.length} files skipped (use --force to overwrite)`), Uo(t.skipped));
|
|
4896
4905
|
for (let e of t.errors) s.log.error(e);
|
|
4897
|
-
await
|
|
4906
|
+
await Vo({
|
|
4898
4907
|
prepared: E,
|
|
4899
4908
|
paths: a.paths,
|
|
4900
4909
|
cwd: o,
|
|
4901
4910
|
spinner: c
|
|
4902
4911
|
});
|
|
4903
4912
|
let n;
|
|
4904
|
-
i && (n = await
|
|
4913
|
+
i && (n = await xa(o, e.yes ?? !1)), await pr({
|
|
4905
4914
|
projectRoot: o,
|
|
4906
4915
|
paths: a.paths,
|
|
4907
4916
|
skipPrompts: e.yes ?? !1,
|
|
4908
4917
|
dbReady: n,
|
|
4909
4918
|
freshScaffold: i
|
|
4910
|
-
}),
|
|
4919
|
+
}), Ho(), s.outro(R.brand(`Installed ${t.appliedPacks.join(", ")}.`));
|
|
4911
4920
|
} finally {
|
|
4912
4921
|
await Promise.all(E.map((e) => y.rm(e.packDir, {
|
|
4913
4922
|
recursive: !0,
|
|
@@ -4915,25 +4924,25 @@ async function ns(e = {}) {
|
|
|
4915
4924
|
})));
|
|
4916
4925
|
}
|
|
4917
4926
|
}
|
|
4918
|
-
async function
|
|
4927
|
+
async function is(e) {
|
|
4919
4928
|
let { packs: t, installedSet: n, stateOf: r, options: i, adminAvailable: a } = e;
|
|
4920
4929
|
if (i.packs && i.packs.length > 0) {
|
|
4921
|
-
let e = i.packs.map(
|
|
4930
|
+
let e = i.packs.map(os), n = e.filter((e) => !t.some((t) => t.name === e.name));
|
|
4922
4931
|
return n.length > 0 && (s.cancel(`Unknown pack${n.length === 1 ? "" : "s"}: ${n.map((e) => e.name).join(", ")}`), process.exit(1)), e;
|
|
4923
4932
|
}
|
|
4924
4933
|
let o = t.filter((e) => n.has(e.name));
|
|
4925
|
-
o.length > 0 && s.note(o.map((e) => ` ${
|
|
4934
|
+
o.length > 0 && s.note(o.map((e) => ` ${R.muted("✓")} ${e.displayName}`).join("\n"), "Already Installed");
|
|
4926
4935
|
let c = t.filter((e) => !n.has(e.name));
|
|
4927
|
-
if (c.length === 0) return s.outro(
|
|
4928
|
-
let l =
|
|
4929
|
-
s.note(c.map((e) => ` ${
|
|
4930
|
-
let u =
|
|
4936
|
+
if (c.length === 0) return s.outro(R.muted("Every available pack is already installed.")), [];
|
|
4937
|
+
let l = le();
|
|
4938
|
+
s.note(c.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${_e(`${l}/packs/${e.name}`)}`).join("\n"), "Browse packs");
|
|
4939
|
+
let u = oa(c, { adminAvailable: a }), d = [];
|
|
4931
4940
|
for (let e of u) {
|
|
4932
4941
|
let t = e.packs.map((e) => {
|
|
4933
4942
|
let t = r(e.name);
|
|
4934
4943
|
return {
|
|
4935
4944
|
value: e.name,
|
|
4936
|
-
label: `${e.displayName} ${
|
|
4945
|
+
label: `${e.displayName} ${Lo(t, e.price)}`,
|
|
4937
4946
|
hint: e.description
|
|
4938
4947
|
};
|
|
4939
4948
|
});
|
|
@@ -4950,7 +4959,7 @@ async function rs(e) {
|
|
|
4950
4959
|
});
|
|
4951
4960
|
continue;
|
|
4952
4961
|
}
|
|
4953
|
-
let n = await
|
|
4962
|
+
let n = await Ha({
|
|
4954
4963
|
message: `Select ${e.label.toLowerCase()} to add (optional)`,
|
|
4955
4964
|
options: t,
|
|
4956
4965
|
required: !1
|
|
@@ -4960,20 +4969,20 @@ async function rs(e) {
|
|
|
4960
4969
|
}
|
|
4961
4970
|
return d;
|
|
4962
4971
|
}
|
|
4963
|
-
var
|
|
4964
|
-
function
|
|
4965
|
-
let t = e.match(
|
|
4972
|
+
var as = /@(frontend|admin)$/;
|
|
4973
|
+
function os(e) {
|
|
4974
|
+
let t = e.match(as);
|
|
4966
4975
|
return t ? {
|
|
4967
4976
|
name: e.slice(0, -t[0].length),
|
|
4968
4977
|
slot: t[1]
|
|
4969
4978
|
} : { name: e };
|
|
4970
4979
|
}
|
|
4971
|
-
function
|
|
4980
|
+
function ss(e) {
|
|
4972
4981
|
let t = /* @__PURE__ */ new Set(), n = [];
|
|
4973
4982
|
for (let r of e) t.has(r.name) || (t.add(r.name), n.push(r.name));
|
|
4974
4983
|
return n;
|
|
4975
4984
|
}
|
|
4976
|
-
function
|
|
4985
|
+
function cs(e) {
|
|
4977
4986
|
let t = /* @__PURE__ */ new Map();
|
|
4978
4987
|
for (let n of e) {
|
|
4979
4988
|
if (!n.slot) continue;
|
|
@@ -4984,32 +4993,32 @@ function ss(e) {
|
|
|
4984
4993
|
}
|
|
4985
4994
|
//#endregion
|
|
4986
4995
|
//#region src/commands/login.ts
|
|
4987
|
-
async function
|
|
4988
|
-
|
|
4996
|
+
async function ls() {
|
|
4997
|
+
Ba(), s.intro(R.brandBold("Log in to Hype Stack")), s.log.step("Opening your browser to sign in...");
|
|
4989
4998
|
let e;
|
|
4990
4999
|
try {
|
|
4991
|
-
e = await
|
|
4992
|
-
s.log.info(`If your browser didn't open, visit:\n ${
|
|
5000
|
+
e = await nr({ onUrl: (e) => {
|
|
5001
|
+
s.log.info(`If your browser didn't open, visit:\n ${R.path(e)}`);
|
|
4993
5002
|
} });
|
|
4994
5003
|
} catch (e) {
|
|
4995
5004
|
s.cancel(e instanceof Error ? e.message : String(e)), process.exit(1);
|
|
4996
5005
|
}
|
|
4997
|
-
s.outro(
|
|
5006
|
+
s.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."));
|
|
4998
5007
|
}
|
|
4999
5008
|
//#endregion
|
|
5000
5009
|
//#region src/commands/logout.ts
|
|
5001
|
-
async function
|
|
5002
|
-
|
|
5003
|
-
let e =
|
|
5010
|
+
async function us() {
|
|
5011
|
+
Ba(), s.intro(R.brandBold("Log out of Hype Stack"));
|
|
5012
|
+
let e = F(), t = await qn(e);
|
|
5004
5013
|
if (!t) {
|
|
5005
|
-
s.outro(
|
|
5014
|
+
s.outro(R.muted("You're not logged in."));
|
|
5006
5015
|
return;
|
|
5007
5016
|
}
|
|
5008
|
-
await
|
|
5017
|
+
await zn(t.token).catch(() => null), await Yn(e), s.outro(R.brand("Logged out."));
|
|
5009
5018
|
}
|
|
5010
5019
|
//#endregion
|
|
5011
5020
|
//#region src/core/onboard-env.ts
|
|
5012
|
-
function
|
|
5021
|
+
function ds(e) {
|
|
5013
5022
|
let t = [], n = "";
|
|
5014
5023
|
for (let r of e.split(/\r?\n/)) {
|
|
5015
5024
|
let e = r.trim();
|
|
@@ -5035,19 +5044,19 @@ function us(e) {
|
|
|
5035
5044
|
}
|
|
5036
5045
|
return t;
|
|
5037
5046
|
}
|
|
5038
|
-
var
|
|
5047
|
+
var fs = [
|
|
5039
5048
|
"replace-with",
|
|
5040
5049
|
"examplepublickey",
|
|
5041
5050
|
"change-me",
|
|
5042
5051
|
"your-key-here"
|
|
5043
5052
|
];
|
|
5044
|
-
function
|
|
5053
|
+
function ps(e) {
|
|
5045
5054
|
let t = e.trim();
|
|
5046
5055
|
if (t === "") return !0;
|
|
5047
5056
|
let n = t.toLowerCase();
|
|
5048
|
-
return
|
|
5057
|
+
return fs.some((e) => n.includes(e));
|
|
5049
5058
|
}
|
|
5050
|
-
function
|
|
5059
|
+
function ms(e, t, n) {
|
|
5051
5060
|
let r = e.split(/\r?\n/), i = !1, a = r.map((e) => {
|
|
5052
5061
|
if (i) return e;
|
|
5053
5062
|
let r = e.trim();
|
|
@@ -5057,119 +5066,119 @@ function ps(e, t, n) {
|
|
|
5057
5066
|
});
|
|
5058
5067
|
return i ? a.join("\n") : e + `${e.length > 0 && !e.endsWith("\n") ? "\n" : ""}${t}=${n}\n`;
|
|
5059
5068
|
}
|
|
5060
|
-
async function
|
|
5069
|
+
async function hs(e) {
|
|
5061
5070
|
return await J(e) ? y.readFile(e, "utf-8") : "";
|
|
5062
5071
|
}
|
|
5063
|
-
async function
|
|
5072
|
+
async function gs(e) {
|
|
5064
5073
|
let t = T.join(T.dirname(e), ".env");
|
|
5065
5074
|
return await J(t) || await y.copyFile(e, t), t;
|
|
5066
5075
|
}
|
|
5067
|
-
async function
|
|
5068
|
-
let r =
|
|
5076
|
+
async function _s(e, t, n) {
|
|
5077
|
+
let r = ms(await hs(e), t, n);
|
|
5069
5078
|
await y.writeFile(e, r, "utf-8");
|
|
5070
5079
|
}
|
|
5071
5080
|
//#endregion
|
|
5072
5081
|
//#region src/commands/onboard.ts
|
|
5073
|
-
async function
|
|
5082
|
+
async function vs(e = {}) {
|
|
5074
5083
|
let t = e.cwd ?? process.cwd();
|
|
5075
|
-
|
|
5084
|
+
za(), s.intro(R.brandBold("Onboard your stack"));
|
|
5076
5085
|
let n;
|
|
5077
5086
|
try {
|
|
5078
5087
|
n = await Or(t);
|
|
5079
5088
|
} catch {
|
|
5080
5089
|
n = null;
|
|
5081
5090
|
}
|
|
5082
|
-
n || (s.cancel(`${
|
|
5083
|
-
let r = n.installedPacks ?? [], i = n.onboarding?.envSections ?? [], a = await
|
|
5084
|
-
a.length === 0 && s.log.warn(
|
|
5085
|
-
for (let n of a) await
|
|
5091
|
+
n || (s.cancel(`${R.path("stack.json")} not found. Run ${R.command("npx @hype-stack/cli init")} first.`), process.exit(1));
|
|
5092
|
+
let r = n.installedPacks ?? [], i = n.onboarding?.envSections ?? [], a = await po(t);
|
|
5093
|
+
a.length === 0 && s.log.warn(R.muted("No .env.example files found; skipping env setup."));
|
|
5094
|
+
for (let n of a) await ys({
|
|
5086
5095
|
examplePath: n,
|
|
5087
5096
|
projectRoot: t,
|
|
5088
5097
|
skipPrompts: e.yes ?? !1,
|
|
5089
5098
|
installedEnvSections: i
|
|
5090
5099
|
});
|
|
5091
5100
|
let o = Dr(r);
|
|
5092
|
-
o.length > 0 && s.note(o.map((e) => ` ${
|
|
5101
|
+
o.length > 0 && s.note(o.map((e) => ` ${R.muted("·")} ${e}`).join("\n"), "Tips"), e.skipMigrations || await Ss(t, e.yes ?? !1), s.outro(R.brand(`All set. Run ${R.command("pnpm dev")} to start your app.`));
|
|
5093
5102
|
}
|
|
5094
|
-
async function
|
|
5095
|
-
let { examplePath: t, projectRoot: n, skipPrompts: r, installedEnvSections: i } = e, a = T.relative(n, t) || t, o = await
|
|
5103
|
+
async function ys(e) {
|
|
5104
|
+
let { examplePath: t, projectRoot: n, skipPrompts: r, installedEnvSections: i } = e, a = T.relative(n, t) || t, o = await gs(t), c = await hs(o), l = ds(await y.readFile(t, "utf-8")), u = R.path(a);
|
|
5096
5105
|
s.log.step(`Env: ${u}`);
|
|
5097
5106
|
for (let e of l) {
|
|
5098
|
-
let t = e.vars.filter((e) =>
|
|
5107
|
+
let t = e.vars.filter((e) => ps(e.value));
|
|
5099
5108
|
if (t.length === 0) continue;
|
|
5100
5109
|
if (!Cr(e.section, i)) {
|
|
5101
|
-
let t = e.section ?
|
|
5102
|
-
s.log.info(`${t} ${
|
|
5110
|
+
let t = e.section ? R.bold(e.section) : R.bold("Variables");
|
|
5111
|
+
s.log.info(`${t} ${R.muted("skipped (pack not installed)")}`);
|
|
5103
5112
|
continue;
|
|
5104
5113
|
}
|
|
5105
|
-
let n = xr(e.section), a = e.section ?
|
|
5106
|
-
s.log.step(a), n.link && (s.log.info(`${
|
|
5114
|
+
let n = xr(e.section), a = e.section ? R.bold(e.section) : R.bold("Variables");
|
|
5115
|
+
s.log.step(a), n.link && (s.log.info(`${R.muted("Get your values:")} ${_e(n.link)}`), n.serviceChecklist && n.serviceChecklist.length > 0 && s.note(n.serviceChecklist.map((e) => ` ${R.muted("·")} ${e}`).join("\n"), "Setup")), s.log.info(R.muted(n.hint));
|
|
5107
5116
|
for (let e of t) {
|
|
5108
5117
|
if (r) {
|
|
5109
|
-
s.log.info(`${
|
|
5118
|
+
s.log.info(`${R.label(e.key)} ${R.muted("skipped (non-interactive)")}`);
|
|
5110
5119
|
continue;
|
|
5111
5120
|
}
|
|
5112
|
-
let t =
|
|
5113
|
-
message: `${
|
|
5121
|
+
let t = bs(c, e.key), i = await s.text({
|
|
5122
|
+
message: `${R.label(e.key)}`,
|
|
5114
5123
|
placeholder: t || n.hint
|
|
5115
5124
|
});
|
|
5116
5125
|
s.isCancel(i) && Z();
|
|
5117
5126
|
let a = (i ?? "").trim();
|
|
5118
5127
|
if (a === "") {
|
|
5119
|
-
s.log.warn(
|
|
5128
|
+
s.log.warn(R.muted(`${e.key} left blank.`));
|
|
5120
5129
|
continue;
|
|
5121
5130
|
}
|
|
5122
|
-
await
|
|
5131
|
+
await _s(o, e.key, a), s.log.success(`${e.key} saved`);
|
|
5123
5132
|
}
|
|
5124
5133
|
}
|
|
5125
5134
|
}
|
|
5126
|
-
function
|
|
5135
|
+
function bs(e, t) {
|
|
5127
5136
|
for (let n of e.split(/\r?\n/)) {
|
|
5128
|
-
let e = n.match(RegExp(`^${
|
|
5137
|
+
let e = n.match(RegExp(`^${xs(t)}\\s*=\\s*(.*)$`));
|
|
5129
5138
|
if (e) return e[1].trim();
|
|
5130
5139
|
}
|
|
5131
5140
|
return "";
|
|
5132
5141
|
}
|
|
5133
|
-
function
|
|
5142
|
+
function xs(e) {
|
|
5134
5143
|
return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
5135
5144
|
}
|
|
5136
|
-
async function
|
|
5137
|
-
if (!await
|
|
5138
|
-
s.log.info(
|
|
5145
|
+
async function Ss(e, t) {
|
|
5146
|
+
if (!await ua() && !await fa(e, t, !1)) {
|
|
5147
|
+
s.log.info(R.muted(`Start services later with ${R.command("docker compose up -d")} (in apps/backend), then ${R.command("pnpm --filter @internal/backend migration:latest")}.`));
|
|
5139
5148
|
return;
|
|
5140
5149
|
}
|
|
5141
5150
|
let n = s.spinner();
|
|
5142
|
-
if (n.start("Waiting for Postgres to be ready..."), !await
|
|
5143
|
-
n.error("Postgres health check timed out"), s.log.warn(
|
|
5151
|
+
if (n.start("Waiting for Postgres to be ready..."), !await ma(e)) {
|
|
5152
|
+
n.error("Postgres health check timed out"), s.log.warn(R.muted(`Run migrations manually once Postgres is ready: ${R.command("pnpm --filter @internal/backend migration:latest")}`));
|
|
5144
5153
|
return;
|
|
5145
5154
|
}
|
|
5146
|
-
if (n.stop(
|
|
5147
|
-
s.log.info(
|
|
5155
|
+
if (n.stop(R.success("Postgres is ready")), await ga(e)) {
|
|
5156
|
+
s.log.info(R.muted("Migrations already applied, skipping."));
|
|
5148
5157
|
return;
|
|
5149
5158
|
}
|
|
5150
5159
|
let r = t ? !0 : await s.confirm({
|
|
5151
|
-
message: `Run database migrations with ${
|
|
5160
|
+
message: `Run database migrations with ${R.command("prisma migrate deploy")}?`,
|
|
5152
5161
|
initialValue: !0
|
|
5153
5162
|
});
|
|
5154
5163
|
if (s.isCancel(r) && Z(), !r) {
|
|
5155
|
-
s.log.info(
|
|
5164
|
+
s.log.info(R.muted("Skipping database migrations."));
|
|
5156
5165
|
return;
|
|
5157
5166
|
}
|
|
5158
|
-
await
|
|
5167
|
+
await _a(e);
|
|
5159
5168
|
}
|
|
5160
5169
|
//#endregion
|
|
5161
5170
|
//#region src/core/templates.ts
|
|
5162
|
-
var
|
|
5171
|
+
var Cs = G.createRequest()({
|
|
5163
5172
|
endpoint: "/templates/list",
|
|
5164
5173
|
method: "GET"
|
|
5165
5174
|
});
|
|
5166
|
-
async function
|
|
5167
|
-
let { data: e, error: t } = await
|
|
5175
|
+
async function ws() {
|
|
5176
|
+
let { data: e, error: t } = await Cs.send();
|
|
5168
5177
|
if (t || !e) throw Error(`Failed to fetch template list: ${String(t)}`);
|
|
5169
5178
|
return e.templates;
|
|
5170
5179
|
}
|
|
5171
|
-
async function
|
|
5172
|
-
let { data: t, error: n, status: r } = await
|
|
5180
|
+
async function Ts(e) {
|
|
5181
|
+
let { data: t, error: n, status: r } = await G.createRequest()({
|
|
5173
5182
|
endpoint: `/templates/${encodeURIComponent(e)}/manifest`,
|
|
5174
5183
|
method: "GET"
|
|
5175
5184
|
}).send();
|
|
@@ -5177,13 +5186,13 @@ async function ws(e) {
|
|
|
5177
5186
|
if (n || !t) throw Error(`Failed to load manifest for template "${e}": ${String(n)}`);
|
|
5178
5187
|
return t;
|
|
5179
5188
|
}
|
|
5180
|
-
async function
|
|
5181
|
-
let n =
|
|
5189
|
+
async function Es(e, t = {}) {
|
|
5190
|
+
let n = G.createRequest()({
|
|
5182
5191
|
endpoint: `/templates/${encodeURIComponent(e)}/download`,
|
|
5183
5192
|
method: "POST"
|
|
5184
5193
|
}), r = {
|
|
5185
|
-
"X-Device-Id":
|
|
5186
|
-
"X-Client-Info":
|
|
5194
|
+
"X-Device-Id": Zn(),
|
|
5195
|
+
"X-Client-Info": Qn()
|
|
5187
5196
|
};
|
|
5188
5197
|
t.token && (r.Authorization = `Bearer ${t.token}`);
|
|
5189
5198
|
let { data: i, error: a, success: o } = await n.setPayload({ key: t.licenseKey ?? void 0 }).setHeaders(r).send();
|
|
@@ -5205,9 +5214,9 @@ async function Ts(e, t = {}) {
|
|
|
5205
5214
|
}
|
|
5206
5215
|
//#endregion
|
|
5207
5216
|
//#region src/commands/template.ts
|
|
5208
|
-
async function
|
|
5217
|
+
async function Ds(t = {}) {
|
|
5209
5218
|
let n = t.cwd ?? process.cwd();
|
|
5210
|
-
|
|
5219
|
+
za();
|
|
5211
5220
|
let r = s.spinner();
|
|
5212
5221
|
r.start("Loading packs...");
|
|
5213
5222
|
let o;
|
|
@@ -5219,15 +5228,15 @@ async function Es(t = {}) {
|
|
|
5219
5228
|
r.stop("Packs loaded"), r.start("Loading templates...");
|
|
5220
5229
|
let c;
|
|
5221
5230
|
try {
|
|
5222
|
-
c = await
|
|
5231
|
+
c = await ws();
|
|
5223
5232
|
} catch (e) {
|
|
5224
5233
|
r.stop("Failed to load templates"), s.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
|
|
5225
5234
|
}
|
|
5226
5235
|
let l = t.templateId;
|
|
5227
5236
|
if (!l) {
|
|
5228
5237
|
t.yes && (r.stop("Template id required"), s.cancel("Pass a template id with `npx @hype-stack/cli template <id>` (required in --yes mode)."), process.exit(1)), c.length === 0 && (r.stop("No templates available"), s.cancel("No templates are available yet. Check back later."), process.exit(1)), r.stop("Templates loaded");
|
|
5229
|
-
let e =
|
|
5230
|
-
s.note(c.map((t) => ` ${
|
|
5238
|
+
let e = le();
|
|
5239
|
+
s.note(c.map((t) => ` ${z.arrow} ${R.highlight(t.name)} ${_e(`${e}/templates/${t.id}`)}`).join("\n"), "Browse templates");
|
|
5231
5240
|
let n = await s.select({
|
|
5232
5241
|
message: "Choose a template",
|
|
5233
5242
|
options: c.map((e) => ({
|
|
@@ -5242,151 +5251,151 @@ async function Es(t = {}) {
|
|
|
5242
5251
|
u || (r.stop("Template not found"), s.cancel(`Template "${l}" not found. Available: ${c.map((e) => e.id).join(", ") || "(none)"}`), process.exit(1)), r.stop(`Template: ${u.name}`);
|
|
5243
5252
|
let d;
|
|
5244
5253
|
try {
|
|
5245
|
-
d = await
|
|
5254
|
+
d = await Ts(u.id);
|
|
5246
5255
|
} catch (e) {
|
|
5247
5256
|
s.cancel($(e)), process.exit(1);
|
|
5248
5257
|
}
|
|
5249
|
-
let f = await
|
|
5258
|
+
let f = await ns(n, {}, {
|
|
5250
5259
|
defaultTheme: d.theme,
|
|
5251
5260
|
defaultMode: d.defaultMode
|
|
5252
5261
|
}), p = f?.projectRoot ?? null, m = f?.scaffolded ?? !1, h;
|
|
5253
5262
|
try {
|
|
5254
5263
|
h = await Or(p ?? n);
|
|
5255
5264
|
} catch (e) {
|
|
5256
|
-
s.cancel(`Could not parse ${
|
|
5265
|
+
s.cancel(`Could not parse ${R.path("stack.json")}: ${$(e)} Run 'npx @hype-stack/cli init' to regenerate it.`), process.exit(1);
|
|
5257
5266
|
}
|
|
5258
|
-
h || (s.cancel(p ? `Could not read ${
|
|
5267
|
+
h || (s.cancel(p ? `Could not read ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' to regenerate it, then run 'npx @hype-stack/cli template' again.` : `No ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' first, then 'npx @hype-stack/cli template'.`), process.exit(1)), h.paths || (s.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'npx @hype-stack/cli init' again to regenerate it.`), process.exit(1));
|
|
5259
5268
|
let g = p ?? n;
|
|
5260
|
-
s.intro(
|
|
5261
|
-
let _ = h.installedPacks ?? [], v = new Set(_), b = new Map(o.map((e) => [e.name, e])), x = t.licenseKey ?? h.licenseKey ?? null, S = (await
|
|
5269
|
+
s.intro(R.brandBold("Install a template"));
|
|
5270
|
+
let _ = h.installedPacks ?? [], v = new Set(_), b = new Map(o.map((e) => [e.name, e])), x = t.licenseKey ?? h.licenseKey ?? null, S = (await qn(F()))?.token ?? null, C = await Os(u, t.variants, t.yes ?? !1), w = Ea(u.slots, C), E = Da(u.slots, u.packs, w), D = await ks({
|
|
5262
5271
|
packs: o,
|
|
5263
5272
|
templatePacks: E,
|
|
5264
5273
|
installedSet: v,
|
|
5265
5274
|
options: t
|
|
5266
5275
|
}), O = [...E, ...D.filter((e) => !E.includes(e))], k = O.filter((e) => !b.has(e));
|
|
5267
5276
|
k.length > 0 && (s.cancel(`Unknown pack${k.length === 1 ? "" : "s"}: ${k.join(", ")}`), process.exit(1));
|
|
5268
|
-
let ee =
|
|
5277
|
+
let ee = Aa(o, w), A = Sa(ee), te;
|
|
5269
5278
|
try {
|
|
5270
|
-
|
|
5279
|
+
te = wa(O, A, _);
|
|
5271
5280
|
} catch (e) {
|
|
5272
5281
|
s.cancel($(e)), process.exit(1);
|
|
5273
5282
|
}
|
|
5274
|
-
if (
|
|
5275
|
-
s.outro(
|
|
5283
|
+
if (te.order.length === 0) {
|
|
5284
|
+
s.outro(R.muted("Every pack in this template is already installed."));
|
|
5276
5285
|
return;
|
|
5277
5286
|
}
|
|
5278
|
-
let
|
|
5287
|
+
let ne = await Io(ee, v, {
|
|
5279
5288
|
token: S,
|
|
5280
5289
|
key: x
|
|
5281
|
-
}),
|
|
5290
|
+
}), re = (e) => {
|
|
5282
5291
|
let t = b.get(e);
|
|
5283
|
-
return !t || t.tier === "free" ? "free" :
|
|
5284
|
-
},
|
|
5285
|
-
order:
|
|
5292
|
+
return !t || t.tier === "free" ? "free" : ne[e]?.owned ? "owned" : "locked";
|
|
5293
|
+
}, j = (e) => !v.has(e) && re(e) === "locked", M = Ta({
|
|
5294
|
+
order: te.order,
|
|
5286
5295
|
graph: A,
|
|
5287
|
-
isLocked:
|
|
5296
|
+
isLocked: j,
|
|
5288
5297
|
installed: _
|
|
5289
5298
|
});
|
|
5290
|
-
if (
|
|
5291
|
-
let e = await
|
|
5292
|
-
e && (S = e,
|
|
5299
|
+
if (M.blocked.length > 0 && !S && !x) {
|
|
5300
|
+
let e = await rr();
|
|
5301
|
+
e && (S = e, ne = await Io(ee, v, {
|
|
5293
5302
|
token: S,
|
|
5294
5303
|
key: x
|
|
5295
|
-
}),
|
|
5296
|
-
order:
|
|
5304
|
+
}), M = Ta({
|
|
5305
|
+
order: te.order,
|
|
5297
5306
|
graph: A,
|
|
5298
|
-
isLocked:
|
|
5307
|
+
isLocked: j,
|
|
5299
5308
|
installed: _
|
|
5300
5309
|
}));
|
|
5301
5310
|
}
|
|
5302
|
-
if (
|
|
5303
|
-
s.outro(
|
|
5311
|
+
if (M.blocked.length > 0 && await Ro(M.blocked, j, b), M.installable.length === 0) {
|
|
5312
|
+
s.outro(R.muted("Nothing left to install once locked packs are removed."));
|
|
5304
5313
|
return;
|
|
5305
5314
|
}
|
|
5306
|
-
if (
|
|
5307
|
-
let e = await s.confirm({ message: `Install template ${
|
|
5315
|
+
if (zo(M.installable, b), !t.yes) {
|
|
5316
|
+
let e = await s.confirm({ message: `Install template ${R.brandBold(u.name)} (${M.installable.length} pack${M.installable.length === 1 ? "" : "s"})?` });
|
|
5308
5317
|
(s.isCancel(e) || !e) && (s.cancel("Installation cancelled."), process.exit(0));
|
|
5309
5318
|
}
|
|
5310
5319
|
r.start("Downloading packs...");
|
|
5311
|
-
let
|
|
5320
|
+
let N;
|
|
5312
5321
|
try {
|
|
5313
|
-
|
|
5322
|
+
N = await Bo(M.installable, {
|
|
5314
5323
|
token: S,
|
|
5315
5324
|
key: x
|
|
5316
5325
|
});
|
|
5317
5326
|
} catch (e) {
|
|
5318
5327
|
r.stop("Download failed"), s.cancel($(e)), process.exit(1);
|
|
5319
5328
|
}
|
|
5320
|
-
r.stop(`Downloaded ${
|
|
5321
|
-
let
|
|
5322
|
-
prepared:
|
|
5329
|
+
r.stop(`Downloaded ${N.length} pack${N.length === 1 ? "" : "s"}`);
|
|
5330
|
+
let ie = await Wo({
|
|
5331
|
+
prepared: N,
|
|
5323
5332
|
config: h,
|
|
5324
5333
|
cwd: g,
|
|
5325
5334
|
force: t.force ?? !1,
|
|
5326
5335
|
yes: t.yes ?? !1
|
|
5327
|
-
}),
|
|
5336
|
+
}), P = null;
|
|
5328
5337
|
try {
|
|
5329
5338
|
r.start("Installing pack files...");
|
|
5330
|
-
let n = await
|
|
5331
|
-
packs:
|
|
5339
|
+
let n = await Qi({
|
|
5340
|
+
packs: N,
|
|
5332
5341
|
config: h,
|
|
5333
5342
|
projectRoot: g,
|
|
5334
5343
|
force: t.force ?? !1,
|
|
5335
|
-
overwrite:
|
|
5344
|
+
overwrite: ie
|
|
5336
5345
|
});
|
|
5337
5346
|
if (n.aborted) {
|
|
5338
5347
|
r.stop("Installation aborted");
|
|
5339
5348
|
for (let e of n.errors) s.log.error(e);
|
|
5340
5349
|
s.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
|
|
5341
5350
|
}
|
|
5342
|
-
r.stop("Files installed"), n.installed.length > 0 && s.log.success(`${
|
|
5351
|
+
r.stop("Files installed"), n.installed.length > 0 && s.log.success(`${R.highlight(String(n.installed.length))} files installed`), n.skipped.length > 0 && (s.log.warning(`${n.skipped.length} files skipped (use --force to overwrite)`), Uo(n.skipped));
|
|
5343
5352
|
for (let e of n.errors) s.log.error(e);
|
|
5344
5353
|
r.start("Applying template overrides...");
|
|
5345
|
-
let o = await
|
|
5354
|
+
let o = await Es(u.id, {
|
|
5346
5355
|
token: S,
|
|
5347
5356
|
licenseKey: x
|
|
5348
5357
|
});
|
|
5349
|
-
o.status === "denied" && (r.stop("Template download denied"), s.cancel(`Access to template "${u.id}" was denied (${o.reason}). Try 'npx @hype-stack/cli login' or check your license.`), process.exit(1)),
|
|
5350
|
-
let c = await
|
|
5358
|
+
o.status === "denied" && (r.stop("Template download denied"), s.cancel(`Access to template "${u.id}" was denied (${o.reason}). Try 'npx @hype-stack/cli login' or check your license.`), process.exit(1)), P = o.templateDir;
|
|
5359
|
+
let c = await ea({
|
|
5351
5360
|
manifest: d,
|
|
5352
5361
|
config: h,
|
|
5353
5362
|
projectRoot: g,
|
|
5354
|
-
templateDir:
|
|
5363
|
+
templateDir: P
|
|
5355
5364
|
});
|
|
5356
5365
|
r.stop("Template overrides applied"), c.installed.length > 0 && s.log.success(`${c.installed.length} template file${c.installed.length === 1 ? "" : "s"} applied`);
|
|
5357
5366
|
for (let e of c.errors) s.log.error(e);
|
|
5358
5367
|
if (!m) {
|
|
5359
5368
|
let t = T.resolve(g, h.paths?.frontend.root ?? "apps/frontend"), n = d.theme ?? "zinc-mono";
|
|
5360
|
-
a(n) && (await
|
|
5369
|
+
a(n) && (await to(t, i(n)) ? s.log.success(`Applied the ${i(n).label} theme`) : s.log.warning(R.muted(`Could not find ${R.path("assets/styles.css")} to apply the theme`)));
|
|
5361
5370
|
let r = d.defaultMode === "dark" || d.defaultMode === "light" ? d.defaultMode : e;
|
|
5362
|
-
await
|
|
5371
|
+
await Ya(t, r) ? s.log.success(`Default color mode set to ${r}`) : s.log.warning(R.muted(`Could not find ${R.path("src/hooks/use-theme.ts")} to set the default color mode`));
|
|
5363
5372
|
}
|
|
5364
|
-
await
|
|
5365
|
-
prepared:
|
|
5373
|
+
await As({
|
|
5374
|
+
prepared: N,
|
|
5366
5375
|
templateNpm: d.dependencies_npm,
|
|
5367
5376
|
paths: h.paths,
|
|
5368
5377
|
cwd: g,
|
|
5369
5378
|
spinner: r
|
|
5370
5379
|
});
|
|
5371
5380
|
let l;
|
|
5372
|
-
m && (l = await
|
|
5381
|
+
m && (l = await xa(g, t.yes ?? !1)), await pr({
|
|
5373
5382
|
projectRoot: g,
|
|
5374
5383
|
paths: h.paths,
|
|
5375
5384
|
skipPrompts: t.yes ?? !1,
|
|
5376
5385
|
dbReady: l,
|
|
5377
5386
|
freshScaffold: m
|
|
5378
|
-
}),
|
|
5387
|
+
}), Ho(), s.outro(R.brand(`Installed template ${u.name}.`));
|
|
5379
5388
|
} finally {
|
|
5380
|
-
await Promise.all(
|
|
5389
|
+
await Promise.all(N.map((e) => y.rm(e.packDir, {
|
|
5381
5390
|
recursive: !0,
|
|
5382
5391
|
force: !0
|
|
5383
|
-
}))),
|
|
5392
|
+
}))), P && await y.rm(P, {
|
|
5384
5393
|
recursive: !0,
|
|
5385
5394
|
force: !0
|
|
5386
5395
|
});
|
|
5387
5396
|
}
|
|
5388
5397
|
}
|
|
5389
|
-
async function
|
|
5398
|
+
async function Os(e, t, n) {
|
|
5390
5399
|
let r = {};
|
|
5391
5400
|
for (let i of e.slots) {
|
|
5392
5401
|
if (t?.[i.family]) {
|
|
@@ -5410,7 +5419,7 @@ async function Ds(e, t, n) {
|
|
|
5410
5419
|
}
|
|
5411
5420
|
return r;
|
|
5412
5421
|
}
|
|
5413
|
-
async function
|
|
5422
|
+
async function ks(e) {
|
|
5414
5423
|
let { packs: t, templatePacks: n, installedSet: r, options: i } = e, a = new Set(n);
|
|
5415
5424
|
if (i.packs && i.packs.length > 0) {
|
|
5416
5425
|
let e = i.packs.filter((e) => !t.some((t) => t.name === e));
|
|
@@ -5419,9 +5428,9 @@ async function Os(e) {
|
|
|
5419
5428
|
if (i.yes) return [];
|
|
5420
5429
|
let o = t.filter((e) => e.category === "feature" && !a.has(e.name) && !r.has(e.name));
|
|
5421
5430
|
if (o.length === 0) return [];
|
|
5422
|
-
let c =
|
|
5423
|
-
s.note(o.map((e) => ` ${
|
|
5424
|
-
let l = await
|
|
5431
|
+
let c = le();
|
|
5432
|
+
s.note(o.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${_e(`${c}/packs/${e.name}`)}`).join("\n"), "Browse packs");
|
|
5433
|
+
let l = await Ha({
|
|
5425
5434
|
message: "Add extra packs on top of the template (optional)",
|
|
5426
5435
|
options: o.map((e) => ({
|
|
5427
5436
|
value: e.name,
|
|
@@ -5432,25 +5441,25 @@ async function Os(e) {
|
|
|
5432
5441
|
});
|
|
5433
5442
|
return m(l) && (s.cancel("Cancelled."), process.exit(0)), l;
|
|
5434
5443
|
}
|
|
5435
|
-
async function
|
|
5436
|
-
let { prepared: t, templateNpm: n, paths: r, cwd: i, spinner: a } = e, o =
|
|
5444
|
+
async function As(e) {
|
|
5445
|
+
let { prepared: t, templateNpm: n, paths: r, cwd: i, spinner: a } = e, o = Po(t.map((e) => e.manifest.dependencies_npm)), c = No(n ? Po([o, n]) : o, r);
|
|
5437
5446
|
if (c.errors.length > 0) {
|
|
5438
5447
|
for (let e of c.errors) s.log.error(e);
|
|
5439
5448
|
return;
|
|
5440
5449
|
}
|
|
5441
5450
|
if (c.operations.length === 0) return;
|
|
5442
5451
|
a.start("Installing npm dependencies...");
|
|
5443
|
-
let l = await
|
|
5452
|
+
let l = await Fo(c.operations, i);
|
|
5444
5453
|
if (a.stop(l.ok ? "npm dependencies installed" : "npm dependency installation failed"), !l.ok) for (let e of l.errors) s.log.error(e);
|
|
5445
5454
|
}
|
|
5446
5455
|
//#endregion
|
|
5447
5456
|
//#region src/cli.ts
|
|
5448
|
-
function
|
|
5457
|
+
function js(e) {
|
|
5449
5458
|
if (!e) return;
|
|
5450
5459
|
let t = e.split(",").map((e) => e.trim()).filter((e) => e.length > 0);
|
|
5451
5460
|
return t.length > 0 ? t : void 0;
|
|
5452
5461
|
}
|
|
5453
|
-
function
|
|
5462
|
+
function Ms(e) {
|
|
5454
5463
|
if (!e) return;
|
|
5455
5464
|
let t = {};
|
|
5456
5465
|
for (let n of e.split(",")) {
|
|
@@ -5459,10 +5468,10 @@ function js(e) {
|
|
|
5459
5468
|
}
|
|
5460
5469
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
5461
5470
|
}
|
|
5462
|
-
function
|
|
5471
|
+
function Ns() {
|
|
5463
5472
|
let e = new o();
|
|
5464
5473
|
return e.name("hype-stack").description("Build with Hype Stack -- templates, components, modules, and more").version(A, "-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) => {
|
|
5465
|
-
await
|
|
5474
|
+
await es({
|
|
5466
5475
|
name: e.name,
|
|
5467
5476
|
directory: e.directory,
|
|
5468
5477
|
install: e.install,
|
|
@@ -5472,38 +5481,38 @@ function Ms() {
|
|
|
5472
5481
|
setup: e.setup
|
|
5473
5482
|
});
|
|
5474
5483
|
}), e.command("init").description("Initialize stack.json in the current project").action(async () => {
|
|
5475
|
-
await
|
|
5484
|
+
await ts({});
|
|
5476
5485
|
}), e.command("onboard").description("Set up env vars, run migrations, and get the start command").option("-y, --yes", "Skip prompts, accept defaults").option("--skip-migrations", "Skip Docker services and database migrations").option("--cwd <path>", "Working directory").action(async (e) => {
|
|
5477
|
-
await
|
|
5486
|
+
await vs({
|
|
5478
5487
|
cwd: e.cwd,
|
|
5479
5488
|
yes: e.yes,
|
|
5480
5489
|
skipMigrations: e.skipMigrations
|
|
5481
5490
|
});
|
|
5482
5491
|
}), 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) => {
|
|
5483
|
-
await
|
|
5484
|
-
packs:
|
|
5492
|
+
await rs({
|
|
5493
|
+
packs: js(e.packs),
|
|
5485
5494
|
force: e.force,
|
|
5486
5495
|
yes: e.yes,
|
|
5487
5496
|
licenseKey: e.key ?? e.licenseKey,
|
|
5488
5497
|
cwd: e.cwd
|
|
5489
5498
|
});
|
|
5490
5499
|
}), 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) => {
|
|
5491
|
-
await
|
|
5500
|
+
await Ds({
|
|
5492
5501
|
templateId: e,
|
|
5493
|
-
variants:
|
|
5494
|
-
packs:
|
|
5502
|
+
variants: Ms(t.variants),
|
|
5503
|
+
packs: js(t.packs),
|
|
5495
5504
|
force: t.force,
|
|
5496
5505
|
yes: t.yes,
|
|
5497
5506
|
licenseKey: t.key ?? t.licenseKey,
|
|
5498
5507
|
cwd: t.cwd
|
|
5499
5508
|
});
|
|
5500
5509
|
}), e.command("login").description("Log in via your browser to install packs your organization owns").action(async () => {
|
|
5501
|
-
await cs();
|
|
5502
|
-
}), e.command("logout").description("Log out and remove the saved CLI token").action(async () => {
|
|
5503
5510
|
await ls();
|
|
5511
|
+
}), e.command("logout").description("Log out and remove the saved CLI token").action(async () => {
|
|
5512
|
+
await us();
|
|
5504
5513
|
}), e.command("auth").description("Alias for `login`").action(async () => {
|
|
5505
|
-
await
|
|
5514
|
+
await ls();
|
|
5506
5515
|
}), e;
|
|
5507
5516
|
}
|
|
5508
5517
|
//#endregion
|
|
5509
|
-
export {
|
|
5518
|
+
export { ns as a, rs as i, us as n, ts as o, ls as r, es as s, Ns as t };
|