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