@hype-stack/cli 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cli-CB6k2Kq3.js → cli-tM2A_gBw.js} +882 -871
- package/dist/commands/compose.d.ts.map +1 -1
- package/dist/commands/create.d.ts +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/init.d.ts +10 -7
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/template.d.ts.map +1 -1
- package/dist/config/bin.js +1 -1
- package/dist/constants/constants.d.ts +3 -2
- package/dist/constants/constants.d.ts.map +1 -1
- package/dist/core/license.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/types/types.d.ts +8 -0
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -17,7 +17,7 @@ var m = Object.create, h = Object.defineProperty, g = Object.getOwnPropertyDescr
|
|
|
17
17
|
}, S = (e, t, n) => (n = e == null ? {} : m(v(e)), x(t || !e || !e.__esModule ? h(n, "default", {
|
|
18
18
|
value: e,
|
|
19
19
|
enumerable: !0
|
|
20
|
-
}) : n, e)), C = "0.0.1", w = "gh:BetterTyped/hype-stack", T = "stack.json", E = "/schema/stack.json", D = "https://hype-stack.dev", O = "HYPE_STACK_API_URL", ee = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/, k = [
|
|
20
|
+
}) : n, e)), C = "0.0.1", w = "gh:BetterTyped/hype-stack", T = "stack.json", E = "/schema/stack.json", D = "https://api.hype-stack.dev", O = "HYPE_STACK_API_URL", ee = "https://hype-stack.dev", te = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/, k = [
|
|
21
21
|
{
|
|
22
22
|
value: "cursor",
|
|
23
23
|
label: "Cursor",
|
|
@@ -35,16 +35,16 @@ var m = Object.create, h = Object.defineProperty, g = Object.getOwnPropertyDescr
|
|
|
35
35
|
value: "copilot",
|
|
36
36
|
label: "GitHub Copilot"
|
|
37
37
|
}
|
|
38
|
-
], A = k.map((e) => e.value), j = ".cursor/rules",
|
|
38
|
+
], A = k.map((e) => e.value), j = ".cursor/rules", ne = ".cursor", M = ".agents";
|
|
39
39
|
function N() {
|
|
40
40
|
let e = process.env.HYPE_STACK_API_URL;
|
|
41
|
-
return e ? (
|
|
41
|
+
return e ? (re(e), e.replace(/\/+$/, "")) : D;
|
|
42
42
|
}
|
|
43
43
|
function P() {
|
|
44
44
|
let e = process.env.HYPE_STACK_WEB_URL;
|
|
45
|
-
return e ? (
|
|
45
|
+
return e ? (re(e), e.replace(/\/+$/, "")) : ee;
|
|
46
46
|
}
|
|
47
|
-
function
|
|
47
|
+
function re(e) {
|
|
48
48
|
try {
|
|
49
49
|
let t = new URL(e);
|
|
50
50
|
if (!t.protocol.startsWith("http")) throw Error(`${O} must use http or https protocol, got "${t.protocol}"`);
|
|
@@ -52,18 +52,18 @@ function ne(e) {
|
|
|
52
52
|
throw t instanceof TypeError ? Error(`${O} is not a valid URL: "${e}"`, { cause: t }) : t;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
function
|
|
55
|
+
function ie() {
|
|
56
56
|
return `${N()}${E}`;
|
|
57
57
|
}
|
|
58
58
|
//#endregion
|
|
59
59
|
//#region src/ui/theme.ts
|
|
60
|
-
var F = (e) => `\x1b[38;5;208m${e}\x1b[39m`,
|
|
60
|
+
var F = (e) => `\x1b[38;5;208m${e}\x1b[39m`, ae = (e) => `\x1b[38;5;214m${e}\x1b[39m`, I = (e) => `\x1b[38;5;220m${e}\x1b[39m`, oe = (e) => `\x1b[38;5;33m${e}\x1b[39m`, L = (e) => `\x1b[38;5;39m${e}\x1b[39m`, se = (e) => `\x1b[38;5;81m${e}\x1b[39m`, ce = {
|
|
61
61
|
orange: F,
|
|
62
|
-
orangeBright:
|
|
62
|
+
orangeBright: ae,
|
|
63
63
|
amber: I,
|
|
64
|
-
deepBlue:
|
|
64
|
+
deepBlue: oe,
|
|
65
65
|
skyBlue: L,
|
|
66
|
-
lightBlue:
|
|
66
|
+
lightBlue: se
|
|
67
67
|
}, R = {
|
|
68
68
|
brand: (e) => F(e),
|
|
69
69
|
brandBold: (e) => c.bold(F(e)),
|
|
@@ -79,7 +79,7 @@ var F = (e) => `\x1b[38;5;208m${e}\x1b[39m`, ie = (e) => `\x1b[38;5;214m${e}\x1b
|
|
|
79
79
|
command: (e) => c.bold(I(e)),
|
|
80
80
|
label: (e) => c.dim(c.bold(e))
|
|
81
81
|
};
|
|
82
|
-
function
|
|
82
|
+
function le(e, t = e) {
|
|
83
83
|
return `\x1b]8;;${e}\x07${L(t)}\x1b]8;;\x07`;
|
|
84
84
|
}
|
|
85
85
|
var z = {
|
|
@@ -90,56 +90,56 @@ var z = {
|
|
|
90
90
|
pipe: R.muted("│"),
|
|
91
91
|
dot: R.muted("•"),
|
|
92
92
|
spark: I("✦"),
|
|
93
|
-
sparkSmall:
|
|
93
|
+
sparkSmall: ae("✧"),
|
|
94
94
|
bolt: I("⚡")
|
|
95
|
-
},
|
|
95
|
+
}, ue = [
|
|
96
96
|
I,
|
|
97
97
|
I,
|
|
98
|
-
ie,
|
|
99
|
-
F,
|
|
100
98
|
ae,
|
|
101
|
-
|
|
99
|
+
F,
|
|
102
100
|
oe,
|
|
103
|
-
|
|
101
|
+
L,
|
|
102
|
+
se,
|
|
103
|
+
se
|
|
104
104
|
];
|
|
105
|
-
function
|
|
105
|
+
function de(e) {
|
|
106
106
|
let t = [...e], n = t.length;
|
|
107
107
|
return t.map((e, t) => {
|
|
108
108
|
if (e === " " || e === "\n") return e;
|
|
109
109
|
let r = t / Math.max(n - 1, 1);
|
|
110
|
-
return
|
|
110
|
+
return ue[Math.min(Math.floor(r * ue.length), ue.length - 1)](e);
|
|
111
111
|
}).join("");
|
|
112
112
|
}
|
|
113
|
-
function
|
|
113
|
+
function fe(e, t, n) {
|
|
114
114
|
return Math.round(e + (t - e) * n);
|
|
115
115
|
}
|
|
116
|
-
function
|
|
116
|
+
function pe(e, t) {
|
|
117
117
|
let { start: n, end: r, angle: i = 1 } = t, a = Math.max(...e.map((e) => e.length), 1), o = Math.max(e.length - 1, 1);
|
|
118
118
|
return e.map((e, t) => [...e].map((e, s) => {
|
|
119
119
|
if (e === " ") return e;
|
|
120
120
|
let c = s / Math.max(a - 1, 1), l = t / o, u = Math.min((c + l * i) / (1 + i), 1);
|
|
121
|
-
return `\x1b[38;2;${
|
|
121
|
+
return `\x1b[38;2;${fe(n[0], r[0], u)};${fe(n[1], r[1], u)};${fe(n[2], r[2], u)}m${e}\x1b[39m`;
|
|
122
122
|
}).join(""));
|
|
123
123
|
}
|
|
124
124
|
//#endregion
|
|
125
125
|
//#region src/core/license.ts
|
|
126
|
-
function
|
|
126
|
+
function me(e) {
|
|
127
127
|
return `${P()}/packs/${e}`;
|
|
128
128
|
}
|
|
129
129
|
//#endregion
|
|
130
130
|
//#region ../../node_modules/.pnpm/@hyper-fetch+core@8.1.1/node_modules/@hyper-fetch/core/dist/index.mjs
|
|
131
|
-
var
|
|
131
|
+
var he = /* @__PURE__ */ S((/* @__PURE__ */ b(((e, t) => {
|
|
132
132
|
t.exports = {};
|
|
133
|
-
})))(), 1),
|
|
134
|
-
if (t && typeof t == "object" || typeof t == "function") for (var i =
|
|
133
|
+
})))(), 1), ge = Object.create, _e = Object.defineProperty, ve = Object.getOwnPropertyDescriptor, ye = Object.getOwnPropertyNames, be = Object.getPrototypeOf, xe = Object.prototype.hasOwnProperty, Se = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), Ce = (e, t, n, r) => {
|
|
134
|
+
if (t && typeof t == "object" || typeof t == "function") for (var i = ye(t), a = 0, o = i.length, s; a < o; a++) s = i[a], !xe.call(e, s) && s !== n && _e(e, s, {
|
|
135
135
|
get: ((e) => t[e]).bind(null, s),
|
|
136
|
-
enumerable: !(r =
|
|
136
|
+
enumerable: !(r = ve(t, s)) || r.enumerable
|
|
137
137
|
});
|
|
138
138
|
return e;
|
|
139
|
-
},
|
|
139
|
+
}, we = (e, t, n) => (n = e == null ? {} : ge(be(e)), Ce(t || !e || !e.__esModule ? _e(n, "default", {
|
|
140
140
|
value: e,
|
|
141
141
|
enumerable: !0
|
|
142
|
-
}) : n, e)),
|
|
142
|
+
}) : n, e)), Te = (e) => `${e.queryKey}_${Date.now().toString(36)}_${Math.random().toString(36).substring(2)}`, Ee = /* @__PURE__ */ we((/* @__PURE__ */ Se(((e, t) => {
|
|
143
143
|
var n = typeof Reflect == "object" ? Reflect : null, r = n && typeof n.apply == "function" ? n.apply : function(e, t, n) {
|
|
144
144
|
return Function.prototype.apply.call(e, t, n);
|
|
145
145
|
}, i = n && typeof n.ownKeys == "function" ? n.ownKeys : Object.getOwnPropertySymbols ? function(e) {
|
|
@@ -314,7 +314,7 @@ var me = /* @__PURE__ */ S((/* @__PURE__ */ b(((e, t) => {
|
|
|
314
314
|
});
|
|
315
315
|
else throw TypeError("The \"emitter\" argument must be of type EventEmitter. Received type " + typeof e);
|
|
316
316
|
}
|
|
317
|
-
})))()),
|
|
317
|
+
})))()), De = (e) => `listen_${String(e)}`, Oe = class extends Ee.default {
|
|
318
318
|
emitCallbacks = [];
|
|
319
319
|
constructor(e) {
|
|
320
320
|
super(e);
|
|
@@ -326,23 +326,23 @@ var me = /* @__PURE__ */ S((/* @__PURE__ */ b(((e, t) => {
|
|
|
326
326
|
onEmit = (e) => (this.emitCallbacks?.push(e), () => {
|
|
327
327
|
this.emitCallbacks = this.emitCallbacks?.filter((t) => t !== e);
|
|
328
328
|
});
|
|
329
|
-
onListener = (e, t) => (super.on(
|
|
330
|
-
super.off(
|
|
329
|
+
onListener = (e, t) => (super.on(De(e), t), () => {
|
|
330
|
+
super.off(De(e), t);
|
|
331
331
|
});
|
|
332
|
-
on = (e, t) => (super.on(e, t), super.emit(
|
|
333
|
-
off = (e, t) => (super.off(e, t), super.emit(
|
|
332
|
+
on = (e, t) => (super.on(e, t), super.emit(De(e), super.listeners(e).length), this);
|
|
333
|
+
off = (e, t) => (super.off(e, t), super.emit(De(e), super.listeners(e).length), this);
|
|
334
334
|
addListener = this.on;
|
|
335
335
|
removeListener = this.off;
|
|
336
|
-
},
|
|
337
|
-
emitter = new
|
|
338
|
-
events =
|
|
336
|
+
}, ke = class {
|
|
337
|
+
emitter = new Oe();
|
|
338
|
+
events = Pe(this.emitter);
|
|
339
339
|
isBrowser;
|
|
340
340
|
isOnline;
|
|
341
341
|
isFocused;
|
|
342
342
|
constructor(e) {
|
|
343
343
|
this.options = e, this.emitter?.setMaxListeners(1e3);
|
|
344
344
|
let { initiallyFocused: t = V.initiallyFocused, initiallyOnline: n = V.initiallyOnline } = this.options || V;
|
|
345
|
-
this.setInitialFocus(t), this.setInitialOnline(n), this.isBrowser =
|
|
345
|
+
this.setInitialFocus(t), this.setInitialOnline(n), this.isBrowser = je();
|
|
346
346
|
}
|
|
347
347
|
initialize = () => {
|
|
348
348
|
let { focusEvent: e = V.focusEvent, onlineEvent: t = V.onlineEvent } = this.options || V;
|
|
@@ -360,21 +360,21 @@ var me = /* @__PURE__ */ S((/* @__PURE__ */ b(((e, t) => {
|
|
|
360
360
|
setOnline = (e) => {
|
|
361
361
|
this.isOnline = e, e ? this.events.emitOnline() : this.events.emitOffline();
|
|
362
362
|
};
|
|
363
|
-
},
|
|
363
|
+
}, Ae = () => {
|
|
364
364
|
try {
|
|
365
365
|
return !!(window && window.addEventListener);
|
|
366
366
|
} catch {
|
|
367
367
|
/* istanbul ignore next */
|
|
368
368
|
return !1;
|
|
369
369
|
}
|
|
370
|
-
},
|
|
370
|
+
}, je = () => {
|
|
371
371
|
try {
|
|
372
|
-
return !!(
|
|
372
|
+
return !!(Ae() && window.document && window.document.addEventListener);
|
|
373
373
|
} catch {
|
|
374
374
|
/* istanbul ignore next */
|
|
375
375
|
return !1;
|
|
376
376
|
}
|
|
377
|
-
},
|
|
377
|
+
}, Me = (e, t, n) => Ae() ? (window.addEventListener(e, t, n), () => window.removeEventListener(e, t, n)) : () => null, Ne = (e, t, n) => je() ? (window.document.addEventListener(e, t, n), () => window.document.removeEventListener(e, t, n)) : () => null, Pe = (e) => ({
|
|
378
378
|
emitFocus: () => {
|
|
379
379
|
e.emit(B.FOCUS);
|
|
380
380
|
},
|
|
@@ -397,14 +397,14 @@ var me = /* @__PURE__ */ S((/* @__PURE__ */ b(((e, t) => {
|
|
|
397
397
|
initiallyFocused: !0,
|
|
398
398
|
initiallyOnline: !0,
|
|
399
399
|
focusEvent: (e) => {
|
|
400
|
-
|
|
400
|
+
Ne("visibilitychange", () => e(!0)), Me("focus", () => e(!0)), Me("blur", () => e(!1));
|
|
401
401
|
},
|
|
402
402
|
onlineEvent: (e) => {
|
|
403
|
-
|
|
403
|
+
Me("online", () => e(!0)), Me("offline", () => e(!1));
|
|
404
404
|
}
|
|
405
|
-
},
|
|
406
|
-
emitter = new
|
|
407
|
-
events =
|
|
405
|
+
}, Fe = class {
|
|
406
|
+
emitter = new Oe();
|
|
407
|
+
events = dt(this.emitter);
|
|
408
408
|
constructor() {
|
|
409
409
|
this.emitter?.setMaxListeners(1e3);
|
|
410
410
|
}
|
|
@@ -441,71 +441,71 @@ var me = /* @__PURE__ */ S((/* @__PURE__ */ b(((e, t) => {
|
|
|
441
441
|
});
|
|
442
442
|
});
|
|
443
443
|
};
|
|
444
|
-
},
|
|
444
|
+
}, Ie = () => "loading-event-any", Le = (e) => `${e}-loading-event`, Re = (e) => `${e}-loading-cache-event`, ze = (e) => `${e}-loading-event-by-id`, Be = () => "remove-event-any", Ve = (e) => `${e}-remove-event`, He = (e) => `${e}-remove-event-by-id`, Ue = () => "request-abort-any", We = (e) => `${e}-request-abort`, Ge = (e) => `${e}-request-abort-by-id`, Ke = () => "response-any", qe = (e) => `${e}-response`, Je = (e) => `${e}-response-by-id`, Ye = () => "request-start-any", Xe = (e) => `${e}-request-start`, Ze = (e) => `${e}-request-start-by-id`, Qe = () => "response-start-any", $e = (e) => `${e}-response-start`, et = (e) => `${e}-response-start-by-id`, tt = () => "request-progress-any", nt = (e) => `${e}-request-progress`, rt = (e) => `${e}-request-progress-by-id`, it = () => "response-progress-any", at = (e) => `${e}-response-progress`, ot = (e) => `${e}-response-progress-by-id`, st = () => "request-deduplicated-any", ct = (e) => `${e}-query-request-deduplicated`, lt = (e) => `${e}-cache-request-deduplicated`, ut = (e) => `${e}-request-deduplicated-by-id`, dt = (e) => ({
|
|
445
445
|
emitDeduplicated: (t, n = !1) => {
|
|
446
|
-
e.emit(
|
|
446
|
+
e.emit(st(), t, n), e.emit(ut(t.requestId), t, n), e.emit(lt(t.request.cacheKey), t, n), e.emit(ct(t.request.queryKey), t, n);
|
|
447
447
|
},
|
|
448
448
|
emitLoading: (t, n = !1) => {
|
|
449
|
-
e.emit(
|
|
449
|
+
e.emit(Ie(), t, n), e.emit(ze(t.requestId), t, n), e.emit(Re(t.request.cacheKey), t, n), e.emit(Le(t.request.queryKey), t, n);
|
|
450
450
|
},
|
|
451
451
|
emitRequestStart: (t, n = !1) => {
|
|
452
|
-
e.emit(
|
|
452
|
+
e.emit(Ye(), t, n), e.emit(Ze(t.requestId), t, n), e.emit(Xe(t.request.queryKey), t, n);
|
|
453
453
|
},
|
|
454
454
|
emitResponseStart: (t, n = !1) => {
|
|
455
|
-
e.emit(
|
|
455
|
+
e.emit(Qe(), t, n), e.emit(et(t.requestId), t, n), e.emit($e(t.request.queryKey), t, n);
|
|
456
456
|
},
|
|
457
457
|
emitUploadProgress: (t, n = !1) => {
|
|
458
|
-
e.emit(
|
|
458
|
+
e.emit(tt(), t, n), e.emit(rt(t.requestId), t, n), e.emit(nt(t.request.queryKey), t, n);
|
|
459
459
|
},
|
|
460
460
|
emitDownloadProgress: (t, n = !1) => {
|
|
461
|
-
e.emit(
|
|
461
|
+
e.emit(it(), t, n), e.emit(ot(t.requestId), t, n), e.emit(at(t.request.queryKey), t, n);
|
|
462
462
|
},
|
|
463
463
|
emitResponse: (t, n = !1) => {
|
|
464
|
-
e.emit(
|
|
464
|
+
e.emit(Ke(), t, n), e.emit(Je(t.requestId), t, n), e.emit(qe(t.request.cacheKey), t, n);
|
|
465
465
|
},
|
|
466
466
|
emitAbort: (t, n = !1) => {
|
|
467
|
-
e.emit(
|
|
467
|
+
e.emit(Ue(), t, n), e.emit(Ge(t.requestId), t, n), e.emit(We(t.request.abortKey), t, n);
|
|
468
468
|
},
|
|
469
469
|
emitRemove: (t, n = !1) => {
|
|
470
|
-
e.emit(
|
|
470
|
+
e.emit(Be(), t, n), e.emit(He(t.requestId), t, n), e.emit(Ve(t.request.queryKey), t, n);
|
|
471
471
|
},
|
|
472
|
-
onDeduplicated: (t) => (e.on(
|
|
473
|
-
onDeduplicatedByQueue: (t, n) => (e.on(
|
|
474
|
-
onDeduplicatedByCache: (t, n) => (e.on(
|
|
475
|
-
onDeduplicatedById: (t, n) => (e.on(
|
|
476
|
-
onLoading: (t) => (e.on(
|
|
477
|
-
onLoadingByQueue: (t, n) => (e.on(
|
|
478
|
-
onLoadingByCache: (t, n) => (e.on(
|
|
479
|
-
onLoadingById: (t, n) => (e.on(
|
|
480
|
-
onRequestStart: (t) => (e.on(
|
|
481
|
-
onRequestStartByQueue: (t, n) => (e.on(
|
|
482
|
-
onRequestStartById: (t, n) => (e.on(
|
|
483
|
-
onResponseStart: (t) => (e.on(
|
|
484
|
-
onResponseStartByQueue: (t, n) => (e.on(
|
|
485
|
-
onResponseStartById: (t, n) => (e.on(
|
|
486
|
-
onUploadProgress: (t) => (e.on(
|
|
487
|
-
onUploadProgressByQueue: (t, n) => (e.on(
|
|
488
|
-
onUploadProgressById: (t, n) => (e.on(
|
|
489
|
-
onDownloadProgress: (t) => (e.on(
|
|
490
|
-
onDownloadProgressByQueue: (t, n) => (e.on(
|
|
491
|
-
onDownloadProgressById: (t, n) => (e.on(
|
|
492
|
-
onResponse: (t) => (e.on(
|
|
493
|
-
onResponseByCache: (t, n) => (e.on(
|
|
494
|
-
onResponseById: (t, n) => (e.on(
|
|
495
|
-
onAbort: (t) => (e.on(
|
|
496
|
-
onAbortByKey: (t, n) => (e.on(
|
|
497
|
-
onAbortById: (t, n) => (e.on(
|
|
498
|
-
onRemove: (t) => (e.on(
|
|
499
|
-
onRemoveByQueue: (t, n) => (e.on(
|
|
500
|
-
onRemoveById: (t, n) => (e.on(
|
|
501
|
-
}),
|
|
472
|
+
onDeduplicated: (t) => (e.on(st(), t), () => e.removeListener(st(), t)),
|
|
473
|
+
onDeduplicatedByQueue: (t, n) => (e.on(ct(t), n), () => e.removeListener(ct(t), n)),
|
|
474
|
+
onDeduplicatedByCache: (t, n) => (e.on(lt(t), n), () => e.removeListener(lt(t), n)),
|
|
475
|
+
onDeduplicatedById: (t, n) => (e.on(ut(t), n), () => e.removeListener(ut(t), n)),
|
|
476
|
+
onLoading: (t) => (e.on(Ie(), t), () => e.removeListener(Ie(), t)),
|
|
477
|
+
onLoadingByQueue: (t, n) => (e.on(Le(t), n), () => e.removeListener(Le(t), n)),
|
|
478
|
+
onLoadingByCache: (t, n) => (e.on(Re(t), n), () => e.removeListener(Re(t), n)),
|
|
479
|
+
onLoadingById: (t, n) => (e.on(ze(t), n), () => e.removeListener(ze(t), n)),
|
|
480
|
+
onRequestStart: (t) => (e.on(Ye(), t), () => e.removeListener(Ye(), t)),
|
|
481
|
+
onRequestStartByQueue: (t, n) => (e.on(Xe(t), n), () => e.removeListener(Xe(t), n)),
|
|
482
|
+
onRequestStartById: (t, n) => (e.on(Ze(t), n), () => e.removeListener(Ze(t), n)),
|
|
483
|
+
onResponseStart: (t) => (e.on(Qe(), t), () => e.removeListener(Qe(), t)),
|
|
484
|
+
onResponseStartByQueue: (t, n) => (e.on($e(t), n), () => e.removeListener($e(t), n)),
|
|
485
|
+
onResponseStartById: (t, n) => (e.on(et(t), n), () => e.removeListener(et(t), n)),
|
|
486
|
+
onUploadProgress: (t) => (e.on(tt(), t), () => e.removeListener(tt(), t)),
|
|
487
|
+
onUploadProgressByQueue: (t, n) => (e.on(nt(t), n), () => e.removeListener(nt(t), n)),
|
|
488
|
+
onUploadProgressById: (t, n) => (e.on(rt(t), n), () => e.removeListener(rt(t), n)),
|
|
489
|
+
onDownloadProgress: (t) => (e.on(it(), t), () => e.removeListener(it(), t)),
|
|
490
|
+
onDownloadProgressByQueue: (t, n) => (e.on(at(t), n), () => e.removeListener(at(t), n)),
|
|
491
|
+
onDownloadProgressById: (t, n) => (e.on(ot(t), n), () => e.removeListener(ot(t), n)),
|
|
492
|
+
onResponse: (t) => (e.on(Ke(), t), () => e.removeListener(Ke(), t)),
|
|
493
|
+
onResponseByCache: (t, n) => (e.on(qe(t), n), () => e.removeListener(qe(t), n)),
|
|
494
|
+
onResponseById: (t, n) => (e.on(Je(t), n), () => e.removeListener(Je(t), n)),
|
|
495
|
+
onAbort: (t) => (e.on(Ue(), t), () => e.removeListener(Ue(), t)),
|
|
496
|
+
onAbortByKey: (t, n) => (e.on(We(t), n), () => e.removeListener(We(t), n)),
|
|
497
|
+
onAbortById: (t, n) => (e.on(Ge(t), n), () => e.removeListener(Ge(t), n)),
|
|
498
|
+
onRemove: (t) => (e.on(Be(), t), () => e.removeListener(Be(), t)),
|
|
499
|
+
onRemoveByQueue: (t, n) => (e.on(Ve(t), n), () => e.removeListener(Ve(t), n)),
|
|
500
|
+
onRemoveById: (t, n) => (e.on(He(t), n), () => e.removeListener(He(t), n))
|
|
501
|
+
}), ft = class {
|
|
502
502
|
logger;
|
|
503
503
|
level;
|
|
504
504
|
modules;
|
|
505
|
-
emitter = new
|
|
505
|
+
emitter = new Ee.default();
|
|
506
506
|
client;
|
|
507
507
|
constructor(e) {
|
|
508
|
-
this.options = e, this.emitter?.setMaxListeners(1e3), this.logger = this.options?.logger ||
|
|
508
|
+
this.options = e, this.emitter?.setMaxListeners(1e3), this.logger = this.options?.logger || ht, this.level = this.options?.level || "warning", this.modules = this.options?.modules;
|
|
509
509
|
}
|
|
510
510
|
setSeverity = (e) => {
|
|
511
511
|
this.level = e;
|
|
@@ -536,35 +536,35 @@ var me = /* @__PURE__ */ S((/* @__PURE__ */ b(((e, t) => {
|
|
|
536
536
|
})
|
|
537
537
|
});
|
|
538
538
|
log = (e) => {
|
|
539
|
-
this.client.debug && (
|
|
539
|
+
this.client.debug && (gt.indexOf(this.level) <= gt.indexOf(e.level) || this.modules && !this.modules.includes(e.module) || this.logger(e));
|
|
540
540
|
};
|
|
541
|
-
},
|
|
542
|
-
let t =
|
|
541
|
+
}, pt = () => `${(/* @__PURE__ */ new Date()).toLocaleTimeString()}`, mt = (e) => e.type === "request" || e.type === "response" ? `${e.extra.request.endpoint}` : `[${e.module}]`, ht = (e) => {
|
|
542
|
+
let t = vt[e.level], n = yt[e.level], r = `%c[${pt()}]%c${e.title}%c${mt(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;`;
|
|
543
543
|
e.extra && Object.keys(e.extra)?.length ? (console.groupCollapsed(r, i, a, o), console.log(e.extra), console.groupEnd()) : console.log(r, t);
|
|
544
|
-
},
|
|
544
|
+
}, gt = [
|
|
545
545
|
"error",
|
|
546
546
|
"warning",
|
|
547
547
|
"info",
|
|
548
548
|
"debug"
|
|
549
|
-
],
|
|
550
|
-
error: `${
|
|
551
|
-
warning: `${
|
|
552
|
-
info: `${
|
|
553
|
-
debug: `${
|
|
554
|
-
},
|
|
549
|
+
], _t = "padding:2px 5px;", vt = {
|
|
550
|
+
error: `${_t};background:#db252520;`,
|
|
551
|
+
warning: `${_t};background:#e1941e20;`,
|
|
552
|
+
info: `${_t};background:#1e74e120;`,
|
|
553
|
+
debug: `${_t};background:#00000020;`
|
|
554
|
+
}, yt = {
|
|
555
555
|
error: "color:#ff3737;",
|
|
556
556
|
warning: "color:#ffc107;",
|
|
557
557
|
info: "color:#34a8ff;",
|
|
558
558
|
debug: "color:#cccccc;"
|
|
559
|
-
},
|
|
559
|
+
}, bt = class extends Error {
|
|
560
560
|
constructor() {
|
|
561
561
|
super("Request timeout"), this.name = "TimeoutError";
|
|
562
562
|
}
|
|
563
|
-
},
|
|
563
|
+
}, xt = class extends Error {
|
|
564
564
|
constructor() {
|
|
565
565
|
super("Request aborted"), this.name = "AbortError";
|
|
566
566
|
}
|
|
567
|
-
},
|
|
567
|
+
}, St = class extends Error {
|
|
568
568
|
constructor() {
|
|
569
569
|
super("Request deleted"), this.name = "DeletedError";
|
|
570
570
|
}
|
|
@@ -573,21 +573,21 @@ var me = /* @__PURE__ */ S((/* @__PURE__ */ b(((e, t) => {
|
|
|
573
573
|
constructor(e) {
|
|
574
574
|
super("Request processing error"), this.description = e, this.name = "RequestProcessingError";
|
|
575
575
|
}
|
|
576
|
-
},
|
|
576
|
+
}, Ct = class extends Error {
|
|
577
577
|
description;
|
|
578
578
|
constructor(e) {
|
|
579
579
|
super("Unexpected error"), this.description = e, this.name = "UnexpectedError";
|
|
580
580
|
}
|
|
581
|
-
}, U = (e) => e === "timeout" ? new
|
|
581
|
+
}, U = (e) => e === "timeout" ? new bt() : e === "abort" ? new xt() : e === "deleted" ? new St() : e === "processing" ? new H() : new Ct(), wt = (e) => {
|
|
582
582
|
try {
|
|
583
583
|
return JSON.stringify(e);
|
|
584
584
|
} catch {
|
|
585
585
|
return "";
|
|
586
586
|
}
|
|
587
|
-
},
|
|
588
|
-
let t =
|
|
587
|
+
}, Tt = (e) => {
|
|
588
|
+
let t = Ae() && e.payload instanceof FormData, n = typeof e.payload == "object" && e.payload !== null, r = {};
|
|
589
589
|
return !t && n && (r["Content-Type"] = "application/json"), Object.assign(r, e.headers), r;
|
|
590
|
-
},
|
|
590
|
+
}, Et = (e) => Ae() && e instanceof FormData ? e : wt(e), Dt = [
|
|
591
591
|
"onBeforeSent",
|
|
592
592
|
"onRequestStart",
|
|
593
593
|
"onResponseStart",
|
|
@@ -596,7 +596,7 @@ var me = /* @__PURE__ */ S((/* @__PURE__ */ b(((e, t) => {
|
|
|
596
596
|
"onResponse",
|
|
597
597
|
"onRemove"
|
|
598
598
|
];
|
|
599
|
-
function
|
|
599
|
+
function Ot(e) {
|
|
600
600
|
let t = {
|
|
601
601
|
onBeforeSent: [],
|
|
602
602
|
onRequestStart: [],
|
|
@@ -606,7 +606,7 @@ function Dt(e) {
|
|
|
606
606
|
onResponse: [],
|
|
607
607
|
onRemove: []
|
|
608
608
|
};
|
|
609
|
-
e &&
|
|
609
|
+
e && Dt.forEach((n) => {
|
|
610
610
|
t[n] = [...e[n]];
|
|
611
611
|
});
|
|
612
612
|
let n = (e) => (n) => (t[e].push(n), () => {
|
|
@@ -628,15 +628,15 @@ function Dt(e) {
|
|
|
628
628
|
},
|
|
629
629
|
__snapshot() {
|
|
630
630
|
let e = {};
|
|
631
|
-
return
|
|
631
|
+
return Dt.forEach((n) => {
|
|
632
632
|
e[n] = [...t[n]];
|
|
633
633
|
}), e;
|
|
634
634
|
}
|
|
635
635
|
};
|
|
636
636
|
}
|
|
637
|
-
var
|
|
637
|
+
var kt = /* @__PURE__ */ function(e) {
|
|
638
638
|
return e.GET = "GET", e.POST = "POST", e.PUT = "PUT", e.PATCH = "PATCH", e.DELETE = "DELETE", e;
|
|
639
|
-
}({}), W = (e, t) => t ? `${t}__${e}` : e,
|
|
639
|
+
}({}), W = (e, t) => t ? `${t}__${e}` : e, At = (e) => {
|
|
640
640
|
try {
|
|
641
641
|
if (typeof e == "string") return e;
|
|
642
642
|
if (e == null) return "";
|
|
@@ -646,13 +646,13 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
646
646
|
} catch {
|
|
647
647
|
return "";
|
|
648
648
|
}
|
|
649
|
-
},
|
|
649
|
+
}, jt = ({ loaded: e, total: t }) => !e || !t ? 0 : Number((e * 100 / t).toFixed(0)), Mt = (e, t, { total: n, loaded: r }) => {
|
|
650
650
|
let i = r / (t - +e || 1), a = Math.max(n, r), o = a - r, s = i ? o / i : null;
|
|
651
651
|
return {
|
|
652
652
|
timeLeft: a === r ? 0 : s,
|
|
653
653
|
sizeLeft: o
|
|
654
654
|
};
|
|
655
|
-
},
|
|
655
|
+
}, Nt = (e, t, n) => {
|
|
656
656
|
let { total: r, loaded: i } = n;
|
|
657
657
|
if (Number.isNaN(r) || Number.isNaN(i)) return {
|
|
658
658
|
progress: 0,
|
|
@@ -662,23 +662,23 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
662
662
|
loaded: 0,
|
|
663
663
|
startTimestamp: +e
|
|
664
664
|
};
|
|
665
|
-
let { timeLeft: a, sizeLeft: o } =
|
|
665
|
+
let { timeLeft: a, sizeLeft: o } = Mt(e, t, n);
|
|
666
666
|
return {
|
|
667
|
-
progress:
|
|
667
|
+
progress: jt(n),
|
|
668
668
|
timeLeft: a,
|
|
669
669
|
sizeLeft: o,
|
|
670
670
|
total: r,
|
|
671
671
|
loaded: i,
|
|
672
672
|
startTimestamp: +e
|
|
673
673
|
};
|
|
674
|
-
},
|
|
675
|
-
let { fetchDispatcher: n, submitDispatcher: r } = e.client, i = e.method ===
|
|
674
|
+
}, Pt = (e) => `${e.method}_${e.requestOptions.endpoint}_${e.cancelable}`, Ft = (e, t) => `${At(e.method)}_${t ? e.requestOptions.endpoint : At(e.endpoint)}_${t ? "" : At(e.queryParams)}`, It = (e, t = "auto") => {
|
|
675
|
+
let { fetchDispatcher: n, submitDispatcher: r } = e.client, i = e.method === kt.GET, a = t === "auto" && i || t === "fetch";
|
|
676
676
|
return [a ? n : r, a];
|
|
677
|
-
},
|
|
677
|
+
}, Lt = async (e, t) => {
|
|
678
678
|
let n = e.unstable_responseMapper?.(t);
|
|
679
679
|
return n instanceof Promise ? await n : n || t;
|
|
680
|
-
},
|
|
681
|
-
let { client: n } = e, { requestManager: r } = n, [i] =
|
|
680
|
+
}, Rt = async (e, t) => {
|
|
681
|
+
let { client: n } = e, { requestManager: r } = n, [i] = It(e, t?.dispatcherType), a;
|
|
682
682
|
if (e.optimistic) try {
|
|
683
683
|
a = await e.optimistic({
|
|
684
684
|
request: e,
|
|
@@ -765,9 +765,9 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
765
765
|
u(), d(), f(), p(), m(), h();
|
|
766
766
|
}
|
|
767
767
|
});
|
|
768
|
-
},
|
|
768
|
+
}, zt = /* @__PURE__ */ function(e) {
|
|
769
769
|
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;
|
|
770
|
-
}({}),
|
|
770
|
+
}({}), Bt = class e {
|
|
771
771
|
endpoint;
|
|
772
772
|
headers;
|
|
773
773
|
auth;
|
|
@@ -791,7 +791,7 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
791
791
|
deduplicate;
|
|
792
792
|
deduplicateTime;
|
|
793
793
|
scope;
|
|
794
|
-
$hooks =
|
|
794
|
+
$hooks = Ot();
|
|
795
795
|
isMockerEnabled = !1;
|
|
796
796
|
unstable_mock;
|
|
797
797
|
unstable_payloadMapper;
|
|
@@ -808,7 +808,7 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
808
808
|
updatedQueryKey;
|
|
809
809
|
constructor(e, t, n) {
|
|
810
810
|
this.client = e, this.requestOptions = t, this.initialRequestConfiguration = n;
|
|
811
|
-
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 =
|
|
811
|
+
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 = zt.MIN * 5, cache: f = !0, staleTime: p = zt.MIN * 5, queued: m = !1, offline: h = !0, abortKey: g, cacheKey: _, queryKey: v, deduplicate: y = !1, deduplicateTime: b = null } = {
|
|
812
812
|
...this.client.adapter.unstable_getRequestDefaults?.(t),
|
|
813
813
|
...t
|
|
814
814
|
};
|
|
@@ -918,7 +918,7 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
918
918
|
payload: t?.payload || this.payload,
|
|
919
919
|
params: t?.params || this.params
|
|
920
920
|
}, r = new e(this.client, this.requestOptions, n);
|
|
921
|
-
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 =
|
|
921
|
+
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 = Ot(this.$hooks.__snapshot()), r;
|
|
922
922
|
}
|
|
923
923
|
abort = () => {
|
|
924
924
|
let { requestManager: e } = this.client;
|
|
@@ -981,17 +981,17 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
981
981
|
...e,
|
|
982
982
|
cachePolicy: void 0
|
|
983
983
|
};
|
|
984
|
-
if (n === "network-only") return
|
|
984
|
+
if (n === "network-only") return Rt(i, a);
|
|
985
985
|
let o = i.read();
|
|
986
|
-
if (n === "cache-first") return o ?
|
|
986
|
+
if (n === "cache-first") return o ? Lt(i, o) : Rt(i, a);
|
|
987
987
|
if (o) {
|
|
988
|
-
let e = await
|
|
989
|
-
return
|
|
988
|
+
let e = await Lt(i, o);
|
|
989
|
+
return Rt(i, a), e;
|
|
990
990
|
}
|
|
991
|
-
return
|
|
991
|
+
return Rt(i, a);
|
|
992
992
|
};
|
|
993
993
|
static fromJSON = (t, n) => new e(t, n.requestOptions, n);
|
|
994
|
-
},
|
|
994
|
+
}, Vt = async ({ request: e, requestId: t, resolve: n, onStartTime: r, internalErrorMapping: i }) => {
|
|
995
995
|
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;
|
|
996
996
|
c.debug({
|
|
997
997
|
title: "Running middleware callbacks",
|
|
@@ -1010,14 +1010,14 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
1010
1010
|
let n = Number(t.total || 0), r = Number(t.loaded || 0);
|
|
1011
1011
|
return Math.max(n, r, e);
|
|
1012
1012
|
}, T = (e, n, r) => {
|
|
1013
|
-
let i =
|
|
1013
|
+
let i = Nt(new Date(e), new Date(n), r);
|
|
1014
1014
|
m !== 100 && (m = i.total, a.events.emitUploadProgress({
|
|
1015
1015
|
...i,
|
|
1016
1016
|
requestId: t,
|
|
1017
1017
|
request: d
|
|
1018
1018
|
}));
|
|
1019
1019
|
}, E = (e, n, r) => {
|
|
1020
|
-
let i =
|
|
1020
|
+
let i = Nt(new Date(e), new Date(n), r);
|
|
1021
1021
|
h !== 100 && (h = i.total, a.events.emitDownloadProgress({
|
|
1022
1022
|
...i,
|
|
1023
1023
|
requestId: t,
|
|
@@ -1056,14 +1056,14 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
1056
1056
|
total: f,
|
|
1057
1057
|
loaded: e.loaded || 0
|
|
1058
1058
|
}), t;
|
|
1059
|
-
},
|
|
1059
|
+
}, te = () => {
|
|
1060
1060
|
l ||= +/* @__PURE__ */ new Date();
|
|
1061
1061
|
let e = +/* @__PURE__ */ new Date();
|
|
1062
1062
|
return T(l, e, {
|
|
1063
1063
|
total: f,
|
|
1064
1064
|
loaded: f
|
|
1065
1065
|
}), e;
|
|
1066
|
-
},
|
|
1066
|
+
}, k = (e) => {
|
|
1067
1067
|
u = +/* @__PURE__ */ new Date(), p = w(p, e);
|
|
1068
1068
|
let n = {
|
|
1069
1069
|
total: p,
|
|
@@ -1073,21 +1073,21 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
1073
1073
|
requestId: t,
|
|
1074
1074
|
request: d
|
|
1075
1075
|
}), u;
|
|
1076
|
-
},
|
|
1076
|
+
}, A = (e) => {
|
|
1077
1077
|
u ||= +/* @__PURE__ */ new Date();
|
|
1078
1078
|
let t = +/* @__PURE__ */ new Date();
|
|
1079
1079
|
return p = w(p, e), E(u, t, {
|
|
1080
1080
|
total: e.total || p,
|
|
1081
1081
|
loaded: e.loaded || 0
|
|
1082
1082
|
}), t;
|
|
1083
|
-
},
|
|
1083
|
+
}, j = () => {
|
|
1084
1084
|
u ||= +/* @__PURE__ */ new Date();
|
|
1085
1085
|
let e = +/* @__PURE__ */ new Date();
|
|
1086
1086
|
return E(u, e, {
|
|
1087
1087
|
total: p,
|
|
1088
1088
|
loaded: p
|
|
1089
1089
|
}), e;
|
|
1090
|
-
},
|
|
1090
|
+
}, ne = async ({ data: e, error: r, status: i, extra: a }) => {
|
|
1091
1091
|
let o = {
|
|
1092
1092
|
data: e,
|
|
1093
1093
|
error: r ?? null,
|
|
@@ -1112,31 +1112,31 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
1112
1112
|
response: o
|
|
1113
1113
|
}
|
|
1114
1114
|
}), o;
|
|
1115
|
-
},
|
|
1115
|
+
}, M = Ht({
|
|
1116
1116
|
request: d,
|
|
1117
1117
|
requestId: t,
|
|
1118
1118
|
startTime: x,
|
|
1119
1119
|
logger: c,
|
|
1120
1120
|
resolve: n
|
|
1121
|
-
}),
|
|
1121
|
+
}), N = ({ status: e, extra: n }) => (c.error({
|
|
1122
1122
|
title: "Abort error",
|
|
1123
1123
|
type: "request",
|
|
1124
1124
|
extra: {
|
|
1125
1125
|
request: d,
|
|
1126
1126
|
requestId: t
|
|
1127
1127
|
}
|
|
1128
|
-
}),
|
|
1128
|
+
}), M({
|
|
1129
1129
|
error: i(U("abort")),
|
|
1130
1130
|
status: e,
|
|
1131
1131
|
extra: n
|
|
1132
|
-
})),
|
|
1132
|
+
})), P = ({ status: e, extra: n }) => (c.error({
|
|
1133
1133
|
title: "Timeout error",
|
|
1134
1134
|
type: "request",
|
|
1135
1135
|
extra: {
|
|
1136
1136
|
request: d,
|
|
1137
1137
|
requestId: t
|
|
1138
1138
|
}
|
|
1139
|
-
}),
|
|
1139
|
+
}), M({
|
|
1140
1140
|
error: U("timeout"),
|
|
1141
1141
|
status: e,
|
|
1142
1142
|
extra: n
|
|
@@ -1147,15 +1147,15 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
1147
1147
|
request: d,
|
|
1148
1148
|
requestId: t
|
|
1149
1149
|
}
|
|
1150
|
-
}),
|
|
1150
|
+
}), M({
|
|
1151
1151
|
error: U(),
|
|
1152
1152
|
status: e,
|
|
1153
1153
|
extra: n
|
|
1154
|
-
})),
|
|
1155
|
-
let i =
|
|
1154
|
+
})), ie = () => a.getAbortController(v, t), F = ({ status: e, extra: n, onAbort: r = () => {} }) => {
|
|
1155
|
+
let i = ie();
|
|
1156
1156
|
if (!i) throw new H("Controller is not found");
|
|
1157
1157
|
let o = () => {
|
|
1158
|
-
|
|
1158
|
+
N({
|
|
1159
1159
|
status: e,
|
|
1160
1160
|
extra: n
|
|
1161
1161
|
}), r(), a.events.emitAbort({
|
|
@@ -1175,36 +1175,36 @@ var Ot = /* @__PURE__ */ function(e) {
|
|
|
1175
1175
|
adapterOptions: b
|
|
1176
1176
|
}
|
|
1177
1177
|
});
|
|
1178
|
-
let
|
|
1178
|
+
let ae = e.client.adapter.unstable_queryParamsMapper(d.queryParams), I = e.client.adapter.unstable_endpointMapper(d.endpoint), oe = e.client.adapter.unstable_headerMapper(d), { url: L } = e.client;
|
|
1179
1179
|
return {
|
|
1180
1180
|
request: d,
|
|
1181
1181
|
requestId: t,
|
|
1182
|
-
url:
|
|
1183
|
-
endpoint:
|
|
1184
|
-
queryParams:
|
|
1182
|
+
url: L,
|
|
1183
|
+
endpoint: I,
|
|
1184
|
+
queryParams: ae,
|
|
1185
1185
|
payload: y,
|
|
1186
|
-
headers:
|
|
1186
|
+
headers: oe,
|
|
1187
1187
|
adapter: e.client.adapter,
|
|
1188
1188
|
adapterOptions: b,
|
|
1189
|
-
getAbortController:
|
|
1189
|
+
getAbortController: ie,
|
|
1190
1190
|
getRequestStartTimestamp: S,
|
|
1191
1191
|
getResponseStartTimestamp: C,
|
|
1192
|
-
createAbortListener:
|
|
1192
|
+
createAbortListener: F,
|
|
1193
1193
|
onBeforeRequest: D,
|
|
1194
1194
|
onRequestStart: O,
|
|
1195
1195
|
onRequestProgress: ee,
|
|
1196
|
-
onRequestEnd:
|
|
1197
|
-
onResponseStart:
|
|
1198
|
-
onResponseProgress:
|
|
1199
|
-
onResponseEnd:
|
|
1200
|
-
onSuccess:
|
|
1201
|
-
onAbortError:
|
|
1202
|
-
onTimeoutError:
|
|
1196
|
+
onRequestEnd: te,
|
|
1197
|
+
onResponseStart: k,
|
|
1198
|
+
onResponseProgress: A,
|
|
1199
|
+
onResponseEnd: j,
|
|
1200
|
+
onSuccess: ne,
|
|
1201
|
+
onAbortError: N,
|
|
1202
|
+
onTimeoutError: P,
|
|
1203
1203
|
onUnexpectedError: re,
|
|
1204
|
-
onError:
|
|
1204
|
+
onError: M
|
|
1205
1205
|
};
|
|
1206
1206
|
};
|
|
1207
|
-
function
|
|
1207
|
+
function Ht({ request: e, requestId: t, startTime: n, resolve: r, logger: i }) {
|
|
1208
1208
|
let { client: a } = e;
|
|
1209
1209
|
return async ({ error: o, status: s, extra: c }) => {
|
|
1210
1210
|
let l = {
|
|
@@ -1233,7 +1233,7 @@ function Vt({ request: e, requestId: t, startTime: n, resolve: r, logger: i }) {
|
|
|
1233
1233
|
}), l;
|
|
1234
1234
|
};
|
|
1235
1235
|
}
|
|
1236
|
-
var
|
|
1236
|
+
var Ut = 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 }) => {
|
|
1237
1237
|
if (!e.unstable_mock) throw new H("Mock should be defined when calling mocker");
|
|
1238
1238
|
let h = !1, { requestTime: g = 20, responseTime: _ = 20, totalUploaded: v = 1e3, totalDownloaded: y = 1e3, timeout: b } = e.unstable_mock.config, { data: x, error: S, status: C, success: w = !0, extra: T = e.client.adapter.defaultExtra } = await e.unstable_mock.fn({
|
|
1239
1239
|
request: e,
|
|
@@ -1278,7 +1278,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1278
1278
|
status: C,
|
|
1279
1279
|
extra: T
|
|
1280
1280
|
}), h || r();
|
|
1281
|
-
},
|
|
1281
|
+
}, Wt = (e) => e, Gt = class {
|
|
1282
1282
|
unstable_fetcher;
|
|
1283
1283
|
name;
|
|
1284
1284
|
defaultMethod;
|
|
@@ -1300,10 +1300,10 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1300
1300
|
initialize = (e) => (this.logger = e.loggerManager.initialize(e, "Adapter"), this.initialized = !0, this.client = e, this.unstable_onInitializeCallback?.({ client: e }), this);
|
|
1301
1301
|
onInitialize = (e) => (this.unstable_onInitializeCallback = e, this);
|
|
1302
1302
|
unstable_internalErrorMapping = (e) => e;
|
|
1303
|
-
unstable_headerMapper =
|
|
1304
|
-
unstable_payloadMapper =
|
|
1305
|
-
unstable_endpointMapper =
|
|
1306
|
-
unstable_queryParamsMapper =
|
|
1303
|
+
unstable_headerMapper = Tt;
|
|
1304
|
+
unstable_payloadMapper = Et;
|
|
1305
|
+
unstable_endpointMapper = Wt;
|
|
1306
|
+
unstable_queryParamsMapper = Wt;
|
|
1307
1307
|
unstable_getAdapterDefaults;
|
|
1308
1308
|
unstable_getRequestDefaults;
|
|
1309
1309
|
unstable_devtoolsEndpointGetter = (e) => e;
|
|
@@ -1334,7 +1334,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1334
1334
|
request: e,
|
|
1335
1335
|
requestId: t
|
|
1336
1336
|
});
|
|
1337
|
-
let i = await
|
|
1337
|
+
let i = await Vt({
|
|
1338
1338
|
request: e,
|
|
1339
1339
|
requestId: t,
|
|
1340
1340
|
resolve: r,
|
|
@@ -1343,9 +1343,9 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1343
1343
|
n = e;
|
|
1344
1344
|
}
|
|
1345
1345
|
});
|
|
1346
|
-
return e.unstable_mock && e.isMockerEnabled && e.client.isMockerEnabled ? await
|
|
1346
|
+
return e.unstable_mock && e.isMockerEnabled && e.client.isMockerEnabled ? await Ut(i) : this.unstable_fetcher(i);
|
|
1347
1347
|
} catch (i) {
|
|
1348
|
-
return
|
|
1348
|
+
return Ht({
|
|
1349
1349
|
request: e,
|
|
1350
1350
|
requestId: t,
|
|
1351
1351
|
startTime: n || Date.now(),
|
|
@@ -1362,21 +1362,21 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1362
1362
|
r(e);
|
|
1363
1363
|
});
|
|
1364
1364
|
}
|
|
1365
|
-
},
|
|
1365
|
+
}, Kt = (e) => {
|
|
1366
1366
|
try {
|
|
1367
1367
|
return JSON.parse(e);
|
|
1368
1368
|
} catch {
|
|
1369
1369
|
return e;
|
|
1370
1370
|
}
|
|
1371
|
-
},
|
|
1371
|
+
}, qt = (e) => e ? Kt(e) : U(), Jt = (e) => (t) => {
|
|
1372
1372
|
let { skipNull: n, skipEmptyString: r } = e;
|
|
1373
1373
|
return !(r && t === void 0 || r && t === "" || n && t === null);
|
|
1374
|
-
}, G = (e, { encode: t, strict: n }) => t && n ? encodeURIComponent(e).replace(/[!'()*]/g, (e) => `%${e.charCodeAt(0).toString(16).toUpperCase()}`) : t ? encodeURIComponent(e) : e,
|
|
1375
|
-
let r = !
|
|
1374
|
+
}, G = (e, { encode: t, strict: n }) => t && n ? encodeURIComponent(e).replace(/[!'()*]/g, (e) => `%${e.charCodeAt(0).toString(16).toUpperCase()}`) : t ? encodeURIComponent(e) : e, Yt = (e, t, n) => {
|
|
1375
|
+
let r = !Jt(n)(t);
|
|
1376
1376
|
return !e || r ? "" : `${G(e, n)}=${G(t instanceof Date ? n.dateParser?.(t) || t.toISOString() : typeof t == "object" && !Array.isArray(t) ? n.objectParser?.(t) || JSON.stringify(t) : String(t), n)}`;
|
|
1377
|
-
},
|
|
1377
|
+
}, Xt = (e, t, n) => {
|
|
1378
1378
|
let { arrayFormat: r, arraySeparator: i } = n;
|
|
1379
|
-
return t.filter(
|
|
1379
|
+
return t.filter(Jt(n)).reduce((t, a, o) => {
|
|
1380
1380
|
switch (r) {
|
|
1381
1381
|
case "index": {
|
|
1382
1382
|
let r = `${G(e, n)}[${G(String(o), n)}]=`;
|
|
@@ -1407,21 +1407,21 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1407
1407
|
}
|
|
1408
1408
|
return t;
|
|
1409
1409
|
}, []).join("&");
|
|
1410
|
-
},
|
|
1410
|
+
}, Zt = (e, t = Dn) => {
|
|
1411
1411
|
if (!e || !Object.keys(e).length) return "";
|
|
1412
1412
|
if (typeof e == "string") return e[0] === "?" ? e : `?${e}`;
|
|
1413
|
-
let n = Object.entries(e).map(([e, n]) => Array.isArray(n) ?
|
|
1413
|
+
let n = Object.entries(e).map(([e, n]) => Array.isArray(n) ? Xt(e, n, t) : Yt(e, n, t)).filter(Boolean).join("&");
|
|
1414
1414
|
return n ? `?${n}` : "";
|
|
1415
|
-
},
|
|
1415
|
+
}, Qt = zt.SEC * 5, $t = { headers: {} }, en = () => new Gt({
|
|
1416
1416
|
name: "http",
|
|
1417
|
-
defaultMethod:
|
|
1418
|
-
defaultExtra:
|
|
1417
|
+
defaultMethod: kt.GET,
|
|
1418
|
+
defaultExtra: $t,
|
|
1419
1419
|
systemErrorStatus: 0,
|
|
1420
|
-
systemErrorExtra:
|
|
1421
|
-
}).setQueryParamsMapper(
|
|
1422
|
-
let { method: g, client: _, endpoint: v, queryParams: y } = e, b = y ?
|
|
1420
|
+
systemErrorExtra: $t
|
|
1421
|
+
}).setQueryParamsMapper(Zt).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 }) => {
|
|
1422
|
+
let { method: g, client: _, endpoint: v, queryParams: y } = e, b = y ? Zt(y) : "", x = `${_.url}${v}${b}`, S = l(), { timeout: C = Qt, streaming: w = !1, ...T } = t || {}, E = !1, D, O = c({
|
|
1423
1423
|
status: 0,
|
|
1424
|
-
extra:
|
|
1424
|
+
extra: $t
|
|
1425
1425
|
});
|
|
1426
1426
|
C > 0 && S && (D = setTimeout(() => {
|
|
1427
1427
|
E = !0, O(), S.abort();
|
|
@@ -1453,7 +1453,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1453
1453
|
status: l,
|
|
1454
1454
|
extra: c
|
|
1455
1455
|
}) : i({
|
|
1456
|
-
error:
|
|
1456
|
+
error: qt(await t.text()),
|
|
1457
1457
|
status: l,
|
|
1458
1458
|
extra: c
|
|
1459
1459
|
});
|
|
@@ -1474,11 +1474,11 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1474
1474
|
e = new TextDecoder().decode(o);
|
|
1475
1475
|
} else e = await t.text();
|
|
1476
1476
|
a(), O(), t.ok ? h({
|
|
1477
|
-
data:
|
|
1477
|
+
data: Kt(e),
|
|
1478
1478
|
status: l,
|
|
1479
1479
|
extra: c
|
|
1480
1480
|
}) : i({
|
|
1481
|
-
error:
|
|
1481
|
+
error: qt(e),
|
|
1482
1482
|
status: l,
|
|
1483
1483
|
extra: c
|
|
1484
1484
|
});
|
|
@@ -1487,18 +1487,18 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1487
1487
|
if (D && clearTimeout(D), O(), S?.signal?.aborted) {
|
|
1488
1488
|
E && o({
|
|
1489
1489
|
status: 0,
|
|
1490
|
-
extra:
|
|
1490
|
+
extra: $t
|
|
1491
1491
|
});
|
|
1492
1492
|
return;
|
|
1493
1493
|
}
|
|
1494
1494
|
i({
|
|
1495
1495
|
error: e,
|
|
1496
1496
|
status: 0,
|
|
1497
|
-
extra:
|
|
1497
|
+
extra: $t
|
|
1498
1498
|
});
|
|
1499
1499
|
}
|
|
1500
|
-
}),
|
|
1501
|
-
emitter = new
|
|
1500
|
+
}), tn = () => en(), nn = class {
|
|
1501
|
+
emitter = new Oe();
|
|
1502
1502
|
events;
|
|
1503
1503
|
storage;
|
|
1504
1504
|
lazyStorage;
|
|
@@ -1509,7 +1509,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1509
1509
|
constructor(e) {
|
|
1510
1510
|
this.options = e;
|
|
1511
1511
|
let { storage: t = /* @__PURE__ */ new Map(), lazyStorage: n, version: r = "0.0.1" } = e ?? {};
|
|
1512
|
-
this.emitter?.setMaxListeners(1e3), this.events =
|
|
1512
|
+
this.emitter?.setMaxListeners(1e3), this.events = dn(this.emitter), this.storage = t, this.version = r, this.lazyStorage = n;
|
|
1513
1513
|
}
|
|
1514
1514
|
initialize = (e) => (this.client = e, this.logger = e.loggerManager.initialize(e, "Cache"), e.appManager.events.onOnline(() => {
|
|
1515
1515
|
[...this.storage.keys()].forEach(this.scheduleGarbageCollector);
|
|
@@ -1523,7 +1523,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1523
1523
|
response: t
|
|
1524
1524
|
}
|
|
1525
1525
|
});
|
|
1526
|
-
let { cacheKey: n, cache: r, staleTime: i, cacheTime: a, scope: o } = e, s = W(n, o), c = this.storage.get(s), l = typeof t == "function" ? t(c || null) : t, u =
|
|
1526
|
+
let { cacheKey: n, cache: r, staleTime: i, cacheTime: a, scope: o } = e, s = W(n, o), c = this.storage.get(s), l = typeof t == "function" ? t(c || null) : t, u = rn(c, l), d = {
|
|
1527
1527
|
...u,
|
|
1528
1528
|
scope: o,
|
|
1529
1529
|
staleTime: i,
|
|
@@ -1607,7 +1607,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1607
1607
|
cacheKey: t
|
|
1608
1608
|
}), this.events.emitInvalidation(t);
|
|
1609
1609
|
};
|
|
1610
|
-
e instanceof
|
|
1610
|
+
e instanceof Bt ? n(W(e.cacheKey, e.scope), e.cacheKey) : typeof e == "string" ? n(e) : t.length && t.forEach((t) => {
|
|
1611
1611
|
e.test(t) && n(t);
|
|
1612
1612
|
});
|
|
1613
1613
|
};
|
|
@@ -1662,49 +1662,49 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1662
1662
|
clear = async () => {
|
|
1663
1663
|
this.garbageCollectors.forEach((e) => clearTimeout(e)), this.storage.clear();
|
|
1664
1664
|
};
|
|
1665
|
-
},
|
|
1665
|
+
}, rn = (e, t) => {
|
|
1666
1666
|
let { data: n, success: r } = t, i = !r && e ? e.data : null, a = n || i;
|
|
1667
1667
|
return {
|
|
1668
1668
|
...t,
|
|
1669
1669
|
data: a
|
|
1670
1670
|
};
|
|
1671
|
-
},
|
|
1671
|
+
}, an = () => "invalidate", on = (e) => `${e}_invalidate`, sn = () => "delete", cn = (e) => `${e}_delete`, ln = (e) => `${e}_cache`, un = () => "cache", dn = (e) => ({
|
|
1672
1672
|
emitCacheData: (t, n = !1) => {
|
|
1673
|
-
e.emit(
|
|
1673
|
+
e.emit(un(), t, n), e.emit(ln(t.cacheKey), t, n);
|
|
1674
1674
|
},
|
|
1675
1675
|
emitInvalidation: (t, n = !1) => {
|
|
1676
|
-
e.emit(
|
|
1676
|
+
e.emit(an(), t, n), e.emit(on(t), n);
|
|
1677
1677
|
},
|
|
1678
1678
|
emitDelete: (t, n = !1) => {
|
|
1679
|
-
e.emit(
|
|
1679
|
+
e.emit(sn(), t, n), e.emit(cn(t), n);
|
|
1680
1680
|
},
|
|
1681
|
-
onData: (t) => (e.on(
|
|
1682
|
-
onDataByKey: (t, n) => (e.on(
|
|
1683
|
-
onInvalidate: (t) => (e.on(
|
|
1684
|
-
onInvalidateByKey: (t, n) => (e.on(
|
|
1685
|
-
onDelete: (t) => (e.on(
|
|
1686
|
-
onDeleteByKey: (t, n) => (e.on(
|
|
1681
|
+
onData: (t) => (e.on(un(), t), () => e.removeListener(un(), t)),
|
|
1682
|
+
onDataByKey: (t, n) => (e.on(ln(t), n), () => e.removeListener(ln(t), n)),
|
|
1683
|
+
onInvalidate: (t) => (e.on(an(), t), () => e.removeListener(an(), t)),
|
|
1684
|
+
onInvalidateByKey: (t, n) => (e.on(on(t), n), () => e.removeListener(on(t), n)),
|
|
1685
|
+
onDelete: (t) => (e.on(sn(), t), () => e.removeListener(sn(), t)),
|
|
1686
|
+
onDeleteByKey: (t, n) => (e.on(cn(t), n), () => e.removeListener(cn(t), n))
|
|
1687
1687
|
}), K = /* @__PURE__ */ function(e) {
|
|
1688
1688
|
return e.ONE_BY_ONE = "one-by-one", e.ALL_AT_ONCE = "all-at-once", e.PREVIOUS_CANCELED = "previous-canceled", e.DEDUPLICATED = "deduplicated", e;
|
|
1689
|
-
}({}),
|
|
1689
|
+
}({}), fn = (e) => ({
|
|
1690
1690
|
emitDrained: (t, n) => {
|
|
1691
|
-
e.emit(
|
|
1691
|
+
e.emit(mn(), t, n), e.emit(hn(t.queryKey), t, n);
|
|
1692
1692
|
},
|
|
1693
1693
|
emitQueueStatusChanged: (t, n) => {
|
|
1694
|
-
e.emit(
|
|
1694
|
+
e.emit(gn(), t, n), e.emit(_n(t.queryKey), t, n);
|
|
1695
1695
|
},
|
|
1696
1696
|
emitQueueChanged: (t, n) => {
|
|
1697
|
-
e.emit(
|
|
1697
|
+
e.emit(vn(), t, n), e.emit(yn(t.queryKey), t, n);
|
|
1698
1698
|
},
|
|
1699
|
-
onDrained: (t) => (e.on(
|
|
1700
|
-
onDrainedByKey: (t, n) => (e.on(
|
|
1701
|
-
onQueueStatusChange: (t) => (e.on(
|
|
1702
|
-
onQueueStatusChangeByKey: (t, n) => (e.on(
|
|
1703
|
-
onQueueChange: (t) => (e.on(
|
|
1704
|
-
onQueueChangeByKey: (t, n) => (e.on(
|
|
1705
|
-
}),
|
|
1706
|
-
emitter = new
|
|
1707
|
-
events =
|
|
1699
|
+
onDrained: (t) => (e.on(mn(), t), () => e.removeListener(mn(), t)),
|
|
1700
|
+
onDrainedByKey: (t, n) => (e.on(hn(t), n), () => e.removeListener(hn(t), n)),
|
|
1701
|
+
onQueueStatusChange: (t) => (e.on(gn(), t), () => e.removeListener(gn(), t)),
|
|
1702
|
+
onQueueStatusChangeByKey: (t, n) => (e.on(_n(t), n), () => e.removeListener(_n(t), n)),
|
|
1703
|
+
onQueueChange: (t) => (e.on(vn(), t), () => e.removeListener(vn(), t)),
|
|
1704
|
+
onQueueChangeByKey: (t, n) => (e.on(yn(t), n), () => e.removeListener(yn(t), n))
|
|
1705
|
+
}), pn = class {
|
|
1706
|
+
emitter = new Oe();
|
|
1707
|
+
events = fn(this.emitter);
|
|
1708
1708
|
storage = /* @__PURE__ */ new Map();
|
|
1709
1709
|
requestCount = /* @__PURE__ */ new Map();
|
|
1710
1710
|
runningRequests = /* @__PURE__ */ new Map();
|
|
@@ -1713,7 +1713,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1713
1713
|
constructor(e) {
|
|
1714
1714
|
this.options = e, this.emitter?.setMaxListeners(1e3), this.options?.storage && (this.storage = this.options.storage);
|
|
1715
1715
|
}
|
|
1716
|
-
isRequestJSON = (e) => !(e instanceof
|
|
1716
|
+
isRequestJSON = (e) => !(e instanceof Bt);
|
|
1717
1717
|
initialize = (e) => (this.client = e, this.logger = e.loggerManager.initialize(e, "Dispatcher"), this.client.appManager.events.onOnline(() => {
|
|
1718
1718
|
this.flush();
|
|
1719
1719
|
}), this);
|
|
@@ -1872,7 +1872,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1872
1872
|
resolved: !1
|
|
1873
1873
|
});
|
|
1874
1874
|
add = (e) => {
|
|
1875
|
-
let t = W(e.queryKey, e.scope), n = this.createStorageItem(e), { requestId: r } = n, [i] = this.getQueue(t).requests.slice(-1), a =
|
|
1875
|
+
let t = W(e.queryKey, e.scope), n = this.createStorageItem(e), { requestId: r } = n, [i] = this.getQueue(t).requests.slice(-1), a = Sn(e, i);
|
|
1876
1876
|
switch (this.logger.debug({
|
|
1877
1877
|
title: "Adding request to queue",
|
|
1878
1878
|
type: "system",
|
|
@@ -1926,7 +1926,7 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
1926
1926
|
requestId: n
|
|
1927
1927
|
}
|
|
1928
1928
|
});
|
|
1929
|
-
let { retry: r, retryTime: i, queryKey: a, abortKey: o, offline: s, scope: c } = t, l = W(a, c), u = W(o, c), { adapter: d, requestManager: f, cache: p, appManager: m } = this.client, h =
|
|
1929
|
+
let { retry: r, retryTime: i, queryKey: a, abortKey: o, offline: s, scope: c } = t, l = W(a, c), u = W(o, c), { adapter: d, requestManager: f, cache: p, appManager: m } = this.client, h = bn(e.retries, r), g = !m.isOnline && s, _ = this.hasRunningRequest(l, n), v = e.stopped;
|
|
1930
1930
|
if (g || _ || v) return this.logger.warning({
|
|
1931
1931
|
title: "Unable to perform request",
|
|
1932
1932
|
type: "system",
|
|
@@ -2060,26 +2060,26 @@ var Ht = async ({ request: e, requestId: t, onError: n, onResponseEnd: r, onTime
|
|
|
2060
2060
|
}
|
|
2061
2061
|
}), this.delete(l, n, u));
|
|
2062
2062
|
};
|
|
2063
|
-
},
|
|
2064
|
-
let { queued: n, cancelable: r, deduplicate: i } = e, a = t ?
|
|
2063
|
+
}, mn = () => "drained-event", hn = (e) => `${e}-drained-event`, gn = () => "status-event", _n = (e) => `${e}-status-event`, vn = () => "change-event", yn = (e) => `${e}-change-event`, bn = (e, t) => !!(t && e < t), xn = (e, t) => e.deduplicateTime ? +/* @__PURE__ */ new Date() - t.timestamp <= e.deduplicateTime : !0, Sn = (e, t) => {
|
|
2064
|
+
let { queued: n, cancelable: r, deduplicate: i } = e, a = t ? xn(e, t) : !1;
|
|
2065
2065
|
return n ? K.ONE_BY_ONE : r ? K.PREVIOUS_CANCELED : a && i ? K.DEDUPLICATED : K.ALL_AT_ONCE;
|
|
2066
2066
|
};
|
|
2067
|
-
function
|
|
2067
|
+
function Cn(e) {
|
|
2068
2068
|
return e === "client" || e === "server" ? e : typeof window < "u" && typeof document < "u" ? "client" : "server";
|
|
2069
2069
|
}
|
|
2070
|
-
var
|
|
2070
|
+
var wn = async (e, t) => {
|
|
2071
2071
|
let n = t;
|
|
2072
2072
|
if (!t.requestOptions.disableRequestInterceptors) {
|
|
2073
2073
|
for (let r of e) if (n = await r(t), !n) throw Error("Request modifier must return request");
|
|
2074
2074
|
}
|
|
2075
2075
|
return n;
|
|
2076
|
-
},
|
|
2076
|
+
}, Tn = async (e, t, n) => {
|
|
2077
2077
|
let r = t;
|
|
2078
2078
|
if (!n.requestOptions.disableResponseInterceptors) {
|
|
2079
2079
|
for (let i of e) if (r = await i(t, n), !r) throw Error("Response modifier must return data");
|
|
2080
2080
|
}
|
|
2081
2081
|
return r;
|
|
2082
|
-
},
|
|
2082
|
+
}, En = class {
|
|
2083
2083
|
url;
|
|
2084
2084
|
mode;
|
|
2085
2085
|
debug;
|
|
@@ -2088,8 +2088,8 @@ var Cn = async (e, t) => {
|
|
|
2088
2088
|
unstable_onResponseCallbacks = [];
|
|
2089
2089
|
unstable_onAuthCallbacks = [];
|
|
2090
2090
|
unstable_onRequestCallbacks = [];
|
|
2091
|
-
loggerManager = new
|
|
2092
|
-
requestManager = new
|
|
2091
|
+
loggerManager = new ft();
|
|
2092
|
+
requestManager = new Fe();
|
|
2093
2093
|
appManager;
|
|
2094
2094
|
adapter;
|
|
2095
2095
|
cache;
|
|
@@ -2097,15 +2097,15 @@ var Cn = async (e, t) => {
|
|
|
2097
2097
|
submitDispatcher;
|
|
2098
2098
|
isMockerEnabled = !0;
|
|
2099
2099
|
plugins = [];
|
|
2100
|
-
unstable_abortKeyMapper =
|
|
2101
|
-
unstable_cacheKeyMapper =
|
|
2102
|
-
unstable_queryKeyMapper =
|
|
2103
|
-
unstable_requestIdMapper =
|
|
2100
|
+
unstable_abortKeyMapper = Pt;
|
|
2101
|
+
unstable_cacheKeyMapper = Ft;
|
|
2102
|
+
unstable_queryKeyMapper = Ft;
|
|
2103
|
+
unstable_requestIdMapper = Te;
|
|
2104
2104
|
logger = this.loggerManager.initialize(this, "Client");
|
|
2105
2105
|
constructor(e) {
|
|
2106
2106
|
this.options = e;
|
|
2107
2107
|
let { url: t, appManager: n, cache: r, fetchDispatcher: i, submitDispatcher: a, mode: o } = this.options;
|
|
2108
|
-
this.url = t, this.mode =
|
|
2108
|
+
this.url = t, this.mode = Cn(o), this.adapter = tn(), this.appManager = n?.() || new ke(), this.cache = r?.() || new nn(), this.fetchDispatcher = i?.() || new pn(), this.submitDispatcher = a?.() || new pn(), this.adapter.initialize(this), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
|
|
2109
2109
|
}
|
|
2110
2110
|
setDebug = (e) => (this.debug = e, this);
|
|
2111
2111
|
setLogLevel = (e) => (this.loggerManager.setSeverity(e), this);
|
|
@@ -2134,15 +2134,15 @@ var Cn = async (e, t) => {
|
|
|
2134
2134
|
setCacheKeyMapper = (e) => (this.unstable_cacheKeyMapper = e, this);
|
|
2135
2135
|
setQueryKeyMapper = (e) => (this.unstable_queryKeyMapper = e, this);
|
|
2136
2136
|
setRequestIdMapper = (e) => (this.unstable_requestIdMapper = e, this);
|
|
2137
|
-
unstable_modifyAuth = async (e) =>
|
|
2138
|
-
unstable_modifyRequest = async (e) =>
|
|
2139
|
-
unstable_modifyErrorResponse = async (e, t) =>
|
|
2140
|
-
unstable_modifySuccessResponse = async (e, t) =>
|
|
2141
|
-
unstable_modifyResponse = async (e, t) =>
|
|
2142
|
-
fromJSON = (e) =>
|
|
2137
|
+
unstable_modifyAuth = async (e) => wn(this.unstable_onAuthCallbacks, e);
|
|
2138
|
+
unstable_modifyRequest = async (e) => wn(this.unstable_onRequestCallbacks, e);
|
|
2139
|
+
unstable_modifyErrorResponse = async (e, t) => Tn(this.unstable_onErrorCallbacks, e, t);
|
|
2140
|
+
unstable_modifySuccessResponse = async (e, t) => Tn(this.unstable_onSuccessCallbacks, e, t);
|
|
2141
|
+
unstable_modifyResponse = async (e, t) => Tn(this.unstable_onResponseCallbacks, e, t);
|
|
2142
|
+
fromJSON = (e) => Bt.fromJSON(this, e);
|
|
2143
2143
|
clear = () => {
|
|
2144
2144
|
let { appManager: e, cache: t, fetchDispatcher: n, submitDispatcher: r } = this.options;
|
|
2145
|
-
this.requestManager.abortControllers.clear(), this.fetchDispatcher.clear(), this.submitDispatcher.clear(), this.cache.clear(), this.requestManager.emitter.removeAllListeners(), this.fetchDispatcher.emitter.removeAllListeners(), this.submitDispatcher.emitter.removeAllListeners(), this.cache.emitter.removeAllListeners(), this.cache = t?.() || new
|
|
2145
|
+
this.requestManager.abortControllers.clear(), this.fetchDispatcher.clear(), this.submitDispatcher.clear(), this.cache.clear(), this.requestManager.emitter.removeAllListeners(), this.fetchDispatcher.emitter.removeAllListeners(), this.submitDispatcher.emitter.removeAllListeners(), this.cache.emitter.removeAllListeners(), this.cache = t?.() || new nn(), this.appManager = e?.() || new ke(), this.fetchDispatcher = n?.() || new pn(), this.submitDispatcher = r?.() || new pn(), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
|
|
2146
2146
|
};
|
|
2147
2147
|
hydrate = (e, t) => {
|
|
2148
2148
|
e?.forEach((e) => {
|
|
@@ -2160,7 +2160,7 @@ var Cn = async (e, t) => {
|
|
|
2160
2160
|
...t
|
|
2161
2161
|
};
|
|
2162
2162
|
if (!s.override && this.cache.get(W(n, r))) return;
|
|
2163
|
-
let c =
|
|
2163
|
+
let c = Kt(i);
|
|
2164
2164
|
this.cache.set({
|
|
2165
2165
|
...s,
|
|
2166
2166
|
cacheKey: n,
|
|
@@ -2172,10 +2172,10 @@ var Cn = async (e, t) => {
|
|
|
2172
2172
|
let t = this.adapter.unstable_endpointMapper(e.endpoint), n = {
|
|
2173
2173
|
...e,
|
|
2174
2174
|
endpoint: String(t)
|
|
2175
|
-
}, r = new
|
|
2175
|
+
}, r = new Bt(this, n);
|
|
2176
2176
|
return this.plugins.forEach((e) => e.trigger("onRequestCreate", { request: r })), r;
|
|
2177
2177
|
};
|
|
2178
|
-
},
|
|
2178
|
+
}, Dn = {
|
|
2179
2179
|
strict: !0,
|
|
2180
2180
|
encode: !0,
|
|
2181
2181
|
arrayFormat: "bracket",
|
|
@@ -2184,22 +2184,22 @@ var Cn = async (e, t) => {
|
|
|
2184
2184
|
skipNull: !0,
|
|
2185
2185
|
skipEmptyString: !0
|
|
2186
2186
|
};
|
|
2187
|
-
function
|
|
2188
|
-
return new
|
|
2187
|
+
function On(e) {
|
|
2188
|
+
return new En(e);
|
|
2189
2189
|
}
|
|
2190
2190
|
//#endregion
|
|
2191
2191
|
//#region src/core/client.ts
|
|
2192
|
-
var q =
|
|
2192
|
+
var q = On({ url: N() });
|
|
2193
2193
|
//#endregion
|
|
2194
2194
|
//#region src/core/auth-api.ts
|
|
2195
|
-
async function
|
|
2195
|
+
async function kn(e) {
|
|
2196
2196
|
let { data: t, success: n } = await q.createRequest()({
|
|
2197
2197
|
endpoint: "/auth/cli/whoami",
|
|
2198
2198
|
method: "GET"
|
|
2199
2199
|
}).setHeaders({ Authorization: `Bearer ${e}` }).send();
|
|
2200
2200
|
return !n || !t ? null : t;
|
|
2201
2201
|
}
|
|
2202
|
-
async function
|
|
2202
|
+
async function An(e) {
|
|
2203
2203
|
await q.createRequest()({
|
|
2204
2204
|
endpoint: "/auth/cli/token",
|
|
2205
2205
|
method: "DELETE"
|
|
@@ -2207,78 +2207,78 @@ async function kn(e) {
|
|
|
2207
2207
|
}
|
|
2208
2208
|
//#endregion
|
|
2209
2209
|
//#region src/core/auth-store.ts
|
|
2210
|
-
var
|
|
2211
|
-
function
|
|
2210
|
+
var jn = 1, Mn = "hype-stack", Nn = "auth.json";
|
|
2211
|
+
function Pn() {
|
|
2212
2212
|
let e = process.env.HYPE_STACK_CONFIG_DIR;
|
|
2213
|
-
if (e) return u.join(e,
|
|
2213
|
+
if (e) return u.join(e, Mn);
|
|
2214
2214
|
let t = l.homedir();
|
|
2215
2215
|
if (process.platform === "win32") {
|
|
2216
2216
|
let e = process.env.APPDATA ?? u.join(t, "AppData", "Roaming");
|
|
2217
|
-
return u.join(e,
|
|
2217
|
+
return u.join(e, Mn);
|
|
2218
2218
|
}
|
|
2219
|
-
if (process.platform === "darwin") return u.join(t, "Library", "Application Support",
|
|
2219
|
+
if (process.platform === "darwin") return u.join(t, "Library", "Application Support", Mn);
|
|
2220
2220
|
let n = process.env.XDG_CONFIG_HOME ?? u.join(t, ".config");
|
|
2221
|
-
return u.join(n,
|
|
2221
|
+
return u.join(n, Mn);
|
|
2222
2222
|
}
|
|
2223
|
-
function
|
|
2224
|
-
return u.join(
|
|
2223
|
+
function Fn() {
|
|
2224
|
+
return u.join(Pn(), Nn);
|
|
2225
2225
|
}
|
|
2226
|
-
async function
|
|
2227
|
-
let e = await s.readFile(
|
|
2226
|
+
async function In() {
|
|
2227
|
+
let e = await s.readFile(Fn(), "utf-8").catch(() => null);
|
|
2228
2228
|
if (!e) return {
|
|
2229
|
-
version:
|
|
2229
|
+
version: jn,
|
|
2230
2230
|
tokens: {}
|
|
2231
2231
|
};
|
|
2232
2232
|
let t = JSON.parse(e);
|
|
2233
2233
|
return {
|
|
2234
|
-
version: t.version ??
|
|
2234
|
+
version: t.version ?? jn,
|
|
2235
2235
|
tokens: t.tokens ?? {}
|
|
2236
2236
|
};
|
|
2237
2237
|
}
|
|
2238
|
-
async function In(e) {
|
|
2239
|
-
let t = Nn();
|
|
2240
|
-
await s.mkdir(t, { recursive: !0 }), await s.writeFile(Pn(), `${JSON.stringify(e, null, 2)}\n`, { mode: 384 });
|
|
2241
|
-
}
|
|
2242
2238
|
async function Ln(e) {
|
|
2243
|
-
|
|
2239
|
+
let t = Pn();
|
|
2240
|
+
await s.mkdir(t, { recursive: !0 }), await s.writeFile(Fn(), `${JSON.stringify(e, null, 2)}\n`, { mode: 384 });
|
|
2241
|
+
}
|
|
2242
|
+
async function Rn(e) {
|
|
2243
|
+
return (await In()).tokens[e] ?? null;
|
|
2244
2244
|
}
|
|
2245
|
-
async function
|
|
2246
|
-
let n = await
|
|
2247
|
-
n.tokens[e] = t, await
|
|
2245
|
+
async function zn(e, t) {
|
|
2246
|
+
let n = await In();
|
|
2247
|
+
n.tokens[e] = t, await Ln(n);
|
|
2248
2248
|
}
|
|
2249
|
-
async function
|
|
2250
|
-
let t = await
|
|
2251
|
-
e in t.tokens && (delete t.tokens[e], await
|
|
2249
|
+
async function Bn(e) {
|
|
2250
|
+
let t = await In();
|
|
2251
|
+
e in t.tokens && (delete t.tokens[e], await Ln(t));
|
|
2252
2252
|
}
|
|
2253
2253
|
//#endregion
|
|
2254
2254
|
//#region src/core/device.ts
|
|
2255
|
-
function
|
|
2255
|
+
function Vn() {
|
|
2256
2256
|
let e = l.networkInterfaces();
|
|
2257
2257
|
for (let t of Object.values(e)) if (t) {
|
|
2258
2258
|
for (let e of t) if (!e.internal && e.mac !== "00:00:00:00:00:00") return e.mac;
|
|
2259
2259
|
}
|
|
2260
2260
|
return "unknown";
|
|
2261
2261
|
}
|
|
2262
|
-
function Vn() {
|
|
2263
|
-
let e = `${Bn()}:${l.hostname()}:${l.platform()}:${l.arch()}`;
|
|
2264
|
-
return (0, me.createHash)("sha256").update(e).digest("hex").slice(0, 16);
|
|
2265
|
-
}
|
|
2266
2262
|
function Hn() {
|
|
2263
|
+
let e = `${Vn()}:${l.hostname()}:${l.platform()}:${l.arch()}`;
|
|
2264
|
+
return (0, he.createHash)("sha256").update(e).digest("hex").slice(0, 16);
|
|
2265
|
+
}
|
|
2266
|
+
function Un() {
|
|
2267
2267
|
return `hype-stack/${C} ${l.platform()} ${l.arch()} node/${process.version.slice(1)}`;
|
|
2268
2268
|
}
|
|
2269
2269
|
//#endregion
|
|
2270
2270
|
//#region src/core/open-browser.ts
|
|
2271
|
-
function
|
|
2271
|
+
function Wn(e) {
|
|
2272
2272
|
d(process.platform === "darwin" ? `open "${e}"` : process.platform === "win32" ? `start "" "${e}"` : `xdg-open "${e}"`);
|
|
2273
2273
|
}
|
|
2274
2274
|
//#endregion
|
|
2275
2275
|
//#region src/core/login.ts
|
|
2276
|
-
var
|
|
2277
|
-
async function
|
|
2278
|
-
let t = (0,
|
|
2276
|
+
var Gn = 300 * 1e3, Kn = (e) => `<!doctype html><html><head><meta charset="utf-8"><title>Hype Stack CLI</title></head><body style="font-family:system-ui,sans-serif;text-align:center;padding-top:4rem;color:#111"><h2>${e}</h2><p>You can close this tab and return to your terminal.</p></body></html>`;
|
|
2277
|
+
async function qn(e = {}) {
|
|
2278
|
+
let t = (0, he.randomBytes)(16).toString("hex"), n = N(), r = he.default.createServer(), i = await new Promise((n, i) => {
|
|
2279
2279
|
let a = setTimeout(() => {
|
|
2280
2280
|
o(), i(/* @__PURE__ */ Error("Login timed out. Run `hype-stack login` again."));
|
|
2281
|
-
},
|
|
2281
|
+
}, Gn);
|
|
2282
2282
|
function o() {
|
|
2283
2283
|
clearTimeout(a), r.close(), r.closeAllConnections?.();
|
|
2284
2284
|
}
|
|
@@ -2292,7 +2292,7 @@ async function Kn(e = {}) {
|
|
|
2292
2292
|
r.writeHead(200, {
|
|
2293
2293
|
"Content-Type": "text/html",
|
|
2294
2294
|
Connection: "close"
|
|
2295
|
-
}), r.end(
|
|
2295
|
+
}), r.end(Kn(e));
|
|
2296
2296
|
};
|
|
2297
2297
|
if (a.searchParams.get("state") !== t) {
|
|
2298
2298
|
s("Login failed."), o(), i(/* @__PURE__ */ Error("Login failed: state mismatch. Run `hype-stack login` again."));
|
|
@@ -2307,24 +2307,24 @@ async function Kn(e = {}) {
|
|
|
2307
2307
|
}), r.on("error", (e) => {
|
|
2308
2308
|
o(), i(e);
|
|
2309
2309
|
}), r.listen(0, "127.0.0.1", () => {
|
|
2310
|
-
let { port: n } = r.address(), i = encodeURIComponent(
|
|
2311
|
-
e.onUrl?.(a),
|
|
2310
|
+
let { port: n } = r.address(), i = encodeURIComponent(Un()), a = `${P()}/cli/authorize?port=${n}&state=${t}&label=${i}`;
|
|
2311
|
+
e.onUrl?.(a), Wn(a);
|
|
2312
2312
|
});
|
|
2313
|
-
}), a = await
|
|
2313
|
+
}), a = await kn(i).catch(() => null), o = {
|
|
2314
2314
|
token: i,
|
|
2315
2315
|
email: a?.email,
|
|
2316
2316
|
organizationId: a?.organizationId
|
|
2317
2317
|
};
|
|
2318
|
-
return await
|
|
2318
|
+
return await zn(n, o), o;
|
|
2319
2319
|
}
|
|
2320
2320
|
//#endregion
|
|
2321
2321
|
//#region src/core/access-prompts.ts
|
|
2322
|
-
async function
|
|
2322
|
+
async function Jn() {
|
|
2323
2323
|
let e = await o.confirm({ message: "Log in to install packs your organization owns? (opens your browser)" });
|
|
2324
2324
|
if (o.isCancel(e) || !e) return null;
|
|
2325
2325
|
o.log.step("Opening your browser to sign in...");
|
|
2326
2326
|
try {
|
|
2327
|
-
let e = await
|
|
2327
|
+
let e = await qn({ onUrl: (e) => {
|
|
2328
2328
|
o.log.info(`If your browser didn't open, visit:\n ${R.path(e)}`);
|
|
2329
2329
|
} });
|
|
2330
2330
|
return o.log.success(e.email ? `Logged in as ${e.email}` : "Logged in"), e.token;
|
|
@@ -2332,7 +2332,7 @@ async function qn() {
|
|
|
2332
2332
|
return o.log.error(e instanceof Error ? e.message : String(e)), null;
|
|
2333
2333
|
}
|
|
2334
2334
|
}
|
|
2335
|
-
async function
|
|
2335
|
+
async function Yn(e) {
|
|
2336
2336
|
if (e.length === 0) return;
|
|
2337
2337
|
o.note([
|
|
2338
2338
|
"These packs need a purchase before they can be installed:",
|
|
@@ -2344,7 +2344,7 @@ async function Jn(e) {
|
|
|
2344
2344
|
o.log.info(R.muted("Run 'hype-stack login' after purchasing, then 'hype-stack compose' again."));
|
|
2345
2345
|
return;
|
|
2346
2346
|
}
|
|
2347
|
-
for (let t of e)
|
|
2347
|
+
for (let t of e) Wn(me(t.name));
|
|
2348
2348
|
o.log.info([
|
|
2349
2349
|
R.muted("After purchasing, run:"),
|
|
2350
2350
|
` ${R.highlight("hype-stack login")} ${R.muted("Save your access")}`,
|
|
@@ -2386,52 +2386,52 @@ function J(e, t, n) {
|
|
|
2386
2386
|
}
|
|
2387
2387
|
//#endregion
|
|
2388
2388
|
//#region src/utils/fs.ts
|
|
2389
|
-
async function
|
|
2389
|
+
async function Xn(e) {
|
|
2390
2390
|
return (await s.stat(e).catch(() => null))?.isDirectory() ?? !1;
|
|
2391
2391
|
}
|
|
2392
2392
|
async function Y(e) {
|
|
2393
2393
|
return (await s.stat(e).catch(() => null))?.isFile() ?? !1;
|
|
2394
2394
|
}
|
|
2395
|
-
async function
|
|
2395
|
+
async function Zn(e) {
|
|
2396
2396
|
return (await s.readdir(e).catch(() => [])).length === 0;
|
|
2397
2397
|
}
|
|
2398
|
-
async function
|
|
2398
|
+
async function Qn(e) {
|
|
2399
2399
|
let t = await s.readFile(e, "utf-8").catch(() => null);
|
|
2400
2400
|
return t ? JSON.parse(t) : null;
|
|
2401
2401
|
}
|
|
2402
|
-
async function
|
|
2402
|
+
async function $n(e, t) {
|
|
2403
2403
|
await s.writeFile(e, JSON.stringify(t, null, 2) + "\n", "utf-8");
|
|
2404
2404
|
}
|
|
2405
|
-
async function
|
|
2405
|
+
async function er(e) {
|
|
2406
2406
|
let t = {};
|
|
2407
|
-
if (!await
|
|
2407
|
+
if (!await Xn(e)) return t;
|
|
2408
2408
|
let n = await s.readdir(e, { withFileTypes: !0 });
|
|
2409
2409
|
for (let r of n) r.isDirectory() && await Y(u.join(e, r.name, "package.json")) && (t[r.name] = u.relative(u.dirname(e), u.join(e, r.name)));
|
|
2410
2410
|
return t;
|
|
2411
2411
|
}
|
|
2412
|
-
async function
|
|
2412
|
+
async function tr(e) {
|
|
2413
2413
|
await s.rm(e, {
|
|
2414
2414
|
recursive: !0,
|
|
2415
2415
|
force: !0
|
|
2416
2416
|
});
|
|
2417
2417
|
}
|
|
2418
|
-
function
|
|
2418
|
+
function nr(e, t) {
|
|
2419
2419
|
return u.basename(e) === t ? e : u.join(e, t);
|
|
2420
2420
|
}
|
|
2421
2421
|
//#endregion
|
|
2422
2422
|
//#region src/core/codegen.ts
|
|
2423
|
-
function
|
|
2423
|
+
function rr(e) {
|
|
2424
2424
|
o.log.info(R.muted("Run database setup yourself when ready:")), o.note([
|
|
2425
2425
|
`${R.command(`cd ${e}`)}`,
|
|
2426
2426
|
`${R.command("pnpm exec prisma generate")} ${R.muted("(regenerate the Prisma client)")}`,
|
|
2427
2427
|
`${R.command("pnpm exec prisma migrate dev")} ${R.muted("(create + apply tables for new packs)")}`
|
|
2428
2428
|
].join("\n"), "Database Setup");
|
|
2429
2429
|
}
|
|
2430
|
-
async function
|
|
2430
|
+
async function ir(e) {
|
|
2431
2431
|
let { projectRoot: t, paths: n, skipPrompts: r, runCommand: i = J } = e, a = n.backend.root, s = u.join(t, a);
|
|
2432
2432
|
if (!await Y(u.join(s, "package.json"))) return;
|
|
2433
2433
|
if (r) {
|
|
2434
|
-
|
|
2434
|
+
rr(a);
|
|
2435
2435
|
return;
|
|
2436
2436
|
}
|
|
2437
2437
|
let c = await o.confirm({
|
|
@@ -2439,7 +2439,7 @@ async function rr(e) {
|
|
|
2439
2439
|
initialValue: !0
|
|
2440
2440
|
});
|
|
2441
2441
|
if (o.isCancel(c) || !c) {
|
|
2442
|
-
|
|
2442
|
+
rr(a);
|
|
2443
2443
|
return;
|
|
2444
2444
|
}
|
|
2445
2445
|
let l = o.spinner();
|
|
@@ -2448,7 +2448,7 @@ async function rr(e) {
|
|
|
2448
2448
|
"prisma",
|
|
2449
2449
|
"generate"
|
|
2450
2450
|
], { cwd: s })).exitCode !== 0) {
|
|
2451
|
-
l.stop(R.warning("Prisma client generation failed")),
|
|
2451
|
+
l.stop(R.warning("Prisma client generation failed")), rr(a);
|
|
2452
2452
|
return;
|
|
2453
2453
|
}
|
|
2454
2454
|
l.stop(R.success("Prisma client generated"));
|
|
@@ -2461,30 +2461,30 @@ async function rr(e) {
|
|
|
2461
2461
|
"--name",
|
|
2462
2462
|
"add-packs"
|
|
2463
2463
|
], { cwd: s })).exitCode !== 0) {
|
|
2464
|
-
d.stop(R.warning("Database migration failed (is your database running?)")),
|
|
2464
|
+
d.stop(R.warning("Database migration failed (is your database running?)")), rr(a);
|
|
2465
2465
|
return;
|
|
2466
2466
|
}
|
|
2467
2467
|
d.stop(R.success("Database schema applied"));
|
|
2468
2468
|
}
|
|
2469
2469
|
//#endregion
|
|
2470
2470
|
//#region src/core/stack-config.ts
|
|
2471
|
-
async function ir(e) {
|
|
2472
|
-
return Zn(u.join(e, T));
|
|
2473
|
-
}
|
|
2474
2471
|
async function ar(e) {
|
|
2472
|
+
return Qn(u.join(e, T));
|
|
2473
|
+
}
|
|
2474
|
+
async function or(e) {
|
|
2475
2475
|
return Y(u.join(e, T));
|
|
2476
2476
|
}
|
|
2477
|
-
async function
|
|
2478
|
-
await
|
|
2477
|
+
async function sr(e, t) {
|
|
2478
|
+
await $n(u.join(e, T), t);
|
|
2479
2479
|
}
|
|
2480
|
-
async function
|
|
2481
|
-
let t = u.join(e, "apps"), n = u.join(e, "packages"), [r, i] = await Promise.all([
|
|
2480
|
+
async function cr(e) {
|
|
2481
|
+
let t = u.join(e, "apps"), n = u.join(e, "packages"), [r, i] = await Promise.all([er(t), er(n)]);
|
|
2482
2482
|
return {
|
|
2483
2483
|
apps: r,
|
|
2484
2484
|
packages: i
|
|
2485
2485
|
};
|
|
2486
2486
|
}
|
|
2487
|
-
function
|
|
2487
|
+
function lr(e) {
|
|
2488
2488
|
let t = e.apps.backend ?? "apps/backend", n = e.apps.frontend ?? "apps/frontend", r = e.apps.admin ?? "apps/admin", i = e.packages.enums ?? "packages/enums";
|
|
2489
2489
|
return {
|
|
2490
2490
|
backend: {
|
|
@@ -2518,20 +2518,20 @@ function cr(e) {
|
|
|
2518
2518
|
}
|
|
2519
2519
|
};
|
|
2520
2520
|
}
|
|
2521
|
-
function
|
|
2521
|
+
function ur(e, t) {
|
|
2522
2522
|
return {
|
|
2523
|
-
$schema:
|
|
2523
|
+
$schema: ie(),
|
|
2524
2524
|
version: 1,
|
|
2525
2525
|
name: e,
|
|
2526
2526
|
apps: t.apps,
|
|
2527
2527
|
packages: t.packages,
|
|
2528
|
-
paths:
|
|
2528
|
+
paths: lr(t),
|
|
2529
2529
|
installedPacks: [],
|
|
2530
2530
|
licenseKey: null
|
|
2531
2531
|
};
|
|
2532
2532
|
}
|
|
2533
|
-
async function
|
|
2534
|
-
let t = u.join(e, "package.json"), n = u.join(e, "apps"), [r, i] = await Promise.all([Y(t),
|
|
2533
|
+
async function dr(e) {
|
|
2534
|
+
let t = u.join(e, "package.json"), n = u.join(e, "apps"), [r, i] = await Promise.all([Y(t), Xn(n)]);
|
|
2535
2535
|
return r && i;
|
|
2536
2536
|
}
|
|
2537
2537
|
function X(e, t) {
|
|
@@ -2545,7 +2545,7 @@ function X(e, t) {
|
|
|
2545
2545
|
}
|
|
2546
2546
|
//#endregion
|
|
2547
2547
|
//#region src/core/registry.ts
|
|
2548
|
-
async function
|
|
2548
|
+
async function fr(e) {
|
|
2549
2549
|
let { data: t, error: n, status: r } = await q.createRequest()({
|
|
2550
2550
|
endpoint: `/packs/${encodeURIComponent(e)}/manifest`,
|
|
2551
2551
|
method: "GET"
|
|
@@ -2554,13 +2554,13 @@ async function dr(e) {
|
|
|
2554
2554
|
if (n || !t) throw Error(`Failed to load manifest for "${e}": ${String(n)}`);
|
|
2555
2555
|
return t;
|
|
2556
2556
|
}
|
|
2557
|
-
async function
|
|
2557
|
+
async function pr(e, t = {}) {
|
|
2558
2558
|
let n = q.createRequest()({
|
|
2559
2559
|
endpoint: `/packs/${encodeURIComponent(e)}/download`,
|
|
2560
2560
|
method: "POST"
|
|
2561
2561
|
}), r = {
|
|
2562
|
-
"X-Device-Id":
|
|
2563
|
-
"X-Client-Info":
|
|
2562
|
+
"X-Device-Id": Hn(),
|
|
2563
|
+
"X-Client-Info": Un()
|
|
2564
2564
|
};
|
|
2565
2565
|
t.token && (r.Authorization = `Bearer ${t.token}`);
|
|
2566
2566
|
let { data: i, error: a, success: o } = await n.setPayload({ key: t.licenseKey ?? void 0 }).setHeaders(r).send();
|
|
@@ -2580,23 +2580,23 @@ async function fr(e, t = {}) {
|
|
|
2580
2580
|
packDir: c
|
|
2581
2581
|
};
|
|
2582
2582
|
}
|
|
2583
|
-
function
|
|
2583
|
+
function mr(e, t, n) {
|
|
2584
2584
|
let r = X(e, t);
|
|
2585
2585
|
return u.resolve(n, r);
|
|
2586
2586
|
}
|
|
2587
|
-
function
|
|
2587
|
+
function hr(e, t) {
|
|
2588
2588
|
return u.join(t, e);
|
|
2589
2589
|
}
|
|
2590
|
-
var
|
|
2590
|
+
var gr = q.createRequest()({
|
|
2591
2591
|
endpoint: "/packs/list",
|
|
2592
2592
|
method: "GET"
|
|
2593
2593
|
});
|
|
2594
|
-
async function
|
|
2595
|
-
let { data: e, error: t } = await
|
|
2594
|
+
async function _r() {
|
|
2595
|
+
let { data: e, error: t } = await gr.send();
|
|
2596
2596
|
if (t || !e) throw Error(`Failed to fetch pack list: ${String(t)}`);
|
|
2597
2597
|
return e.packs;
|
|
2598
2598
|
}
|
|
2599
|
-
async function
|
|
2599
|
+
async function vr(e, t = {}) {
|
|
2600
2600
|
if (e.length === 0) return {};
|
|
2601
2601
|
let n = q.createRequest()({
|
|
2602
2602
|
endpoint: "/packs/authorize",
|
|
@@ -2612,35 +2612,35 @@ async function _r(e, t = {}) {
|
|
|
2612
2612
|
}
|
|
2613
2613
|
//#endregion
|
|
2614
2614
|
//#region src/core/codemods.ts
|
|
2615
|
-
var
|
|
2616
|
-
function
|
|
2615
|
+
var yr = "@hype-stack/";
|
|
2616
|
+
function br(e, t) {
|
|
2617
2617
|
return X(e === "admin" ? "{{admin.root}}" : "{{frontend.root}}", t);
|
|
2618
2618
|
}
|
|
2619
|
-
async function
|
|
2619
|
+
async function xr(e, t, n) {
|
|
2620
2620
|
let r = X("{{backend.root}}", t), i = u.resolve(n, r, "src/config/env/env.config.ts"), a = u.resolve(n, r, ".env.example"), o = u.resolve(n, r, ".env.test");
|
|
2621
2621
|
if (await Y(i)) {
|
|
2622
2622
|
let t = await s.readFile(i, "utf-8");
|
|
2623
|
-
for (let n of e) t.includes(`from "${n.from}"`) || (t =
|
|
2623
|
+
for (let n of e) t.includes(`from "${n.from}"`) || (t = Sr(t, n), t = Cr(t, n));
|
|
2624
2624
|
await s.writeFile(i, t, "utf-8");
|
|
2625
2625
|
}
|
|
2626
2626
|
if (await Y(a)) {
|
|
2627
2627
|
let t = await s.readFile(a, "utf-8");
|
|
2628
|
-
for (let n of e) t =
|
|
2628
|
+
for (let n of e) t = wr(t, n);
|
|
2629
2629
|
await s.writeFile(a, t, "utf-8");
|
|
2630
2630
|
}
|
|
2631
2631
|
if (await Y(o)) {
|
|
2632
2632
|
let t = await s.readFile(o, "utf-8");
|
|
2633
|
-
for (let n of e) t =
|
|
2633
|
+
for (let n of e) t = Tr(t, n);
|
|
2634
2634
|
await s.writeFile(o, t, "utf-8");
|
|
2635
2635
|
}
|
|
2636
2636
|
}
|
|
2637
|
-
function
|
|
2637
|
+
function Sr(e, t) {
|
|
2638
2638
|
let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("import ");
|
|
2639
2639
|
if (r === -1) return n + "\n" + e;
|
|
2640
2640
|
let i = e.indexOf("\n", e.indexOf(";", r));
|
|
2641
2641
|
return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
|
|
2642
2642
|
}
|
|
2643
|
-
function
|
|
2643
|
+
function Cr(e, t) {
|
|
2644
2644
|
let n = `.extend(${t.import}.shape)`;
|
|
2645
2645
|
if (e.includes(n)) return e;
|
|
2646
2646
|
let r = e.indexOf("export const envSchema = z.object({");
|
|
@@ -2655,27 +2655,27 @@ function Sr(e, t) {
|
|
|
2655
2655
|
let o = a + 2;
|
|
2656
2656
|
return e.slice(0, o) + n + e.slice(o);
|
|
2657
2657
|
}
|
|
2658
|
-
function
|
|
2658
|
+
function wr(e, t) {
|
|
2659
2659
|
for (let n of Object.keys(t.envExample.vars)) if (e.includes(`${n}=`)) return e;
|
|
2660
2660
|
let n = [];
|
|
2661
2661
|
n.push(""), n.push(`# ${t.envExample.section}`);
|
|
2662
2662
|
for (let [e, r] of Object.entries(t.envExample.vars)) n.push(`${e}=${r}`);
|
|
2663
2663
|
return e.trimEnd() + "\n" + n.join("\n") + "\n";
|
|
2664
2664
|
}
|
|
2665
|
-
function
|
|
2665
|
+
function Tr(e, t) {
|
|
2666
2666
|
for (let n of Object.keys(t.envTest)) if (e.includes(`${n}=`)) return e;
|
|
2667
2667
|
let n = [""];
|
|
2668
2668
|
for (let [e, r] of Object.entries(t.envTest)) n.push(`${e}=${r}`);
|
|
2669
2669
|
return e.trimEnd() + "\n" + n.join("\n") + "\n";
|
|
2670
2670
|
}
|
|
2671
|
-
async function
|
|
2671
|
+
async function Er(e, t, n) {
|
|
2672
2672
|
let r = u.resolve(n, X("{{backend.routes}}", t), "index.ts");
|
|
2673
2673
|
if (!await Y(r)) return;
|
|
2674
2674
|
let i = await s.readFile(r, "utf-8");
|
|
2675
|
-
for (let t of e) i.includes(`from "${t.from}"`) || (i =
|
|
2675
|
+
for (let t of e) i.includes(`from "${t.from}"`) || (i = Dr(i, t), i = Or(i, t));
|
|
2676
2676
|
await s.writeFile(r, i, "utf-8");
|
|
2677
2677
|
}
|
|
2678
|
-
function
|
|
2678
|
+
function Dr(e, t) {
|
|
2679
2679
|
let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("from \"./");
|
|
2680
2680
|
if (r !== -1) {
|
|
2681
2681
|
let t = e.indexOf("\n", r);
|
|
@@ -2684,7 +2684,7 @@ function Er(e, t) {
|
|
|
2684
2684
|
let i = e.indexOf("export const registerRoutes");
|
|
2685
2685
|
return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
|
|
2686
2686
|
}
|
|
2687
|
-
function
|
|
2687
|
+
function Or(e, t) {
|
|
2688
2688
|
let n = `.route("${t.prefix}", ${t.import})`, r = e.match(/\.route\([^)]+\);/g);
|
|
2689
2689
|
if (r) {
|
|
2690
2690
|
let t = r[r.length - 1], i = e.lastIndexOf(t) + t.length - 1;
|
|
@@ -2692,14 +2692,14 @@ function Dr(e, t) {
|
|
|
2692
2692
|
}
|
|
2693
2693
|
return e.replace("return app;", `return app\n ${n};`);
|
|
2694
2694
|
}
|
|
2695
|
-
async function
|
|
2695
|
+
async function kr(e, t, n) {
|
|
2696
2696
|
let r = u.resolve(n, X("{{backend.root}}", t), "src/context.ts");
|
|
2697
2697
|
if (!await Y(r)) return;
|
|
2698
2698
|
let i = await s.readFile(r, "utf-8");
|
|
2699
|
-
for (let t of e) i.includes(`export let ${t.export}`) || (i =
|
|
2699
|
+
for (let t of e) i.includes(`export let ${t.export}`) || (i = Ar(i, t), i = jr(i, t), i = Mr(i, t), i = Pr(i, t));
|
|
2700
2700
|
await s.writeFile(r, i, "utf-8");
|
|
2701
2701
|
}
|
|
2702
|
-
function
|
|
2702
|
+
function Ar(e, t) {
|
|
2703
2703
|
let n = `import { ${t.typeImport.name} } from "${t.typeImport.from}";`;
|
|
2704
2704
|
if (e.includes(`from "${t.typeImport.from}"`)) return e;
|
|
2705
2705
|
let r = e.lastIndexOf("import ");
|
|
@@ -2707,7 +2707,7 @@ function kr(e, t) {
|
|
|
2707
2707
|
let i = e.indexOf("\n", e.indexOf(";", r));
|
|
2708
2708
|
return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
|
|
2709
2709
|
}
|
|
2710
|
-
function
|
|
2710
|
+
function jr(e, t) {
|
|
2711
2711
|
let n = `export let ${t.export}: ${t.type};`, r = e.lastIndexOf("export let ");
|
|
2712
2712
|
if (r === -1) {
|
|
2713
2713
|
let t = e.indexOf("export const setupContext");
|
|
@@ -2716,15 +2716,15 @@ function Ar(e, t) {
|
|
|
2716
2716
|
let i = e.indexOf("\n", r);
|
|
2717
2717
|
return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
|
|
2718
2718
|
}
|
|
2719
|
-
function
|
|
2719
|
+
function Mr(e, t) {
|
|
2720
2720
|
let n = ` ${t.export} = ${t.init};`, r = e.match(/export const setupContext\s*=\s*async\s*\([^)]*\)\s*=>\s*\{/);
|
|
2721
2721
|
if (!r) return e;
|
|
2722
2722
|
let i = e.indexOf("{", e.indexOf(r[0]));
|
|
2723
2723
|
if (i === -1) return e;
|
|
2724
|
-
let a =
|
|
2724
|
+
let a = Nr(e, i);
|
|
2725
2725
|
return a === -1 ? e : e.slice(0, a) + n + "\n" + e.slice(a);
|
|
2726
2726
|
}
|
|
2727
|
-
function
|
|
2727
|
+
function Nr(e, t) {
|
|
2728
2728
|
let n = 0;
|
|
2729
2729
|
for (let r = t; r < e.length; r++) {
|
|
2730
2730
|
let t = e[r];
|
|
@@ -2733,20 +2733,20 @@ function Mr(e, t) {
|
|
|
2733
2733
|
}
|
|
2734
2734
|
return -1;
|
|
2735
2735
|
}
|
|
2736
|
-
function
|
|
2736
|
+
function Pr(e, t) {
|
|
2737
2737
|
let n = ` ${t.export}: ${t.type};`, r = e.indexOf("export type ContextVariables = {");
|
|
2738
2738
|
if (r === -1) return e;
|
|
2739
2739
|
let i = e.indexOf("};", r);
|
|
2740
2740
|
return i === -1 ? e : e.slice(0, i) + n + "\n" + e.slice(i);
|
|
2741
2741
|
}
|
|
2742
|
-
async function
|
|
2742
|
+
async function Fr(e, t, n) {
|
|
2743
2743
|
let r = u.resolve(n, X("{{enums.src}}", t), "index.ts");
|
|
2744
2744
|
if (!await Y(r)) return;
|
|
2745
2745
|
let i = await s.readFile(r, "utf-8");
|
|
2746
|
-
for (let t of e) i.includes(`from "${t.from}"`) || (i =
|
|
2746
|
+
for (let t of e) i.includes(`from "${t.from}"`) || (i = Ir(i, t));
|
|
2747
2747
|
await s.writeFile(r, i, "utf-8");
|
|
2748
2748
|
}
|
|
2749
|
-
function
|
|
2749
|
+
function Ir(e, t) {
|
|
2750
2750
|
let n = `export * from "${t.from}";`, r = e.lastIndexOf("export * from");
|
|
2751
2751
|
if (r !== -1) {
|
|
2752
2752
|
let t = e.indexOf("\n", r);
|
|
@@ -2754,14 +2754,14 @@ function Fr(e, t) {
|
|
|
2754
2754
|
}
|
|
2755
2755
|
return e.trim() === "" ? n + "\n" : e.trimEnd() + "\n" + n + "\n";
|
|
2756
2756
|
}
|
|
2757
|
-
async function
|
|
2757
|
+
async function Lr(e, t, n) {
|
|
2758
2758
|
let r = X("{{backend.root}}", t), i = u.resolve(n, r, "src/sockets/index.ts");
|
|
2759
2759
|
if (!await Y(i)) return;
|
|
2760
2760
|
let a = await s.readFile(i, "utf-8");
|
|
2761
|
-
for (let t of e) a.includes(`from "${t.from}"`) || (a =
|
|
2762
|
-
await Y(u.resolve(n, r, "src/libs/websocket/ws-authenticate.ts")) && (a =
|
|
2761
|
+
for (let t of e) a.includes(`from "${t.from}"`) || (a = Rr(a, t), a = zr(a, t));
|
|
2762
|
+
await Y(u.resolve(n, r, "src/libs/websocket/ws-authenticate.ts")) && (a = Br(a)), await s.writeFile(i, a, "utf-8");
|
|
2763
2763
|
}
|
|
2764
|
-
function
|
|
2764
|
+
function Rr(e, t) {
|
|
2765
2765
|
let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("from \"./");
|
|
2766
2766
|
if (r !== -1) {
|
|
2767
2767
|
let t = e.indexOf("\n", r);
|
|
@@ -2770,7 +2770,7 @@ function Lr(e, t) {
|
|
|
2770
2770
|
let i = e.indexOf("const sockets");
|
|
2771
2771
|
return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
|
|
2772
2772
|
}
|
|
2773
|
-
function
|
|
2773
|
+
function zr(e, t) {
|
|
2774
2774
|
let n = `.socket("${t.prefix}", ${t.import})`, r = e.indexOf("const sockets");
|
|
2775
2775
|
if (r === -1) return e;
|
|
2776
2776
|
let i = e.indexOf("new SocketRouter", r);
|
|
@@ -2784,7 +2784,7 @@ function Rr(e, t) {
|
|
|
2784
2784
|
}
|
|
2785
2785
|
return e;
|
|
2786
2786
|
}
|
|
2787
|
-
function
|
|
2787
|
+
function Br(e) {
|
|
2788
2788
|
if (e.includes("wsAuthenticate")) return e;
|
|
2789
2789
|
let t = e.indexOf("from \"@backend/libs/websocket/socket-router\""), n = e;
|
|
2790
2790
|
if (t !== -1) {
|
|
@@ -2793,14 +2793,14 @@ function zr(e) {
|
|
|
2793
2793
|
}
|
|
2794
2794
|
return n.replace("new SocketRouter()", "new SocketRouter({ authenticate: wsAuthenticate })");
|
|
2795
2795
|
}
|
|
2796
|
-
async function
|
|
2796
|
+
async function Vr(e, t, n) {
|
|
2797
2797
|
let r = X("{{frontend.root}}", t), i = u.resolve(n, r, "src/api/sdk.ts");
|
|
2798
2798
|
if (!await Y(i)) return;
|
|
2799
2799
|
let a = await s.readFile(i, "utf-8");
|
|
2800
|
-
for (let t of e) a.includes(`.$configure(${t.import})`) || (a =
|
|
2800
|
+
for (let t of e) a.includes(`.$configure(${t.import})`) || (a = Hr(a, t), a = Ur(a, t));
|
|
2801
2801
|
await s.writeFile(i, a, "utf-8");
|
|
2802
2802
|
}
|
|
2803
|
-
function
|
|
2803
|
+
function Hr(e, t) {
|
|
2804
2804
|
let n = `import { ${t.import} } from "${t.from}";`;
|
|
2805
2805
|
if (e.includes(n)) return e;
|
|
2806
2806
|
let r = e.lastIndexOf("from \"./");
|
|
@@ -2811,57 +2811,57 @@ function Vr(e, t) {
|
|
|
2811
2811
|
let i = e.indexOf("export const sdk");
|
|
2812
2812
|
return i === -1 ? e : e.slice(0, i) + n + "\n\n" + e.slice(i);
|
|
2813
2813
|
}
|
|
2814
|
-
function
|
|
2814
|
+
function Ur(e, t) {
|
|
2815
2815
|
let n = `.$configure(${t.import})`, r = e.indexOf("export const sdk");
|
|
2816
2816
|
if (r === -1) return e;
|
|
2817
2817
|
let i = e.indexOf(";", r);
|
|
2818
2818
|
return i === -1 ? e : e.slice(0, i) + "\n " + n + e.slice(i);
|
|
2819
2819
|
}
|
|
2820
|
-
async function
|
|
2820
|
+
async function Wr(e, t, n) {
|
|
2821
2821
|
let r = u.resolve(n, X("{{backend.utils}}", t), "frontend-url/frontend-url.ts");
|
|
2822
2822
|
if (!await Y(r)) return;
|
|
2823
2823
|
let i = await s.readFile(r, "utf-8");
|
|
2824
|
-
for (let t of e) i.includes(`"${t.path}"`) || (i =
|
|
2824
|
+
for (let t of e) i.includes(`"${t.path}"`) || (i = Gr(i, t));
|
|
2825
2825
|
await s.writeFile(r, i, "utf-8");
|
|
2826
2826
|
}
|
|
2827
|
-
function
|
|
2827
|
+
function Gr(e, t) {
|
|
2828
2828
|
let n = ` "${t.path}": ${t.search};`, r = e.indexOf("type RouteDefinitions = {");
|
|
2829
2829
|
if (r === -1) return e;
|
|
2830
2830
|
let i = e.indexOf("};", r);
|
|
2831
2831
|
return i === -1 ? e : e.slice(0, i) + n + "\n" + e.slice(i);
|
|
2832
2832
|
}
|
|
2833
|
-
var
|
|
2833
|
+
var Kr = "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", qr = {
|
|
2834
2834
|
primary: "primaryNav",
|
|
2835
2835
|
secondary: "secondaryNav",
|
|
2836
2836
|
tertiary: "tertiaryNav",
|
|
2837
2837
|
settings: "settingsNav"
|
|
2838
2838
|
};
|
|
2839
|
-
async function
|
|
2840
|
-
let { entries: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a =
|
|
2841
|
-
await Y(o) ? c = await s.readFile(o, "utf-8") : (await s.mkdir(u.dirname(o), { recursive: !0 }), c =
|
|
2842
|
-
for (let e of t) c.includes(`label: "${e.label}"`) || (c =
|
|
2843
|
-
for (let e of t.toReversed()) c.includes(`label: "${e.label}"`) || (c =
|
|
2839
|
+
async function Jr(e) {
|
|
2840
|
+
let { entries: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = br(i, n), o = u.resolve(r, a, "src/constants/nav.constants.ts"), c;
|
|
2841
|
+
await Y(o) ? c = await s.readFile(o, "utf-8") : (await s.mkdir(u.dirname(o), { recursive: !0 }), c = Kr);
|
|
2842
|
+
for (let e of t) c.includes(`label: "${e.label}"`) || (c = Zr(c, e));
|
|
2843
|
+
for (let e of t.toReversed()) c.includes(`label: "${e.label}"`) || (c = $r(c, e));
|
|
2844
2844
|
await s.writeFile(o, c, "utf-8");
|
|
2845
2845
|
}
|
|
2846
|
-
async function
|
|
2847
|
-
let { postLoginRedirect: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a =
|
|
2846
|
+
async function Yr(e) {
|
|
2847
|
+
let { postLoginRedirect: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = br(i, n), o = u.resolve(r, a, "src/features/auth/constants/auth.constants.ts");
|
|
2848
2848
|
if (!await Y(o)) return;
|
|
2849
2849
|
let c = await s.readFile(o, "utf-8"), l = /export const POST_LOGIN_REDIRECT_PATH = "[^"]*";/;
|
|
2850
2850
|
if (!l.test(c)) return;
|
|
2851
2851
|
let d = c.replace(l, `export const POST_LOGIN_REDIRECT_PATH = "${t}";`);
|
|
2852
2852
|
await s.writeFile(o, d, "utf-8");
|
|
2853
2853
|
}
|
|
2854
|
-
function
|
|
2854
|
+
function Xr(e) {
|
|
2855
2855
|
let t = [e.icon];
|
|
2856
2856
|
if (e.items) for (let n of e.items) t.includes(n.icon) || t.push(n.icon);
|
|
2857
2857
|
return t;
|
|
2858
2858
|
}
|
|
2859
|
-
function
|
|
2860
|
-
let n =
|
|
2861
|
-
for (let e of n) r =
|
|
2859
|
+
function Zr(e, t) {
|
|
2860
|
+
let n = Xr(t), r = e;
|
|
2861
|
+
for (let e of n) r = Qr(r, e);
|
|
2862
2862
|
return r;
|
|
2863
2863
|
}
|
|
2864
|
-
function
|
|
2864
|
+
function Qr(e, t) {
|
|
2865
2865
|
let n = e.match(/import \{([^}]+)\} from "lucide-react";/);
|
|
2866
2866
|
if (!n) return e;
|
|
2867
2867
|
let r = n[1].split(",").map((e) => e.trim()).filter(Boolean);
|
|
@@ -2869,21 +2869,21 @@ function Zr(e, t) {
|
|
|
2869
2869
|
let i = r.findIndex((e) => e.startsWith("type "));
|
|
2870
2870
|
return i === -1 ? r.push(t) : r.splice(i, 0, t), e.replace(n[0], `import { ${r.join(", ")} } from "lucide-react";`);
|
|
2871
2871
|
}
|
|
2872
|
-
function
|
|
2873
|
-
let n =
|
|
2872
|
+
function $r(e, t) {
|
|
2873
|
+
let n = qr[t.group];
|
|
2874
2874
|
if (!n) return e;
|
|
2875
|
-
let r =
|
|
2875
|
+
let r = ti(t), i = RegExp(`export const ${n}: NavEntry\\[\\] = \\[`), a = e.match(i);
|
|
2876
2876
|
if (!a) return e;
|
|
2877
|
-
let o = e.indexOf(a[0]) + a[0].length, s =
|
|
2877
|
+
let o = e.indexOf(a[0]) + a[0].length, s = ei(e, o - 1);
|
|
2878
2878
|
return s === -1 ? e : e.slice(o, s).trim() === "" ? e.slice(0, o) + "\n" + r + "\n" + e.slice(o) : e.slice(0, o) + "\n" + r + e.slice(o);
|
|
2879
2879
|
}
|
|
2880
|
-
function
|
|
2880
|
+
function ei(e, t) {
|
|
2881
2881
|
let n = 0;
|
|
2882
2882
|
for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
|
|
2883
2883
|
else if (e[r] === "]" && (n--, n === 0)) return r;
|
|
2884
2884
|
return -1;
|
|
2885
2885
|
}
|
|
2886
|
-
function
|
|
2886
|
+
function ti(e) {
|
|
2887
2887
|
let t = [];
|
|
2888
2888
|
if (t.push(" {"), t.push(` label: "${e.label}",`), t.push(` icon: ${e.icon},`), e.to && t.push(` to: "${e.to}",`), e.params && t.push(` params: ${e.params},`), e.items && e.items.length > 0) {
|
|
2889
2889
|
t.push(" items: [");
|
|
@@ -2899,14 +2899,14 @@ function ei(e) {
|
|
|
2899
2899
|
} else t.push(" items: [],");
|
|
2900
2900
|
return t.push(" },"), t.join("\n");
|
|
2901
2901
|
}
|
|
2902
|
-
async function
|
|
2902
|
+
async function ni(e, t, n) {
|
|
2903
2903
|
let r = X("{{backend.features}}", t), i = u.resolve(n, r, "organizations/modules/setup-organization/steps/index.ts");
|
|
2904
2904
|
if (!await Y(i)) return;
|
|
2905
2905
|
let a = await s.readFile(i, "utf-8");
|
|
2906
|
-
for (let t of e) a.includes(`from "${t.from}"`) || (a =
|
|
2906
|
+
for (let t of e) a.includes(`from "${t.from}"`) || (a = ri(a, t), a = ii(a, t));
|
|
2907
2907
|
await s.writeFile(i, a, "utf-8");
|
|
2908
2908
|
}
|
|
2909
|
-
function
|
|
2909
|
+
function ri(e, t) {
|
|
2910
2910
|
let n = `import { ${t.import} } from "${t.from}";`, r = e.lastIndexOf("import ");
|
|
2911
2911
|
if (r !== -1) {
|
|
2912
2912
|
let t = e.indexOf("\n", e.indexOf(";", r));
|
|
@@ -2914,38 +2914,38 @@ function ni(e, t) {
|
|
|
2914
2914
|
}
|
|
2915
2915
|
return e.indexOf("type "), n + "\n\n" + e;
|
|
2916
2916
|
}
|
|
2917
|
-
function
|
|
2917
|
+
function ii(e, t) {
|
|
2918
2918
|
let n = ` { id: "${t.id}", execute: (ctx) => ${t.import}(ctx) },`, r = e.match(/export const steps:\s*Step\[\]\s*=\s*\[/);
|
|
2919
2919
|
if (!r) return e;
|
|
2920
|
-
let i = e.indexOf(r[0]) + r[0].length, a =
|
|
2920
|
+
let i = e.indexOf(r[0]) + r[0].length, a = ai(e, i - 1);
|
|
2921
2921
|
return a === -1 ? e : e.slice(i, a).trim() === "" ? e.slice(0, a) + "\n" + n + "\n" + e.slice(a) : e.slice(0, a) + n + "\n" + e.slice(a);
|
|
2922
2922
|
}
|
|
2923
|
-
function
|
|
2923
|
+
function ai(e, t) {
|
|
2924
2924
|
let n = 0;
|
|
2925
2925
|
for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
|
|
2926
2926
|
else if (e[r] === "]" && (n--, n === 0)) return r;
|
|
2927
2927
|
return -1;
|
|
2928
2928
|
}
|
|
2929
|
-
var
|
|
2930
|
-
async function
|
|
2931
|
-
await
|
|
2929
|
+
var oi = "import { type ComponentType } from \"react\";\n\nexport type NavbarAction = {\n id: string;\n component: ComponentType;\n};\n\nexport const navbarActions: NavbarAction[] = [];\n\nexport const userMenuActions: NavbarAction[] = [];\n";
|
|
2930
|
+
async function si(e) {
|
|
2931
|
+
await li({
|
|
2932
2932
|
...e,
|
|
2933
2933
|
arrayName: "navbarActions"
|
|
2934
2934
|
});
|
|
2935
2935
|
}
|
|
2936
|
-
async function
|
|
2937
|
-
await
|
|
2936
|
+
async function ci(e) {
|
|
2937
|
+
await li({
|
|
2938
2938
|
...e,
|
|
2939
2939
|
arrayName: "userMenuActions"
|
|
2940
2940
|
});
|
|
2941
2941
|
}
|
|
2942
|
-
async function
|
|
2943
|
-
let a =
|
|
2944
|
-
await Y(o) ? c = await s.readFile(o, "utf-8") : (await s.mkdir(u.dirname(o), { recursive: !0 }), c =
|
|
2945
|
-
for (let n of e) c =
|
|
2942
|
+
async function li({ actions: e, arrayName: t, paths: n, projectRoot: r, slot: i }) {
|
|
2943
|
+
let a = br(i, n), o = u.resolve(r, a, "src/constants/navbar-actions.tsx"), c;
|
|
2944
|
+
await Y(o) ? c = await s.readFile(o, "utf-8") : (await s.mkdir(u.dirname(o), { recursive: !0 }), c = oi);
|
|
2945
|
+
for (let n of e) c = ui(c, n), c = di(c, n, t);
|
|
2946
2946
|
await s.writeFile(o, c, "utf-8");
|
|
2947
2947
|
}
|
|
2948
|
-
function
|
|
2948
|
+
function ui(e, t) {
|
|
2949
2949
|
let n = `import { ${t.import} } from "${t.from}";`;
|
|
2950
2950
|
if (e.includes(n)) return e;
|
|
2951
2951
|
let r = e.lastIndexOf("import ");
|
|
@@ -2953,38 +2953,38 @@ function li(e, t) {
|
|
|
2953
2953
|
let i = e.indexOf("\n", r);
|
|
2954
2954
|
return i === -1 ? e + "\n" + n : e.slice(0, i + 1) + n + "\n" + e.slice(i + 1);
|
|
2955
2955
|
}
|
|
2956
|
-
function
|
|
2956
|
+
function di(e, t, n) {
|
|
2957
2957
|
let r = e.match(RegExp(`export const ${n}:\\s*NavbarAction\\[\\]\\s*=\\s*\\[`));
|
|
2958
2958
|
if (!r) return e;
|
|
2959
|
-
let i = e.indexOf(r[0]) + r[0].length, a =
|
|
2959
|
+
let i = e.indexOf(r[0]) + r[0].length, a = fi(e, i - 1);
|
|
2960
2960
|
if (a === -1) return e;
|
|
2961
2961
|
let o = e.slice(i, a);
|
|
2962
2962
|
if (o.includes(`id: "${t.id}"`)) return e;
|
|
2963
2963
|
let s = ` { id: "${t.id}", component: ${t.import} },`;
|
|
2964
2964
|
return o.trim() === "" ? e.slice(0, a) + "\n" + s + "\n" + e.slice(a) : e.slice(0, a) + s + "\n" + e.slice(a);
|
|
2965
2965
|
}
|
|
2966
|
-
function
|
|
2966
|
+
function fi(e, t) {
|
|
2967
2967
|
let n = 0;
|
|
2968
2968
|
for (let r = t; r < e.length; r++) if (e[r] === "[") n++;
|
|
2969
2969
|
else if (e[r] === "]" && (n--, n === 0)) return r;
|
|
2970
2970
|
return -1;
|
|
2971
2971
|
}
|
|
2972
|
-
var
|
|
2972
|
+
var pi = new Set([
|
|
2973
2973
|
".ts",
|
|
2974
2974
|
".tsx",
|
|
2975
2975
|
".js",
|
|
2976
2976
|
".jsx"
|
|
2977
2977
|
]);
|
|
2978
|
-
async function
|
|
2978
|
+
async function mi(e) {
|
|
2979
2979
|
let { files: t, paths: n, projectRoot: r, projectName: i } = e;
|
|
2980
2980
|
if (i === "hype-stack") return;
|
|
2981
2981
|
let a = `@${i}/`;
|
|
2982
2982
|
await Promise.all(t.map(async (e) => {
|
|
2983
|
-
let t =
|
|
2984
|
-
i?.isDirectory() ? await
|
|
2983
|
+
let t = mr(e.target, n, r), i = await s.stat(t).catch(() => null);
|
|
2984
|
+
i?.isDirectory() ? await _i(t, a) : i?.isFile() && pi.has(u.extname(t)) && await vi(t, a);
|
|
2985
2985
|
}));
|
|
2986
2986
|
}
|
|
2987
|
-
var
|
|
2987
|
+
var hi = new Set([
|
|
2988
2988
|
".git",
|
|
2989
2989
|
"node_modules",
|
|
2990
2990
|
"dist",
|
|
@@ -2993,48 +2993,48 @@ var mi = new Set([
|
|
|
2993
2993
|
".next",
|
|
2994
2994
|
"coverage"
|
|
2995
2995
|
]);
|
|
2996
|
-
async function hi(e, t) {
|
|
2997
|
-
t !== "hype-stack" && await gi(e, `@${t}/`);
|
|
2998
|
-
}
|
|
2999
2996
|
async function gi(e, t) {
|
|
2997
|
+
t !== "hype-stack" && await _i(e, `@${t}/`);
|
|
2998
|
+
}
|
|
2999
|
+
async function _i(e, t) {
|
|
3000
3000
|
let n = await s.readdir(e, { withFileTypes: !0 });
|
|
3001
3001
|
await Promise.all(n.map(async (n) => {
|
|
3002
3002
|
let r = u.join(e, n.name);
|
|
3003
3003
|
if (n.isDirectory()) {
|
|
3004
|
-
if (
|
|
3005
|
-
await
|
|
3006
|
-
} else n.isFile() &&
|
|
3004
|
+
if (hi.has(n.name)) return;
|
|
3005
|
+
await _i(r, t);
|
|
3006
|
+
} else n.isFile() && pi.has(u.extname(n.name)) && await vi(r, t);
|
|
3007
3007
|
}));
|
|
3008
3008
|
}
|
|
3009
|
-
async function
|
|
3009
|
+
async function vi(e, t) {
|
|
3010
3010
|
let n = await s.readFile(e, "utf-8");
|
|
3011
|
-
if (!n.includes(
|
|
3012
|
-
let r = n.replaceAll(
|
|
3011
|
+
if (!n.includes(yr)) return;
|
|
3012
|
+
let r = n.replaceAll(yr, t);
|
|
3013
3013
|
await s.writeFile(e, r, "utf-8");
|
|
3014
3014
|
}
|
|
3015
3015
|
//#endregion
|
|
3016
3016
|
//#region src/core/installer.ts
|
|
3017
|
-
function
|
|
3017
|
+
function yi(e, t) {
|
|
3018
3018
|
return e.slot ? t ? t.includes(e.slot) : e.slot === "frontend" : !0;
|
|
3019
3019
|
}
|
|
3020
|
-
async function
|
|
3020
|
+
async function bi(e, t) {
|
|
3021
3021
|
if ((await s.stat(e)).isDirectory()) {
|
|
3022
3022
|
await s.mkdir(t, { recursive: !0 });
|
|
3023
3023
|
let n = await s.readdir(e, { withFileTypes: !0 });
|
|
3024
|
-
for (let r of n) await
|
|
3024
|
+
for (let r of n) await bi(u.join(e, r.name), u.join(t, r.name));
|
|
3025
3025
|
} else await s.mkdir(u.dirname(t), { recursive: !0 }), await s.copyFile(e, t);
|
|
3026
3026
|
}
|
|
3027
|
-
async function
|
|
3028
|
-
let { file: t, packDir: n, paths: r, projectRoot: i } = e, a =
|
|
3027
|
+
async function xi(e) {
|
|
3028
|
+
let { file: t, packDir: n, paths: r, projectRoot: i } = e, a = hr(t.source, n), o = mr(t.target, r, i);
|
|
3029
3029
|
return {
|
|
3030
3030
|
sourcePath: a,
|
|
3031
3031
|
targetPath: o,
|
|
3032
|
-
sourceExists: await Y(a) || await
|
|
3033
|
-
targetExists: await Y(o) || await
|
|
3032
|
+
sourceExists: await Y(a) || await Xn(a),
|
|
3033
|
+
targetExists: await Y(o) || await Xn(o)
|
|
3034
3034
|
};
|
|
3035
3035
|
}
|
|
3036
|
-
async function
|
|
3037
|
-
let { file: t, packDir: n, paths: r, projectRoot: i } = e, { sourcePath: a, targetPath: o, sourceExists: c, targetExists: l } = await
|
|
3036
|
+
async function Si(e) {
|
|
3037
|
+
let { file: t, packDir: n, paths: r, projectRoot: i } = e, { sourcePath: a, targetPath: o, sourceExists: c, targetExists: l } = await xi({
|
|
3038
3038
|
file: t,
|
|
3039
3039
|
packDir: n,
|
|
3040
3040
|
paths: r,
|
|
@@ -3049,8 +3049,8 @@ async function xi(e) {
|
|
|
3049
3049
|
default: return `${t.target}: Unknown strategy: ${String(t.strategy)}`;
|
|
3050
3050
|
}
|
|
3051
3051
|
}
|
|
3052
|
-
async function
|
|
3053
|
-
let { file: t, packDir: n, paths: r, projectRoot: i, force: a, overwrite: o } = e, { sourcePath: c, targetPath: l, sourceExists: u, targetExists: d } = await
|
|
3052
|
+
async function Ci(e) {
|
|
3053
|
+
let { file: t, packDir: n, paths: r, projectRoot: i, force: a, overwrite: o } = e, { sourcePath: c, targetPath: l, sourceExists: u, targetExists: d } = await xi({
|
|
3054
3054
|
file: t,
|
|
3055
3055
|
packDir: n,
|
|
3056
3056
|
paths: r,
|
|
@@ -3068,7 +3068,7 @@ async function Si(e) {
|
|
|
3068
3068
|
status: "skipped",
|
|
3069
3069
|
path: t.target,
|
|
3070
3070
|
reason: "Already exists"
|
|
3071
|
-
} : (await
|
|
3071
|
+
} : (await bi(c, l), {
|
|
3072
3072
|
status: "installed",
|
|
3073
3073
|
path: t.target
|
|
3074
3074
|
});
|
|
@@ -3077,16 +3077,16 @@ async function Si(e) {
|
|
|
3077
3077
|
status: "skipped",
|
|
3078
3078
|
path: t.target,
|
|
3079
3079
|
reason: "Already exists (skip-if-exists)"
|
|
3080
|
-
} : (await
|
|
3080
|
+
} : (await bi(c, l), {
|
|
3081
3081
|
status: "installed",
|
|
3082
3082
|
path: t.target
|
|
3083
3083
|
});
|
|
3084
|
-
case "override": return await
|
|
3084
|
+
case "override": return await bi(c, l), {
|
|
3085
3085
|
status: "installed",
|
|
3086
3086
|
path: t.target
|
|
3087
3087
|
};
|
|
3088
3088
|
case "merge": {
|
|
3089
|
-
if (!d) return await
|
|
3089
|
+
if (!d) return await bi(c, l), {
|
|
3090
3090
|
status: "installed",
|
|
3091
3091
|
path: t.target
|
|
3092
3092
|
};
|
|
@@ -3116,15 +3116,15 @@ async function Si(e) {
|
|
|
3116
3116
|
};
|
|
3117
3117
|
}
|
|
3118
3118
|
}
|
|
3119
|
-
async function
|
|
3119
|
+
async function wi(e) {
|
|
3120
3120
|
let { packs: t, config: n, projectRoot: r, slotsByPack: i } = e, a = n.paths;
|
|
3121
3121
|
if (!a) throw Error("stack.json is missing 'paths' configuration. Run 'hype-stack init' to set it up.");
|
|
3122
3122
|
let o = [], s = /* @__PURE__ */ new Set();
|
|
3123
3123
|
for (let e of t) {
|
|
3124
3124
|
let t = i?.get(e.manifest.name);
|
|
3125
3125
|
for (let n of e.manifest.files) {
|
|
3126
|
-
if (n.strategy !== "create" || !
|
|
3127
|
-
let { targetPath: i, targetExists: c } = await
|
|
3126
|
+
if (n.strategy !== "create" || !yi(n, t)) continue;
|
|
3127
|
+
let { targetPath: i, targetExists: c } = await xi({
|
|
3128
3128
|
file: n,
|
|
3129
3129
|
packDir: e.packDir,
|
|
3130
3130
|
paths: a,
|
|
@@ -3139,13 +3139,13 @@ async function Ci(e) {
|
|
|
3139
3139
|
}
|
|
3140
3140
|
return o;
|
|
3141
3141
|
}
|
|
3142
|
-
async function
|
|
3142
|
+
async function Ti(e) {
|
|
3143
3143
|
let { manifest: t, config: n, projectRoot: r, force: i, packDir: a, slots: o } = e, s = n.paths;
|
|
3144
3144
|
if (!s) throw Error("stack.json is missing 'paths' configuration. Run 'hype-stack init' to set it up.");
|
|
3145
3145
|
let c = [];
|
|
3146
3146
|
for (let e of t.files) {
|
|
3147
|
-
if (!
|
|
3148
|
-
let t = await
|
|
3147
|
+
if (!yi(e, o)) continue;
|
|
3148
|
+
let t = await Si({
|
|
3149
3149
|
file: e,
|
|
3150
3150
|
packDir: a,
|
|
3151
3151
|
paths: s,
|
|
@@ -3156,16 +3156,16 @@ async function wi(e) {
|
|
|
3156
3156
|
}
|
|
3157
3157
|
return c;
|
|
3158
3158
|
}
|
|
3159
|
-
async function
|
|
3159
|
+
async function Ei(e) {
|
|
3160
3160
|
let { manifest: t, config: n, projectRoot: r, force: i, overwrite: a, packDir: o, slots: s } = e, c = n.paths;
|
|
3161
3161
|
if (!c) throw Error("stack.json is missing 'paths' configuration. Run 'hype-stack init' to set it up.");
|
|
3162
3162
|
let l = {
|
|
3163
3163
|
installed: [],
|
|
3164
3164
|
skipped: [],
|
|
3165
3165
|
errors: []
|
|
3166
|
-
}, u = t.files.filter((e) =>
|
|
3166
|
+
}, u = t.files.filter((e) => yi(e, s));
|
|
3167
3167
|
for (let e of u) {
|
|
3168
|
-
let t = await
|
|
3168
|
+
let t = await Ci({
|
|
3169
3169
|
file: e,
|
|
3170
3170
|
packDir: o,
|
|
3171
3171
|
paths: c,
|
|
@@ -3185,40 +3185,40 @@ async function Ti(e) {
|
|
|
3185
3185
|
break;
|
|
3186
3186
|
}
|
|
3187
3187
|
}
|
|
3188
|
-
await
|
|
3188
|
+
await mi({
|
|
3189
3189
|
files: u,
|
|
3190
3190
|
paths: c,
|
|
3191
3191
|
projectRoot: r,
|
|
3192
3192
|
projectName: n.name
|
|
3193
|
-
}), t.env && t.env.length > 0 && await
|
|
3193
|
+
}), t.env && t.env.length > 0 && await xr(t.env, c, r), t.routes && t.routes.length > 0 && await Er(t.routes, c, r), t.context && t.context.length > 0 && await kr(t.context, c, r), t.sockets && t.sockets.length > 0 && await Lr(t.sockets, c, r), t.sdkConfigurations && t.sdkConfigurations.length > 0 && await Vr(t.sdkConfigurations, c, r), t.enums && t.enums.length > 0 && await Fr(t.enums, c, r), t.frontendRoutes && t.frontendRoutes.length > 0 && await Wr(t.frontendRoutes, c, r);
|
|
3194
3194
|
let d = s && s.length > 0 ? s : ["frontend"];
|
|
3195
|
-
for (let e of d) t.nav && t.nav.length > 0 && await
|
|
3195
|
+
for (let e of d) t.nav && t.nav.length > 0 && await Jr({
|
|
3196
3196
|
entries: t.nav,
|
|
3197
3197
|
paths: c,
|
|
3198
3198
|
projectRoot: r,
|
|
3199
3199
|
slot: e
|
|
3200
|
-
}), t.navbarActions && t.navbarActions.length > 0 && await
|
|
3200
|
+
}), t.navbarActions && t.navbarActions.length > 0 && await si({
|
|
3201
3201
|
actions: t.navbarActions,
|
|
3202
3202
|
paths: c,
|
|
3203
3203
|
projectRoot: r,
|
|
3204
3204
|
slot: e
|
|
3205
|
-
}), t.userMenuActions && t.userMenuActions.length > 0 && await
|
|
3205
|
+
}), t.userMenuActions && t.userMenuActions.length > 0 && await ci({
|
|
3206
3206
|
actions: t.userMenuActions,
|
|
3207
3207
|
paths: c,
|
|
3208
3208
|
projectRoot: r,
|
|
3209
3209
|
slot: e
|
|
3210
3210
|
});
|
|
3211
|
-
return t.onboardingSteps && t.onboardingSteps.length > 0 && await
|
|
3211
|
+
return t.onboardingSteps && t.onboardingSteps.length > 0 && await ni(t.onboardingSteps, c, r), t.postLoginRedirect && await Yr({
|
|
3212
3212
|
postLoginRedirect: t.postLoginRedirect,
|
|
3213
3213
|
paths: c,
|
|
3214
3214
|
projectRoot: r,
|
|
3215
3215
|
slot: d[0]
|
|
3216
3216
|
}), l;
|
|
3217
3217
|
}
|
|
3218
|
-
async function
|
|
3218
|
+
async function Di(e) {
|
|
3219
3219
|
let { packs: t, config: n, projectRoot: r, force: i, overwrite: a, slotsByPack: o } = e, s = [];
|
|
3220
3220
|
for (let e of t) {
|
|
3221
|
-
let t = o?.get(e.manifest.name), a = await
|
|
3221
|
+
let t = o?.get(e.manifest.name), a = await Ti({
|
|
3222
3222
|
manifest: e.manifest,
|
|
3223
3223
|
config: n,
|
|
3224
3224
|
projectRoot: r,
|
|
@@ -3238,7 +3238,7 @@ async function Ei(e) {
|
|
|
3238
3238
|
};
|
|
3239
3239
|
let c = [], l = [], u = [], d = [], f = n;
|
|
3240
3240
|
for (let e of t) {
|
|
3241
|
-
let t = o?.get(e.manifest.name), n = await
|
|
3241
|
+
let t = o?.get(e.manifest.name), n = await Ei({
|
|
3242
3242
|
manifest: e.manifest,
|
|
3243
3243
|
config: f,
|
|
3244
3244
|
projectRoot: r,
|
|
@@ -3247,7 +3247,7 @@ async function Ei(e) {
|
|
|
3247
3247
|
packDir: e.packDir,
|
|
3248
3248
|
slots: t
|
|
3249
3249
|
});
|
|
3250
|
-
c.push(...n.installed), l.push(...n.skipped), u.push(...n.errors), f = await
|
|
3250
|
+
c.push(...n.installed), l.push(...n.skipped), u.push(...n.errors), f = await Oi(f, e.manifest.name, r), d.push(e.manifest.name);
|
|
3251
3251
|
}
|
|
3252
3252
|
return {
|
|
3253
3253
|
installed: c,
|
|
@@ -3258,19 +3258,19 @@ async function Ei(e) {
|
|
|
3258
3258
|
config: f
|
|
3259
3259
|
};
|
|
3260
3260
|
}
|
|
3261
|
-
async function
|
|
3261
|
+
async function Oi(e, t, n) {
|
|
3262
3262
|
let r = {
|
|
3263
3263
|
...e,
|
|
3264
3264
|
installedPacks: [...e.installedPacks ?? [], t]
|
|
3265
3265
|
};
|
|
3266
|
-
return await
|
|
3266
|
+
return await sr(n, r), r;
|
|
3267
3267
|
}
|
|
3268
|
-
async function
|
|
3268
|
+
async function ki(e) {
|
|
3269
3269
|
let { manifest: t, config: n, projectRoot: r, templateDir: i } = e, a = n.paths;
|
|
3270
3270
|
if (!a) throw Error("stack.json is missing 'paths' configuration. Run 'hype-stack init' to set it up.");
|
|
3271
3271
|
let o = [], s = [];
|
|
3272
3272
|
for (let e of t.files) {
|
|
3273
|
-
let t = await
|
|
3273
|
+
let t = await Ci({
|
|
3274
3274
|
file: e,
|
|
3275
3275
|
packDir: i,
|
|
3276
3276
|
paths: a,
|
|
@@ -3288,11 +3288,11 @@ async function Oi(e) {
|
|
|
3288
3288
|
case "skipped": break;
|
|
3289
3289
|
}
|
|
3290
3290
|
}
|
|
3291
|
-
return t.frontendRoutes && t.frontendRoutes.length > 0 && await
|
|
3291
|
+
return t.frontendRoutes && t.frontendRoutes.length > 0 && await Wr(t.frontendRoutes, a, r), t.nav && t.nav.length > 0 && await Jr({
|
|
3292
3292
|
entries: t.nav,
|
|
3293
3293
|
paths: a,
|
|
3294
3294
|
projectRoot: r
|
|
3295
|
-
}), t.postLoginRedirect && await
|
|
3295
|
+
}), t.postLoginRedirect && await Yr({
|
|
3296
3296
|
postLoginRedirect: t.postLoginRedirect,
|
|
3297
3297
|
paths: a,
|
|
3298
3298
|
projectRoot: r
|
|
@@ -3303,28 +3303,28 @@ async function Oi(e) {
|
|
|
3303
3303
|
}
|
|
3304
3304
|
//#endregion
|
|
3305
3305
|
//#region src/core/pack-categories.ts
|
|
3306
|
-
var
|
|
3306
|
+
var Ai = [
|
|
3307
3307
|
"starter",
|
|
3308
3308
|
"layout",
|
|
3309
3309
|
"feature"
|
|
3310
|
-
],
|
|
3310
|
+
], ji = {
|
|
3311
3311
|
starter: "Starter",
|
|
3312
3312
|
layout: "Layout",
|
|
3313
3313
|
feature: "Features"
|
|
3314
|
-
},
|
|
3315
|
-
function
|
|
3314
|
+
}, Mi = new Set(["starter", "layout"]), Ni = "layout-basic";
|
|
3315
|
+
function Pi(e, t = {}) {
|
|
3316
3316
|
let n = [];
|
|
3317
|
-
for (let r of
|
|
3317
|
+
for (let r of Ai) {
|
|
3318
3318
|
let i = e.filter((e) => e.category === r);
|
|
3319
3319
|
if (i.length === 0) continue;
|
|
3320
|
-
let a =
|
|
3320
|
+
let a = Mi.has(r) ? "single" : "multiple";
|
|
3321
3321
|
if (r === "layout") {
|
|
3322
|
-
n.push(
|
|
3322
|
+
n.push(Fi("frontend", i)), t.adminAvailable && n.push(Fi("admin", i));
|
|
3323
3323
|
continue;
|
|
3324
3324
|
}
|
|
3325
3325
|
n.push({
|
|
3326
3326
|
category: r,
|
|
3327
|
-
label:
|
|
3327
|
+
label: ji[r],
|
|
3328
3328
|
mode: a,
|
|
3329
3329
|
packs: i,
|
|
3330
3330
|
preselect: null
|
|
@@ -3332,20 +3332,20 @@ function Ni(e, t = {}) {
|
|
|
3332
3332
|
}
|
|
3333
3333
|
return n;
|
|
3334
3334
|
}
|
|
3335
|
-
function
|
|
3336
|
-
let n = t.some((e) => e.name ===
|
|
3335
|
+
function Fi(e, t) {
|
|
3336
|
+
let n = t.some((e) => e.name === Ni);
|
|
3337
3337
|
return {
|
|
3338
3338
|
category: "layout",
|
|
3339
3339
|
label: e === "admin" ? "Admin Layout" : "Layout",
|
|
3340
3340
|
mode: "single",
|
|
3341
3341
|
packs: t,
|
|
3342
|
-
preselect: n ?
|
|
3342
|
+
preselect: n ? Ni : null,
|
|
3343
3343
|
slot: e
|
|
3344
3344
|
};
|
|
3345
3345
|
}
|
|
3346
3346
|
//#endregion
|
|
3347
3347
|
//#region src/core/resolve.ts
|
|
3348
|
-
function
|
|
3348
|
+
function Ii(e) {
|
|
3349
3349
|
let t = /* @__PURE__ */ new Map();
|
|
3350
3350
|
for (let n of e) t.set(n.name, {
|
|
3351
3351
|
name: n.name,
|
|
@@ -3353,7 +3353,7 @@ function Fi(e) {
|
|
|
3353
3353
|
});
|
|
3354
3354
|
return t;
|
|
3355
3355
|
}
|
|
3356
|
-
function
|
|
3356
|
+
function Li(e, t, n = /* @__PURE__ */ new Set()) {
|
|
3357
3357
|
let r = /* @__PURE__ */ new Set();
|
|
3358
3358
|
function i(e) {
|
|
3359
3359
|
if (n.has(e)) return [];
|
|
@@ -3367,10 +3367,10 @@ function Ii(e, t, n = /* @__PURE__ */ new Set()) {
|
|
|
3367
3367
|
}
|
|
3368
3368
|
return i(e);
|
|
3369
3369
|
}
|
|
3370
|
-
function
|
|
3370
|
+
function Ri(e, t, n = []) {
|
|
3371
3371
|
let r = new Set(n), i = new Set(n), a = [];
|
|
3372
3372
|
for (let n of e) {
|
|
3373
|
-
let e =
|
|
3373
|
+
let e = Li(n, t, new Set(i));
|
|
3374
3374
|
for (let t of e) i.has(t) || (i.add(t), a.push(t));
|
|
3375
3375
|
}
|
|
3376
3376
|
return {
|
|
@@ -3378,7 +3378,7 @@ function Li(e, t, n = []) {
|
|
|
3378
3378
|
alreadyInstalled: e.filter((e) => r.has(e))
|
|
3379
3379
|
};
|
|
3380
3380
|
}
|
|
3381
|
-
function
|
|
3381
|
+
function zi(e) {
|
|
3382
3382
|
let { order: t, graph: n, isLocked: r, installed: i = [] } = e, a = new Set(i), o = /* @__PURE__ */ new Set();
|
|
3383
3383
|
for (let e of t) {
|
|
3384
3384
|
let t = n.get(e)?.dependencies.some((e) => !a.has(e) && o.has(e)) ?? !1;
|
|
@@ -3391,7 +3391,7 @@ function Ri(e) {
|
|
|
3391
3391
|
}
|
|
3392
3392
|
//#endregion
|
|
3393
3393
|
//#region src/core/variants.ts
|
|
3394
|
-
function
|
|
3394
|
+
function Bi(e, t = {}) {
|
|
3395
3395
|
let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
|
|
3396
3396
|
for (let i of e) {
|
|
3397
3397
|
let e = t[i.family] ?? i.default;
|
|
@@ -3403,14 +3403,14 @@ function zi(e, t = {}) {
|
|
|
3403
3403
|
familyOf: r
|
|
3404
3404
|
};
|
|
3405
3405
|
}
|
|
3406
|
-
function
|
|
3406
|
+
function Vi(e, t, n) {
|
|
3407
3407
|
return [...e.map((e) => n.chosen.get(e.family) ?? e.default), ...t];
|
|
3408
3408
|
}
|
|
3409
|
-
function
|
|
3409
|
+
function Hi(e, t) {
|
|
3410
3410
|
let n = t.familyOf.get(e);
|
|
3411
3411
|
return n ? t.chosen.get(n) ?? e : e;
|
|
3412
3412
|
}
|
|
3413
|
-
function
|
|
3413
|
+
function Ui(e, t) {
|
|
3414
3414
|
let n = /* @__PURE__ */ new Map();
|
|
3415
3415
|
for (let t of e) t.family && n.set(t.name, t.family);
|
|
3416
3416
|
let r = new Set(t), i = /* @__PURE__ */ new Map();
|
|
@@ -3426,83 +3426,71 @@ function Hi(e, t) {
|
|
|
3426
3426
|
familyOf: n
|
|
3427
3427
|
};
|
|
3428
3428
|
}
|
|
3429
|
-
function
|
|
3429
|
+
function Wi(e, t) {
|
|
3430
3430
|
return e.map((e) => ({
|
|
3431
3431
|
...e,
|
|
3432
|
-
dependencies: e.dependencies.map((e) =>
|
|
3432
|
+
dependencies: e.dependencies.map((e) => Hi(e, t))
|
|
3433
3433
|
}));
|
|
3434
3434
|
}
|
|
3435
3435
|
//#endregion
|
|
3436
3436
|
//#region src/ui/banner.ts
|
|
3437
|
-
var
|
|
3437
|
+
var Gi = [
|
|
3438
3438
|
" ██╗ ██╗ ██╗ ██╗ ██████╗ ███████╗",
|
|
3439
3439
|
" ██║ ██║ ╚██╗ ██╔╝ ██╔══██╗ ██╔════╝",
|
|
3440
3440
|
" ███████║ ╚████╔╝ ██████╔╝ █████╗ ",
|
|
3441
3441
|
" ██╔══██║ ╚██╔╝ ██╔═══╝ ██╔══╝ ",
|
|
3442
3442
|
" ██║ ██║ ██║ ██║ ███████╗",
|
|
3443
3443
|
" ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝"
|
|
3444
|
-
],
|
|
3444
|
+
], Ki = [
|
|
3445
3445
|
" ███████╗ ████████╗ █████╗ ██████╗ ██╗ ██╗",
|
|
3446
3446
|
" ██╔════╝ ╚══██╔══╝ ██╔══██╗ ██╔════╝ ██║ ██╔╝",
|
|
3447
3447
|
" ███████╗ ██║ ███████║ ██║ █████╔╝ ",
|
|
3448
3448
|
" ╚════██║ ██║ ██╔══██║ ██║ ██╔═██╗ ",
|
|
3449
3449
|
" ███████║ ██║ ██║ ██║ ╚██████╗ ██║ ██╗",
|
|
3450
3450
|
" ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝"
|
|
3451
|
-
],
|
|
3451
|
+
], qi = [
|
|
3452
3452
|
253,
|
|
3453
3453
|
176,
|
|
3454
3454
|
21
|
|
3455
|
-
],
|
|
3455
|
+
], Ji = [
|
|
3456
3456
|
245,
|
|
3457
3457
|
76,
|
|
3458
3458
|
2
|
|
3459
|
-
],
|
|
3459
|
+
], Yi = 5, Xi = [
|
|
3460
3460
|
17,
|
|
3461
3461
|
103,
|
|
3462
3462
|
248
|
|
3463
|
-
],
|
|
3463
|
+
], Zi = [
|
|
3464
3464
|
42,
|
|
3465
3465
|
160,
|
|
3466
3466
|
250
|
|
3467
|
-
],
|
|
3468
|
-
function
|
|
3467
|
+
], Qi = .2;
|
|
3468
|
+
function $i() {
|
|
3469
3469
|
console.log();
|
|
3470
|
-
for (let e of
|
|
3471
|
-
start:
|
|
3472
|
-
end:
|
|
3473
|
-
angle:
|
|
3470
|
+
for (let e of pe(Gi, {
|
|
3471
|
+
start: qi,
|
|
3472
|
+
end: Ji,
|
|
3473
|
+
angle: Yi
|
|
3474
3474
|
})) console.log(c.bold(e));
|
|
3475
|
-
for (let e of
|
|
3476
|
-
start:
|
|
3477
|
-
end:
|
|
3478
|
-
angle:
|
|
3475
|
+
for (let e of pe(Ki, {
|
|
3476
|
+
start: Xi,
|
|
3477
|
+
end: Zi,
|
|
3478
|
+
angle: Qi
|
|
3479
3479
|
})) console.log(c.bold(e));
|
|
3480
|
-
console.log(), console.log(` ${z.spark} ${c.dim("v" + C)} ${c.dim("·")} ${
|
|
3480
|
+
console.log(), console.log(` ${z.spark} ${c.dim("v" + C)} ${c.dim("·")} ${de("Ship web + desktop apps from one codebase")}`), console.log();
|
|
3481
3481
|
}
|
|
3482
|
-
function
|
|
3483
|
-
console.log(), console.log(` ${z.bolt} ${
|
|
3482
|
+
function ea() {
|
|
3483
|
+
console.log(), console.log(` ${z.bolt} ${ce.orange("Hype")}${ce.skyBlue("Stack")} ${c.dim("v" + C)}`), console.log();
|
|
3484
3484
|
}
|
|
3485
3485
|
//#endregion
|
|
3486
3486
|
//#region src/ui/logger.ts
|
|
3487
|
-
function
|
|
3487
|
+
function ta(e) {
|
|
3488
3488
|
o.note(e.map((e) => `${z.arrow} ${e}`).join("\n"), "Next steps");
|
|
3489
3489
|
}
|
|
3490
3490
|
function Z() {
|
|
3491
3491
|
o.cancel(R.muted("Operation cancelled.")), process.exit(0);
|
|
3492
3492
|
}
|
|
3493
3493
|
//#endregion
|
|
3494
|
-
//#region src/core/clone.ts
|
|
3495
|
-
async function ta(e) {
|
|
3496
|
-
let t = await p(w, {
|
|
3497
|
-
dir: e,
|
|
3498
|
-
force: !0
|
|
3499
|
-
});
|
|
3500
|
-
return {
|
|
3501
|
-
dir: t.dir,
|
|
3502
|
-
source: t.source
|
|
3503
|
-
};
|
|
3504
|
-
}
|
|
3505
|
-
//#endregion
|
|
3506
3494
|
//#region src/core/apply-theme.ts
|
|
3507
3495
|
function na(e, t) {
|
|
3508
3496
|
let n = e.indexOf(t);
|
|
@@ -3557,8 +3545,20 @@ async function sa(e, t) {
|
|
|
3557
3545
|
return i === r || await s.writeFile(n, i, "utf-8"), !0;
|
|
3558
3546
|
}
|
|
3559
3547
|
//#endregion
|
|
3548
|
+
//#region src/core/clone.ts
|
|
3549
|
+
async function ca(e) {
|
|
3550
|
+
let t = await p(w, {
|
|
3551
|
+
dir: e,
|
|
3552
|
+
force: !0
|
|
3553
|
+
});
|
|
3554
|
+
return {
|
|
3555
|
+
dir: t.dir,
|
|
3556
|
+
source: t.source
|
|
3557
|
+
};
|
|
3558
|
+
}
|
|
3559
|
+
//#endregion
|
|
3560
3560
|
//#region src/core/editor-config.ts
|
|
3561
|
-
function
|
|
3561
|
+
function la(e) {
|
|
3562
3562
|
let t = {
|
|
3563
3563
|
globs: [],
|
|
3564
3564
|
alwaysApply: !1
|
|
@@ -3593,10 +3593,10 @@ function ca(e) {
|
|
|
3593
3593
|
content: i
|
|
3594
3594
|
};
|
|
3595
3595
|
}
|
|
3596
|
-
function
|
|
3596
|
+
function ua(e) {
|
|
3597
3597
|
return e.frontmatter.globs.length > 0 ? `---\npaths:\n${e.frontmatter.globs.map((e) => ` - "${e}"`).join("\n")}\n---\n\n${e.content}` : e.content;
|
|
3598
3598
|
}
|
|
3599
|
-
function
|
|
3599
|
+
function da(e) {
|
|
3600
3600
|
let t;
|
|
3601
3601
|
t = e.frontmatter.alwaysApply ? "always_on" : e.frontmatter.globs.length > 0 ? "glob" : "model_decision";
|
|
3602
3602
|
let n = [`trigger: ${t}`];
|
|
@@ -3606,30 +3606,30 @@ function ua(e) {
|
|
|
3606
3606
|
}
|
|
3607
3607
|
return e.frontmatter.description && n.push(`description: ${e.frontmatter.description}`), `---\n${n.join("\n")}\n---\n\n${e.content}`;
|
|
3608
3608
|
}
|
|
3609
|
-
function
|
|
3609
|
+
function fa(e) {
|
|
3610
3610
|
return e.frontmatter.globs.length > 0 ? `---\napplyTo: "${e.frontmatter.globs.join(", ")}"\n---\n\n${e.content}` : e.content;
|
|
3611
3611
|
}
|
|
3612
|
-
var
|
|
3612
|
+
var pa = {
|
|
3613
3613
|
claude: {
|
|
3614
3614
|
rulesDir: ".claude/rules",
|
|
3615
3615
|
extension: ".md",
|
|
3616
|
-
convert:
|
|
3616
|
+
convert: ua
|
|
3617
3617
|
},
|
|
3618
3618
|
windsurf: {
|
|
3619
3619
|
rulesDir: ".windsurf/rules",
|
|
3620
3620
|
extension: ".md",
|
|
3621
|
-
convert:
|
|
3621
|
+
convert: da
|
|
3622
3622
|
},
|
|
3623
3623
|
copilot: {
|
|
3624
3624
|
rulesDir: ".github/instructions",
|
|
3625
3625
|
extension: ".instructions.md",
|
|
3626
|
-
convert:
|
|
3626
|
+
convert: fa
|
|
3627
3627
|
}
|
|
3628
3628
|
};
|
|
3629
|
-
async function
|
|
3629
|
+
async function ma(e) {
|
|
3630
3630
|
let t = u.join(e, j), n = (await s.readdir(t, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isFile() && e.name.endsWith(".mdc"));
|
|
3631
3631
|
return await Promise.all(n.map(async (e) => {
|
|
3632
|
-
let n = u.join(t, e.name), { frontmatter: r, content: i } =
|
|
3632
|
+
let n = u.join(t, e.name), { frontmatter: r, content: i } = la(await s.readFile(n, "utf-8"));
|
|
3633
3633
|
return {
|
|
3634
3634
|
frontmatter: r,
|
|
3635
3635
|
content: i,
|
|
@@ -3637,31 +3637,31 @@ async function pa(e) {
|
|
|
3637
3637
|
};
|
|
3638
3638
|
}));
|
|
3639
3639
|
}
|
|
3640
|
-
async function
|
|
3640
|
+
async function ha(e, t) {
|
|
3641
3641
|
if (t === "cursor") return;
|
|
3642
|
-
let n =
|
|
3642
|
+
let n = pa[t], r = await ma(e), i = u.join(e, n.rulesDir);
|
|
3643
3643
|
await s.mkdir(i, { recursive: !0 }), await Promise.all(r.map((e) => {
|
|
3644
3644
|
let t = n.convert(e), r = e.filename.replace(/\.mdc$/, n.extension);
|
|
3645
3645
|
return s.writeFile(u.join(i, r), t, "utf-8");
|
|
3646
|
-
})), await
|
|
3646
|
+
})), await tr(u.join(e, ne)), await tr(u.join(e, M));
|
|
3647
3647
|
}
|
|
3648
3648
|
//#endregion
|
|
3649
3649
|
//#region src/core/env-files.ts
|
|
3650
|
-
var
|
|
3650
|
+
var ga = [
|
|
3651
3651
|
"apps",
|
|
3652
3652
|
"packages",
|
|
3653
3653
|
"libs",
|
|
3654
3654
|
"shared"
|
|
3655
3655
|
];
|
|
3656
|
-
async function
|
|
3657
|
-
let t = await
|
|
3656
|
+
async function _a(e) {
|
|
3657
|
+
let t = await va(e);
|
|
3658
3658
|
return (await Promise.all(t.map(async (t) => {
|
|
3659
3659
|
let n = u.join(u.dirname(t), ".env");
|
|
3660
3660
|
return await Y(n) ? null : (await s.copyFile(t, n), u.relative(e, n));
|
|
3661
3661
|
}))).filter((e) => e !== null).sort();
|
|
3662
3662
|
}
|
|
3663
|
-
async function
|
|
3664
|
-
let t = [u.join(e, ".env.example")], n = await Promise.all(
|
|
3663
|
+
async function va(e) {
|
|
3664
|
+
let t = [u.join(e, ".env.example")], n = await Promise.all(ga.map(async (t) => {
|
|
3665
3665
|
let n = u.join(e, t);
|
|
3666
3666
|
return (await s.readdir(n, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isDirectory()).map((e) => u.join(n, e.name, ".env.example"));
|
|
3667
3667
|
}));
|
|
@@ -3669,11 +3669,11 @@ async function _a(e) {
|
|
|
3669
3669
|
}
|
|
3670
3670
|
//#endregion
|
|
3671
3671
|
//#region src/core/post-clone.ts
|
|
3672
|
-
var Q = "@hype-stack/",
|
|
3673
|
-
async function ya(e) {
|
|
3674
|
-
await er(u.join(e, ".git"));
|
|
3675
|
-
}
|
|
3672
|
+
var Q = "@hype-stack/", ya = "hype-stack";
|
|
3676
3673
|
async function ba(e) {
|
|
3674
|
+
await tr(u.join(e, ".git"));
|
|
3675
|
+
}
|
|
3676
|
+
async function xa(e) {
|
|
3677
3677
|
await J("git", ["init"], { cwd: e }), await J("git", ["add", "."], { cwd: e }), await J("git", [
|
|
3678
3678
|
"-c",
|
|
3679
3679
|
"user.name=Hype Stack CLI",
|
|
@@ -3684,22 +3684,22 @@ async function ba(e) {
|
|
|
3684
3684
|
"Initial commit from Hype Stack CLI"
|
|
3685
3685
|
], { cwd: e });
|
|
3686
3686
|
}
|
|
3687
|
-
async function
|
|
3688
|
-
let n = `@${t}/`, r = await
|
|
3687
|
+
async function Sa(e, t) {
|
|
3688
|
+
let n = `@${t}/`, r = await Ea(e);
|
|
3689
3689
|
for (let e of r) {
|
|
3690
|
-
let t = await
|
|
3690
|
+
let t = await Qn(e);
|
|
3691
3691
|
if (!t) continue;
|
|
3692
3692
|
let r = !1;
|
|
3693
|
-
t.name?.startsWith(Q) && (t.name = t.name.replace(Q, n), r = !0),
|
|
3693
|
+
t.name?.startsWith(Q) && (t.name = t.name.replace(Q, n), r = !0), Ca(t.dependencies, n) && (r = !0), Ca(t.devDependencies, n) && (r = !0), t.nx && wa(t.nx, n) && (r = !0);
|
|
3694
3694
|
let i = await s.readFile(e, "utf-8");
|
|
3695
3695
|
if (i.includes(Q)) {
|
|
3696
3696
|
let t = i.replaceAll(Q, n);
|
|
3697
3697
|
await s.writeFile(e, t, "utf-8");
|
|
3698
|
-
} else r && await
|
|
3698
|
+
} else r && await $n(e, t);
|
|
3699
3699
|
}
|
|
3700
|
-
await
|
|
3700
|
+
await gi(e, t), await Ta(e, t);
|
|
3701
3701
|
}
|
|
3702
|
-
function
|
|
3702
|
+
function Ca(e, t) {
|
|
3703
3703
|
if (!e) return !1;
|
|
3704
3704
|
let n = !1;
|
|
3705
3705
|
for (let r of Object.keys(e)) if (r.startsWith(Q)) {
|
|
@@ -3708,7 +3708,7 @@ function Sa(e, t) {
|
|
|
3708
3708
|
}
|
|
3709
3709
|
return n;
|
|
3710
3710
|
}
|
|
3711
|
-
function
|
|
3711
|
+
function wa(e, t) {
|
|
3712
3712
|
if (!e) return !1;
|
|
3713
3713
|
let n = !1;
|
|
3714
3714
|
if (e.implicitDependencies &&= e.implicitDependencies.map((e) => e.startsWith(Q) ? (n = !0, e.replace(Q, t)) : e), e.targets) {
|
|
@@ -3716,13 +3716,13 @@ function Ca(e, t) {
|
|
|
3716
3716
|
}
|
|
3717
3717
|
return n;
|
|
3718
3718
|
}
|
|
3719
|
-
async function
|
|
3719
|
+
async function Ta(e, t) {
|
|
3720
3720
|
let n = u.join(e, "packages/enums/src/app/index.ts"), r = await s.readFile(n, "utf-8").catch(() => null);
|
|
3721
3721
|
if (!r) return;
|
|
3722
|
-
let i = t.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" "), a = r.replaceAll(`id: "${
|
|
3722
|
+
let i = t.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" "), a = r.replaceAll(`id: "${ya}"`, `id: "${t}"`).replaceAll(`name: "${ya}"`, `name: "${t}"`).replace(/name: "Hype Stack"/, `name: "${i}"`).replace(/description: ".*?"/, `description: "${i} application"`);
|
|
3723
3723
|
await s.writeFile(n, a, "utf-8");
|
|
3724
3724
|
}
|
|
3725
|
-
async function
|
|
3725
|
+
async function Ea(e) {
|
|
3726
3726
|
let t = [], n = u.join(e, "package.json");
|
|
3727
3727
|
(await s.stat(n).catch(() => null))?.isFile() && t.push(n);
|
|
3728
3728
|
for (let n of [
|
|
@@ -3742,13 +3742,13 @@ async function Ta(e) {
|
|
|
3742
3742
|
}
|
|
3743
3743
|
//#endregion
|
|
3744
3744
|
//#region src/core/post-setup.ts
|
|
3745
|
-
async function
|
|
3745
|
+
async function Da() {
|
|
3746
3746
|
return (await J("docker", ["info"], { cwd: process.cwd() })).exitCode === 0;
|
|
3747
3747
|
}
|
|
3748
|
-
async function
|
|
3748
|
+
async function Oa(e) {
|
|
3749
3749
|
return Y(`${e}/apps/backend/.env`);
|
|
3750
3750
|
}
|
|
3751
|
-
async function
|
|
3751
|
+
async function ka(e, t, n) {
|
|
3752
3752
|
let r = n ? `Start services with ${R.command("docker compose up -d")}?` : `Docker is not running. Start services with ${R.command("docker compose up -d")}?`, i = t ? !0 : await o.confirm({
|
|
3753
3753
|
message: r,
|
|
3754
3754
|
initialValue: !0
|
|
@@ -3761,7 +3761,7 @@ async function Oa(e, t, n) {
|
|
|
3761
3761
|
"-d"
|
|
3762
3762
|
], { cwd: `${e}/apps/backend` })).exitCode === 0 ? (a.stop(R.success("Docker services started")), !0) : (a.stop(R.warning("Failed to start Docker services")), o.log.warn(R.muted("Run `docker compose up -d` in apps/backend manually to start services.")), o.log.info(R.muted("Skipping database migrations.")), !1);
|
|
3763
3763
|
}
|
|
3764
|
-
async function
|
|
3764
|
+
async function Aa(e, t = 15, n = 2e3) {
|
|
3765
3765
|
for (let r = 0; r < t; r++) {
|
|
3766
3766
|
if ((await J("docker", [
|
|
3767
3767
|
"compose",
|
|
@@ -3776,14 +3776,14 @@ async function ka(e, t = 15, n = 2e3) {
|
|
|
3776
3776
|
}
|
|
3777
3777
|
return !1;
|
|
3778
3778
|
}
|
|
3779
|
-
async function
|
|
3780
|
-
if (!await
|
|
3779
|
+
async function ja(e, t, n = {}) {
|
|
3780
|
+
if (!await Oa(e)) {
|
|
3781
3781
|
o.log.warn(`${R.path(".env")} not found in ${R.path("apps/backend")}. Skipping Docker and migrations - configure it first.`);
|
|
3782
3782
|
return;
|
|
3783
3783
|
}
|
|
3784
|
-
if (!await
|
|
3784
|
+
if (!await ka(e, t, await Da())) return;
|
|
3785
3785
|
let r = o.spinner();
|
|
3786
|
-
if (r.start("Waiting for Postgres to be ready..."), !await
|
|
3786
|
+
if (r.start("Waiting for Postgres to be ready..."), !await Aa(e, n.postgresMaxAttempts ?? 15, n.postgresCheckIntervalMs ?? 2e3)) {
|
|
3787
3787
|
r.stop(R.warning("Postgres health check timed out")), o.log.warn(R.muted("Run migrations manually once Postgres is ready: pnpm --filter @internal/backend migration:latest"));
|
|
3788
3788
|
return;
|
|
3789
3789
|
}
|
|
@@ -3819,7 +3819,7 @@ async function Aa(e, t, n = {}) {
|
|
|
3819
3819
|
}
|
|
3820
3820
|
//#endregion
|
|
3821
3821
|
//#region src/core/readme.ts
|
|
3822
|
-
var
|
|
3822
|
+
var Ma = {
|
|
3823
3823
|
cursor: {
|
|
3824
3824
|
label: "Cursor",
|
|
3825
3825
|
rulesDir: ".cursor/rules"
|
|
@@ -3836,24 +3836,24 @@ var ja = {
|
|
|
3836
3836
|
label: "GitHub Copilot",
|
|
3837
3837
|
rulesDir: ".github/instructions"
|
|
3838
3838
|
}
|
|
3839
|
-
},
|
|
3839
|
+
}, Na = {
|
|
3840
3840
|
backend: "Hono API server (Postgres, Prisma, Kysely, Valkey cache, WorkOS auth)",
|
|
3841
3841
|
frontend: "React + Vite app talking to the backend through the typed HyperFetch SDK"
|
|
3842
|
-
},
|
|
3842
|
+
}, Pa = {
|
|
3843
3843
|
enums: "Shared enums and app config used across apps",
|
|
3844
3844
|
cli: "Project tooling and code generators"
|
|
3845
3845
|
};
|
|
3846
|
-
function
|
|
3846
|
+
function Fa(e) {
|
|
3847
3847
|
return e.split(/[-_]/).filter(Boolean).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" ");
|
|
3848
3848
|
}
|
|
3849
|
-
function
|
|
3849
|
+
function Ia(e, t) {
|
|
3850
3850
|
return Object.entries(e).toSorted(([e], [t]) => e.localeCompare(t)).map(([e, n]) => {
|
|
3851
3851
|
let r = t[e];
|
|
3852
3852
|
return r ? `- \`${n}\` - ${r}` : `- \`${n}\``;
|
|
3853
3853
|
});
|
|
3854
3854
|
}
|
|
3855
|
-
function
|
|
3856
|
-
let { projectName: t, editor: n, workspace: r } = e, i =
|
|
3855
|
+
function La(e) {
|
|
3856
|
+
let { projectName: t, editor: n, workspace: r } = e, i = Fa(t), a = Ma[n], o = !!r.apps.backend, s = Ia(r.apps, Na), c = Ia(r.packages, Pa), l = [];
|
|
3857
3857
|
s.length > 0 && l.push(...s), c.length > 0 && l.push(...c), l.push("- `stack.json` - Hype Stack workspace config (apps, paths, installed packs)");
|
|
3858
3858
|
let u = [];
|
|
3859
3859
|
u.push(`# ${i}`), u.push([
|
|
@@ -3961,18 +3961,18 @@ function Ia(e) {
|
|
|
3961
3961
|
"stays useful."
|
|
3962
3962
|
].join("\n")), u.join("\n\n") + "\n";
|
|
3963
3963
|
}
|
|
3964
|
-
async function
|
|
3964
|
+
async function Ra(e, t) {
|
|
3965
3965
|
let n = u.join(e, "README.md");
|
|
3966
|
-
await s.writeFile(n,
|
|
3966
|
+
await s.writeFile(n, La(t), "utf-8");
|
|
3967
3967
|
}
|
|
3968
3968
|
//#endregion
|
|
3969
3969
|
//#region src/core/tracking.ts
|
|
3970
|
-
async function
|
|
3970
|
+
async function za(e) {
|
|
3971
3971
|
try {
|
|
3972
3972
|
let t = {
|
|
3973
|
-
"X-Device-Id":
|
|
3974
|
-
"X-Client-Info":
|
|
3975
|
-
}, n = await
|
|
3973
|
+
"X-Device-Id": Hn(),
|
|
3974
|
+
"X-Client-Info": Un()
|
|
3975
|
+
}, n = await Rn(N()).catch(() => null);
|
|
3976
3976
|
n?.token && (t.Authorization = `Bearer ${n.token}`), await q.createRequest()({
|
|
3977
3977
|
endpoint: "/cli/track",
|
|
3978
3978
|
method: "POST"
|
|
@@ -3981,7 +3981,7 @@ async function Ra(e) {
|
|
|
3981
3981
|
}
|
|
3982
3982
|
//#endregion
|
|
3983
3983
|
//#region src/ui/swatch.ts
|
|
3984
|
-
function
|
|
3984
|
+
function Ba(e) {
|
|
3985
3985
|
let t = e.trim().match(/^oklch\(([^)]+)\)$/i);
|
|
3986
3986
|
if (!t) return null;
|
|
3987
3987
|
let n = t[1].trim().split(/\s+/);
|
|
@@ -4000,78 +4000,85 @@ function za(e) {
|
|
|
4000
4000
|
h: a
|
|
4001
4001
|
};
|
|
4002
4002
|
}
|
|
4003
|
-
function
|
|
4003
|
+
function Va(e) {
|
|
4004
4004
|
return Math.min(255, Math.max(0, Math.round(e)));
|
|
4005
4005
|
}
|
|
4006
|
-
function
|
|
4006
|
+
function Ha(e) {
|
|
4007
4007
|
return e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055;
|
|
4008
4008
|
}
|
|
4009
|
-
function
|
|
4009
|
+
function Ua({ l: e, c: t, h: n }) {
|
|
4010
4010
|
let r = n * Math.PI / 180, i = t * Math.cos(r), a = t * Math.sin(r), o = e + .3963377774 * i + .2158037573 * a, s = e - .1055613458 * i - .0638541728 * a, c = e - .0894841775 * i - 1.291485548 * a, l = o ** 3, u = s ** 3, d = c ** 3, f = 4.0767416621 * l - 3.3077115913 * u + .2309699292 * d, p = -1.2684380042 * l + 2.6097570613 * u - .3413193965 * d, m = -.0041960863 * l - .7034186147 * u + 1.7076146937 * d;
|
|
4011
4011
|
return [
|
|
4012
|
-
|
|
4013
|
-
|
|
4014
|
-
|
|
4012
|
+
Va(Ha(f) * 255),
|
|
4013
|
+
Va(Ha(p) * 255),
|
|
4014
|
+
Va(Ha(m) * 255)
|
|
4015
4015
|
];
|
|
4016
4016
|
}
|
|
4017
|
-
var
|
|
4018
|
-
function
|
|
4017
|
+
var Wa = "\x1B[49m";
|
|
4018
|
+
function Ga(e, t) {
|
|
4019
4019
|
let n = e[t];
|
|
4020
4020
|
if (!n) return c.dim(" ");
|
|
4021
|
-
let r =
|
|
4021
|
+
let r = Ba(n);
|
|
4022
4022
|
if (!r) return c.dim(" ");
|
|
4023
|
-
let [i, a, o] =
|
|
4024
|
-
return `\x1b[48;2;${i};${a};${o}m ${
|
|
4023
|
+
let [i, a, o] = Ua(r);
|
|
4024
|
+
return `\x1b[48;2;${i};${a};${o}m ${Wa}`;
|
|
4025
4025
|
}
|
|
4026
|
-
var
|
|
4026
|
+
var Ka = [
|
|
4027
4027
|
"primary",
|
|
4028
4028
|
"secondary",
|
|
4029
4029
|
"accent"
|
|
4030
4030
|
];
|
|
4031
|
-
function Ka(e) {
|
|
4032
|
-
return Ga.map((t) => Wa(e, t)).join("");
|
|
4033
|
-
}
|
|
4034
4031
|
function qa(e) {
|
|
4035
|
-
return
|
|
4032
|
+
return Ka.map((t) => Ga(e, t)).join("");
|
|
4033
|
+
}
|
|
4034
|
+
function Ja(e) {
|
|
4035
|
+
return `${qa(e.light)} ${c.dim("·")} ${qa(e.dark)}`;
|
|
4036
4036
|
}
|
|
4037
4037
|
//#endregion
|
|
4038
4038
|
//#region src/utils/validate.ts
|
|
4039
|
-
function
|
|
4039
|
+
function Ya(e) {
|
|
4040
4040
|
if (!e.trim()) return "Project name cannot be empty";
|
|
4041
|
-
if (!
|
|
4041
|
+
if (!te.test(e)) return "Project name must be lowercase, alphanumeric, and may contain hyphens, dots, or underscores";
|
|
4042
4042
|
if (e.length > 214) return "Project name is too long (max 214 characters)";
|
|
4043
4043
|
}
|
|
4044
4044
|
//#endregion
|
|
4045
4045
|
//#region src/commands/create.ts
|
|
4046
|
-
async function
|
|
4047
|
-
|
|
4046
|
+
async function Xa(a) {
|
|
4047
|
+
$i(), o.intro(R.brandBold("Create a new Hype Stack project"));
|
|
4048
4048
|
let s = a.yes === !0, c;
|
|
4049
4049
|
if (s && a.name) {
|
|
4050
|
-
let e =
|
|
4050
|
+
let e = Ya(a.name);
|
|
4051
4051
|
e && (o.log.error(e), Z()), c = a.name;
|
|
4052
4052
|
} else {
|
|
4053
4053
|
let e = await o.text({
|
|
4054
4054
|
message: "What is your project named?",
|
|
4055
4055
|
placeholder: "my-app",
|
|
4056
4056
|
initialValue: a.name ?? "",
|
|
4057
|
-
validate: (e) =>
|
|
4057
|
+
validate: (e) => Ya(e ?? "")
|
|
4058
4058
|
});
|
|
4059
4059
|
o.isCancel(e) && Z(), c = e;
|
|
4060
4060
|
}
|
|
4061
4061
|
let l;
|
|
4062
|
-
if (
|
|
4062
|
+
if (a.directory !== void 0) l = a.directory;
|
|
4063
4063
|
else {
|
|
4064
|
-
let e
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4064
|
+
let e;
|
|
4065
|
+
if (a.parentDirectory !== void 0) e = a.parentDirectory;
|
|
4066
|
+
else if (s) e = ".";
|
|
4067
|
+
else {
|
|
4068
|
+
let t = await o.text({
|
|
4069
|
+
message: "Where should we create it? (parent folder, the project gets its own subfolder inside)",
|
|
4070
|
+
placeholder: ".",
|
|
4071
|
+
initialValue: "."
|
|
4072
|
+
});
|
|
4073
|
+
o.isCancel(t) && Z(), e = t;
|
|
4074
|
+
}
|
|
4075
|
+
l = nr(e, c);
|
|
4070
4076
|
}
|
|
4071
|
-
|
|
4072
|
-
|
|
4073
|
-
|
|
4074
|
-
|
|
4077
|
+
let d = u.resolve(l);
|
|
4078
|
+
s || o.note(R.path(d), "Project will be created at");
|
|
4079
|
+
let f = a.editor && A.includes(a.editor) ? a.editor : null, p;
|
|
4080
|
+
if (f) p = f;
|
|
4081
|
+
else if (s) p = "cursor";
|
|
4075
4082
|
else {
|
|
4076
4083
|
let e = await o.select({
|
|
4077
4084
|
message: "Which code editor do you use?",
|
|
@@ -4082,79 +4089,77 @@ async function Ya(a) {
|
|
|
4082
4089
|
})),
|
|
4083
4090
|
initialValue: "cursor"
|
|
4084
4091
|
});
|
|
4085
|
-
o.isCancel(e) && Z(),
|
|
4092
|
+
o.isCancel(e) && Z(), p = e;
|
|
4086
4093
|
}
|
|
4087
|
-
let
|
|
4088
|
-
if (
|
|
4089
|
-
else if (s)
|
|
4094
|
+
let m = a.theme !== void 0 && i(a.theme), h;
|
|
4095
|
+
if (m) h = a.theme;
|
|
4096
|
+
else if (s) h = e;
|
|
4090
4097
|
else {
|
|
4091
4098
|
let t = await o.select({
|
|
4092
4099
|
message: "Pick a color theme",
|
|
4093
4100
|
options: n.map((e) => ({
|
|
4094
4101
|
value: e.name,
|
|
4095
|
-
label: `${
|
|
4096
|
-
hint: e.hint
|
|
4102
|
+
label: `${Ja(e)} ${e.label}`
|
|
4097
4103
|
})),
|
|
4098
4104
|
initialValue: e
|
|
4099
4105
|
});
|
|
4100
|
-
o.isCancel(t) && Z(),
|
|
4106
|
+
o.isCancel(t) && Z(), h = t;
|
|
4101
4107
|
}
|
|
4102
4108
|
if (!s) {
|
|
4103
|
-
let e = k.find((e) => e.value ===
|
|
4109
|
+
let e = k.find((e) => e.value === p)?.label ?? p, n = t.find((e) => e.value === h)?.label ?? h, r = await o.confirm({ message: `Create ${R.highlight(c)} in ${R.path(d)} with ${R.highlight(e)} config and the ${R.highlight(n)} theme?` });
|
|
4104
4110
|
(o.isCancel(r) || !r) && Z();
|
|
4105
4111
|
}
|
|
4106
|
-
|
|
4107
|
-
if (await Yn(h) && !await Xn(h)) {
|
|
4112
|
+
if (await Xn(d) && !await Zn(d)) {
|
|
4108
4113
|
let e = await o.confirm({
|
|
4109
|
-
message: `Directory ${R.path(
|
|
4114
|
+
message: `Directory ${R.path(d)} is not empty. Continue anyway?`,
|
|
4110
4115
|
initialValue: !1
|
|
4111
4116
|
});
|
|
4112
4117
|
(o.isCancel(e) || !e) && Z();
|
|
4113
4118
|
}
|
|
4114
4119
|
let g = o.spinner();
|
|
4115
|
-
g.start("Cloning Hype Stack template..."), await
|
|
4120
|
+
g.start("Cloning Hype Stack template..."), await ca(d), g.stop(R.success("Template cloned"));
|
|
4116
4121
|
let _ = o.spinner();
|
|
4117
|
-
_.start("Setting up project..."), await
|
|
4118
|
-
let v = await
|
|
4119
|
-
await
|
|
4122
|
+
_.start("Setting up project..."), await ba(d), await Sa(d, c), await ha(d, p);
|
|
4123
|
+
let v = await cr(d), y = ur(c, v);
|
|
4124
|
+
await sr(d, y), await Ra(d, {
|
|
4120
4125
|
projectName: c,
|
|
4121
|
-
editor:
|
|
4126
|
+
editor: p,
|
|
4122
4127
|
workspace: v
|
|
4123
|
-
}), i(
|
|
4128
|
+
}), i(h) && (await sa(u.resolve(d, y.paths?.frontend.root ?? "apps/frontend"), r(h)) || o.log.warn(R.muted(`Could not find ${R.path("assets/styles.css")} to apply the ${h} theme`))), _.stop(R.success("Project configured"));
|
|
4124
4129
|
let b = o.spinner();
|
|
4125
|
-
b.start("Installing dependencies..."), (await J("pnpm", ["install"], { cwd:
|
|
4130
|
+
b.start("Installing dependencies..."), (await J("pnpm", ["install"], { cwd: d })).exitCode === 0 ? b.stop(R.success("Dependencies installed")) : (b.stop(R.warning("Dependencies installed with warnings")), o.log.warn(R.muted("You may need to run `pnpm install` manually to resolve issues.")));
|
|
4126
4131
|
let x = o.spinner();
|
|
4127
|
-
x.start("Initializing git repository..."), await
|
|
4132
|
+
x.start("Initializing git repository..."), await xa(d), x.stop(R.success("Git repository initialized with clean history"));
|
|
4128
4133
|
let S = o.spinner();
|
|
4129
4134
|
S.start("Creating .env files from examples...");
|
|
4130
|
-
let C = await
|
|
4135
|
+
let C = await _a(d);
|
|
4131
4136
|
if (C.length > 0) {
|
|
4132
4137
|
let e = C.length;
|
|
4133
4138
|
S.stop(R.success(`Created ${e} .env file${e === 1 ? "" : "s"} from examples`));
|
|
4134
4139
|
} else S.stop(R.muted("No .env.example files to copy"));
|
|
4135
4140
|
o.log.success(`${R.brandBold("Hype Stack")} project ${R.highlight(c)} is ready!`);
|
|
4136
|
-
let w = u.relative(process.cwd(),
|
|
4137
|
-
C.length > 0 ? T.push(`Review your ${R.path(".env")} files and fill in any secrets`) : T.push(`Copy ${R.path(".env.example")} to ${R.path(".env")} and configure`),
|
|
4141
|
+
let w = u.relative(process.cwd(), d) || ".", T = [`${R.command(`cd ${w}`)}`];
|
|
4142
|
+
C.length > 0 ? T.push(`Review your ${R.path(".env")} files and fill in any secrets`) : T.push(`Copy ${R.path(".env.example")} to ${R.path(".env")} and configure`), ta(T);
|
|
4138
4143
|
let E = a.setup !== !1 && (s || await o.confirm({
|
|
4139
4144
|
message: "Would you like to start Docker services and run database migrations now?",
|
|
4140
4145
|
initialValue: !0
|
|
4141
4146
|
}));
|
|
4142
|
-
o.isCancel(E) && Z(), E ? await
|
|
4147
|
+
return o.isCancel(E) && Z(), E ? await ja(d, s) : (o.log.info(R.muted("You can start services later:")), ta([
|
|
4143
4148
|
`${R.command("docker compose up -d")} ${R.muted("(in apps/backend - start Postgres, Valkey, RustFS)")}`,
|
|
4144
4149
|
`${R.command("pnpm --filter @internal/backend migration:latest")} ${R.muted("(apply migrations)")}`,
|
|
4145
4150
|
`${R.command("pnpm run generate")} ${R.muted("(generate Prisma client)")}`
|
|
4146
|
-
])),
|
|
4151
|
+
])), ta([`${R.command("pnpm dev")} ${R.muted("(start frontend + backend)")}`]), await za("project_create"), o.outro(R.muted("Happy building!")), d;
|
|
4147
4152
|
}
|
|
4148
4153
|
//#endregion
|
|
4149
4154
|
//#region src/commands/init.ts
|
|
4150
|
-
async function
|
|
4155
|
+
async function Za(e) {
|
|
4151
4156
|
let t = e.cwd ?? process.cwd(), n = e.silent ?? !1;
|
|
4152
|
-
if (n || (
|
|
4157
|
+
if (n || (ea(), o.intro(R.brandBold("Initialize Hype Stack configuration"))), !await dr(t)) {
|
|
4153
4158
|
o.log.error(`This doesn't look like a Hype Stack project. ${R.muted("Expected apps/ directory and package.json")}`), o.outro(R.muted(`Run ${R.command("hype-stack create")} to scaffold a new project.`));
|
|
4154
4159
|
return;
|
|
4155
4160
|
}
|
|
4156
|
-
if (await
|
|
4157
|
-
let e = await
|
|
4161
|
+
if (await or(t)) {
|
|
4162
|
+
let e = await ar(t);
|
|
4158
4163
|
if (e && !n) {
|
|
4159
4164
|
o.log.info(`Found existing ${R.path("stack.json")} for project ${R.highlight(e.name)}`);
|
|
4160
4165
|
let t = await o.confirm({
|
|
@@ -4167,7 +4172,7 @@ async function Xa(e) {
|
|
|
4167
4172
|
}
|
|
4168
4173
|
}
|
|
4169
4174
|
}
|
|
4170
|
-
let r = await
|
|
4175
|
+
let r = await cr(t);
|
|
4171
4176
|
if (!n) {
|
|
4172
4177
|
let e = Object.entries(r.apps), t = Object.entries(r.packages);
|
|
4173
4178
|
if (e.length > 0) {
|
|
@@ -4180,7 +4185,7 @@ async function Xa(e) {
|
|
|
4180
4185
|
}
|
|
4181
4186
|
e.length === 0 && t.length === 0 && o.log.warn("No apps or packages detected in the workspace.");
|
|
4182
4187
|
}
|
|
4183
|
-
let i = (await
|
|
4188
|
+
let i = (await Qn(u.join(t, "package.json")))?.name?.replace(/^@/, "").replace(/\/source$/, "") ?? "my-app", a = i;
|
|
4184
4189
|
if (!n) {
|
|
4185
4190
|
let e = await o.text({
|
|
4186
4191
|
message: "Project name for stack.json?",
|
|
@@ -4189,40 +4194,42 @@ async function Xa(e) {
|
|
|
4189
4194
|
});
|
|
4190
4195
|
o.isCancel(e) && Z(), a = e;
|
|
4191
4196
|
}
|
|
4192
|
-
await
|
|
4197
|
+
await sr(t, ur(a, r)), n || (o.log.success(`${R.path("stack.json")} written successfully`), o.outro(R.muted("Your project is mapped and ready for Hype Stack CLI commands.")));
|
|
4193
4198
|
}
|
|
4194
|
-
async function
|
|
4195
|
-
if (await
|
|
4196
|
-
let n = t.runInit ?? ((e) =>
|
|
4199
|
+
async function Qa(e, t = {}) {
|
|
4200
|
+
if (await or(e)) return e;
|
|
4201
|
+
let n = t.runInit ?? ((e) => Za({
|
|
4197
4202
|
cwd: e,
|
|
4198
4203
|
silent: !0
|
|
4199
|
-
})), r = t.runCreate ?? ((e) =>
|
|
4200
|
-
if (await
|
|
4204
|
+
})), r = t.runCreate ?? ((e) => Xa({ parentDirectory: e }));
|
|
4205
|
+
if (await dr(e)) {
|
|
4201
4206
|
o.log.warn(`No ${R.path("stack.json")} found in ${R.path(e)}.`);
|
|
4202
4207
|
let t = await o.confirm({
|
|
4203
4208
|
message: `Create ${R.path("stack.json")} now?`,
|
|
4204
4209
|
initialValue: !0
|
|
4205
4210
|
});
|
|
4206
|
-
if (o.isCancel(t) || !t) return
|
|
4211
|
+
if (o.isCancel(t) || !t) return null;
|
|
4207
4212
|
await n(e);
|
|
4208
|
-
let r = await
|
|
4209
|
-
return r && o.log.success(`${R.path("stack.json")} created`), r;
|
|
4213
|
+
let r = await or(e);
|
|
4214
|
+
return r && o.log.success(`${R.path("stack.json")} created`), r ? e : null;
|
|
4210
4215
|
}
|
|
4211
4216
|
o.log.warn(`This doesn't look like a Hype Stack project, and there's no ${R.path("stack.json")} here.`);
|
|
4212
4217
|
let i = await o.confirm({
|
|
4213
4218
|
message: `Is ${R.path(e)} where you want to work?`,
|
|
4214
4219
|
initialValue: !0
|
|
4215
4220
|
});
|
|
4216
|
-
if (o.isCancel(i) || !i) return
|
|
4221
|
+
if (o.isCancel(i) || !i) return null;
|
|
4217
4222
|
let a = await o.confirm({
|
|
4218
4223
|
message: "Create a new Hype Stack project here?",
|
|
4219
4224
|
initialValue: !0
|
|
4220
4225
|
});
|
|
4221
|
-
|
|
4226
|
+
if (o.isCancel(a) || !a) return null;
|
|
4227
|
+
let s = await r(e);
|
|
4228
|
+
return await or(s) ? s : null;
|
|
4222
4229
|
}
|
|
4223
4230
|
//#endregion
|
|
4224
4231
|
//#region src/core/npm-deps.ts
|
|
4225
|
-
function
|
|
4232
|
+
function $a(e, t) {
|
|
4226
4233
|
let n = [], r = [];
|
|
4227
4234
|
if (!e) return {
|
|
4228
4235
|
errors: n,
|
|
@@ -4253,7 +4260,7 @@ function Qa(e, t) {
|
|
|
4253
4260
|
operations: r
|
|
4254
4261
|
};
|
|
4255
4262
|
}
|
|
4256
|
-
function
|
|
4263
|
+
function eo(e) {
|
|
4257
4264
|
let t = {};
|
|
4258
4265
|
for (let n of e) if (n) for (let [e, r] of Object.entries(n)) t[e] = {
|
|
4259
4266
|
...t[e],
|
|
@@ -4261,7 +4268,7 @@ function $a(e) {
|
|
|
4261
4268
|
};
|
|
4262
4269
|
return t;
|
|
4263
4270
|
}
|
|
4264
|
-
async function
|
|
4271
|
+
async function to(e, t, n = J) {
|
|
4265
4272
|
let r = [];
|
|
4266
4273
|
for (let i of e) {
|
|
4267
4274
|
let e = u.join(t, i.relativeDir);
|
|
@@ -4297,22 +4304,22 @@ async function eo(e, t, n = J) {
|
|
|
4297
4304
|
function $(e) {
|
|
4298
4305
|
return e instanceof Error ? e.message : String(e);
|
|
4299
4306
|
}
|
|
4300
|
-
async function
|
|
4307
|
+
async function no(e, t, n) {
|
|
4301
4308
|
let r = e.filter((e) => e.tier === "paid" && !t.has(e.name)).map((e) => e.name);
|
|
4302
|
-
return r.length === 0 ? {} :
|
|
4309
|
+
return r.length === 0 ? {} : vr(r, n).catch(() => ({}));
|
|
4303
4310
|
}
|
|
4304
|
-
function
|
|
4311
|
+
function ro(e, t) {
|
|
4305
4312
|
return e === "free" ? R.success("free") : e === "owned" ? R.accent("owned") : `${R.highlight(`$${t}`)} ${R.muted("locked")}`;
|
|
4306
4313
|
}
|
|
4307
|
-
async function
|
|
4314
|
+
async function io(e, t, n) {
|
|
4308
4315
|
let r = e.filter((e) => t(e)), i = e.filter((e) => !t(e));
|
|
4309
|
-
i.length > 0 && o.log.warning(`Skipping ${i.join(", ")} because ${i.length === 1 ? "it depends" : "they depend"} on a pack you don't own yet.`), await
|
|
4316
|
+
i.length > 0 && o.log.warning(`Skipping ${i.join(", ")} because ${i.length === 1 ? "it depends" : "they depend"} on a pack you don't own yet.`), await Yn(r.map((e) => n.get(e)).filter((e) => e !== void 0).map((e) => ({
|
|
4310
4317
|
name: e.name,
|
|
4311
4318
|
displayName: e.displayName,
|
|
4312
4319
|
price: e.price
|
|
4313
4320
|
})));
|
|
4314
4321
|
}
|
|
4315
|
-
function
|
|
4322
|
+
function ao(e, t) {
|
|
4316
4323
|
let n = e.map((e, n) => {
|
|
4317
4324
|
let r = t.get(e), i = r ? r.displayName : e;
|
|
4318
4325
|
return ` ${R.muted(`${n + 1}.`)} ${R.brand(i)}`;
|
|
@@ -4323,10 +4330,10 @@ function io(e, t) {
|
|
|
4323
4330
|
...n
|
|
4324
4331
|
].join("\n"), "Install Plan");
|
|
4325
4332
|
}
|
|
4326
|
-
async function
|
|
4333
|
+
async function oo(e, t) {
|
|
4327
4334
|
let n = [];
|
|
4328
4335
|
for (let r of e) {
|
|
4329
|
-
let e = await
|
|
4336
|
+
let e = await fr(r), i = await pr(r, t);
|
|
4330
4337
|
if (i.status === "denied") throw Error(`Access to "${r}" was denied (${i.reason}). Try 'hype-stack login' or check your license.`);
|
|
4331
4338
|
n.push({
|
|
4332
4339
|
manifest: e,
|
|
@@ -4335,25 +4342,25 @@ async function ao(e, t) {
|
|
|
4335
4342
|
}
|
|
4336
4343
|
return n;
|
|
4337
4344
|
}
|
|
4338
|
-
async function
|
|
4339
|
-
let { prepared: t, paths: n, cwd: r, spinner: i } = e, a =
|
|
4345
|
+
async function so(e) {
|
|
4346
|
+
let { prepared: t, paths: n, cwd: r, spinner: i } = e, a = $a(eo(t.map((e) => e.manifest.dependencies_npm)), n);
|
|
4340
4347
|
if (a.errors.length > 0) {
|
|
4341
4348
|
for (let e of a.errors) o.log.error(e);
|
|
4342
4349
|
return;
|
|
4343
4350
|
}
|
|
4344
4351
|
if (a.operations.length === 0) return;
|
|
4345
4352
|
i.start("Installing npm dependencies...");
|
|
4346
|
-
let s = await
|
|
4353
|
+
let s = await to(a.operations, r);
|
|
4347
4354
|
if (i.stop(s.ok ? "npm dependencies installed" : "npm dependency installation failed"), !s.ok) for (let e of s.errors) o.log.error(e);
|
|
4348
4355
|
}
|
|
4349
|
-
function
|
|
4356
|
+
function co(e) {
|
|
4350
4357
|
let t = e.flatMap((e) => e.manifest.postInstall ?? []), n = [...new Set(t)];
|
|
4351
4358
|
n.length !== 0 && o.note(n.map((e) => ` ${R.muted("→")} ${e}`).join("\n"), "Next Steps");
|
|
4352
4359
|
}
|
|
4353
|
-
async function
|
|
4360
|
+
async function lo(e) {
|
|
4354
4361
|
let { prepared: t, config: n, cwd: r, force: i, yes: a, slotsByPack: s } = e, c = /* @__PURE__ */ new Set();
|
|
4355
4362
|
if (i) return c;
|
|
4356
|
-
let l = await
|
|
4363
|
+
let l = await wi({
|
|
4357
4364
|
packs: t,
|
|
4358
4365
|
config: n,
|
|
4359
4366
|
projectRoot: r,
|
|
@@ -4373,135 +4380,137 @@ async function co(e) {
|
|
|
4373
4380
|
}
|
|
4374
4381
|
//#endregion
|
|
4375
4382
|
//#region src/commands/compose.ts
|
|
4376
|
-
async function
|
|
4383
|
+
async function uo(e = {}) {
|
|
4377
4384
|
let t = e.cwd ?? process.cwd();
|
|
4378
|
-
|
|
4379
|
-
let n = await
|
|
4385
|
+
ea();
|
|
4386
|
+
let n = await Qa(t), r;
|
|
4380
4387
|
try {
|
|
4381
|
-
r = await
|
|
4388
|
+
r = await ar(n ?? t);
|
|
4382
4389
|
} catch (e) {
|
|
4383
4390
|
o.cancel(`Could not parse ${R.path("stack.json")}: ${$(e)} Run 'hype-stack init' to regenerate it.`), process.exit(1);
|
|
4384
4391
|
}
|
|
4385
|
-
r || (o.cancel(n ? `Could not read ${R.path("stack.json")}. Run 'hype-stack init' to regenerate it, then run 'hype-stack compose' again.` : `No ${R.path("stack.json")}. Run 'hype-stack init' first, then 'hype-stack compose'.`), process.exit(1)), r.paths || (o.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'hype-stack init' again to regenerate it.`), process.exit(1))
|
|
4386
|
-
let i =
|
|
4387
|
-
|
|
4388
|
-
let a;
|
|
4392
|
+
r || (o.cancel(n ? `Could not read ${R.path("stack.json")}. Run 'hype-stack init' to regenerate it, then run 'hype-stack compose' again.` : `No ${R.path("stack.json")}. Run 'hype-stack init' first, then 'hype-stack compose'.`), process.exit(1)), r.paths || (o.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'hype-stack init' again to regenerate it.`), process.exit(1));
|
|
4393
|
+
let i = n ?? t;
|
|
4394
|
+
o.intro(R.brandBold("Compose your stack"));
|
|
4395
|
+
let a = o.spinner();
|
|
4396
|
+
a.start("Loading packs...");
|
|
4397
|
+
let c;
|
|
4389
4398
|
try {
|
|
4390
|
-
|
|
4399
|
+
c = await _r();
|
|
4391
4400
|
} catch (e) {
|
|
4392
|
-
|
|
4393
|
-
}
|
|
4394
|
-
|
|
4395
|
-
let
|
|
4396
|
-
token:
|
|
4397
|
-
key:
|
|
4398
|
-
}),
|
|
4399
|
-
let t =
|
|
4400
|
-
return !t || t.tier === "free" ? "free" :
|
|
4401
|
-
},
|
|
4402
|
-
packs:
|
|
4403
|
-
installedSet:
|
|
4404
|
-
stateOf:
|
|
4401
|
+
a.stop("Failed to load packs"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
|
|
4402
|
+
}
|
|
4403
|
+
a.stop("Packs loaded");
|
|
4404
|
+
let l = r.installedPacks ?? [], u = new Set(l), d = new Map(c.map((e) => [e.name, e])), f = e.licenseKey ?? r.licenseKey ?? null, p = (await Rn(N()))?.token ?? null, m = await no(c, u, {
|
|
4405
|
+
token: p,
|
|
4406
|
+
key: f
|
|
4407
|
+
}), h = (e) => {
|
|
4408
|
+
let t = d.get(e);
|
|
4409
|
+
return !t || t.tier === "free" ? "free" : m[e]?.owned ? "owned" : "locked";
|
|
4410
|
+
}, g = (e) => !u.has(e) && h(e) === "locked", _ = await fo({
|
|
4411
|
+
packs: c,
|
|
4412
|
+
installedSet: u,
|
|
4413
|
+
stateOf: h,
|
|
4405
4414
|
options: e,
|
|
4406
4415
|
adminAvailable: !!r.apps.admin
|
|
4407
4416
|
});
|
|
4408
|
-
if (
|
|
4417
|
+
if (_ === null && (o.cancel("Cancelled."), process.exit(0)), _.length === 0) {
|
|
4409
4418
|
o.outro(R.muted("No packs selected. Nothing to do."));
|
|
4410
4419
|
return;
|
|
4411
4420
|
}
|
|
4412
|
-
let
|
|
4421
|
+
let v = ho(_), y = go(_), b = Ui(c, v), x = Ii(Wi(c, b)), S;
|
|
4413
4422
|
try {
|
|
4414
|
-
|
|
4423
|
+
S = Ri(v, x, l);
|
|
4415
4424
|
} catch (e) {
|
|
4416
4425
|
o.cancel($(e)), process.exit(1);
|
|
4417
4426
|
}
|
|
4418
|
-
if (
|
|
4419
|
-
o.note(`${
|
|
4427
|
+
if (S.order.length === 0) {
|
|
4428
|
+
o.note(`${S.alreadyInstalled.join(", ")} already installed.`, "Nothing to do"), o.outro(R.muted("Your selection is already part of the project."));
|
|
4420
4429
|
return;
|
|
4421
4430
|
}
|
|
4422
|
-
let
|
|
4423
|
-
order:
|
|
4424
|
-
graph:
|
|
4425
|
-
isLocked:
|
|
4426
|
-
installed:
|
|
4431
|
+
let C = zi({
|
|
4432
|
+
order: S.order,
|
|
4433
|
+
graph: x,
|
|
4434
|
+
isLocked: g,
|
|
4435
|
+
installed: l
|
|
4427
4436
|
});
|
|
4428
|
-
if (
|
|
4429
|
-
let e = await
|
|
4430
|
-
e && (
|
|
4431
|
-
token:
|
|
4432
|
-
key:
|
|
4433
|
-
}),
|
|
4434
|
-
order:
|
|
4435
|
-
graph:
|
|
4436
|
-
isLocked:
|
|
4437
|
-
installed:
|
|
4437
|
+
if (C.blocked.length > 0 && !p && !f) {
|
|
4438
|
+
let e = await Jn();
|
|
4439
|
+
e && (p = e, m = await no(c, u, {
|
|
4440
|
+
token: p,
|
|
4441
|
+
key: f
|
|
4442
|
+
}), C = zi({
|
|
4443
|
+
order: S.order,
|
|
4444
|
+
graph: x,
|
|
4445
|
+
isLocked: g,
|
|
4446
|
+
installed: l
|
|
4438
4447
|
}));
|
|
4439
4448
|
}
|
|
4440
|
-
if (
|
|
4449
|
+
if (C.blocked.length > 0 && await io(C.blocked, g, d), C.installable.length === 0) {
|
|
4441
4450
|
o.outro(R.muted("Nothing left to install once locked packs are removed."));
|
|
4442
4451
|
return;
|
|
4443
4452
|
}
|
|
4444
|
-
if (
|
|
4445
|
-
let e = await o.confirm({ message: `Install ${
|
|
4453
|
+
if (ao(C.installable, d), !e.yes) {
|
|
4454
|
+
let e = await o.confirm({ message: `Install ${C.installable.length} pack${C.installable.length === 1 ? "" : "s"}?` });
|
|
4446
4455
|
(o.isCancel(e) || !e) && (o.cancel("Installation cancelled."), process.exit(0));
|
|
4447
4456
|
}
|
|
4448
|
-
|
|
4449
|
-
let
|
|
4457
|
+
a.start("Downloading packs...");
|
|
4458
|
+
let w;
|
|
4450
4459
|
try {
|
|
4451
|
-
|
|
4452
|
-
token:
|
|
4453
|
-
key:
|
|
4460
|
+
w = await oo(C.installable, {
|
|
4461
|
+
token: p,
|
|
4462
|
+
key: f
|
|
4454
4463
|
});
|
|
4455
4464
|
} catch (e) {
|
|
4456
|
-
|
|
4465
|
+
a.stop("Download failed"), o.cancel($(e)), process.exit(1);
|
|
4457
4466
|
}
|
|
4458
|
-
|
|
4459
|
-
let
|
|
4460
|
-
prepared:
|
|
4467
|
+
a.stop(`Downloaded ${w.length} pack${w.length === 1 ? "" : "s"}`);
|
|
4468
|
+
let T = await lo({
|
|
4469
|
+
prepared: w,
|
|
4461
4470
|
config: r,
|
|
4462
|
-
cwd:
|
|
4471
|
+
cwd: i,
|
|
4463
4472
|
force: e.force ?? !1,
|
|
4464
4473
|
yes: e.yes ?? !1,
|
|
4465
|
-
slotsByPack:
|
|
4474
|
+
slotsByPack: y
|
|
4466
4475
|
});
|
|
4467
4476
|
try {
|
|
4468
|
-
|
|
4469
|
-
let
|
|
4470
|
-
packs:
|
|
4477
|
+
a.start("Installing pack files...");
|
|
4478
|
+
let t = await Di({
|
|
4479
|
+
packs: w,
|
|
4471
4480
|
config: r,
|
|
4472
|
-
projectRoot:
|
|
4481
|
+
projectRoot: i,
|
|
4473
4482
|
force: e.force ?? !1,
|
|
4474
|
-
overwrite:
|
|
4475
|
-
slotsByPack:
|
|
4483
|
+
overwrite: T,
|
|
4484
|
+
slotsByPack: y
|
|
4476
4485
|
});
|
|
4477
|
-
if (
|
|
4478
|
-
|
|
4479
|
-
for (let e of
|
|
4486
|
+
if (t.aborted) {
|
|
4487
|
+
a.stop("Installation aborted");
|
|
4488
|
+
for (let e of t.errors) o.log.error(e);
|
|
4480
4489
|
o.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
|
|
4481
4490
|
}
|
|
4482
|
-
|
|
4483
|
-
for (let e of
|
|
4484
|
-
await
|
|
4485
|
-
prepared:
|
|
4491
|
+
a.stop("Files installed"), t.installed.length > 0 && o.log.success(`${R.highlight(String(t.installed.length))} files installed`), t.skipped.length > 0 && o.log.warning(`${t.skipped.length} files skipped (use --force to overwrite)`);
|
|
4492
|
+
for (let e of t.errors) o.log.error(e);
|
|
4493
|
+
await so({
|
|
4494
|
+
prepared: w,
|
|
4486
4495
|
paths: r.paths,
|
|
4487
|
-
cwd:
|
|
4488
|
-
spinner:
|
|
4489
|
-
}), await
|
|
4490
|
-
projectRoot:
|
|
4496
|
+
cwd: i,
|
|
4497
|
+
spinner: a
|
|
4498
|
+
}), await ir({
|
|
4499
|
+
projectRoot: i,
|
|
4491
4500
|
paths: r.paths,
|
|
4492
4501
|
skipPrompts: e.yes ?? !1
|
|
4493
|
-
}),
|
|
4502
|
+
}), co(w), o.outro(R.brand(`Installed ${t.appliedPacks.join(", ")}.`));
|
|
4494
4503
|
} finally {
|
|
4495
|
-
await Promise.all(
|
|
4504
|
+
await Promise.all(w.map((e) => s.rm(e.packDir, {
|
|
4496
4505
|
recursive: !0,
|
|
4497
4506
|
force: !0
|
|
4498
4507
|
})));
|
|
4499
4508
|
}
|
|
4500
4509
|
}
|
|
4501
|
-
async function
|
|
4510
|
+
async function fo(e) {
|
|
4502
4511
|
let { packs: t, installedSet: n, stateOf: r, options: i, adminAvailable: a } = e;
|
|
4503
4512
|
if (i.packs && i.packs.length > 0) {
|
|
4504
|
-
let e = i.packs.map(
|
|
4513
|
+
let e = i.packs.map(mo), n = e.filter((e) => !t.some((t) => t.name === e.name));
|
|
4505
4514
|
return n.length > 0 && (o.cancel(`Unknown pack${n.length === 1 ? "" : "s"}: ${n.map((e) => e.name).join(", ")}`), process.exit(1)), e;
|
|
4506
4515
|
}
|
|
4507
4516
|
let s = t.filter((e) => n.has(e.name));
|
|
@@ -4509,14 +4518,14 @@ async function uo(e) {
|
|
|
4509
4518
|
let c = t.filter((e) => !n.has(e.name));
|
|
4510
4519
|
if (c.length === 0) return o.outro(R.muted("Every available pack is already installed.")), [];
|
|
4511
4520
|
let l = P();
|
|
4512
|
-
o.note(c.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${
|
|
4513
|
-
let u =
|
|
4521
|
+
o.note(c.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${le(`${l}/packs/${e.name}`)}`).join("\n"), "Browse packs");
|
|
4522
|
+
let u = Pi(c, { adminAvailable: a }), d = [];
|
|
4514
4523
|
for (let e of u) {
|
|
4515
4524
|
let t = e.packs.map((e) => {
|
|
4516
4525
|
let t = r(e.name);
|
|
4517
4526
|
return {
|
|
4518
4527
|
value: e.name,
|
|
4519
|
-
label: `${e.displayName} ${
|
|
4528
|
+
label: `${e.displayName} ${ro(t, e.price)}`,
|
|
4520
4529
|
hint: e.description
|
|
4521
4530
|
};
|
|
4522
4531
|
});
|
|
@@ -4543,20 +4552,20 @@ async function uo(e) {
|
|
|
4543
4552
|
}
|
|
4544
4553
|
return d;
|
|
4545
4554
|
}
|
|
4546
|
-
var
|
|
4547
|
-
function
|
|
4548
|
-
let t = e.match(
|
|
4555
|
+
var po = /@(frontend|admin)$/;
|
|
4556
|
+
function mo(e) {
|
|
4557
|
+
let t = e.match(po);
|
|
4549
4558
|
return t ? {
|
|
4550
4559
|
name: e.slice(0, -t[0].length),
|
|
4551
4560
|
slot: t[1]
|
|
4552
4561
|
} : { name: e };
|
|
4553
4562
|
}
|
|
4554
|
-
function
|
|
4563
|
+
function ho(e) {
|
|
4555
4564
|
let t = /* @__PURE__ */ new Set(), n = [];
|
|
4556
4565
|
for (let r of e) t.has(r.name) || (t.add(r.name), n.push(r.name));
|
|
4557
4566
|
return n;
|
|
4558
4567
|
}
|
|
4559
|
-
function
|
|
4568
|
+
function go(e) {
|
|
4560
4569
|
let t = /* @__PURE__ */ new Map();
|
|
4561
4570
|
for (let n of e) {
|
|
4562
4571
|
if (!n.slot) continue;
|
|
@@ -4567,11 +4576,11 @@ function ho(e) {
|
|
|
4567
4576
|
}
|
|
4568
4577
|
//#endregion
|
|
4569
4578
|
//#region src/commands/login.ts
|
|
4570
|
-
async function
|
|
4571
|
-
|
|
4579
|
+
async function _o() {
|
|
4580
|
+
ea(), o.intro(R.brandBold("Log in to Hype Stack")), o.log.step("Opening your browser to sign in...");
|
|
4572
4581
|
let e;
|
|
4573
4582
|
try {
|
|
4574
|
-
e = await
|
|
4583
|
+
e = await qn({ onUrl: (e) => {
|
|
4575
4584
|
o.log.info(`If your browser didn't open, visit:\n ${R.path(e)}`);
|
|
4576
4585
|
} });
|
|
4577
4586
|
} catch (e) {
|
|
@@ -4581,27 +4590,27 @@ async function go() {
|
|
|
4581
4590
|
}
|
|
4582
4591
|
//#endregion
|
|
4583
4592
|
//#region src/commands/logout.ts
|
|
4584
|
-
async function
|
|
4585
|
-
|
|
4586
|
-
let e = N(), t = await
|
|
4593
|
+
async function vo() {
|
|
4594
|
+
ea(), o.intro(R.brandBold("Log out of Hype Stack"));
|
|
4595
|
+
let e = N(), t = await Rn(e);
|
|
4587
4596
|
if (!t) {
|
|
4588
4597
|
o.outro(R.muted("You're not logged in."));
|
|
4589
4598
|
return;
|
|
4590
4599
|
}
|
|
4591
|
-
await
|
|
4600
|
+
await An(t.token).catch(() => null), await Bn(e), o.outro(R.brand("Logged out."));
|
|
4592
4601
|
}
|
|
4593
4602
|
//#endregion
|
|
4594
4603
|
//#region src/core/templates.ts
|
|
4595
|
-
var
|
|
4604
|
+
var yo = q.createRequest()({
|
|
4596
4605
|
endpoint: "/templates/list",
|
|
4597
4606
|
method: "GET"
|
|
4598
4607
|
});
|
|
4599
|
-
async function
|
|
4600
|
-
let { data: e, error: t } = await
|
|
4608
|
+
async function bo() {
|
|
4609
|
+
let { data: e, error: t } = await yo.send();
|
|
4601
4610
|
if (t || !e) throw Error(`Failed to fetch template list: ${String(t)}`);
|
|
4602
4611
|
return e.templates;
|
|
4603
4612
|
}
|
|
4604
|
-
async function
|
|
4613
|
+
async function xo(e) {
|
|
4605
4614
|
let { data: t, error: n, status: r } = await q.createRequest()({
|
|
4606
4615
|
endpoint: `/templates/${encodeURIComponent(e)}/manifest`,
|
|
4607
4616
|
method: "GET"
|
|
@@ -4610,13 +4619,13 @@ async function bo(e) {
|
|
|
4610
4619
|
if (n || !t) throw Error(`Failed to load manifest for template "${e}": ${String(n)}`);
|
|
4611
4620
|
return t;
|
|
4612
4621
|
}
|
|
4613
|
-
async function
|
|
4622
|
+
async function So(e, t = {}) {
|
|
4614
4623
|
let n = q.createRequest()({
|
|
4615
4624
|
endpoint: `/templates/${encodeURIComponent(e)}/download`,
|
|
4616
4625
|
method: "POST"
|
|
4617
4626
|
}), r = {
|
|
4618
|
-
"X-Device-Id":
|
|
4619
|
-
"X-Client-Info":
|
|
4627
|
+
"X-Device-Id": Hn(),
|
|
4628
|
+
"X-Client-Info": Un()
|
|
4620
4629
|
};
|
|
4621
4630
|
t.token && (r.Authorization = `Bearer ${t.token}`);
|
|
4622
4631
|
let { data: i, error: a, success: o } = await n.setPayload({ key: t.licenseKey ?? void 0 }).setHeaders(r).send();
|
|
@@ -4638,159 +4647,161 @@ async function xo(e, t = {}) {
|
|
|
4638
4647
|
}
|
|
4639
4648
|
//#endregion
|
|
4640
4649
|
//#region src/commands/template.ts
|
|
4641
|
-
async function
|
|
4650
|
+
async function Co(e = {}) {
|
|
4642
4651
|
let t = e.cwd ?? process.cwd();
|
|
4643
|
-
|
|
4644
|
-
let n = await
|
|
4652
|
+
ea();
|
|
4653
|
+
let n = await Qa(t), a;
|
|
4645
4654
|
try {
|
|
4646
|
-
a = await
|
|
4655
|
+
a = await ar(n ?? t);
|
|
4647
4656
|
} catch (e) {
|
|
4648
4657
|
o.cancel(`Could not parse ${R.path("stack.json")}: ${$(e)} Run 'hype-stack init' to regenerate it.`), process.exit(1);
|
|
4649
4658
|
}
|
|
4650
|
-
a || (o.cancel(n ? `Could not read ${R.path("stack.json")}. Run 'hype-stack init' to regenerate it, then run 'hype-stack template' again.` : `No ${R.path("stack.json")}. Run 'hype-stack init' first, then 'hype-stack template'.`), process.exit(1)), a.paths || (o.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'hype-stack init' again to regenerate it.`), process.exit(1))
|
|
4651
|
-
let c =
|
|
4652
|
-
|
|
4653
|
-
let l;
|
|
4659
|
+
a || (o.cancel(n ? `Could not read ${R.path("stack.json")}. Run 'hype-stack init' to regenerate it, then run 'hype-stack template' again.` : `No ${R.path("stack.json")}. Run 'hype-stack init' first, then 'hype-stack template'.`), process.exit(1)), a.paths || (o.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'hype-stack init' again to regenerate it.`), process.exit(1));
|
|
4660
|
+
let c = n ?? t;
|
|
4661
|
+
o.intro(R.brandBold("Install a template"));
|
|
4662
|
+
let l = o.spinner();
|
|
4663
|
+
l.start("Loading packs...");
|
|
4664
|
+
let d;
|
|
4654
4665
|
try {
|
|
4655
|
-
|
|
4666
|
+
d = await _r();
|
|
4656
4667
|
} catch (e) {
|
|
4657
|
-
|
|
4668
|
+
l.stop("Failed to load packs"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
|
|
4658
4669
|
}
|
|
4659
|
-
|
|
4660
|
-
let
|
|
4661
|
-
|
|
4662
|
-
let
|
|
4670
|
+
l.stop("Packs loaded");
|
|
4671
|
+
let f = a.installedPacks ?? [], p = new Set(f), m = new Map(d.map((e) => [e.name, e])), h = e.licenseKey ?? a.licenseKey ?? null, g = (await Rn(N()))?.token ?? null;
|
|
4672
|
+
l.start("Loading templates...");
|
|
4673
|
+
let _;
|
|
4663
4674
|
try {
|
|
4664
|
-
|
|
4675
|
+
_ = await bo();
|
|
4665
4676
|
} catch (e) {
|
|
4666
|
-
|
|
4677
|
+
l.stop("Failed to load templates"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
|
|
4667
4678
|
}
|
|
4668
|
-
let
|
|
4669
|
-
if (!
|
|
4670
|
-
e.yes && (
|
|
4679
|
+
let v = e.templateId;
|
|
4680
|
+
if (!v) {
|
|
4681
|
+
e.yes && (l.stop("Template id required"), o.cancel("Pass a template id with `hype-stack template <id>` (required in --yes mode)."), process.exit(1)), _.length === 0 && (l.stop("No templates available"), o.cancel("No templates are available yet. Check back later."), process.exit(1)), l.stop("Templates loaded");
|
|
4671
4682
|
let t = P();
|
|
4672
|
-
o.note(
|
|
4683
|
+
o.note(_.map((e) => ` ${z.arrow} ${R.highlight(e.name)} ${le(`${t}/templates/${e.id}`)}`).join("\n"), "Browse templates");
|
|
4673
4684
|
let n = await o.select({
|
|
4674
4685
|
message: "Choose a template",
|
|
4675
|
-
options:
|
|
4686
|
+
options: _.map((e) => ({
|
|
4676
4687
|
value: e.id,
|
|
4677
4688
|
label: e.name,
|
|
4678
4689
|
hint: e.description
|
|
4679
4690
|
}))
|
|
4680
4691
|
});
|
|
4681
|
-
o.isCancel(n) && (o.cancel("Cancelled."), process.exit(0)),
|
|
4682
|
-
}
|
|
4683
|
-
let
|
|
4684
|
-
|
|
4685
|
-
let
|
|
4686
|
-
packs:
|
|
4687
|
-
templatePacks:
|
|
4688
|
-
installedSet:
|
|
4692
|
+
o.isCancel(n) && (o.cancel("Cancelled."), process.exit(0)), v = n;
|
|
4693
|
+
}
|
|
4694
|
+
let y = _.find((e) => e.id === v);
|
|
4695
|
+
y || (l.stop("Template not found"), o.cancel(`Template "${v}" not found. Available: ${_.map((e) => e.id).join(", ") || "(none)"}`), process.exit(1)), l.stop(`Template: ${y.name}`);
|
|
4696
|
+
let b = await wo(y, e.variants, e.yes ?? !1), x = Bi(y.slots, b), S = Vi(y.slots, y.packs, x), C = await To({
|
|
4697
|
+
packs: d,
|
|
4698
|
+
templatePacks: S,
|
|
4699
|
+
installedSet: p,
|
|
4689
4700
|
options: e
|
|
4690
|
-
}),
|
|
4691
|
-
|
|
4692
|
-
let
|
|
4701
|
+
}), w = [...S, ...C.filter((e) => !S.includes(e))], T = w.filter((e) => !m.has(e));
|
|
4702
|
+
T.length > 0 && (o.cancel(`Unknown pack${T.length === 1 ? "" : "s"}: ${T.join(", ")}`), process.exit(1));
|
|
4703
|
+
let E = Wi(d, x), D = Ii(E), O;
|
|
4693
4704
|
try {
|
|
4694
|
-
|
|
4705
|
+
O = Ri(w, D, f);
|
|
4695
4706
|
} catch (e) {
|
|
4696
4707
|
o.cancel($(e)), process.exit(1);
|
|
4697
4708
|
}
|
|
4698
|
-
if (
|
|
4709
|
+
if (O.order.length === 0) {
|
|
4699
4710
|
o.outro(R.muted("Every pack in this template is already installed."));
|
|
4700
4711
|
return;
|
|
4701
4712
|
}
|
|
4702
|
-
let
|
|
4703
|
-
token:
|
|
4704
|
-
key:
|
|
4705
|
-
}),
|
|
4706
|
-
let t =
|
|
4707
|
-
return !t || t.tier === "free" ? "free" :
|
|
4708
|
-
}, k = (e) => !
|
|
4709
|
-
order:
|
|
4710
|
-
graph:
|
|
4713
|
+
let ee = await no(E, p, {
|
|
4714
|
+
token: g,
|
|
4715
|
+
key: h
|
|
4716
|
+
}), te = (e) => {
|
|
4717
|
+
let t = m.get(e);
|
|
4718
|
+
return !t || t.tier === "free" ? "free" : ee[e]?.owned ? "owned" : "locked";
|
|
4719
|
+
}, k = (e) => !p.has(e) && te(e) === "locked", A = zi({
|
|
4720
|
+
order: O.order,
|
|
4721
|
+
graph: D,
|
|
4711
4722
|
isLocked: k,
|
|
4712
|
-
installed:
|
|
4723
|
+
installed: f
|
|
4713
4724
|
});
|
|
4714
|
-
if (A.blocked.length > 0 && !
|
|
4715
|
-
let e = await
|
|
4716
|
-
e && (
|
|
4717
|
-
token:
|
|
4718
|
-
key:
|
|
4719
|
-
}), A =
|
|
4720
|
-
order:
|
|
4721
|
-
graph:
|
|
4725
|
+
if (A.blocked.length > 0 && !g && !h) {
|
|
4726
|
+
let e = await Jn();
|
|
4727
|
+
e && (g = e, ee = await no(E, p, {
|
|
4728
|
+
token: g,
|
|
4729
|
+
key: h
|
|
4730
|
+
}), A = zi({
|
|
4731
|
+
order: O.order,
|
|
4732
|
+
graph: D,
|
|
4722
4733
|
isLocked: k,
|
|
4723
|
-
installed:
|
|
4734
|
+
installed: f
|
|
4724
4735
|
}));
|
|
4725
4736
|
}
|
|
4726
|
-
if (A.blocked.length > 0 && await
|
|
4737
|
+
if (A.blocked.length > 0 && await io(A.blocked, k, m), A.installable.length === 0) {
|
|
4727
4738
|
o.outro(R.muted("Nothing left to install once locked packs are removed."));
|
|
4728
4739
|
return;
|
|
4729
4740
|
}
|
|
4730
|
-
if (
|
|
4731
|
-
let e = await o.confirm({ message: `Install template ${R.brandBold(
|
|
4741
|
+
if (ao(A.installable, m), !e.yes) {
|
|
4742
|
+
let e = await o.confirm({ message: `Install template ${R.brandBold(y.name)} (${A.installable.length} pack${A.installable.length === 1 ? "" : "s"})?` });
|
|
4732
4743
|
(o.isCancel(e) || !e) && (o.cancel("Installation cancelled."), process.exit(0));
|
|
4733
4744
|
}
|
|
4734
|
-
|
|
4745
|
+
l.start("Downloading packs...");
|
|
4735
4746
|
let j;
|
|
4736
4747
|
try {
|
|
4737
|
-
j = await
|
|
4738
|
-
token:
|
|
4739
|
-
key:
|
|
4748
|
+
j = await oo(A.installable, {
|
|
4749
|
+
token: g,
|
|
4750
|
+
key: h
|
|
4740
4751
|
});
|
|
4741
4752
|
} catch (e) {
|
|
4742
|
-
|
|
4753
|
+
l.stop("Download failed"), o.cancel($(e)), process.exit(1);
|
|
4743
4754
|
}
|
|
4744
|
-
|
|
4745
|
-
let
|
|
4755
|
+
l.stop(`Downloaded ${j.length} pack${j.length === 1 ? "" : "s"}`);
|
|
4756
|
+
let ne = await lo({
|
|
4746
4757
|
prepared: j,
|
|
4747
4758
|
config: a,
|
|
4748
|
-
cwd:
|
|
4759
|
+
cwd: c,
|
|
4749
4760
|
force: e.force ?? !1,
|
|
4750
4761
|
yes: e.yes ?? !1
|
|
4751
4762
|
}), M = null;
|
|
4752
4763
|
try {
|
|
4753
|
-
|
|
4754
|
-
let
|
|
4764
|
+
l.start("Installing pack files...");
|
|
4765
|
+
let t = await Di({
|
|
4755
4766
|
packs: j,
|
|
4756
4767
|
config: a,
|
|
4757
|
-
projectRoot:
|
|
4768
|
+
projectRoot: c,
|
|
4758
4769
|
force: e.force ?? !1,
|
|
4759
|
-
overwrite:
|
|
4770
|
+
overwrite: ne
|
|
4760
4771
|
});
|
|
4761
|
-
if (
|
|
4762
|
-
|
|
4763
|
-
for (let e of
|
|
4772
|
+
if (t.aborted) {
|
|
4773
|
+
l.stop("Installation aborted");
|
|
4774
|
+
for (let e of t.errors) o.log.error(e);
|
|
4764
4775
|
o.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
|
|
4765
4776
|
}
|
|
4766
|
-
|
|
4767
|
-
for (let e of
|
|
4768
|
-
|
|
4769
|
-
let
|
|
4770
|
-
token:
|
|
4771
|
-
licenseKey:
|
|
4777
|
+
l.stop("Files installed"), t.installed.length > 0 && o.log.success(`${R.highlight(String(t.installed.length))} files installed`), t.skipped.length > 0 && o.log.warning(`${t.skipped.length} files skipped (use --force to overwrite)`);
|
|
4778
|
+
for (let e of t.errors) o.log.error(e);
|
|
4779
|
+
l.start("Applying template overrides...");
|
|
4780
|
+
let n = await xo(y.id), s = await So(y.id, {
|
|
4781
|
+
token: g,
|
|
4782
|
+
licenseKey: h
|
|
4772
4783
|
});
|
|
4773
|
-
|
|
4774
|
-
let d = await
|
|
4775
|
-
manifest:
|
|
4784
|
+
s.status === "denied" && (l.stop("Template download denied"), o.cancel(`Access to template "${y.id}" was denied (${s.reason}). Try 'hype-stack login' or check your license.`), process.exit(1)), M = s.templateDir;
|
|
4785
|
+
let d = await ki({
|
|
4786
|
+
manifest: n,
|
|
4776
4787
|
config: a,
|
|
4777
|
-
projectRoot:
|
|
4788
|
+
projectRoot: c,
|
|
4778
4789
|
templateDir: M
|
|
4779
4790
|
});
|
|
4780
|
-
|
|
4791
|
+
l.stop("Template overrides applied"), d.installed.length > 0 && o.log.success(`${d.installed.length} template file${d.installed.length === 1 ? "" : "s"} applied`);
|
|
4781
4792
|
for (let e of d.errors) o.log.error(e);
|
|
4782
|
-
let f =
|
|
4783
|
-
i(f) && (await sa(u.resolve(
|
|
4793
|
+
let f = n.theme ?? "zinc-mono";
|
|
4794
|
+
i(f) && (await sa(u.resolve(c, a.paths?.frontend.root ?? "apps/frontend"), r(f)) ? o.log.success(`Applied the ${r(f).label} theme`) : o.log.warning(R.muted(`Could not find ${R.path("assets/styles.css")} to apply the theme`))), await Eo({
|
|
4784
4795
|
prepared: j,
|
|
4785
|
-
templateNpm:
|
|
4796
|
+
templateNpm: n.dependencies_npm,
|
|
4786
4797
|
paths: a.paths,
|
|
4787
|
-
cwd:
|
|
4788
|
-
spinner:
|
|
4789
|
-
}), await
|
|
4790
|
-
projectRoot:
|
|
4798
|
+
cwd: c,
|
|
4799
|
+
spinner: l
|
|
4800
|
+
}), await ir({
|
|
4801
|
+
projectRoot: c,
|
|
4791
4802
|
paths: a.paths,
|
|
4792
4803
|
skipPrompts: e.yes ?? !1
|
|
4793
|
-
}),
|
|
4804
|
+
}), co(j), n.postInstall && n.postInstall.length > 0 && o.note(n.postInstall.map((e) => ` ${R.muted("→")} ${e}`).join("\n"), "Template Next Steps"), o.outro(R.brand(`Installed template ${y.name}.`));
|
|
4794
4805
|
} finally {
|
|
4795
4806
|
await Promise.all(j.map((e) => s.rm(e.packDir, {
|
|
4796
4807
|
recursive: !0,
|
|
@@ -4801,7 +4812,7 @@ async function So(e = {}) {
|
|
|
4801
4812
|
});
|
|
4802
4813
|
}
|
|
4803
4814
|
}
|
|
4804
|
-
async function
|
|
4815
|
+
async function wo(e, t, n) {
|
|
4805
4816
|
let r = {};
|
|
4806
4817
|
for (let i of e.slots) {
|
|
4807
4818
|
if (t?.[i.family]) {
|
|
@@ -4825,7 +4836,7 @@ async function Co(e, t, n) {
|
|
|
4825
4836
|
}
|
|
4826
4837
|
return r;
|
|
4827
4838
|
}
|
|
4828
|
-
async function
|
|
4839
|
+
async function To(e) {
|
|
4829
4840
|
let { packs: t, templatePacks: n, installedSet: r, options: i } = e, a = new Set(n);
|
|
4830
4841
|
if (i.packs && i.packs.length > 0) {
|
|
4831
4842
|
let e = i.packs.filter((e) => !t.some((t) => t.name === e));
|
|
@@ -4835,7 +4846,7 @@ async function wo(e) {
|
|
|
4835
4846
|
let s = t.filter((e) => e.category === "feature" && !a.has(e.name) && !r.has(e.name));
|
|
4836
4847
|
if (s.length === 0) return [];
|
|
4837
4848
|
let c = P();
|
|
4838
|
-
o.note(s.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${
|
|
4849
|
+
o.note(s.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${le(`${c}/packs/${e.name}`)}`).join("\n"), "Browse packs");
|
|
4839
4850
|
let l = await o.multiselect({
|
|
4840
4851
|
message: "Add extra packs on top of the template (optional)",
|
|
4841
4852
|
options: s.map((e) => ({
|
|
@@ -4847,25 +4858,25 @@ async function wo(e) {
|
|
|
4847
4858
|
});
|
|
4848
4859
|
return o.isCancel(l) && (o.cancel("Cancelled."), process.exit(0)), l;
|
|
4849
4860
|
}
|
|
4850
|
-
async function
|
|
4851
|
-
let { prepared: t, templateNpm: n, paths: r, cwd: i, spinner: a } = e, s =
|
|
4861
|
+
async function Eo(e) {
|
|
4862
|
+
let { prepared: t, templateNpm: n, paths: r, cwd: i, spinner: a } = e, s = eo(t.map((e) => e.manifest.dependencies_npm)), c = $a(n ? eo([s, n]) : s, r);
|
|
4852
4863
|
if (c.errors.length > 0) {
|
|
4853
4864
|
for (let e of c.errors) o.log.error(e);
|
|
4854
4865
|
return;
|
|
4855
4866
|
}
|
|
4856
4867
|
if (c.operations.length === 0) return;
|
|
4857
4868
|
a.start("Installing npm dependencies...");
|
|
4858
|
-
let l = await
|
|
4869
|
+
let l = await to(c.operations, i);
|
|
4859
4870
|
if (a.stop(l.ok ? "npm dependencies installed" : "npm dependency installation failed"), !l.ok) for (let e of l.errors) o.log.error(e);
|
|
4860
4871
|
}
|
|
4861
4872
|
//#endregion
|
|
4862
4873
|
//#region src/cli.ts
|
|
4863
|
-
function
|
|
4874
|
+
function Do(e) {
|
|
4864
4875
|
if (!e) return;
|
|
4865
4876
|
let t = e.split(",").map((e) => e.trim()).filter((e) => e.length > 0);
|
|
4866
4877
|
return t.length > 0 ? t : void 0;
|
|
4867
4878
|
}
|
|
4868
|
-
function
|
|
4879
|
+
function Oo(e) {
|
|
4869
4880
|
if (!e) return;
|
|
4870
4881
|
let t = {};
|
|
4871
4882
|
for (let n of e.split(",")) {
|
|
@@ -4874,10 +4885,10 @@ function Do(e) {
|
|
|
4874
4885
|
}
|
|
4875
4886
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
4876
4887
|
}
|
|
4877
|
-
function
|
|
4888
|
+
function ko() {
|
|
4878
4889
|
let e = new a();
|
|
4879
4890
|
return e.name("hype-stack").description("Build with Hype Stack -- templates, components, modules, and more").version(C, "-v, --version"), e.command("create").description("Create a new Hype Stack project").option("-n, --name <name>", "Project name").option("-d, --directory <path>", "Target directory").option("-e, --editor <editor>", "Code editor (cursor, claude, windsurf, copilot)").option("-t, --theme <theme>", "Color theme (default, slate, rose, emerald, violet, amber, ocean, zinc-mono, crimson, midnight)").option("--no-install", "Skip dependency installation").option("--no-setup", "Skip Docker services and database migrations after create").option("-y, --yes", "Skip confirmation prompts (requires --name)").action(async (e) => {
|
|
4880
|
-
await
|
|
4891
|
+
await Xa({
|
|
4881
4892
|
name: e.name,
|
|
4882
4893
|
directory: e.directory,
|
|
4883
4894
|
install: e.install,
|
|
@@ -4887,32 +4898,32 @@ function Oo() {
|
|
|
4887
4898
|
setup: e.setup
|
|
4888
4899
|
});
|
|
4889
4900
|
}), e.command("init").description("Initialize stack.json in the current project").action(async () => {
|
|
4890
|
-
await
|
|
4901
|
+
await Za({});
|
|
4891
4902
|
}), 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) => {
|
|
4892
|
-
await
|
|
4893
|
-
packs:
|
|
4903
|
+
await uo({
|
|
4904
|
+
packs: Do(e.packs),
|
|
4894
4905
|
force: e.force,
|
|
4895
4906
|
yes: e.yes,
|
|
4896
4907
|
licenseKey: e.key ?? e.licenseKey,
|
|
4897
4908
|
cwd: e.cwd
|
|
4898
4909
|
});
|
|
4899
4910
|
}), e.command("template").description("Install a template by id, with starter/layout variant swaps and extra packs on top").argument("[id]", "Template id (omit to pick interactively)").option("--variants <map>", "Preselect slot variants, e.g. starter-saas=starter-saas-better-auth,layout=layout-basic").option("--packs <list>", "Extra packs to add on top of the template (comma-separated)").option("--force", "Overwrite existing files").option("-y, --yes", "Skip confirmation prompts (requires <id>)").option("-k, --key <key>", "License key").option("--license-key <key>", "License key (alias for --key)").option("--cwd <path>", "Working directory").action(async (e, t) => {
|
|
4900
|
-
await
|
|
4911
|
+
await Co({
|
|
4901
4912
|
templateId: e,
|
|
4902
|
-
variants:
|
|
4903
|
-
packs:
|
|
4913
|
+
variants: Oo(t.variants),
|
|
4914
|
+
packs: Do(t.packs),
|
|
4904
4915
|
force: t.force,
|
|
4905
4916
|
yes: t.yes,
|
|
4906
4917
|
licenseKey: t.key ?? t.licenseKey,
|
|
4907
4918
|
cwd: t.cwd
|
|
4908
4919
|
});
|
|
4909
4920
|
}), e.command("login").description("Log in via your browser to install packs your organization owns").action(async () => {
|
|
4910
|
-
await go();
|
|
4911
|
-
}), e.command("logout").description("Log out and remove the saved CLI token").action(async () => {
|
|
4912
4921
|
await _o();
|
|
4922
|
+
}), e.command("logout").description("Log out and remove the saved CLI token").action(async () => {
|
|
4923
|
+
await vo();
|
|
4913
4924
|
}), e.command("auth").description("Alias for `login`").action(async () => {
|
|
4914
|
-
await
|
|
4925
|
+
await _o();
|
|
4915
4926
|
}), e;
|
|
4916
4927
|
}
|
|
4917
4928
|
//#endregion
|
|
4918
|
-
export {
|
|
4929
|
+
export { Qa as a, uo as i, vo as n, Za as o, _o as r, Xa as s, ko as t };
|