@hype-stack/cli 0.3.0 → 0.3.1
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-BG-vvtIY.js} +1226 -1114
- package/dist/commands/compose.d.ts.map +1 -1
- package/dist/commands/template.d.ts.map +1 -1
- package/dist/config/bin.js +1 -1
- package/dist/index.js +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", A = "gh:BetterTyped/hype-stack", j = "stack.json", M = "/schema/stack.json", te = "https://api.hype-stack.dev", N = "HYPE_STACK_API_URL", ne = "https://www.hype-stack.dev", re = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/, ie = [
|
|
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
|
+
], ae = ie.map((e) => e.value), oe = ".cursor/rules", se = ".cursor", ce = ".agents";
|
|
35
|
+
function P() {
|
|
33
36
|
let e = process.env.HYPE_STACK_API_URL;
|
|
34
|
-
return e ? (
|
|
37
|
+
return e ? (le(e), e.replace(/\/+$/, "")) : te;
|
|
35
38
|
}
|
|
36
|
-
function
|
|
39
|
+
function F() {
|
|
37
40
|
let e = process.env.HYPE_STACK_WEB_URL;
|
|
38
|
-
return e ? (
|
|
41
|
+
return e ? (le(e), e.replace(/\/+$/, "")) : ne;
|
|
39
42
|
}
|
|
40
|
-
function
|
|
43
|
+
function le(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(`${N} 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(`${N} is not a valid URL: "${e}"`, { cause: t }) : t;
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
|
-
function
|
|
49
|
-
return `${
|
|
51
|
+
function ue() {
|
|
52
|
+
return `${P()}${M}`;
|
|
50
53
|
}
|
|
51
54
|
//#endregion
|
|
52
55
|
//#region src/ui/theme.ts
|
|
53
|
-
var
|
|
54
|
-
orange:
|
|
55
|
-
orangeBright:
|
|
56
|
-
amber:
|
|
57
|
-
deepBlue:
|
|
58
|
-
skyBlue:
|
|
59
|
-
lightBlue:
|
|
60
|
-
},
|
|
61
|
-
brand: (e) =>
|
|
62
|
-
brandBold: (e) =>
|
|
63
|
-
accent: (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) =>
|
|
56
|
+
var de = (e) => `\x1b[38;5;208m${e}\x1b[39m`, fe = (e) => `\x1b[38;5;214m${e}\x1b[39m`, I = (e) => `\x1b[38;5;220m${e}\x1b[39m`, pe = (e) => `\x1b[38;5;33m${e}\x1b[39m`, L = (e) => `\x1b[38;5;39m${e}\x1b[39m`, me = (e) => `\x1b[38;5;81m${e}\x1b[39m`, he = {
|
|
57
|
+
orange: de,
|
|
58
|
+
orangeBright: fe,
|
|
59
|
+
amber: I,
|
|
60
|
+
deepBlue: pe,
|
|
61
|
+
skyBlue: L,
|
|
62
|
+
lightBlue: me
|
|
63
|
+
}, R = {
|
|
64
|
+
brand: (e) => de(e),
|
|
65
|
+
brandBold: (e) => y.bold(de(e)),
|
|
66
|
+
accent: (e) => L(e),
|
|
67
|
+
accentBold: (e) => y.bold(L(e)),
|
|
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(L(e)),
|
|
75
|
+
command: (e) => y.bold(I(e)),
|
|
76
|
+
label: (e) => y.dim(y.bold(e))
|
|
74
77
|
};
|
|
75
|
-
function
|
|
76
|
-
return `\x1b]8;;${e}\x07${
|
|
77
|
-
}
|
|
78
|
-
var
|
|
79
|
-
arrow:
|
|
80
|
-
bullet:
|
|
81
|
-
dash:
|
|
82
|
-
corner:
|
|
83
|
-
pipe:
|
|
84
|
-
dot:
|
|
85
|
-
spark:
|
|
86
|
-
sparkSmall:
|
|
87
|
-
bolt:
|
|
88
|
-
},
|
|
89
|
-
|
|
90
|
-
P,
|
|
91
|
-
N,
|
|
92
|
-
M,
|
|
93
|
-
F,
|
|
78
|
+
function ge(e, t = e) {
|
|
79
|
+
return `\x1b]8;;${e}\x07${L(t)}\x1b]8;;\x07`;
|
|
80
|
+
}
|
|
81
|
+
var z = {
|
|
82
|
+
arrow: de("›"),
|
|
83
|
+
bullet: R.muted("·"),
|
|
84
|
+
dash: R.muted("─"),
|
|
85
|
+
corner: R.muted("╰"),
|
|
86
|
+
pipe: R.muted("│"),
|
|
87
|
+
dot: R.muted("•"),
|
|
88
|
+
spark: I("✦"),
|
|
89
|
+
sparkSmall: fe("✧"),
|
|
90
|
+
bolt: I("⚡")
|
|
91
|
+
}, _e = [
|
|
92
|
+
I,
|
|
94
93
|
I,
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
fe,
|
|
95
|
+
de,
|
|
96
|
+
pe,
|
|
97
|
+
L,
|
|
98
|
+
me,
|
|
99
|
+
me
|
|
97
100
|
];
|
|
98
|
-
function
|
|
101
|
+
function ve(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 _e[Math.min(Math.floor(r * _e.length), _e.length - 1)](e);
|
|
104
107
|
}).join("");
|
|
105
108
|
}
|
|
106
|
-
function
|
|
109
|
+
function ye(e, t, n) {
|
|
107
110
|
return Math.round(e + (t - e) * n);
|
|
108
111
|
}
|
|
109
|
-
function
|
|
112
|
+
function be(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;${ye(n[0], r[0], u)};${ye(n[1], r[1], u)};${ye(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 xe(e) {
|
|
123
|
+
return `${F()}/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 Se = Object.create, Ce = Object.defineProperty, we = Object.getOwnPropertyDescriptor, Te = Object.getOwnPropertyNames, Ee = Object.getPrototypeOf, De = Object.prototype.hasOwnProperty, Oe = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), ke = (e, t, n, r) => {
|
|
128
|
+
if (t && typeof t == "object" || typeof t == "function") for (var i = Te(t), a = 0, o = i.length, s; a < o; a++) s = i[a], !De.call(e, s) && s !== n && Ce(e, s, {
|
|
126
129
|
get: ((e) => t[e]).bind(null, s),
|
|
127
|
-
enumerable: !(r =
|
|
130
|
+
enumerable: !(r = we(t, s)) || r.enumerable
|
|
128
131
|
});
|
|
129
132
|
return e;
|
|
130
|
-
},
|
|
133
|
+
}, Ae = (e, t, n) => (n = e == null ? {} : Se(Ee(e)), ke(t || !e || !e.__esModule ? Ce(n, "default", {
|
|
131
134
|
value: e,
|
|
132
135
|
enumerable: !0
|
|
133
|
-
}) : n, e)),
|
|
136
|
+
}) : n, e)), je = (e) => `${e.queryKey}_${Date.now().toString(36)}_${Math.random().toString(36).substring(2)}`, Me = /* @__PURE__ */ Ae((/* @__PURE__ */ Oe(((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
|
+
})))()), Ne = (e) => `listen_${String(e)}`, Pe = class extends Me.default {
|
|
309
312
|
emitCallbacks = [];
|
|
310
313
|
constructor(e) {
|
|
311
314
|
super(e);
|
|
@@ -317,26 +320,26 @@ 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(Ne(e), t), () => {
|
|
324
|
+
super.off(Ne(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(Ne(e), super.listeners(e).length), this);
|
|
327
|
+
off = (e, t) => (super.off(e, t), super.emit(Ne(e), super.listeners(e).length), this);
|
|
325
328
|
addListener = this.on;
|
|
326
329
|
removeListener = this.off;
|
|
327
|
-
},
|
|
328
|
-
emitter = new
|
|
329
|
-
events =
|
|
330
|
+
}, Fe = class {
|
|
331
|
+
emitter = new Pe();
|
|
332
|
+
events = Be(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
|
-
let { initiallyFocused: t =
|
|
336
|
-
this.setInitialFocus(t), this.setInitialOnline(n), this.isBrowser =
|
|
338
|
+
let { initiallyFocused: t = V.initiallyFocused, initiallyOnline: n = V.initiallyOnline } = this.options || V;
|
|
339
|
+
this.setInitialFocus(t), this.setInitialOnline(n), this.isBrowser = Le();
|
|
337
340
|
}
|
|
338
341
|
initialize = () => {
|
|
339
|
-
let { focusEvent: e =
|
|
342
|
+
let { focusEvent: e = V.focusEvent, onlineEvent: t = V.onlineEvent } = this.options || V;
|
|
340
343
|
e(this.setFocused), t(this.setOnline);
|
|
341
344
|
};
|
|
342
345
|
setInitialFocus = async (e) => {
|
|
@@ -351,51 +354,51 @@ 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
|
+
}, Ie = () => {
|
|
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
|
+
}, Le = () => {
|
|
362
365
|
try {
|
|
363
|
-
return !!(
|
|
366
|
+
return !!(Ie() && window.document && window.document.addEventListener);
|
|
364
367
|
} catch {
|
|
365
368
|
/* istanbul ignore next */
|
|
366
369
|
return !1;
|
|
367
370
|
}
|
|
368
|
-
},
|
|
371
|
+
}, Re = (e, t, n) => Ie() ? (window.addEventListener(e, t, n), () => window.removeEventListener(e, t, n)) : () => null, ze = (e, t, n) => Le() ? (window.document.addEventListener(e, t, n), () => window.document.removeEventListener(e, t, n)) : () => null, Be = (e) => ({
|
|
369
372
|
emitFocus: () => {
|
|
370
|
-
e.emit(
|
|
373
|
+
e.emit(B.FOCUS);
|
|
371
374
|
},
|
|
372
375
|
emitBlur: () => {
|
|
373
|
-
e.emit(
|
|
376
|
+
e.emit(B.BLUR);
|
|
374
377
|
},
|
|
375
378
|
emitOnline: () => {
|
|
376
|
-
e.emit(
|
|
379
|
+
e.emit(B.ONLINE);
|
|
377
380
|
},
|
|
378
381
|
emitOffline: () => {
|
|
379
|
-
e.emit(
|
|
382
|
+
e.emit(B.OFFLINE);
|
|
380
383
|
},
|
|
381
|
-
onFocus: (t) => (e.on(
|
|
382
|
-
onBlur: (t) => (e.on(
|
|
383
|
-
onOnline: (t) => (e.on(
|
|
384
|
-
onOffline: (t) => (e.on(
|
|
385
|
-
}),
|
|
384
|
+
onFocus: (t) => (e.on(B.FOCUS, t), () => e.removeListener(B.FOCUS, t)),
|
|
385
|
+
onBlur: (t) => (e.on(B.BLUR, t), () => e.removeListener(B.BLUR, t)),
|
|
386
|
+
onOnline: (t) => (e.on(B.ONLINE, t), () => e.removeListener(B.ONLINE, t)),
|
|
387
|
+
onOffline: (t) => (e.on(B.OFFLINE, t), () => e.removeListener(B.OFFLINE, t))
|
|
388
|
+
}), B = /* @__PURE__ */ function(e) {
|
|
386
389
|
return e.FOCUS = "focus", e.BLUR = "blur", e.ONLINE = "online", e.OFFLINE = "offline", e;
|
|
387
|
-
}({}),
|
|
390
|
+
}({}), V = {
|
|
388
391
|
initiallyFocused: !0,
|
|
389
392
|
initiallyOnline: !0,
|
|
390
393
|
focusEvent: (e) => {
|
|
391
|
-
|
|
394
|
+
ze("visibilitychange", () => e(!0)), Re("focus", () => e(!0)), Re("blur", () => e(!1));
|
|
392
395
|
},
|
|
393
396
|
onlineEvent: (e) => {
|
|
394
|
-
|
|
397
|
+
Re("online", () => e(!0)), Re("offline", () => e(!1));
|
|
395
398
|
}
|
|
396
|
-
},
|
|
397
|
-
emitter = new
|
|
398
|
-
events =
|
|
399
|
+
}, Ve = class {
|
|
400
|
+
emitter = new Pe();
|
|
401
|
+
events = _t(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
|
+
}, He = () => "loading-event-any", Ue = (e) => `${e}-loading-event`, We = (e) => `${e}-loading-cache-event`, Ge = (e) => `${e}-loading-event-by-id`, Ke = () => "remove-event-any", qe = (e) => `${e}-remove-event`, Je = (e) => `${e}-remove-event-by-id`, Ye = () => "request-abort-any", Xe = (e) => `${e}-request-abort`, Ze = (e) => `${e}-request-abort-by-id`, Qe = () => "response-any", $e = (e) => `${e}-response`, et = (e) => `${e}-response-by-id`, tt = () => "request-start-any", nt = (e) => `${e}-request-start`, rt = (e) => `${e}-request-start-by-id`, it = () => "response-start-any", at = (e) => `${e}-response-start`, ot = (e) => `${e}-response-start-by-id`, st = () => "request-progress-any", ct = (e) => `${e}-request-progress`, lt = (e) => `${e}-request-progress-by-id`, ut = () => "response-progress-any", dt = (e) => `${e}-response-progress`, ft = (e) => `${e}-response-progress-by-id`, pt = () => "request-deduplicated-any", mt = (e) => `${e}-query-request-deduplicated`, ht = (e) => `${e}-cache-request-deduplicated`, gt = (e) => `${e}-request-deduplicated-by-id`, _t = (e) => ({
|
|
436
439
|
emitDeduplicated: (t, n = !1) => {
|
|
437
|
-
e.emit(
|
|
440
|
+
e.emit(pt(), t, n), e.emit(gt(t.requestId), t, n), e.emit(ht(t.request.cacheKey), t, n), e.emit(mt(t.request.queryKey), t, n);
|
|
438
441
|
},
|
|
439
442
|
emitLoading: (t, n = !1) => {
|
|
440
|
-
e.emit(
|
|
443
|
+
e.emit(He(), t, n), e.emit(Ge(t.requestId), t, n), e.emit(We(t.request.cacheKey), t, n), e.emit(Ue(t.request.queryKey), t, n);
|
|
441
444
|
},
|
|
442
445
|
emitRequestStart: (t, n = !1) => {
|
|
443
|
-
e.emit(
|
|
446
|
+
e.emit(tt(), t, n), e.emit(rt(t.requestId), t, n), e.emit(nt(t.request.queryKey), t, n);
|
|
444
447
|
},
|
|
445
448
|
emitResponseStart: (t, n = !1) => {
|
|
446
|
-
e.emit(
|
|
449
|
+
e.emit(it(), t, n), e.emit(ot(t.requestId), t, n), e.emit(at(t.request.queryKey), t, n);
|
|
447
450
|
},
|
|
448
451
|
emitUploadProgress: (t, n = !1) => {
|
|
449
|
-
e.emit(
|
|
452
|
+
e.emit(st(), t, n), e.emit(lt(t.requestId), t, n), e.emit(ct(t.request.queryKey), t, n);
|
|
450
453
|
},
|
|
451
454
|
emitDownloadProgress: (t, n = !1) => {
|
|
452
|
-
e.emit(
|
|
455
|
+
e.emit(ut(), t, n), e.emit(ft(t.requestId), t, n), e.emit(dt(t.request.queryKey), t, n);
|
|
453
456
|
},
|
|
454
457
|
emitResponse: (t, n = !1) => {
|
|
455
|
-
e.emit(
|
|
458
|
+
e.emit(Qe(), t, n), e.emit(et(t.requestId), t, n), e.emit($e(t.request.cacheKey), t, n);
|
|
456
459
|
},
|
|
457
460
|
emitAbort: (t, n = !1) => {
|
|
458
|
-
e.emit(
|
|
461
|
+
e.emit(Ye(), t, n), e.emit(Ze(t.requestId), t, n), e.emit(Xe(t.request.abortKey), t, n);
|
|
459
462
|
},
|
|
460
463
|
emitRemove: (t, n = !1) => {
|
|
461
|
-
e.emit(
|
|
464
|
+
e.emit(Ke(), t, n), e.emit(Je(t.requestId), t, n), e.emit(qe(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(pt(), t), () => e.removeListener(pt(), t)),
|
|
467
|
+
onDeduplicatedByQueue: (t, n) => (e.on(mt(t), n), () => e.removeListener(mt(t), n)),
|
|
468
|
+
onDeduplicatedByCache: (t, n) => (e.on(ht(t), n), () => e.removeListener(ht(t), n)),
|
|
469
|
+
onDeduplicatedById: (t, n) => (e.on(gt(t), n), () => e.removeListener(gt(t), n)),
|
|
470
|
+
onLoading: (t) => (e.on(He(), t), () => e.removeListener(He(), t)),
|
|
471
|
+
onLoadingByQueue: (t, n) => (e.on(Ue(t), n), () => e.removeListener(Ue(t), n)),
|
|
472
|
+
onLoadingByCache: (t, n) => (e.on(We(t), n), () => e.removeListener(We(t), n)),
|
|
473
|
+
onLoadingById: (t, n) => (e.on(Ge(t), n), () => e.removeListener(Ge(t), n)),
|
|
474
|
+
onRequestStart: (t) => (e.on(tt(), t), () => e.removeListener(tt(), t)),
|
|
475
|
+
onRequestStartByQueue: (t, n) => (e.on(nt(t), n), () => e.removeListener(nt(t), n)),
|
|
476
|
+
onRequestStartById: (t, n) => (e.on(rt(t), n), () => e.removeListener(rt(t), n)),
|
|
477
|
+
onResponseStart: (t) => (e.on(it(), t), () => e.removeListener(it(), t)),
|
|
478
|
+
onResponseStartByQueue: (t, n) => (e.on(at(t), n), () => e.removeListener(at(t), n)),
|
|
479
|
+
onResponseStartById: (t, n) => (e.on(ot(t), n), () => e.removeListener(ot(t), n)),
|
|
480
|
+
onUploadProgress: (t) => (e.on(st(), t), () => e.removeListener(st(), t)),
|
|
481
|
+
onUploadProgressByQueue: (t, n) => (e.on(ct(t), n), () => e.removeListener(ct(t), n)),
|
|
482
|
+
onUploadProgressById: (t, n) => (e.on(lt(t), n), () => e.removeListener(lt(t), n)),
|
|
483
|
+
onDownloadProgress: (t) => (e.on(ut(), t), () => e.removeListener(ut(), t)),
|
|
484
|
+
onDownloadProgressByQueue: (t, n) => (e.on(dt(t), n), () => e.removeListener(dt(t), n)),
|
|
485
|
+
onDownloadProgressById: (t, n) => (e.on(ft(t), n), () => e.removeListener(ft(t), n)),
|
|
486
|
+
onResponse: (t) => (e.on(Qe(), t), () => e.removeListener(Qe(), t)),
|
|
487
|
+
onResponseByCache: (t, n) => (e.on($e(t), n), () => e.removeListener($e(t), n)),
|
|
488
|
+
onResponseById: (t, n) => (e.on(et(t), n), () => e.removeListener(et(t), n)),
|
|
489
|
+
onAbort: (t) => (e.on(Ye(), t), () => e.removeListener(Ye(), t)),
|
|
490
|
+
onAbortByKey: (t, n) => (e.on(Xe(t), n), () => e.removeListener(Xe(t), n)),
|
|
491
|
+
onAbortById: (t, n) => (e.on(Ze(t), n), () => e.removeListener(Ze(t), n)),
|
|
492
|
+
onRemove: (t) => (e.on(Ke(), t), () => e.removeListener(Ke(), t)),
|
|
493
|
+
onRemoveByQueue: (t, n) => (e.on(qe(t), n), () => e.removeListener(qe(t), n)),
|
|
494
|
+
onRemoveById: (t, n) => (e.on(Je(t), n), () => e.removeListener(Je(t), n))
|
|
495
|
+
}), vt = class {
|
|
493
496
|
logger;
|
|
494
497
|
level;
|
|
495
498
|
modules;
|
|
496
|
-
emitter = new
|
|
499
|
+
emitter = new Me.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 || xt, 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 && (St.indexOf(this.level) <= St.indexOf(e.level) || this.modules && !this.modules.includes(e.module) || this.logger(e));
|
|
531
534
|
};
|
|
532
|
-
},
|
|
533
|
-
let t =
|
|
535
|
+
}, yt = () => `${(/* @__PURE__ */ new Date()).toLocaleTimeString()}`, bt = (e) => e.type === "request" || e.type === "response" ? `${e.extra.request.endpoint}` : `[${e.module}]`, xt = (e) => {
|
|
536
|
+
let t = wt[e.level], n = Tt[e.level], r = `%c[${yt()}]%c${e.title}%c${bt(e)}`, i = `${t}${n}font-weight:600;border-radius: 4px 0 0 4px;`, a = `${t}${n}font-weight:600;`, o = `${t}font-weight:normal;border-radius: 0 4px 4px 0;`;
|
|
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
|
+
}, St = [
|
|
536
539
|
"error",
|
|
537
540
|
"warning",
|
|
538
541
|
"info",
|
|
539
542
|
"debug"
|
|
540
|
-
],
|
|
541
|
-
error: `${
|
|
542
|
-
warning: `${
|
|
543
|
-
info: `${
|
|
544
|
-
debug: `${
|
|
545
|
-
},
|
|
543
|
+
], Ct = "padding:2px 5px;", wt = {
|
|
544
|
+
error: `${Ct};background:#db252520;`,
|
|
545
|
+
warning: `${Ct};background:#e1941e20;`,
|
|
546
|
+
info: `${Ct};background:#1e74e120;`,
|
|
547
|
+
debug: `${Ct};background:#00000020;`
|
|
548
|
+
}, Tt = {
|
|
546
549
|
error: "color:#ff3737;",
|
|
547
550
|
warning: "color:#ffc107;",
|
|
548
551
|
info: "color:#34a8ff;",
|
|
549
552
|
debug: "color:#cccccc;"
|
|
550
|
-
},
|
|
553
|
+
}, Et = class extends Error {
|
|
551
554
|
constructor() {
|
|
552
555
|
super("Request timeout"), this.name = "TimeoutError";
|
|
553
556
|
}
|
|
554
|
-
},
|
|
557
|
+
}, Dt = class extends Error {
|
|
555
558
|
constructor() {
|
|
556
559
|
super("Request aborted"), this.name = "AbortError";
|
|
557
560
|
}
|
|
558
|
-
},
|
|
561
|
+
}, Ot = class extends Error {
|
|
559
562
|
constructor() {
|
|
560
563
|
super("Request deleted"), this.name = "DeletedError";
|
|
561
564
|
}
|
|
562
|
-
},
|
|
565
|
+
}, kt = 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 Et() : e === "abort" ? new Dt() : e === "deleted" ? new Ot() : e === "processing" ? new kt() : 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 = Ie() && 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) => Ie() && 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,
|
|
@@ -1064,21 +1067,21 @@ var wt = /* @__PURE__ */ function(e) {
|
|
|
1064
1067
|
requestId: t,
|
|
1065
1068
|
request: d
|
|
1066
1069
|
}), u;
|
|
1067
|
-
},
|
|
1070
|
+
}, j = (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
|
+
}, M = () => {
|
|
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
|
+
}, te = async ({ data: e, error: r, status: i, extra: a }) => {
|
|
1082
1085
|
let o = {
|
|
1083
1086
|
data: e,
|
|
1084
1087
|
error: r ?? null,
|
|
@@ -1103,13 +1106,13 @@ var wt = /* @__PURE__ */ function(e) {
|
|
|
1103
1106
|
response: o
|
|
1104
1107
|
}
|
|
1105
1108
|
}), o;
|
|
1106
|
-
}, N =
|
|
1109
|
+
}, N = Yt({
|
|
1107
1110
|
request: d,
|
|
1108
1111
|
requestId: t,
|
|
1109
1112
|
startTime: x,
|
|
1110
1113
|
logger: c,
|
|
1111
1114
|
resolve: n
|
|
1112
|
-
}),
|
|
1115
|
+
}), ne = ({ status: e, extra: n }) => (c.error({
|
|
1113
1116
|
title: "Abort error",
|
|
1114
1117
|
type: "request",
|
|
1115
1118
|
extra: {
|
|
@@ -1117,10 +1120,10 @@ var wt = /* @__PURE__ */ function(e) {
|
|
|
1117
1120
|
requestId: t
|
|
1118
1121
|
}
|
|
1119
1122
|
}), N({
|
|
1120
|
-
error: i(
|
|
1123
|
+
error: i(H("abort")),
|
|
1121
1124
|
status: e,
|
|
1122
1125
|
extra: n
|
|
1123
|
-
})),
|
|
1126
|
+
})), re = ({ status: e, extra: n }) => (c.error({
|
|
1124
1127
|
title: "Timeout error",
|
|
1125
1128
|
type: "request",
|
|
1126
1129
|
extra: {
|
|
@@ -1128,10 +1131,10 @@ var wt = /* @__PURE__ */ function(e) {
|
|
|
1128
1131
|
requestId: t
|
|
1129
1132
|
}
|
|
1130
1133
|
}), N({
|
|
1131
|
-
error:
|
|
1134
|
+
error: H("timeout"),
|
|
1132
1135
|
status: e,
|
|
1133
1136
|
extra: n
|
|
1134
|
-
})),
|
|
1137
|
+
})), ie = ({ status: e, extra: n }) => (c.error({
|
|
1135
1138
|
title: "Unexpected error",
|
|
1136
1139
|
type: "request",
|
|
1137
1140
|
extra: {
|
|
@@ -1139,14 +1142,14 @@ var wt = /* @__PURE__ */ function(e) {
|
|
|
1139
1142
|
requestId: t
|
|
1140
1143
|
}
|
|
1141
1144
|
}), N({
|
|
1142
|
-
error:
|
|
1145
|
+
error: H(),
|
|
1143
1146
|
status: e,
|
|
1144
1147
|
extra: n
|
|
1145
|
-
})),
|
|
1146
|
-
let i =
|
|
1147
|
-
if (!i) throw new
|
|
1148
|
+
})), ae = () => a.getAbortController(v, t), oe = ({ status: e, extra: n, onAbort: r = () => {} }) => {
|
|
1149
|
+
let i = ae();
|
|
1150
|
+
if (!i) throw new kt("Controller is not found");
|
|
1148
1151
|
let o = () => {
|
|
1149
|
-
|
|
1152
|
+
ne({
|
|
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 se = e.client.adapter.unstable_queryParamsMapper(d.queryParams), ce = e.client.adapter.unstable_endpointMapper(d.endpoint), P = e.client.adapter.unstable_headerMapper(d), { url: F } = e.client;
|
|
1170
1173
|
return {
|
|
1171
1174
|
request: d,
|
|
1172
1175
|
requestId: t,
|
|
1173
|
-
url:
|
|
1174
|
-
endpoint:
|
|
1175
|
-
queryParams:
|
|
1176
|
+
url: F,
|
|
1177
|
+
endpoint: ce,
|
|
1178
|
+
queryParams: se,
|
|
1176
1179
|
payload: y,
|
|
1177
|
-
headers:
|
|
1180
|
+
headers: P,
|
|
1178
1181
|
adapter: e.client.adapter,
|
|
1179
1182
|
adapterOptions: b,
|
|
1180
|
-
getAbortController:
|
|
1183
|
+
getAbortController: ae,
|
|
1181
1184
|
getRequestStartTimestamp: S,
|
|
1182
1185
|
getResponseStartTimestamp: C,
|
|
1183
|
-
createAbortListener:
|
|
1186
|
+
createAbortListener: oe,
|
|
1184
1187
|
onBeforeRequest: D,
|
|
1185
1188
|
onRequestStart: O,
|
|
1186
1189
|
onRequestProgress: ee,
|
|
1187
1190
|
onRequestEnd: k,
|
|
1188
1191
|
onResponseStart: A,
|
|
1189
|
-
onResponseProgress:
|
|
1190
|
-
onResponseEnd:
|
|
1191
|
-
onSuccess:
|
|
1192
|
-
onAbortError:
|
|
1193
|
-
onTimeoutError:
|
|
1194
|
-
onUnexpectedError:
|
|
1192
|
+
onResponseProgress: j,
|
|
1193
|
+
onResponseEnd: M,
|
|
1194
|
+
onSuccess: te,
|
|
1195
|
+
onAbortError: ne,
|
|
1196
|
+
onTimeoutError: re,
|
|
1197
|
+
onUnexpectedError: ie,
|
|
1195
1198
|
onError: N
|
|
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 kt("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 kt(`Adapter ${this.options.name} is not initialized`);
|
|
1325
|
+
if (!this.unstable_fetcher) throw new kt(`Fetcher for ${this.options.name} adapter is not set`);
|
|
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 = Pn) => {
|
|
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, sn = { headers: {} }, cn = () => new Qt({
|
|
1407
1410
|
name: "http",
|
|
1408
|
-
defaultMethod:
|
|
1409
|
-
defaultExtra:
|
|
1411
|
+
defaultMethod: It.GET,
|
|
1412
|
+
defaultExtra: sn,
|
|
1410
1413
|
systemErrorStatus: 0,
|
|
1411
|
-
systemErrorExtra:
|
|
1412
|
-
}).setQueryParamsMapper(
|
|
1413
|
-
let { method: g, client: _, endpoint: v, queryParams: y } = e, b = y ?
|
|
1414
|
+
systemErrorExtra: sn
|
|
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: sn
|
|
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: sn
|
|
1482
1485
|
});
|
|
1483
1486
|
return;
|
|
1484
1487
|
}
|
|
1485
1488
|
i({
|
|
1486
1489
|
error: e,
|
|
1487
1490
|
status: 0,
|
|
1488
|
-
extra:
|
|
1491
|
+
extra: sn
|
|
1489
1492
|
});
|
|
1490
1493
|
}
|
|
1491
|
-
}),
|
|
1492
|
-
emitter = new
|
|
1494
|
+
}), ln = () => cn(), un = class {
|
|
1495
|
+
emitter = new Pe();
|
|
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 = vn(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 = dn(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
|
+
}, dn = (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
|
+
}, fn = () => "invalidate", pn = (e) => `${e}_invalidate`, mn = () => "delete", hn = (e) => `${e}_delete`, gn = (e) => `${e}_cache`, _n = () => "cache", vn = (e) => ({
|
|
1663
1666
|
emitCacheData: (t, n = !1) => {
|
|
1664
|
-
e.emit(
|
|
1667
|
+
e.emit(_n(), t, n), e.emit(gn(t.cacheKey), t, n);
|
|
1665
1668
|
},
|
|
1666
1669
|
emitInvalidation: (t, n = !1) => {
|
|
1667
|
-
e.emit(
|
|
1670
|
+
e.emit(fn(), t, n), e.emit(pn(t), n);
|
|
1668
1671
|
},
|
|
1669
1672
|
emitDelete: (t, n = !1) => {
|
|
1670
|
-
e.emit(
|
|
1673
|
+
e.emit(mn(), t, n), e.emit(hn(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(
|
|
1675
|
+
onData: (t) => (e.on(_n(), t), () => e.removeListener(_n(), t)),
|
|
1676
|
+
onDataByKey: (t, n) => (e.on(gn(t), n), () => e.removeListener(gn(t), n)),
|
|
1677
|
+
onInvalidate: (t) => (e.on(fn(), t), () => e.removeListener(fn(), t)),
|
|
1678
|
+
onInvalidateByKey: (t, n) => (e.on(pn(t), n), () => e.removeListener(pn(t), n)),
|
|
1679
|
+
onDelete: (t) => (e.on(mn(), t), () => e.removeListener(mn(), t)),
|
|
1680
|
+
onDeleteByKey: (t, n) => (e.on(hn(t), n), () => e.removeListener(hn(t), n))
|
|
1678
1681
|
}), G = /* @__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
|
+
}({}), yn = (e) => ({
|
|
1681
1684
|
emitDrained: (t, n) => {
|
|
1682
|
-
e.emit(
|
|
1685
|
+
e.emit(xn(), t, n), e.emit(Sn(t.queryKey), t, n);
|
|
1683
1686
|
},
|
|
1684
1687
|
emitQueueStatusChanged: (t, n) => {
|
|
1685
|
-
e.emit(
|
|
1688
|
+
e.emit(Cn(), t, n), e.emit(wn(t.queryKey), t, n);
|
|
1686
1689
|
},
|
|
1687
1690
|
emitQueueChanged: (t, n) => {
|
|
1688
|
-
e.emit(
|
|
1691
|
+
e.emit(Tn(), t, n), e.emit(En(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(xn(), t), () => e.removeListener(xn(), t)),
|
|
1694
|
+
onDrainedByKey: (t, n) => (e.on(Sn(t), n), () => e.removeListener(Sn(t), n)),
|
|
1695
|
+
onQueueStatusChange: (t) => (e.on(Cn(), t), () => e.removeListener(Cn(), t)),
|
|
1696
|
+
onQueueStatusChangeByKey: (t, n) => (e.on(wn(t), n), () => e.removeListener(wn(t), n)),
|
|
1697
|
+
onQueueChange: (t) => (e.on(Tn(), t), () => e.removeListener(Tn(), t)),
|
|
1698
|
+
onQueueChangeByKey: (t, n) => (e.on(En(t), n), () => e.removeListener(En(t), n))
|
|
1699
|
+
}), bn = class {
|
|
1700
|
+
emitter = new Pe();
|
|
1701
|
+
events = yn(this.emitter);
|
|
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 = kn(e, i);
|
|
1867
1870
|
switch (this.logger.debug({
|
|
1868
1871
|
title: "Adding request to queue",
|
|
1869
1872
|
type: "system",
|
|
@@ -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 = Dn(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 ?
|
|
2057
|
+
}, xn = () => "drained-event", Sn = (e) => `${e}-drained-event`, Cn = () => "status-event", wn = (e) => `${e}-status-event`, Tn = () => "change-event", En = (e) => `${e}-change-event`, Dn = (e, t) => !!(t && e < t), On = (e, t) => e.deduplicateTime ? +/* @__PURE__ */ new Date() - t.timestamp <= e.deduplicateTime : !0, kn = (e, t) => {
|
|
2058
|
+
let { queued: n, cancelable: r, deduplicate: i } = e, a = t ? On(e, t) : !1;
|
|
2056
2059
|
return n ? G.ONE_BY_ONE : r ? G.PREVIOUS_CANCELED : a && i ? G.DEDUPLICATED : G.ALL_AT_ONCE;
|
|
2057
2060
|
};
|
|
2058
|
-
function
|
|
2061
|
+
function An(e) {
|
|
2059
2062
|
return e === "client" || e === "server" ? e : typeof window < "u" && typeof document < "u" ? "client" : "server";
|
|
2060
2063
|
}
|
|
2061
|
-
var
|
|
2064
|
+
var jn = 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
|
+
}, Mn = 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
|
+
}, Nn = 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 vt();
|
|
2086
|
+
requestManager = new Ve();
|
|
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 = je;
|
|
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 = An(o), this.adapter = ln(), this.appManager = n?.() || new Fe(), this.cache = r?.() || new un(), this.fetchDispatcher = i?.() || new bn(), this.submitDispatcher = a?.() || new bn(), this.adapter.initialize(this), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
|
|
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) => jn(this.unstable_onAuthCallbacks, e);
|
|
2132
|
+
unstable_modifyRequest = async (e) => jn(this.unstable_onRequestCallbacks, e);
|
|
2133
|
+
unstable_modifyErrorResponse = async (e, t) => Mn(this.unstable_onErrorCallbacks, e, t);
|
|
2134
|
+
unstable_modifySuccessResponse = async (e, t) => Mn(this.unstable_onSuccessCallbacks, e, t);
|
|
2135
|
+
unstable_modifyResponse = async (e, t) => Mn(this.unstable_onResponseCallbacks, e, t);
|
|
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 un(), this.appManager = e?.() || new Fe(), this.fetchDispatcher = n?.() || new bn(), this.submitDispatcher = r?.() || new bn(), this.appManager.initialize(), this.cache.initialize(this), this.fetchDispatcher.initialize(this), this.submitDispatcher.initialize(this);
|
|
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
|
+
}, Pn = {
|
|
2170
2173
|
strict: !0,
|
|
2171
2174
|
encode: !0,
|
|
2172
2175
|
arrayFormat: "bracket",
|
|
@@ -2175,22 +2178,22 @@ var vn = async (e, t) => {
|
|
|
2175
2178
|
skipNull: !0,
|
|
2176
2179
|
skipEmptyString: !0
|
|
2177
2180
|
};
|
|
2178
|
-
function
|
|
2179
|
-
return new
|
|
2181
|
+
function Fn(e) {
|
|
2182
|
+
return new Nn(e);
|
|
2180
2183
|
}
|
|
2181
2184
|
//#endregion
|
|
2182
2185
|
//#region src/core/client.ts
|
|
2183
|
-
var K =
|
|
2186
|
+
var K = Fn({ url: P() });
|
|
2184
2187
|
//#endregion
|
|
2185
2188
|
//#region src/core/auth-api.ts
|
|
2186
|
-
async function
|
|
2189
|
+
async function In(e) {
|
|
2187
2190
|
let { data: t, success: n } = await K.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
|
|
2196
|
+
async function Ln(e) {
|
|
2194
2197
|
await K.createRequest()({
|
|
2195
2198
|
endpoint: "/auth/cli/token",
|
|
2196
2199
|
method: "DELETE"
|
|
@@ -2198,78 +2201,78 @@ async function wn(e) {
|
|
|
2198
2201
|
}
|
|
2199
2202
|
//#endregion
|
|
2200
2203
|
//#region src/core/auth-store.ts
|
|
2201
|
-
var
|
|
2202
|
-
function
|
|
2204
|
+
var Rn = 1, zn = "hype-stack", Bn = "auth.json";
|
|
2205
|
+
function Vn() {
|
|
2203
2206
|
let e = process.env.HYPE_STACK_CONFIG_DIR;
|
|
2204
|
-
if (e) return
|
|
2205
|
-
let t =
|
|
2207
|
+
if (e) return w.join(e, zn);
|
|
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, zn);
|
|
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", zn);
|
|
2214
|
+
let n = process.env.XDG_CONFIG_HOME ?? w.join(t, ".config");
|
|
2215
|
+
return w.join(n, zn);
|
|
2213
2216
|
}
|
|
2214
|
-
function
|
|
2215
|
-
return
|
|
2217
|
+
function Hn() {
|
|
2218
|
+
return w.join(Vn(), Bn);
|
|
2216
2219
|
}
|
|
2217
|
-
async function
|
|
2218
|
-
let e = await
|
|
2220
|
+
async function Un() {
|
|
2221
|
+
let e = await v.readFile(Hn(), "utf-8").catch(() => null);
|
|
2219
2222
|
if (!e) return {
|
|
2220
|
-
version:
|
|
2223
|
+
version: Rn,
|
|
2221
2224
|
tokens: {}
|
|
2222
2225
|
};
|
|
2223
2226
|
let t = JSON.parse(e);
|
|
2224
2227
|
return {
|
|
2225
|
-
version: t.version ??
|
|
2228
|
+
version: t.version ?? Rn,
|
|
2226
2229
|
tokens: t.tokens ?? {}
|
|
2227
2230
|
};
|
|
2228
2231
|
}
|
|
2229
|
-
async function
|
|
2230
|
-
let t =
|
|
2231
|
-
await
|
|
2232
|
+
async function Wn(e) {
|
|
2233
|
+
let t = Vn();
|
|
2234
|
+
await v.mkdir(t, { recursive: !0 }), await v.writeFile(Hn(), `${JSON.stringify(e, null, 2)}\n`, { mode: 384 });
|
|
2232
2235
|
}
|
|
2233
|
-
async function
|
|
2234
|
-
return (await
|
|
2236
|
+
async function Gn(e) {
|
|
2237
|
+
return (await Un()).tokens[e] ?? null;
|
|
2235
2238
|
}
|
|
2236
|
-
async function
|
|
2237
|
-
let n = await
|
|
2238
|
-
n.tokens[e] = t, await
|
|
2239
|
+
async function Kn(e, t) {
|
|
2240
|
+
let n = await Un();
|
|
2241
|
+
n.tokens[e] = t, await Wn(n);
|
|
2239
2242
|
}
|
|
2240
|
-
async function
|
|
2241
|
-
let t = await
|
|
2242
|
-
e in t.tokens && (delete t.tokens[e], await
|
|
2243
|
+
async function qn(e) {
|
|
2244
|
+
let t = await Un();
|
|
2245
|
+
e in t.tokens && (delete t.tokens[e], await Wn(t));
|
|
2243
2246
|
}
|
|
2244
2247
|
//#endregion
|
|
2245
2248
|
//#region src/core/device.ts
|
|
2246
|
-
function
|
|
2247
|
-
let e =
|
|
2249
|
+
function Jn() {
|
|
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 Yn() {
|
|
2257
|
+
let e = `${Jn()}:${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 Xn() {
|
|
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 Zn(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 Qn = 300 * 1e3, $n = (e) => `<!doctype html><html><head><meta charset="utf-8"><title>Hype Stack CLI</title></head><body style="font-family:system-ui,sans-serif;text-align:center;padding-top:4rem;color:#111"><h2>${e}</h2><p>You can close this tab and return to your terminal.</p></body></html>`;
|
|
2271
|
+
async function er(e = {}) {
|
|
2272
|
+
let t = x(16).toString("hex"), n = P(), r = S.createServer(), i = await new Promise((n, i) => {
|
|
2270
2273
|
let a = setTimeout(() => {
|
|
2271
2274
|
o(), i(/* @__PURE__ */ Error("Login timed out. Run `npx @hype-stack/cli login` again."));
|
|
2272
|
-
},
|
|
2275
|
+
}, Qn);
|
|
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($n(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,55 +2301,55 @@ 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(Xn()), a = `${F()}/cli/authorize?port=${n}&state=${t}&label=${i}`;
|
|
2305
|
+
e.onUrl?.(a), Zn(a);
|
|
2303
2306
|
});
|
|
2304
|
-
}), a = await
|
|
2307
|
+
}), a = await In(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 Kn(n, o), o;
|
|
2310
2313
|
}
|
|
2311
2314
|
//#endregion
|
|
2312
2315
|
//#region src/core/access-prompts.ts
|
|
2313
|
-
async function
|
|
2316
|
+
async function tr() {
|
|
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
|
|
2319
|
-
o.log.info(`If your browser didn't open, visit:\n ${
|
|
2321
|
+
let e = await er({ onUrl: (e) => {
|
|
2322
|
+
o.log.info(`If your browser didn't open, visit:\n ${R.path(e)}`);
|
|
2320
2323
|
} });
|
|
2321
2324
|
return o.log.success(e.email ? `Logged in as ${e.email}` : "Logged in"), e.token;
|
|
2322
2325
|
} catch (e) {
|
|
2323
2326
|
return o.log.error(e instanceof Error ? e.message : String(e)), null;
|
|
2324
2327
|
}
|
|
2325
2328
|
}
|
|
2326
|
-
async function
|
|
2329
|
+
async function nr(e) {
|
|
2327
2330
|
if (e.length === 0) return;
|
|
2328
2331
|
o.note([
|
|
2329
2332
|
"These packs need a purchase before they can be installed:",
|
|
2330
2333
|
"",
|
|
2331
|
-
...e.map((e) => ` ${
|
|
2334
|
+
...e.map((e) => ` ${R.brand(e.displayName)} ${R.highlight(`$${e.price}`)}`)
|
|
2332
2335
|
].join("\n"), "Locked Packs");
|
|
2333
2336
|
let t = await o.confirm({ message: `Open the purchase ${e.length === 1 ? "page" : "pages"} in your browser?` });
|
|
2334
2337
|
if (o.isCancel(t) || !t) {
|
|
2335
|
-
o.log.info(
|
|
2338
|
+
o.log.info(R.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) Zn(xe(t.name));
|
|
2339
2342
|
o.log.info([
|
|
2340
|
-
|
|
2341
|
-
` ${
|
|
2342
|
-
` ${
|
|
2343
|
+
R.muted("After purchasing, run:"),
|
|
2344
|
+
` ${R.highlight("npx @hype-stack/cli login")} ${R.muted("Save your access")}`,
|
|
2345
|
+
` ${R.highlight("npx @hype-stack/cli compose")} ${R.muted("Install the packs")}`
|
|
2343
2346
|
].join("\n"));
|
|
2344
2347
|
}
|
|
2345
2348
|
//#endregion
|
|
2346
2349
|
//#region src/utils/exec.ts
|
|
2347
2350
|
function q(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,60 +2380,60 @@ 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 rr(e) {
|
|
2384
|
+
return (await v.stat(e).catch(() => null))?.isDirectory() ?? !1;
|
|
2382
2385
|
}
|
|
2383
|
-
async function
|
|
2384
|
-
return (await
|
|
2386
|
+
async function J(e) {
|
|
2387
|
+
return (await v.stat(e).catch(() => null))?.isFile() ?? !1;
|
|
2385
2388
|
}
|
|
2386
|
-
async function
|
|
2387
|
-
return (await
|
|
2389
|
+
async function ir(e) {
|
|
2390
|
+
return (await v.readdir(e).catch(() => [])).length === 0;
|
|
2388
2391
|
}
|
|
2389
|
-
async function
|
|
2390
|
-
let t = await
|
|
2392
|
+
async function ar(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 or(e, t) {
|
|
2397
|
+
await v.writeFile(e, JSON.stringify(t, null, 2) + "\n", "utf-8");
|
|
2395
2398
|
}
|
|
2396
|
-
async function
|
|
2399
|
+
async function sr(e) {
|
|
2397
2400
|
let t = {};
|
|
2398
|
-
if (!await
|
|
2399
|
-
let n = await
|
|
2400
|
-
for (let r of n) r.isDirectory() && await
|
|
2401
|
+
if (!await rr(e)) return t;
|
|
2402
|
+
let n = await v.readdir(e, { withFileTypes: !0 });
|
|
2403
|
+
for (let r of n) r.isDirectory() && await J(w.join(e, r.name, "package.json")) && (t[r.name] = w.relative(w.dirname(e), w.join(e, r.name)));
|
|
2401
2404
|
return t;
|
|
2402
2405
|
}
|
|
2403
|
-
async function
|
|
2404
|
-
await
|
|
2406
|
+
async function cr(e) {
|
|
2407
|
+
await v.rm(e, {
|
|
2405
2408
|
recursive: !0,
|
|
2406
2409
|
force: !0
|
|
2407
2410
|
});
|
|
2408
2411
|
}
|
|
2409
|
-
function
|
|
2410
|
-
return
|
|
2412
|
+
function lr(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
|
|
2415
|
-
o.log.info(
|
|
2416
|
-
`${
|
|
2417
|
-
`${
|
|
2418
|
-
`${
|
|
2417
|
+
function ur(e) {
|
|
2418
|
+
o.log.info(R.muted("Run database setup yourself when ready:")), o.note([
|
|
2419
|
+
`${R.command(`cd ${e}`)}`,
|
|
2420
|
+
`${R.command("pnpm exec prisma generate")} ${R.muted("(regenerate the Prisma client)")}`,
|
|
2421
|
+
`${R.command("pnpm exec prisma migrate dev")} ${R.muted("(create + apply tables for new packs)")}`
|
|
2419
2422
|
].join("\n"), "Database Setup");
|
|
2420
2423
|
}
|
|
2421
|
-
async function
|
|
2422
|
-
let { projectRoot: t, paths: n, skipPrompts: r, runCommand: i = q } = e, a = n.backend.root, s =
|
|
2423
|
-
if (!await
|
|
2424
|
+
async function dr(e) {
|
|
2425
|
+
let { projectRoot: t, paths: n, skipPrompts: r, runCommand: i = q } = e, a = n.backend.root, s = w.join(t, a);
|
|
2426
|
+
if (!await J(w.join(s, "package.json"))) return;
|
|
2424
2427
|
if (r) {
|
|
2425
|
-
|
|
2428
|
+
ur(a);
|
|
2426
2429
|
return;
|
|
2427
2430
|
}
|
|
2428
2431
|
let c = await o.confirm({
|
|
2429
|
-
message: `Run database setup now? (${
|
|
2432
|
+
message: `Run database setup now? (${R.command("prisma generate")} + ${R.command("prisma migrate")})`,
|
|
2430
2433
|
initialValue: !0
|
|
2431
2434
|
});
|
|
2432
2435
|
if (o.isCancel(c) || !c) {
|
|
2433
|
-
|
|
2436
|
+
ur(a);
|
|
2434
2437
|
return;
|
|
2435
2438
|
}
|
|
2436
2439
|
let l = o.spinner();
|
|
@@ -2439,10 +2442,10 @@ async function Zn(e) {
|
|
|
2439
2442
|
"prisma",
|
|
2440
2443
|
"generate"
|
|
2441
2444
|
], { cwd: s })).exitCode !== 0) {
|
|
2442
|
-
l.stop(
|
|
2445
|
+
l.stop(R.warning("Prisma client generation failed")), ur(a);
|
|
2443
2446
|
return;
|
|
2444
2447
|
}
|
|
2445
|
-
l.stop(
|
|
2448
|
+
l.stop(R.success("Prisma client generated"));
|
|
2446
2449
|
let u = o.spinner();
|
|
2447
2450
|
if (u.start("Applying database schema..."), (await i("pnpm", [
|
|
2448
2451
|
"exec",
|
|
@@ -2452,30 +2455,30 @@ async function Zn(e) {
|
|
|
2452
2455
|
"--name",
|
|
2453
2456
|
"add-packs"
|
|
2454
2457
|
], { cwd: s })).exitCode !== 0) {
|
|
2455
|
-
u.stop(
|
|
2458
|
+
u.stop(R.warning("Database migration failed (is your database running?)")), ur(a);
|
|
2456
2459
|
return;
|
|
2457
2460
|
}
|
|
2458
|
-
u.stop(
|
|
2461
|
+
u.stop(R.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 fr(e) {
|
|
2466
|
+
return ar(w.join(e, j));
|
|
2464
2467
|
}
|
|
2465
|
-
async function
|
|
2466
|
-
return
|
|
2468
|
+
async function pr(e) {
|
|
2469
|
+
return J(w.join(e, j));
|
|
2467
2470
|
}
|
|
2468
|
-
async function
|
|
2469
|
-
await
|
|
2471
|
+
async function mr(e, t) {
|
|
2472
|
+
await or(w.join(e, j), t);
|
|
2470
2473
|
}
|
|
2471
|
-
async function
|
|
2472
|
-
let t =
|
|
2474
|
+
async function hr(e) {
|
|
2475
|
+
let t = w.join(e, "apps"), n = w.join(e, "packages"), [r, i] = await Promise.all([sr(t), sr(n)]);
|
|
2473
2476
|
return {
|
|
2474
2477
|
apps: r,
|
|
2475
2478
|
packages: i
|
|
2476
2479
|
};
|
|
2477
2480
|
}
|
|
2478
|
-
function
|
|
2481
|
+
function gr(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,23 +2512,23 @@ function nr(e) {
|
|
|
2509
2512
|
}
|
|
2510
2513
|
};
|
|
2511
2514
|
}
|
|
2512
|
-
function
|
|
2515
|
+
function _r(e, t) {
|
|
2513
2516
|
return {
|
|
2514
|
-
$schema:
|
|
2517
|
+
$schema: ue(),
|
|
2515
2518
|
version: 1,
|
|
2516
2519
|
name: e,
|
|
2517
2520
|
apps: t.apps,
|
|
2518
2521
|
packages: t.packages,
|
|
2519
|
-
paths:
|
|
2522
|
+
paths: gr(t),
|
|
2520
2523
|
installedPacks: [],
|
|
2521
2524
|
licenseKey: null
|
|
2522
2525
|
};
|
|
2523
2526
|
}
|
|
2524
|
-
async function
|
|
2525
|
-
let t =
|
|
2527
|
+
async function vr(e) {
|
|
2528
|
+
let t = w.join(e, "package.json"), n = w.join(e, "apps"), [r, i] = await Promise.all([J(t), rr(n)]);
|
|
2526
2529
|
return r && i;
|
|
2527
2530
|
}
|
|
2528
|
-
function
|
|
2531
|
+
function Y(e, t) {
|
|
2529
2532
|
return e.replace(/\{\{(\w+)\.(\w+)\}\}/g, (n, r, i) => {
|
|
2530
2533
|
let a = t[r];
|
|
2531
2534
|
if (!a) throw Error(`Unknown app "${r}" in path template "${e}"`);
|
|
@@ -2536,7 +2539,7 @@ function X(e, t) {
|
|
|
2536
2539
|
}
|
|
2537
2540
|
//#endregion
|
|
2538
2541
|
//#region src/core/registry.ts
|
|
2539
|
-
async function
|
|
2542
|
+
async function yr(e) {
|
|
2540
2543
|
let { data: t, error: n, status: r } = await K.createRequest()({
|
|
2541
2544
|
endpoint: `/packs/${encodeURIComponent(e)}/manifest`,
|
|
2542
2545
|
method: "GET"
|
|
@@ -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
|
|
2551
|
+
async function br(e, t = {}) {
|
|
2549
2552
|
let n = K.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": Yn(),
|
|
2557
|
+
"X-Client-Info": Xn()
|
|
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,32 +2565,32 @@ 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
|
|
2575
|
-
let r =
|
|
2576
|
-
return
|
|
2577
|
+
function xr(e, t, n) {
|
|
2578
|
+
let r = Y(e, t);
|
|
2579
|
+
return w.resolve(n, r);
|
|
2577
2580
|
}
|
|
2578
|
-
function
|
|
2579
|
-
return
|
|
2581
|
+
function Sr(e, t) {
|
|
2582
|
+
return w.join(t, e);
|
|
2580
2583
|
}
|
|
2581
|
-
var
|
|
2584
|
+
var Cr = K.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 wr() {
|
|
2589
|
+
let { data: e, error: t } = await Cr.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 Tr(e, t = {}) {
|
|
2591
2594
|
if (e.length === 0) return {};
|
|
2592
2595
|
let n = K.createRequest()({
|
|
2593
2596
|
endpoint: "/packs/authorize",
|
|
@@ -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
|
|
2608
|
-
return
|
|
2609
|
+
var Er = "@hype-stack/";
|
|
2610
|
+
function Dr(e, t) {
|
|
2611
|
+
return Y(e === "admin" ? "{{admin.root}}" : "{{frontend.root}}", t);
|
|
2609
2612
|
}
|
|
2610
|
-
async function
|
|
2611
|
-
let r =
|
|
2612
|
-
if (await
|
|
2613
|
-
let t = await
|
|
2614
|
-
for (let n of e) t.includes(`from "${n.from}"`) || (t =
|
|
2615
|
-
await
|
|
2613
|
+
async function Or(e, t, n) {
|
|
2614
|
+
let r = Y("{{backend.root}}", t), i = w.resolve(n, r, "src/config/env/env.config.ts"), a = w.resolve(n, r, ".env.example"), o = w.resolve(n, r, ".env.test");
|
|
2615
|
+
if (await J(i)) {
|
|
2616
|
+
let t = await v.readFile(i, "utf-8");
|
|
2617
|
+
for (let n of e) t.includes(`from "${n.from}"`) || (t = kr(t, n), t = Ar(t, n));
|
|
2618
|
+
await v.writeFile(i, t, "utf-8");
|
|
2616
2619
|
}
|
|
2617
|
-
if (await
|
|
2618
|
-
let t = await
|
|
2619
|
-
for (let n of e) t =
|
|
2620
|
-
await
|
|
2620
|
+
if (await J(a)) {
|
|
2621
|
+
let t = await v.readFile(a, "utf-8");
|
|
2622
|
+
for (let n of e) t = jr(t, n);
|
|
2623
|
+
await v.writeFile(a, t, "utf-8");
|
|
2621
2624
|
}
|
|
2622
|
-
if (await
|
|
2623
|
-
let t = await
|
|
2624
|
-
for (let n of e) t =
|
|
2625
|
-
await
|
|
2625
|
+
if (await J(o)) {
|
|
2626
|
+
let t = await v.readFile(o, "utf-8");
|
|
2627
|
+
for (let n of e) t = Mr(t, n);
|
|
2628
|
+
await v.writeFile(o, t, "utf-8");
|
|
2626
2629
|
}
|
|
2627
2630
|
}
|
|
2628
|
-
function
|
|
2631
|
+
function kr(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 Ar(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 jr(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 Mr(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 =
|
|
2664
|
-
if (!await
|
|
2665
|
-
let i = await
|
|
2666
|
-
for (let t of e) i.includes(`from "${t.from}"`) || (i =
|
|
2667
|
-
await
|
|
2665
|
+
async function Nr(e, t, n) {
|
|
2666
|
+
let r = w.resolve(n, Y("{{backend.routes}}", t), "index.ts");
|
|
2667
|
+
if (!await J(r)) return;
|
|
2668
|
+
let i = await v.readFile(r, "utf-8");
|
|
2669
|
+
for (let t of e) i.includes(`from "${t.from}"`) || (i = Pr(i, t), i = Fr(i, t));
|
|
2670
|
+
await v.writeFile(r, i, "utf-8");
|
|
2668
2671
|
}
|
|
2669
|
-
function
|
|
2672
|
+
function Pr(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 Fr(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 =
|
|
2688
|
-
if (!await
|
|
2689
|
-
let i = await
|
|
2690
|
-
for (let t of e) i.includes(`export let ${t.export}`) || (i =
|
|
2691
|
-
await
|
|
2689
|
+
async function Ir(e, t, n) {
|
|
2690
|
+
let r = w.resolve(n, Y("{{backend.root}}", t), "src/context.ts");
|
|
2691
|
+
if (!await J(r)) return;
|
|
2692
|
+
let i = await v.readFile(r, "utf-8");
|
|
2693
|
+
for (let t of e) i.includes(`export let ${t.export}`) || (i = Lr(i, t), i = Rr(i, t), i = zr(i, t), i = Vr(i, t));
|
|
2694
|
+
await v.writeFile(r, i, "utf-8");
|
|
2692
2695
|
}
|
|
2693
|
-
function
|
|
2696
|
+
function Lr(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 Rr(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 zr(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 = Br(e, i);
|
|
2716
2719
|
return a === -1 ? e : e.slice(0, a) + n + "\n" + e.slice(a);
|
|
2717
2720
|
}
|
|
2718
|
-
function
|
|
2721
|
+
function Br(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 Vr(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 =
|
|
2735
|
-
if (!await
|
|
2736
|
-
let i = await
|
|
2737
|
-
for (let t of e) i.includes(`from "${t.from}"`) || (i =
|
|
2738
|
-
await
|
|
2736
|
+
async function Hr(e, t, n) {
|
|
2737
|
+
let r = w.resolve(n, Y("{{enums.src}}", t), "index.ts");
|
|
2738
|
+
if (!await J(r)) return;
|
|
2739
|
+
let i = await v.readFile(r, "utf-8");
|
|
2740
|
+
for (let t of e) i.includes(`from "${t.from}"`) || (i = Ur(i, t));
|
|
2741
|
+
await v.writeFile(r, i, "utf-8");
|
|
2739
2742
|
}
|
|
2740
|
-
function
|
|
2743
|
+
function Ur(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 =
|
|
2750
|
-
if (!await
|
|
2751
|
-
let a = await
|
|
2752
|
-
for (let t of e) a.includes(`from "${t.from}"`) || (a =
|
|
2753
|
-
await
|
|
2751
|
+
async function Wr(e, t, n) {
|
|
2752
|
+
let r = Y("{{backend.root}}", t), i = w.resolve(n, r, "src/sockets/index.ts");
|
|
2753
|
+
if (!await J(i)) return;
|
|
2754
|
+
let a = await v.readFile(i, "utf-8");
|
|
2755
|
+
for (let t of e) a.includes(`from "${t.from}"`) || (a = Gr(a, t), a = Kr(a, t));
|
|
2756
|
+
await J(w.resolve(n, r, "src/libs/websocket/ws-authenticate.ts")) && (a = qr(a)), await v.writeFile(i, a, "utf-8");
|
|
2754
2757
|
}
|
|
2755
|
-
function
|
|
2758
|
+
function Gr(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 Kr(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 qr(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 =
|
|
2789
|
-
if (!await
|
|
2790
|
-
let a = await
|
|
2791
|
-
for (let t of e) a.includes(`.$configure(${t.import})`) || (a =
|
|
2792
|
-
await
|
|
2790
|
+
async function Jr(e, t, n) {
|
|
2791
|
+
let r = Y("{{frontend.root}}", t), i = w.resolve(n, r, "src/api/sdk.ts");
|
|
2792
|
+
if (!await J(i)) return;
|
|
2793
|
+
let a = await v.readFile(i, "utf-8");
|
|
2794
|
+
for (let t of e) a.includes(`.$configure(${t.import})`) || (a = Yr(a, t), a = Xr(a, t));
|
|
2795
|
+
await v.writeFile(i, a, "utf-8");
|
|
2793
2796
|
}
|
|
2794
|
-
function
|
|
2797
|
+
function Yr(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 Xr(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 =
|
|
2813
|
-
if (!await
|
|
2814
|
-
let i = await
|
|
2815
|
-
for (let t of e) i.includes(`"${t.path}"`) || (i =
|
|
2816
|
-
await
|
|
2814
|
+
async function Zr(e, t, n) {
|
|
2815
|
+
let r = w.resolve(n, Y("{{backend.utils}}", t), "frontend-url/frontend-url.ts");
|
|
2816
|
+
if (!await J(r)) return;
|
|
2817
|
+
let i = await v.readFile(r, "utf-8");
|
|
2818
|
+
for (let t of e) i.includes(`"${t.path}"`) || (i = Qr(i, t));
|
|
2819
|
+
await v.writeFile(r, i, "utf-8");
|
|
2817
2820
|
}
|
|
2818
|
-
function
|
|
2821
|
+
function Qr(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 $r = "import { type LucideIcon } from \"lucide-react\";\n\n/* -------------------------------------------------------------------------------------------------\n * Types\n * -----------------------------------------------------------------------------------------------*/\n\nexport type NavItem = {\n label: string;\n icon: LucideIcon;\n to: string;\n params?: Record<string, string>;\n};\n\nexport type NavSection = {\n label: string;\n icon: LucideIcon;\n items: NavItem[];\n};\n\nexport type NavSectionLink = NavSection & { to: string; params?: Record<string, string> };\n\nexport type NavEntry = NavSection | NavSectionLink;\n\n/* -------------------------------------------------------------------------------------------------\n * Navigation\n * -----------------------------------------------------------------------------------------------*/\n\nexport const primaryNav: NavEntry[] = [];\n\nexport const secondaryNav: NavEntry[] = [];\n\nexport const tertiaryNav: NavEntry[] = [];\n\nexport const settingsNav: NavEntry[] = [];\n", ei = {
|
|
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
|
|
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 =
|
|
2839
|
-
if (!await
|
|
2840
|
-
let
|
|
2841
|
-
if (!
|
|
2842
|
-
let
|
|
2843
|
-
await
|
|
2844
|
-
}
|
|
2845
|
-
function
|
|
2833
|
+
async function ti(e) {
|
|
2834
|
+
let { entries: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = Dr(i, n), o = w.resolve(r, a, "src/constants/nav.constants.ts"), s;
|
|
2835
|
+
await J(o) ? s = await v.readFile(o, "utf-8") : (await v.mkdir(w.dirname(o), { recursive: !0 }), s = $r);
|
|
2836
|
+
for (let e of t) s.includes(`label: "${e.label}"`) || (s = ii(s, e));
|
|
2837
|
+
for (let e of t.toReversed()) s.includes(`label: "${e.label}"`) || (s = oi(s, e));
|
|
2838
|
+
await v.writeFile(o, s, "utf-8");
|
|
2839
|
+
}
|
|
2840
|
+
async function ni(e) {
|
|
2841
|
+
let { postLoginRedirect: t, paths: n, projectRoot: r, slot: i = "frontend" } = e, a = Dr(i, n), o = w.resolve(r, a, "src/features/auth/constants/auth.constants.ts");
|
|
2842
|
+
if (!await J(o)) return;
|
|
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");
|
|
2847
|
+
}
|
|
2848
|
+
function ri(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 ii(e, t) {
|
|
2854
|
+
let n = ri(t), r = e;
|
|
2855
|
+
for (let e of n) r = ai(r, e);
|
|
2853
2856
|
return r;
|
|
2854
2857
|
}
|
|
2855
|
-
function
|
|
2858
|
+
function ai(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 oi(e, t) {
|
|
2867
|
+
let n = ei[t.group];
|
|
2865
2868
|
if (!n) return e;
|
|
2866
|
-
let r =
|
|
2869
|
+
let r = ci(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 = si(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 si(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 ci(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 =
|
|
2895
|
-
if (!await
|
|
2896
|
-
let a = await
|
|
2897
|
-
for (let t of e) a.includes(`from "${t.from}"`) || (a =
|
|
2898
|
-
await
|
|
2896
|
+
async function li(e, t, n) {
|
|
2897
|
+
let r = Y("{{backend.features}}", t), i = w.resolve(n, r, "organizations/modules/setup-organization/steps/index.ts");
|
|
2898
|
+
if (!await J(i)) return;
|
|
2899
|
+
let a = await v.readFile(i, "utf-8");
|
|
2900
|
+
for (let t of e) a.includes(`from "${t.from}"`) || (a = ui(a, t), a = di(a, t));
|
|
2901
|
+
await v.writeFile(i, a, "utf-8");
|
|
2899
2902
|
}
|
|
2900
|
-
function
|
|
2903
|
+
function ui(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 di(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 = fi(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 fi(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 pi = "import { type ComponentType } from \"react\";\n\nexport type NavbarAction = {\n id: string;\n component: ComponentType;\n};\n\nexport const navbarActions: NavbarAction[] = [];\n\nexport const userMenuActions: NavbarAction[] = [];\n";
|
|
2924
|
+
async function mi(e) {
|
|
2925
|
+
await gi({
|
|
2923
2926
|
...e,
|
|
2924
2927
|
arrayName: "navbarActions"
|
|
2925
2928
|
});
|
|
2926
2929
|
}
|
|
2927
|
-
async function
|
|
2928
|
-
await
|
|
2930
|
+
async function hi(e) {
|
|
2931
|
+
await gi({
|
|
2929
2932
|
...e,
|
|
2930
2933
|
arrayName: "userMenuActions"
|
|
2931
2934
|
});
|
|
2932
2935
|
}
|
|
2933
|
-
async function
|
|
2934
|
-
let a =
|
|
2935
|
-
await
|
|
2936
|
-
for (let n of e)
|
|
2937
|
-
await
|
|
2936
|
+
async function gi({ actions: e, arrayName: t, paths: n, projectRoot: r, slot: i }) {
|
|
2937
|
+
let a = Dr(i, n), o = w.resolve(r, a, "src/constants/navbar-actions.tsx"), s;
|
|
2938
|
+
await J(o) ? s = await v.readFile(o, "utf-8") : (await v.mkdir(w.dirname(o), { recursive: !0 }), s = pi);
|
|
2939
|
+
for (let n of e) s = _i(s, n), s = vi(s, n, t);
|
|
2940
|
+
await v.writeFile(o, s, "utf-8");
|
|
2938
2941
|
}
|
|
2939
|
-
function
|
|
2942
|
+
function _i(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 vi(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 = yi(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 yi(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 bi = new Set([
|
|
2964
2967
|
".ts",
|
|
2965
2968
|
".tsx",
|
|
2966
2969
|
".js",
|
|
2967
2970
|
".jsx"
|
|
2968
2971
|
]);
|
|
2969
|
-
async function
|
|
2972
|
+
async function xi(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 = xr(e.target, n, r), i = await v.stat(t).catch(() => null);
|
|
2978
|
+
i?.isDirectory() ? await wi(t, a) : i?.isFile() && bi.has(w.extname(t)) && await Ti(t, a);
|
|
2976
2979
|
}));
|
|
2977
2980
|
}
|
|
2978
|
-
var
|
|
2981
|
+
var Si = 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 Ci(e, t) {
|
|
2991
|
+
t !== "hype-stack" && await wi(e, `@${t}/`);
|
|
2989
2992
|
}
|
|
2990
|
-
async function
|
|
2991
|
-
let n = await
|
|
2993
|
+
async function wi(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 (Si.has(n.name)) return;
|
|
2999
|
+
await wi(r, t);
|
|
3000
|
+
} else n.isFile() && bi.has(w.extname(n.name)) && await Ti(r, t);
|
|
2998
3001
|
}));
|
|
2999
3002
|
}
|
|
3000
|
-
async function
|
|
3001
|
-
let n = await
|
|
3002
|
-
if (!n.includes(
|
|
3003
|
-
let r = n.replaceAll(
|
|
3004
|
-
await
|
|
3003
|
+
async function Ti(e, t) {
|
|
3004
|
+
let n = await v.readFile(e, "utf-8");
|
|
3005
|
+
if (!n.includes(Er)) return;
|
|
3006
|
+
let r = n.replaceAll(Er, 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 Ei(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 Di(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 Di(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 Oi(e) {
|
|
3022
|
+
let { file: t, packDir: n, paths: r, projectRoot: i } = e, a = Sr(t.source, n), o = xr(t.target, r, i);
|
|
3020
3023
|
return {
|
|
3021
3024
|
sourcePath: a,
|
|
3022
3025
|
targetPath: o,
|
|
3023
|
-
sourceExists: await
|
|
3024
|
-
targetExists: await
|
|
3026
|
+
sourceExists: await J(a) || await rr(a),
|
|
3027
|
+
targetExists: await J(o) || await rr(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 ki(e) {
|
|
3031
|
+
let { file: t, packDir: n, paths: r, projectRoot: i } = e, { sourcePath: a, targetPath: o, sourceExists: s, targetExists: c } = await Oi({
|
|
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 Ai(e) {
|
|
3047
|
+
let { file: t, packDir: n, paths: r, projectRoot: i, force: a, overwrite: o } = e, { sourcePath: s, targetPath: c, sourceExists: l, targetExists: u } = await Oi({
|
|
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 Di(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 Di(s, c), {
|
|
3072
3075
|
status: "installed",
|
|
3073
3076
|
path: t.target
|
|
3074
3077
|
});
|
|
3075
|
-
case "override": return await
|
|
3078
|
+
case "override": return await Di(s, c), {
|
|
3076
3079
|
status: "installed",
|
|
3077
3080
|
path: t.target
|
|
3078
3081
|
};
|
|
3079
3082
|
case "merge": {
|
|
3080
|
-
if (!
|
|
3083
|
+
if (!u) return await Di(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 ji(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" || !Ei(n, t)) continue;
|
|
3121
|
+
let { targetPath: i, targetExists: c } = await Oi({
|
|
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 Mi(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 (!Ei(e, o)) continue;
|
|
3142
|
+
let t = await ki({
|
|
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 Ni(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) => Ei(e, s));
|
|
3158
3161
|
for (let e of u) {
|
|
3159
|
-
let t = await
|
|
3162
|
+
let t = await Ai({
|
|
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 xi({
|
|
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 Or(t.env, c, r), t.routes && t.routes.length > 0 && await Nr(t.routes, c, r), t.context && t.context.length > 0 && await Ir(t.context, c, r), t.sockets && t.sockets.length > 0 && await Wr(t.sockets, c, r), t.sdkConfigurations && t.sdkConfigurations.length > 0 && await Jr(t.sdkConfigurations, c, r), t.enums && t.enums.length > 0 && await Hr(t.enums, c, r), t.frontendRoutes && t.frontendRoutes.length > 0 && await Zr(t.frontendRoutes, c, r);
|
|
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 ti({
|
|
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 mi({
|
|
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 hi({
|
|
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 li(t.onboardingSteps, c, r), t.postLoginRedirect && await ni({
|
|
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 Pi(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 Mi({
|
|
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 Ni({
|
|
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 Fi(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 Fi(e, t, n) {
|
|
3253
3256
|
let r = {
|
|
3254
3257
|
...e,
|
|
3255
3258
|
installedPacks: [...e.installedPacks ?? [], t]
|
|
3256
3259
|
};
|
|
3257
|
-
return await
|
|
3260
|
+
return await mr(n, r), r;
|
|
3258
3261
|
}
|
|
3259
|
-
async function
|
|
3262
|
+
async function Ii(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 Ai({
|
|
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 Zr(t.frontendRoutes, a, r), t.nav && t.nav.length > 0 && await ti({
|
|
3283
3286
|
entries: t.nav,
|
|
3284
3287
|
paths: a,
|
|
3285
3288
|
projectRoot: r
|
|
3286
|
-
}), t.postLoginRedirect && await
|
|
3289
|
+
}), t.postLoginRedirect && await ni({
|
|
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 Li = [
|
|
3298
3301
|
"starter",
|
|
3299
3302
|
"layout",
|
|
3300
3303
|
"feature"
|
|
3301
|
-
],
|
|
3304
|
+
], Ri = {
|
|
3302
3305
|
starter: "Starter",
|
|
3303
3306
|
layout: "Layout",
|
|
3304
3307
|
feature: "Features"
|
|
3305
|
-
},
|
|
3306
|
-
function
|
|
3308
|
+
}, zi = new Set(["starter", "layout"]), Bi = "layout-basic";
|
|
3309
|
+
function Vi(e, t = {}) {
|
|
3307
3310
|
let n = [];
|
|
3308
|
-
for (let r of
|
|
3311
|
+
for (let r of Li) {
|
|
3309
3312
|
let i = e.filter((e) => e.category === r);
|
|
3310
3313
|
if (i.length === 0) continue;
|
|
3311
|
-
let a =
|
|
3314
|
+
let a = zi.has(r) ? "single" : "multiple";
|
|
3312
3315
|
if (r === "layout") {
|
|
3313
|
-
n.push(
|
|
3316
|
+
n.push(Hi("frontend", i)), t.adminAvailable && n.push(Hi("admin", i));
|
|
3314
3317
|
continue;
|
|
3315
3318
|
}
|
|
3316
3319
|
n.push({
|
|
3317
3320
|
category: r,
|
|
3318
|
-
label:
|
|
3321
|
+
label: Ri[r],
|
|
3319
3322
|
mode: a,
|
|
3320
3323
|
packs: i,
|
|
3321
3324
|
preselect: null
|
|
@@ -3323,20 +3326,20 @@ function Di(e, t = {}) {
|
|
|
3323
3326
|
}
|
|
3324
3327
|
return n;
|
|
3325
3328
|
}
|
|
3326
|
-
function
|
|
3327
|
-
let n = t.some((e) => e.name ===
|
|
3329
|
+
function Hi(e, t) {
|
|
3330
|
+
let n = t.some((e) => e.name === Bi);
|
|
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 ? Bi : null,
|
|
3334
3337
|
slot: e
|
|
3335
3338
|
};
|
|
3336
3339
|
}
|
|
3337
3340
|
//#endregion
|
|
3338
3341
|
//#region src/core/resolve.ts
|
|
3339
|
-
function
|
|
3342
|
+
function Ui(e) {
|
|
3340
3343
|
let t = /* @__PURE__ */ new Map();
|
|
3341
3344
|
for (let n of e) t.set(n.name, {
|
|
3342
3345
|
name: n.name,
|
|
@@ -3344,7 +3347,7 @@ function ki(e) {
|
|
|
3344
3347
|
});
|
|
3345
3348
|
return t;
|
|
3346
3349
|
}
|
|
3347
|
-
function
|
|
3350
|
+
function Wi(e, t, n = /* @__PURE__ */ new Set()) {
|
|
3348
3351
|
let r = /* @__PURE__ */ new Set();
|
|
3349
3352
|
function i(e) {
|
|
3350
3353
|
if (n.has(e)) return [];
|
|
@@ -3358,10 +3361,10 @@ function Ai(e, t, n = /* @__PURE__ */ new Set()) {
|
|
|
3358
3361
|
}
|
|
3359
3362
|
return i(e);
|
|
3360
3363
|
}
|
|
3361
|
-
function
|
|
3364
|
+
function Gi(e, t, n = []) {
|
|
3362
3365
|
let r = new Set(n), i = new Set(n), a = [];
|
|
3363
3366
|
for (let n of e) {
|
|
3364
|
-
let e =
|
|
3367
|
+
let e = Wi(n, t, new Set(i));
|
|
3365
3368
|
for (let t of e) i.has(t) || (i.add(t), a.push(t));
|
|
3366
3369
|
}
|
|
3367
3370
|
return {
|
|
@@ -3369,7 +3372,7 @@ function ji(e, t, n = []) {
|
|
|
3369
3372
|
alreadyInstalled: e.filter((e) => r.has(e))
|
|
3370
3373
|
};
|
|
3371
3374
|
}
|
|
3372
|
-
function
|
|
3375
|
+
function Ki(e) {
|
|
3373
3376
|
let { order: t, graph: n, isLocked: r, installed: i = [] } = e, a = new Set(i), o = /* @__PURE__ */ new Set();
|
|
3374
3377
|
for (let e of t) {
|
|
3375
3378
|
let t = n.get(e)?.dependencies.some((e) => !a.has(e) && o.has(e)) ?? !1;
|
|
@@ -3382,7 +3385,7 @@ function Mi(e) {
|
|
|
3382
3385
|
}
|
|
3383
3386
|
//#endregion
|
|
3384
3387
|
//#region src/core/variants.ts
|
|
3385
|
-
function
|
|
3388
|
+
function qi(e, t = {}) {
|
|
3386
3389
|
let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
|
|
3387
3390
|
for (let i of e) {
|
|
3388
3391
|
let e = t[i.family] ?? i.default;
|
|
@@ -3394,14 +3397,14 @@ function Ni(e, t = {}) {
|
|
|
3394
3397
|
familyOf: r
|
|
3395
3398
|
};
|
|
3396
3399
|
}
|
|
3397
|
-
function
|
|
3400
|
+
function Ji(e, t, n) {
|
|
3398
3401
|
return [...e.map((e) => n.chosen.get(e.family) ?? e.default), ...t];
|
|
3399
3402
|
}
|
|
3400
|
-
function
|
|
3403
|
+
function Yi(e, t) {
|
|
3401
3404
|
let n = t.familyOf.get(e);
|
|
3402
3405
|
return n ? t.chosen.get(n) ?? e : e;
|
|
3403
3406
|
}
|
|
3404
|
-
function
|
|
3407
|
+
function Xi(e, t) {
|
|
3405
3408
|
let n = /* @__PURE__ */ new Map();
|
|
3406
3409
|
for (let t of e) t.family && n.set(t.name, t.family);
|
|
3407
3410
|
let r = new Set(t), i = /* @__PURE__ */ new Map();
|
|
@@ -3417,73 +3420,182 @@ function Ii(e, t) {
|
|
|
3417
3420
|
familyOf: n
|
|
3418
3421
|
};
|
|
3419
3422
|
}
|
|
3420
|
-
function
|
|
3423
|
+
function Zi(e, t) {
|
|
3421
3424
|
return e.map((e) => ({
|
|
3422
3425
|
...e,
|
|
3423
|
-
dependencies: e.dependencies.map((e) =>
|
|
3426
|
+
dependencies: e.dependencies.map((e) => Yi(e, t))
|
|
3424
3427
|
}));
|
|
3425
3428
|
}
|
|
3426
3429
|
//#endregion
|
|
3427
3430
|
//#region src/ui/banner.ts
|
|
3428
|
-
var
|
|
3431
|
+
var Qi = [
|
|
3429
3432
|
" ██╗ ██╗ ██╗ ██╗ ██████╗ ███████╗",
|
|
3430
3433
|
" ██║ ██║ ╚██╗ ██╔╝ ██╔══██╗ ██╔════╝",
|
|
3431
3434
|
" ███████║ ╚████╔╝ ██████╔╝ █████╗ ",
|
|
3432
3435
|
" ██╔══██║ ╚██╔╝ ██╔═══╝ ██╔══╝ ",
|
|
3433
3436
|
" ██║ ██║ ██║ ██║ ███████╗",
|
|
3434
3437
|
" ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝"
|
|
3435
|
-
],
|
|
3438
|
+
], $i = [
|
|
3436
3439
|
" ███████╗ ████████╗ █████╗ ██████╗ ██╗ ██╗",
|
|
3437
3440
|
" ██╔════╝ ╚══██╔══╝ ██╔══██╗ ██╔════╝ ██║ ██╔╝",
|
|
3438
3441
|
" ███████╗ ██║ ███████║ ██║ █████╔╝ ",
|
|
3439
3442
|
" ╚════██║ ██║ ██╔══██║ ██║ ██╔═██╗ ",
|
|
3440
3443
|
" ███████║ ██║ ██║ ██║ ╚██████╗ ██║ ██╗",
|
|
3441
3444
|
" ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝"
|
|
3442
|
-
],
|
|
3445
|
+
], ea = [
|
|
3443
3446
|
253,
|
|
3444
3447
|
176,
|
|
3445
3448
|
21
|
|
3446
|
-
],
|
|
3449
|
+
], ta = [
|
|
3447
3450
|
245,
|
|
3448
3451
|
76,
|
|
3449
3452
|
2
|
|
3450
|
-
],
|
|
3453
|
+
], na = 5, ra = [
|
|
3451
3454
|
17,
|
|
3452
3455
|
103,
|
|
3453
3456
|
248
|
|
3454
|
-
],
|
|
3457
|
+
], ia = [
|
|
3455
3458
|
42,
|
|
3456
3459
|
160,
|
|
3457
3460
|
250
|
|
3458
|
-
],
|
|
3459
|
-
function
|
|
3461
|
+
], aa = .2;
|
|
3462
|
+
function oa() {
|
|
3460
3463
|
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(` ${
|
|
3472
|
-
}
|
|
3473
|
-
function
|
|
3474
|
-
console.log(), console.log(` ${
|
|
3464
|
+
for (let e of be(Qi, {
|
|
3465
|
+
start: ea,
|
|
3466
|
+
end: ta,
|
|
3467
|
+
angle: na
|
|
3468
|
+
})) console.log(y.bold(e));
|
|
3469
|
+
for (let e of be($i, {
|
|
3470
|
+
start: ra,
|
|
3471
|
+
end: ia,
|
|
3472
|
+
angle: aa
|
|
3473
|
+
})) console.log(y.bold(e));
|
|
3474
|
+
console.log(), console.log(` ${z.spark} ${y.dim("v" + k)} ${y.dim("·")} ${ve("Ship web + desktop apps from one codebase")}`), console.log();
|
|
3475
|
+
}
|
|
3476
|
+
function X() {
|
|
3477
|
+
console.log(), console.log(` ${z.bolt} ${he.orange("Hype")}${he.skyBlue("Stack")} ${y.dim("v" + k)}`), console.log();
|
|
3478
|
+
}
|
|
3479
|
+
//#endregion
|
|
3480
|
+
//#region src/ui/pack-multiselect.ts
|
|
3481
|
+
var sa = class extends D {
|
|
3482
|
+
options;
|
|
3483
|
+
cursor = 0;
|
|
3484
|
+
selected;
|
|
3485
|
+
required;
|
|
3486
|
+
continueLabel;
|
|
3487
|
+
maxItems;
|
|
3488
|
+
message;
|
|
3489
|
+
constructor(e) {
|
|
3490
|
+
let { message: t, options: n, initialValues: r, required: i, continueLabel: a, maxItems: o, input: s, output: c, signal: l } = e;
|
|
3491
|
+
super({
|
|
3492
|
+
input: s,
|
|
3493
|
+
output: c,
|
|
3494
|
+
signal: l,
|
|
3495
|
+
validate: (e) => {
|
|
3496
|
+
if (i && (e === void 0 || e.length === 0)) return "Select at least one pack, or highlight Continue to install none.";
|
|
3497
|
+
},
|
|
3498
|
+
render() {
|
|
3499
|
+
return this.renderFrame();
|
|
3500
|
+
}
|
|
3501
|
+
}, !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) => {
|
|
3502
|
+
switch (e) {
|
|
3503
|
+
case "up":
|
|
3504
|
+
case "left":
|
|
3505
|
+
this.move(-1);
|
|
3506
|
+
break;
|
|
3507
|
+
case "down":
|
|
3508
|
+
case "right":
|
|
3509
|
+
this.move(1);
|
|
3510
|
+
break;
|
|
3511
|
+
case "space":
|
|
3512
|
+
this.toggleCurrent();
|
|
3513
|
+
break;
|
|
3514
|
+
}
|
|
3515
|
+
}), this.on("key", (e, t) => this.handleKey(e, t));
|
|
3516
|
+
}
|
|
3517
|
+
get rowCount() {
|
|
3518
|
+
return this.options.length + 1;
|
|
3519
|
+
}
|
|
3520
|
+
get atContinue() {
|
|
3521
|
+
return this.cursor >= this.options.length;
|
|
3522
|
+
}
|
|
3523
|
+
_shouldSubmit() {
|
|
3524
|
+
return this.atContinue;
|
|
3525
|
+
}
|
|
3526
|
+
move(e) {
|
|
3527
|
+
let t = this.rowCount;
|
|
3528
|
+
this.cursor = (this.cursor + e + t) % t;
|
|
3529
|
+
}
|
|
3530
|
+
toggleCurrent() {
|
|
3531
|
+
if (this.atContinue) return;
|
|
3532
|
+
let e = this.options[this.cursor];
|
|
3533
|
+
!e || e.disabled || (this.selected.has(e.value) ? this.selected.delete(e.value) : this.selected.add(e.value), this.value = [...this.selected]);
|
|
3534
|
+
}
|
|
3535
|
+
toggleAll() {
|
|
3536
|
+
let e = this.options.filter((e) => !e.disabled).map((e) => e.value), t = e.every((e) => this.selected.has(e));
|
|
3537
|
+
this.selected = t ? /* @__PURE__ */ new Set() : new Set(e), this.value = [...this.selected];
|
|
3538
|
+
}
|
|
3539
|
+
handleKey(e, t) {
|
|
3540
|
+
if (t?.name === "return") {
|
|
3541
|
+
this.atContinue || this.toggleCurrent();
|
|
3542
|
+
return;
|
|
3543
|
+
}
|
|
3544
|
+
e === "a" && this.toggleAll();
|
|
3545
|
+
}
|
|
3546
|
+
renderFrame() {
|
|
3547
|
+
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) => {
|
|
3548
|
+
let n = e.label ?? String(e.value);
|
|
3549
|
+
if (e.disabled) return `${O("gray", u)} ${O(["strikethrough", "gray"], n)}`;
|
|
3550
|
+
let r = this.selected.has(e.value) ? O("green", d) : t ? O("cyan", l) : O("dim", u);
|
|
3551
|
+
return `${t ? `${O("green", f)} ` : " "}${r} ${t ? n : O("dim", n)}${t && e.hint ? ` ${O("dim", `(${e.hint})`)}` : ""}`;
|
|
3552
|
+
}, p = () => {
|
|
3553
|
+
let e = this.atContinue;
|
|
3554
|
+
return `${e ? `${O("green", f)} ` : " "}${O(e ? "cyan" : "dim", this.continueLabel)}${e ? O("dim", " (enter to install)") : ""}`;
|
|
3555
|
+
};
|
|
3556
|
+
switch (this.state) {
|
|
3557
|
+
case "submit": {
|
|
3558
|
+
let t = this.options.filter((e) => this.selected.has(e.value)).map((e) => e.label ?? String(e.value)).join(O("dim", ", ")) || O("dim", "none");
|
|
3559
|
+
return `${a}${e ? O("gray", s) : ""} ${O("dim", t)}`;
|
|
3560
|
+
}
|
|
3561
|
+
case "cancel": {
|
|
3562
|
+
let t = this.options.filter((e) => this.selected.has(e.value)).map((e) => e.label ?? String(e.value)).join(O("dim", ", "));
|
|
3563
|
+
return t.trim() === "" ? `${a}${e ? O("gray", s) : ""}` : `${a}${e ? O("gray", s) : ""} ${O(["strikethrough", "dim"], t)}`;
|
|
3564
|
+
}
|
|
3565
|
+
default: {
|
|
3566
|
+
let t = m({
|
|
3567
|
+
cursor: Math.min(this.cursor, this.options.length - 1),
|
|
3568
|
+
options: this.options,
|
|
3569
|
+
style: (e, t) => o(e, t),
|
|
3570
|
+
output: this.output,
|
|
3571
|
+
maxItems: this.maxItems,
|
|
3572
|
+
columnPadding: e ? 3 : 0,
|
|
3573
|
+
rowPadding: a.split("\n").length + (e ? 4 : 3)
|
|
3574
|
+
}).map((e) => `${r}${e}`), n = `${O("dim", "↑/↓ move · enter/space toggle · a all · enter on Continue to install")}`, s = [
|
|
3575
|
+
...t,
|
|
3576
|
+
`${r}${p()}`,
|
|
3577
|
+
`${r}${n}`,
|
|
3578
|
+
i
|
|
3579
|
+
];
|
|
3580
|
+
return this.state === "error" && s.push(`${r}${O("yellow", this.error)}`), `${a}${s.join("\n")}\n`;
|
|
3581
|
+
}
|
|
3582
|
+
}
|
|
3583
|
+
}
|
|
3584
|
+
};
|
|
3585
|
+
function ca(e) {
|
|
3586
|
+
return new sa(e).prompt();
|
|
3475
3587
|
}
|
|
3476
3588
|
//#endregion
|
|
3477
3589
|
//#region src/ui/logger.ts
|
|
3478
|
-
function
|
|
3479
|
-
o.note(e.map((e) => `${
|
|
3590
|
+
function la(e) {
|
|
3591
|
+
o.note(e.map((e) => `${z.arrow} ${e}`).join("\n"), "Next steps");
|
|
3480
3592
|
}
|
|
3481
3593
|
function Z() {
|
|
3482
|
-
o.cancel(
|
|
3594
|
+
o.cancel(R.muted("Operation cancelled.")), process.exit(0);
|
|
3483
3595
|
}
|
|
3484
3596
|
//#endregion
|
|
3485
3597
|
//#region src/core/apply-theme.ts
|
|
3486
|
-
function
|
|
3598
|
+
function ua(e, t) {
|
|
3487
3599
|
let n = e.indexOf(t);
|
|
3488
3600
|
if (n === -1) return null;
|
|
3489
3601
|
let r = e.indexOf("{", n);
|
|
@@ -3498,47 +3610,47 @@ function Yi(e, t) {
|
|
|
3498
3610
|
bodyEnd: a - 1
|
|
3499
3611
|
} : null;
|
|
3500
3612
|
}
|
|
3501
|
-
function
|
|
3613
|
+
function da(e, t) {
|
|
3502
3614
|
let n = e;
|
|
3503
3615
|
for (let [e, r] of Object.entries(t)) {
|
|
3504
|
-
let t = RegExp(`(^[ \\t]*--${
|
|
3616
|
+
let t = RegExp(`(^[ \\t]*--${fa(e)}[ \\t]*:[ \\t]*)([^;\\n]*);`, "m");
|
|
3505
3617
|
n = n.replace(t, (e, t) => `${t}${r};`);
|
|
3506
3618
|
}
|
|
3507
3619
|
return n;
|
|
3508
3620
|
}
|
|
3509
|
-
function
|
|
3621
|
+
function fa(e) {
|
|
3510
3622
|
return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
3511
3623
|
}
|
|
3512
|
-
function
|
|
3513
|
-
let n =
|
|
3624
|
+
function pa(e, t) {
|
|
3625
|
+
let n = ua(e, ":root"), r = ua(e, ".dark"), i = e;
|
|
3514
3626
|
if (n) {
|
|
3515
3627
|
let e = i.slice(0, n.bodyStart), r = i.slice(n.bodyStart, n.bodyEnd), a = i.slice(n.bodyEnd);
|
|
3516
|
-
i = e +
|
|
3628
|
+
i = e + da(r, t.light) + a;
|
|
3517
3629
|
}
|
|
3518
3630
|
if (r) {
|
|
3519
|
-
let e =
|
|
3631
|
+
let e = ua(i, ".dark");
|
|
3520
3632
|
if (e) {
|
|
3521
3633
|
let n = i.slice(0, e.bodyStart), r = i.slice(e.bodyStart, e.bodyEnd), a = i.slice(e.bodyEnd);
|
|
3522
|
-
i = n +
|
|
3634
|
+
i = n + da(r, t.dark) + a;
|
|
3523
3635
|
}
|
|
3524
3636
|
}
|
|
3525
3637
|
return i;
|
|
3526
3638
|
}
|
|
3527
|
-
var
|
|
3528
|
-
async function
|
|
3529
|
-
let n =
|
|
3639
|
+
var ma = "assets/styles.css";
|
|
3640
|
+
async function ha(e, t) {
|
|
3641
|
+
let n = w.resolve(e, ma), r;
|
|
3530
3642
|
try {
|
|
3531
|
-
r = await
|
|
3643
|
+
r = await v.readFile(n, "utf-8");
|
|
3532
3644
|
} catch {
|
|
3533
3645
|
return !1;
|
|
3534
3646
|
}
|
|
3535
|
-
let i =
|
|
3536
|
-
return i === r || await
|
|
3647
|
+
let i = pa(r, t);
|
|
3648
|
+
return i === r || await v.writeFile(n, i, "utf-8"), !0;
|
|
3537
3649
|
}
|
|
3538
3650
|
//#endregion
|
|
3539
3651
|
//#region src/core/clone.ts
|
|
3540
|
-
async function
|
|
3541
|
-
let t = await
|
|
3652
|
+
async function ga(e) {
|
|
3653
|
+
let t = await ee(A, {
|
|
3542
3654
|
dir: e,
|
|
3543
3655
|
force: !0
|
|
3544
3656
|
});
|
|
@@ -3549,7 +3661,7 @@ async function ta(e) {
|
|
|
3549
3661
|
}
|
|
3550
3662
|
//#endregion
|
|
3551
3663
|
//#region src/core/editor-config.ts
|
|
3552
|
-
function
|
|
3664
|
+
function _a(e) {
|
|
3553
3665
|
let t = {
|
|
3554
3666
|
globs: [],
|
|
3555
3667
|
alwaysApply: !1
|
|
@@ -3584,10 +3696,10 @@ function na(e) {
|
|
|
3584
3696
|
content: i
|
|
3585
3697
|
};
|
|
3586
3698
|
}
|
|
3587
|
-
function
|
|
3699
|
+
function va(e) {
|
|
3588
3700
|
return e.frontmatter.globs.length > 0 ? `---\npaths:\n${e.frontmatter.globs.map((e) => ` - "${e}"`).join("\n")}\n---\n\n${e.content}` : e.content;
|
|
3589
3701
|
}
|
|
3590
|
-
function
|
|
3702
|
+
function ya(e) {
|
|
3591
3703
|
let t;
|
|
3592
3704
|
t = e.frontmatter.alwaysApply ? "always_on" : e.frontmatter.globs.length > 0 ? "glob" : "model_decision";
|
|
3593
3705
|
let n = [`trigger: ${t}`];
|
|
@@ -3597,30 +3709,30 @@ function ia(e) {
|
|
|
3597
3709
|
}
|
|
3598
3710
|
return e.frontmatter.description && n.push(`description: ${e.frontmatter.description}`), `---\n${n.join("\n")}\n---\n\n${e.content}`;
|
|
3599
3711
|
}
|
|
3600
|
-
function
|
|
3712
|
+
function ba(e) {
|
|
3601
3713
|
return e.frontmatter.globs.length > 0 ? `---\napplyTo: "${e.frontmatter.globs.join(", ")}"\n---\n\n${e.content}` : e.content;
|
|
3602
3714
|
}
|
|
3603
|
-
var
|
|
3715
|
+
var xa = {
|
|
3604
3716
|
claude: {
|
|
3605
3717
|
rulesDir: ".claude/rules",
|
|
3606
3718
|
extension: ".md",
|
|
3607
|
-
convert:
|
|
3719
|
+
convert: va
|
|
3608
3720
|
},
|
|
3609
3721
|
windsurf: {
|
|
3610
3722
|
rulesDir: ".windsurf/rules",
|
|
3611
3723
|
extension: ".md",
|
|
3612
|
-
convert:
|
|
3724
|
+
convert: ya
|
|
3613
3725
|
},
|
|
3614
3726
|
copilot: {
|
|
3615
3727
|
rulesDir: ".github/instructions",
|
|
3616
3728
|
extension: ".instructions.md",
|
|
3617
|
-
convert:
|
|
3729
|
+
convert: ba
|
|
3618
3730
|
}
|
|
3619
3731
|
};
|
|
3620
|
-
async function
|
|
3621
|
-
let t =
|
|
3732
|
+
async function Sa(e) {
|
|
3733
|
+
let t = w.join(e, oe), n = (await v.readdir(t, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isFile() && e.name.endsWith(".mdc"));
|
|
3622
3734
|
return await Promise.all(n.map(async (e) => {
|
|
3623
|
-
let n =
|
|
3735
|
+
let n = w.join(t, e.name), { frontmatter: r, content: i } = _a(await v.readFile(n, "utf-8"));
|
|
3624
3736
|
return {
|
|
3625
3737
|
frontmatter: r,
|
|
3626
3738
|
content: i,
|
|
@@ -3628,43 +3740,43 @@ async function sa(e) {
|
|
|
3628
3740
|
};
|
|
3629
3741
|
}));
|
|
3630
3742
|
}
|
|
3631
|
-
async function
|
|
3743
|
+
async function Ca(e, t) {
|
|
3632
3744
|
if (t === "cursor") return;
|
|
3633
|
-
let n =
|
|
3634
|
-
await
|
|
3745
|
+
let n = xa[t], r = await Sa(e), i = w.join(e, n.rulesDir);
|
|
3746
|
+
await v.mkdir(i, { recursive: !0 }), await Promise.all(r.map((e) => {
|
|
3635
3747
|
let t = n.convert(e), r = e.filename.replace(/\.mdc$/, n.extension);
|
|
3636
|
-
return
|
|
3637
|
-
})), await
|
|
3748
|
+
return v.writeFile(w.join(i, r), t, "utf-8");
|
|
3749
|
+
})), await cr(w.join(e, se)), await cr(w.join(e, ce));
|
|
3638
3750
|
}
|
|
3639
3751
|
//#endregion
|
|
3640
3752
|
//#region src/core/env-files.ts
|
|
3641
|
-
var
|
|
3753
|
+
var wa = [
|
|
3642
3754
|
"apps",
|
|
3643
3755
|
"packages",
|
|
3644
3756
|
"libs",
|
|
3645
3757
|
"shared"
|
|
3646
3758
|
];
|
|
3647
|
-
async function
|
|
3648
|
-
let t = await
|
|
3759
|
+
async function Ta(e) {
|
|
3760
|
+
let t = await Ea(e);
|
|
3649
3761
|
return (await Promise.all(t.map(async (t) => {
|
|
3650
|
-
let n =
|
|
3651
|
-
return await
|
|
3762
|
+
let n = w.join(w.dirname(t), ".env");
|
|
3763
|
+
return await J(n) ? null : (await v.copyFile(t, n), w.relative(e, n));
|
|
3652
3764
|
}))).filter((e) => e !== null).sort();
|
|
3653
3765
|
}
|
|
3654
|
-
async function
|
|
3655
|
-
let t = [
|
|
3656
|
-
let n =
|
|
3657
|
-
return (await
|
|
3766
|
+
async function Ea(e) {
|
|
3767
|
+
let t = [w.join(e, ".env.example")], n = await Promise.all(wa.map(async (t) => {
|
|
3768
|
+
let n = w.join(e, t);
|
|
3769
|
+
return (await v.readdir(n, { withFileTypes: !0 }).catch(() => [])).filter((e) => e.isDirectory()).map((e) => w.join(n, e.name, ".env.example"));
|
|
3658
3770
|
}));
|
|
3659
|
-
return t.push(...n.flat()), (await Promise.all(t.map(async (e) => await
|
|
3771
|
+
return t.push(...n.flat()), (await Promise.all(t.map(async (e) => await J(e) ? e : null))).filter((e) => e !== null);
|
|
3660
3772
|
}
|
|
3661
3773
|
//#endregion
|
|
3662
3774
|
//#region src/core/post-clone.ts
|
|
3663
|
-
var Q = "@hype-stack/",
|
|
3664
|
-
async function
|
|
3665
|
-
await
|
|
3775
|
+
var Q = "@hype-stack/", Da = "hype-stack";
|
|
3776
|
+
async function Oa(e) {
|
|
3777
|
+
await cr(w.join(e, ".git"));
|
|
3666
3778
|
}
|
|
3667
|
-
async function
|
|
3779
|
+
async function ka(e) {
|
|
3668
3780
|
await q("git", ["init"], { cwd: e }), await q("git", ["add", "."], { cwd: e }), await q("git", [
|
|
3669
3781
|
"-c",
|
|
3670
3782
|
"user.name=Hype Stack CLI",
|
|
@@ -3675,22 +3787,22 @@ async function ma(e) {
|
|
|
3675
3787
|
"Initial commit from Hype Stack CLI"
|
|
3676
3788
|
], { cwd: e });
|
|
3677
3789
|
}
|
|
3678
|
-
async function
|
|
3679
|
-
let n = `@${t}/`, r = await
|
|
3790
|
+
async function Aa(e, t) {
|
|
3791
|
+
let n = `@${t}/`, r = await Pa(e);
|
|
3680
3792
|
for (let e of r) {
|
|
3681
|
-
let t = await
|
|
3793
|
+
let t = await ar(e);
|
|
3682
3794
|
if (!t) continue;
|
|
3683
3795
|
let r = !1;
|
|
3684
|
-
t.name?.startsWith(Q) && (t.name = t.name.replace(Q, n), r = !0),
|
|
3685
|
-
let i = await
|
|
3796
|
+
t.name?.startsWith(Q) && (t.name = t.name.replace(Q, n), r = !0), ja(t.dependencies, n) && (r = !0), ja(t.devDependencies, n) && (r = !0), t.nx && Ma(t.nx, n) && (r = !0);
|
|
3797
|
+
let i = await v.readFile(e, "utf-8");
|
|
3686
3798
|
if (i.includes(Q)) {
|
|
3687
3799
|
let t = i.replaceAll(Q, n);
|
|
3688
|
-
await
|
|
3689
|
-
} else r && await
|
|
3800
|
+
await v.writeFile(e, t, "utf-8");
|
|
3801
|
+
} else r && await or(e, t);
|
|
3690
3802
|
}
|
|
3691
|
-
await
|
|
3803
|
+
await Ci(e, t), await Na(e, t);
|
|
3692
3804
|
}
|
|
3693
|
-
function
|
|
3805
|
+
function ja(e, t) {
|
|
3694
3806
|
if (!e) return !1;
|
|
3695
3807
|
let n = !1;
|
|
3696
3808
|
for (let r of Object.keys(e)) if (r.startsWith(Q)) {
|
|
@@ -3699,7 +3811,7 @@ function ga(e, t) {
|
|
|
3699
3811
|
}
|
|
3700
3812
|
return n;
|
|
3701
3813
|
}
|
|
3702
|
-
function
|
|
3814
|
+
function Ma(e, t) {
|
|
3703
3815
|
if (!e) return !1;
|
|
3704
3816
|
let n = !1;
|
|
3705
3817
|
if (e.implicitDependencies &&= e.implicitDependencies.map((e) => e.startsWith(Q) ? (n = !0, e.replace(Q, t)) : e), e.targets) {
|
|
@@ -3707,52 +3819,52 @@ function _a(e, t) {
|
|
|
3707
3819
|
}
|
|
3708
3820
|
return n;
|
|
3709
3821
|
}
|
|
3710
|
-
async function
|
|
3711
|
-
let n =
|
|
3822
|
+
async function Na(e, t) {
|
|
3823
|
+
let n = w.join(e, "packages/enums/src/app/index.ts"), r = await v.readFile(n, "utf-8").catch(() => null);
|
|
3712
3824
|
if (!r) return;
|
|
3713
|
-
let i = t.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" "), a = r.replaceAll(`id: "${
|
|
3714
|
-
await
|
|
3825
|
+
let i = t.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" "), a = r.replaceAll(`id: "${Da}"`, `id: "${t}"`).replaceAll(`name: "${Da}"`, `name: "${t}"`).replace(/name: "Hype Stack"/, `name: "${i}"`).replace(/description: ".*?"/, `description: "${i} application"`);
|
|
3826
|
+
await v.writeFile(n, a, "utf-8");
|
|
3715
3827
|
}
|
|
3716
|
-
async function
|
|
3717
|
-
let t = [], n =
|
|
3718
|
-
(await
|
|
3828
|
+
async function Pa(e) {
|
|
3829
|
+
let t = [], n = w.join(e, "package.json");
|
|
3830
|
+
(await v.stat(n).catch(() => null))?.isFile() && t.push(n);
|
|
3719
3831
|
for (let n of [
|
|
3720
3832
|
"apps",
|
|
3721
3833
|
"packages",
|
|
3722
3834
|
"libs",
|
|
3723
3835
|
"shared"
|
|
3724
3836
|
]) {
|
|
3725
|
-
let r =
|
|
3837
|
+
let r = w.join(e, n), i = await v.readdir(r, { withFileTypes: !0 }).catch(() => []);
|
|
3726
3838
|
for (let e of i) {
|
|
3727
3839
|
if (!e.isDirectory()) continue;
|
|
3728
|
-
let n =
|
|
3729
|
-
(await
|
|
3840
|
+
let n = w.join(r, e.name, "package.json");
|
|
3841
|
+
(await v.stat(n).catch(() => null))?.isFile() && t.push(n);
|
|
3730
3842
|
}
|
|
3731
3843
|
}
|
|
3732
3844
|
return t;
|
|
3733
3845
|
}
|
|
3734
3846
|
//#endregion
|
|
3735
3847
|
//#region src/core/post-setup.ts
|
|
3736
|
-
async function
|
|
3848
|
+
async function Fa() {
|
|
3737
3849
|
return (await q("docker", ["info"], { cwd: process.cwd() })).exitCode === 0;
|
|
3738
3850
|
}
|
|
3739
|
-
async function
|
|
3740
|
-
return
|
|
3851
|
+
async function Ia(e) {
|
|
3852
|
+
return J(`${e}/apps/backend/.env`);
|
|
3741
3853
|
}
|
|
3742
|
-
async function
|
|
3743
|
-
let r = n ? `Start services with ${
|
|
3854
|
+
async function La(e, t, n) {
|
|
3855
|
+
let r = n ? `Start services with ${R.command("docker compose up -d")}?` : `Docker is not running. Start services with ${R.command("docker compose up -d")}?`, i = t ? !0 : await o.confirm({
|
|
3744
3856
|
message: r,
|
|
3745
3857
|
initialValue: !0
|
|
3746
3858
|
});
|
|
3747
|
-
if (o.isCancel(i) && Z(), !i) return o.log.info(
|
|
3859
|
+
if (o.isCancel(i) && Z(), !i) return o.log.info(R.muted("Skipping Docker services and database migrations.")), !1;
|
|
3748
3860
|
let a = o.spinner();
|
|
3749
3861
|
return a.start("Starting Docker services..."), (await q("docker", [
|
|
3750
3862
|
"compose",
|
|
3751
3863
|
"up",
|
|
3752
3864
|
"-d"
|
|
3753
|
-
], { cwd: `${e}/apps/backend` })).exitCode === 0 ? (a.stop(
|
|
3865
|
+
], { cwd: `${e}/apps/backend` })).exitCode === 0 ? (a.stop(R.success("Docker services started")), !0) : (a.stop(R.warning("Failed to start Docker services")), o.log.warn(R.muted("Run `docker compose up -d` in apps/backend manually to start services.")), o.log.info(R.muted("Skipping database migrations.")), !1);
|
|
3754
3866
|
}
|
|
3755
|
-
async function
|
|
3867
|
+
async function Ra(e, t = 15, n = 2e3) {
|
|
3756
3868
|
for (let r = 0; r < t; r++) {
|
|
3757
3869
|
if ((await q("docker", [
|
|
3758
3870
|
"compose",
|
|
@@ -3767,24 +3879,24 @@ async function Ca(e, t = 15, n = 2e3) {
|
|
|
3767
3879
|
}
|
|
3768
3880
|
return !1;
|
|
3769
3881
|
}
|
|
3770
|
-
async function
|
|
3771
|
-
if (!await
|
|
3772
|
-
o.log.warn(`${
|
|
3882
|
+
async function za(e, t, n = {}) {
|
|
3883
|
+
if (!await Ia(e)) {
|
|
3884
|
+
o.log.warn(`${R.path(".env")} not found in ${R.path("apps/backend")}. Skipping Docker and migrations - configure it first.`);
|
|
3773
3885
|
return;
|
|
3774
3886
|
}
|
|
3775
|
-
if (!await
|
|
3887
|
+
if (!await La(e, t, await Fa())) return;
|
|
3776
3888
|
let r = o.spinner();
|
|
3777
|
-
if (r.start("Waiting for Postgres to be ready..."), !await
|
|
3778
|
-
r.stop(
|
|
3889
|
+
if (r.start("Waiting for Postgres to be ready..."), !await Ra(e, n.postgresMaxAttempts ?? 15, n.postgresCheckIntervalMs ?? 2e3)) {
|
|
3890
|
+
r.stop(R.warning("Postgres health check timed out")), o.log.warn(R.muted("Run migrations manually once Postgres is ready: pnpm --filter @internal/backend migration:latest"));
|
|
3779
3891
|
return;
|
|
3780
3892
|
}
|
|
3781
|
-
r.stop(
|
|
3893
|
+
r.stop(R.success("Postgres is ready"));
|
|
3782
3894
|
let i = t ? !0 : await o.confirm({
|
|
3783
|
-
message: `Run database migrations with ${
|
|
3895
|
+
message: `Run database migrations with ${R.command("prisma migrate deploy")}?`,
|
|
3784
3896
|
initialValue: !0
|
|
3785
3897
|
});
|
|
3786
3898
|
if (o.isCancel(i) && Z(), !i) {
|
|
3787
|
-
o.log.info(
|
|
3899
|
+
o.log.info(R.muted("Skipping database migrations."));
|
|
3788
3900
|
return;
|
|
3789
3901
|
}
|
|
3790
3902
|
let a = o.spinner();
|
|
@@ -3793,24 +3905,24 @@ async function wa(e, t, n = {}) {
|
|
|
3793
3905
|
"@internal/backend",
|
|
3794
3906
|
"migration:latest"
|
|
3795
3907
|
], { cwd: e })).exitCode !== 0) {
|
|
3796
|
-
a.stop(
|
|
3908
|
+
a.stop(R.warning("Migrations failed")), o.log.warn(R.muted("Run `pnpm --filter @internal/backend migration:latest` manually to apply migrations."));
|
|
3797
3909
|
return;
|
|
3798
3910
|
}
|
|
3799
|
-
a.stop(
|
|
3911
|
+
a.stop(R.success("Database migrations applied"));
|
|
3800
3912
|
let s = o.spinner();
|
|
3801
3913
|
if (s.start("Generating Prisma client..."), (await q("pnpm", [
|
|
3802
3914
|
"--filter",
|
|
3803
3915
|
"@internal/backend",
|
|
3804
3916
|
"generate"
|
|
3805
3917
|
], { cwd: e })).exitCode !== 0) {
|
|
3806
|
-
s.stop(
|
|
3918
|
+
s.stop(R.warning("Prisma client generation failed")), o.log.warn(R.muted("Run `pnpm --filter @internal/backend generate` manually."));
|
|
3807
3919
|
return;
|
|
3808
3920
|
}
|
|
3809
|
-
s.stop(
|
|
3921
|
+
s.stop(R.success("Prisma client generated"));
|
|
3810
3922
|
}
|
|
3811
3923
|
//#endregion
|
|
3812
3924
|
//#region src/core/readme.ts
|
|
3813
|
-
var
|
|
3925
|
+
var Ba = {
|
|
3814
3926
|
cursor: {
|
|
3815
3927
|
label: "Cursor",
|
|
3816
3928
|
rulesDir: ".cursor/rules"
|
|
@@ -3827,24 +3939,24 @@ var Ta = {
|
|
|
3827
3939
|
label: "GitHub Copilot",
|
|
3828
3940
|
rulesDir: ".github/instructions"
|
|
3829
3941
|
}
|
|
3830
|
-
},
|
|
3942
|
+
}, Va = {
|
|
3831
3943
|
backend: "Hono API server (Postgres, Prisma, Kysely, Valkey cache, WorkOS auth)",
|
|
3832
3944
|
frontend: "React + Vite app talking to the backend through the typed HyperFetch SDK"
|
|
3833
|
-
},
|
|
3945
|
+
}, Ha = {
|
|
3834
3946
|
enums: "Shared enums and app config used across apps",
|
|
3835
3947
|
cli: "Project tooling and code generators"
|
|
3836
3948
|
};
|
|
3837
|
-
function
|
|
3949
|
+
function Ua(e) {
|
|
3838
3950
|
return e.split(/[-_]/).filter(Boolean).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" ");
|
|
3839
3951
|
}
|
|
3840
|
-
function
|
|
3952
|
+
function Wa(e, t) {
|
|
3841
3953
|
return Object.entries(e).toSorted(([e], [t]) => e.localeCompare(t)).map(([e, n]) => {
|
|
3842
3954
|
let r = t[e];
|
|
3843
3955
|
return r ? `- \`${n}\` - ${r}` : `- \`${n}\``;
|
|
3844
3956
|
});
|
|
3845
3957
|
}
|
|
3846
|
-
function
|
|
3847
|
-
let { projectName: t, editor: n, workspace: r } = e, i =
|
|
3958
|
+
function Ga(e) {
|
|
3959
|
+
let { projectName: t, editor: n, workspace: r } = e, i = Ua(t), a = Ba[n], o = !!r.apps.backend, s = Wa(r.apps, Va), c = Wa(r.packages, Ha), l = [];
|
|
3848
3960
|
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
3961
|
let u = [];
|
|
3850
3962
|
u.push(`# ${i}`), u.push([
|
|
@@ -3952,18 +4064,18 @@ function Aa(e) {
|
|
|
3952
4064
|
"stays useful."
|
|
3953
4065
|
].join("\n")), u.join("\n\n") + "\n";
|
|
3954
4066
|
}
|
|
3955
|
-
async function
|
|
3956
|
-
let n =
|
|
3957
|
-
await
|
|
4067
|
+
async function Ka(e, t) {
|
|
4068
|
+
let n = w.join(e, "README.md");
|
|
4069
|
+
await v.writeFile(n, Ga(t), "utf-8");
|
|
3958
4070
|
}
|
|
3959
4071
|
//#endregion
|
|
3960
4072
|
//#region src/core/tracking.ts
|
|
3961
|
-
async function
|
|
4073
|
+
async function qa(e) {
|
|
3962
4074
|
try {
|
|
3963
4075
|
let t = {
|
|
3964
|
-
"X-Device-Id":
|
|
3965
|
-
"X-Client-Info":
|
|
3966
|
-
}, n = await
|
|
4076
|
+
"X-Device-Id": Yn(),
|
|
4077
|
+
"X-Client-Info": Xn()
|
|
4078
|
+
}, n = await Gn(P()).catch(() => null);
|
|
3967
4079
|
n?.token && (t.Authorization = `Bearer ${n.token}`), await K.createRequest()({
|
|
3968
4080
|
endpoint: "/cli/track",
|
|
3969
4081
|
method: "POST"
|
|
@@ -3972,7 +4084,7 @@ async function Ma(e) {
|
|
|
3972
4084
|
}
|
|
3973
4085
|
//#endregion
|
|
3974
4086
|
//#region src/ui/swatch.ts
|
|
3975
|
-
function
|
|
4087
|
+
function Ja(e) {
|
|
3976
4088
|
let t = e.trim().match(/^oklch\(([^)]+)\)$/i);
|
|
3977
4089
|
if (!t) return null;
|
|
3978
4090
|
let n = t[1].trim().split(/\s+/);
|
|
@@ -3991,61 +4103,61 @@ function Na(e) {
|
|
|
3991
4103
|
h: a
|
|
3992
4104
|
};
|
|
3993
4105
|
}
|
|
3994
|
-
function
|
|
4106
|
+
function Ya(e) {
|
|
3995
4107
|
return Math.min(255, Math.max(0, Math.round(e)));
|
|
3996
4108
|
}
|
|
3997
|
-
function
|
|
4109
|
+
function Xa(e) {
|
|
3998
4110
|
return e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055;
|
|
3999
4111
|
}
|
|
4000
|
-
function
|
|
4112
|
+
function Za({ l: e, c: t, h: n }) {
|
|
4001
4113
|
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
4114
|
return [
|
|
4003
|
-
|
|
4004
|
-
|
|
4005
|
-
|
|
4115
|
+
Ya(Xa(f) * 255),
|
|
4116
|
+
Ya(Xa(p) * 255),
|
|
4117
|
+
Ya(Xa(m) * 255)
|
|
4006
4118
|
];
|
|
4007
4119
|
}
|
|
4008
|
-
var
|
|
4009
|
-
function
|
|
4120
|
+
var Qa = "\x1B[49m";
|
|
4121
|
+
function $a(e, t) {
|
|
4010
4122
|
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 ${
|
|
4123
|
+
if (!n) return y.dim(" ");
|
|
4124
|
+
let r = Ja(n);
|
|
4125
|
+
if (!r) return y.dim(" ");
|
|
4126
|
+
let [i, a, o] = Za(r);
|
|
4127
|
+
return `\x1b[48;2;${i};${a};${o}m ${Qa}`;
|
|
4016
4128
|
}
|
|
4017
|
-
var
|
|
4129
|
+
var eo = [
|
|
4018
4130
|
"primary",
|
|
4019
4131
|
"secondary",
|
|
4020
4132
|
"accent"
|
|
4021
4133
|
];
|
|
4022
|
-
function
|
|
4023
|
-
return
|
|
4134
|
+
function to(e) {
|
|
4135
|
+
return eo.map((t) => $a(e, t)).join("");
|
|
4024
4136
|
}
|
|
4025
|
-
function
|
|
4026
|
-
return `${
|
|
4137
|
+
function no(e) {
|
|
4138
|
+
return `${to(e.light)} ${y.dim("·")} ${to(e.dark)}`;
|
|
4027
4139
|
}
|
|
4028
4140
|
//#endregion
|
|
4029
4141
|
//#region src/utils/validate.ts
|
|
4030
|
-
function
|
|
4142
|
+
function ro(e) {
|
|
4031
4143
|
if (!e.trim()) return "Project name cannot be empty";
|
|
4032
|
-
if (!
|
|
4144
|
+
if (!re.test(e)) return "Project name must be lowercase, alphanumeric, and may contain hyphens, dots, or underscores";
|
|
4033
4145
|
if (e.length > 214) return "Project name is too long (max 214 characters)";
|
|
4034
4146
|
}
|
|
4035
4147
|
//#endregion
|
|
4036
4148
|
//#region src/commands/create.ts
|
|
4037
|
-
async function
|
|
4038
|
-
|
|
4149
|
+
async function io(a) {
|
|
4150
|
+
oa(), o.intro(R.brandBold("Create a new Hype Stack project"));
|
|
4039
4151
|
let s = a.yes === !0, c;
|
|
4040
4152
|
if (s && a.name) {
|
|
4041
|
-
let e =
|
|
4153
|
+
let e = ro(a.name);
|
|
4042
4154
|
e && (o.log.error(e), Z()), c = a.name;
|
|
4043
4155
|
} else {
|
|
4044
4156
|
let e = await o.text({
|
|
4045
4157
|
message: "What is your project named?",
|
|
4046
4158
|
placeholder: "my-app",
|
|
4047
4159
|
initialValue: a.name ?? "",
|
|
4048
|
-
validate: (e) =>
|
|
4160
|
+
validate: (e) => ro(e ?? "")
|
|
4049
4161
|
});
|
|
4050
4162
|
o.isCancel(e) && Z(), c = e;
|
|
4051
4163
|
}
|
|
@@ -4063,17 +4175,17 @@ async function Ua(a) {
|
|
|
4063
4175
|
});
|
|
4064
4176
|
o.isCancel(t) && Z(), e = t;
|
|
4065
4177
|
}
|
|
4066
|
-
l =
|
|
4178
|
+
l = lr(e, c);
|
|
4067
4179
|
}
|
|
4068
|
-
let u =
|
|
4069
|
-
s || o.note(
|
|
4070
|
-
let d = a.editor &&
|
|
4180
|
+
let u = w.resolve(l);
|
|
4181
|
+
s || o.note(R.path(u), "Project will be created at");
|
|
4182
|
+
let d = a.editor && ae.includes(a.editor) ? a.editor : null, f;
|
|
4071
4183
|
if (d) f = d;
|
|
4072
4184
|
else if (s) f = "cursor";
|
|
4073
4185
|
else {
|
|
4074
4186
|
let e = await o.select({
|
|
4075
4187
|
message: "Which code editor do you use?",
|
|
4076
|
-
options:
|
|
4188
|
+
options: ie.map((e) => ({
|
|
4077
4189
|
value: e.value,
|
|
4078
4190
|
label: e.label,
|
|
4079
4191
|
hint: "hint" in e ? e.hint : void 0
|
|
@@ -4082,101 +4194,101 @@ async function Ua(a) {
|
|
|
4082
4194
|
});
|
|
4083
4195
|
o.isCancel(e) && Z(), f = e;
|
|
4084
4196
|
}
|
|
4085
|
-
let
|
|
4086
|
-
if (
|
|
4087
|
-
else if (s)
|
|
4197
|
+
let p = a.theme !== void 0 && i(a.theme), m;
|
|
4198
|
+
if (p) m = a.theme;
|
|
4199
|
+
else if (s) m = e;
|
|
4088
4200
|
else {
|
|
4089
4201
|
let t = await o.select({
|
|
4090
4202
|
message: "Pick a color theme",
|
|
4091
4203
|
options: n.map((e) => ({
|
|
4092
4204
|
value: e.name,
|
|
4093
|
-
label: `${
|
|
4205
|
+
label: `${no(e)} ${e.label}`
|
|
4094
4206
|
})),
|
|
4095
4207
|
initialValue: e
|
|
4096
4208
|
});
|
|
4097
|
-
o.isCancel(t) && Z(),
|
|
4209
|
+
o.isCancel(t) && Z(), m = t;
|
|
4098
4210
|
}
|
|
4099
4211
|
if (!s) {
|
|
4100
|
-
let e =
|
|
4212
|
+
let e = ie.find((e) => e.value === f)?.label ?? f, n = t.find((e) => e.value === m)?.label ?? m, r = await o.confirm({ message: `Create ${R.highlight(c)} in ${R.path(u)} with ${R.highlight(e)} config and the ${R.highlight(n)} theme?` });
|
|
4101
4213
|
(o.isCancel(r) || !r) && Z();
|
|
4102
4214
|
}
|
|
4103
|
-
if (await
|
|
4215
|
+
if (await rr(u) && !await ir(u)) {
|
|
4104
4216
|
let e = await o.confirm({
|
|
4105
|
-
message: `Directory ${
|
|
4217
|
+
message: `Directory ${R.path(u)} is not empty. Continue anyway?`,
|
|
4106
4218
|
initialValue: !1
|
|
4107
4219
|
});
|
|
4108
4220
|
(o.isCancel(e) || !e) && Z();
|
|
4109
4221
|
}
|
|
4222
|
+
let h = o.spinner();
|
|
4223
|
+
h.start("Cloning Hype Stack template..."), await ga(u), h.stop(R.success("Template cloned"));
|
|
4110
4224
|
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, {
|
|
4225
|
+
g.start("Setting up project..."), await Oa(u), await Aa(u, c), await Ca(u, f);
|
|
4226
|
+
let _ = await hr(u), v = _r(c, _);
|
|
4227
|
+
await mr(u, v), await Ka(u, {
|
|
4116
4228
|
projectName: c,
|
|
4117
4229
|
editor: f,
|
|
4118
|
-
workspace:
|
|
4119
|
-
}), i(
|
|
4230
|
+
workspace: _
|
|
4231
|
+
}), i(m) && (await ha(w.resolve(u, v.paths?.frontend.root ?? "apps/frontend"), r(m)) || o.log.warn(R.muted(`Could not find ${R.path("assets/styles.css")} to apply the ${m} theme`))), g.stop(R.success("Project configured"));
|
|
4232
|
+
let y = o.spinner();
|
|
4233
|
+
y.start("Installing dependencies..."), (await q("pnpm", ["install"], { cwd: u })).exitCode === 0 ? y.stop(R.success("Dependencies installed")) : (y.stop(R.warning("Dependencies installed with warnings")), o.log.warn(R.muted("You may need to run `pnpm install` manually to resolve issues.")));
|
|
4120
4234
|
let b = o.spinner();
|
|
4121
|
-
b.start("
|
|
4235
|
+
b.start("Initializing git repository..."), await ka(u), b.stop(R.success("Git repository initialized with clean history"));
|
|
4122
4236
|
let x = o.spinner();
|
|
4123
|
-
x.start("
|
|
4124
|
-
let S =
|
|
4125
|
-
S.
|
|
4126
|
-
|
|
4127
|
-
|
|
4128
|
-
|
|
4129
|
-
|
|
4130
|
-
|
|
4131
|
-
|
|
4132
|
-
let
|
|
4133
|
-
C.length > 0 ? D.push(`Review your ${L.path(".env")} files and fill in any secrets`) : D.push(`Copy ${L.path(".env.example")} to ${L.path(".env")} and configure`), Ji(D);
|
|
4134
|
-
let O = a.setup !== !1 && (s || await o.confirm({
|
|
4237
|
+
x.start("Creating .env files from examples...");
|
|
4238
|
+
let S = await Ta(u);
|
|
4239
|
+
if (S.length > 0) {
|
|
4240
|
+
let e = S.length;
|
|
4241
|
+
x.stop(R.success(`Created ${e} .env file${e === 1 ? "" : "s"} from examples`));
|
|
4242
|
+
} else x.stop(R.muted("No .env.example files to copy"));
|
|
4243
|
+
o.log.success(`${R.brandBold("Hype Stack")} project ${R.highlight(c)} is ready!`);
|
|
4244
|
+
let C = w.relative(process.cwd(), u) || ".", T = [`${R.command(`cd ${C}`)}`];
|
|
4245
|
+
S.length > 0 ? T.push(`Review your ${R.path(".env")} files and fill in any secrets`) : T.push(`Copy ${R.path(".env.example")} to ${R.path(".env")} and configure`), la(T);
|
|
4246
|
+
let E = a.setup !== !1 && (s || await o.confirm({
|
|
4135
4247
|
message: "Would you like to start Docker services and run database migrations now?",
|
|
4136
4248
|
initialValue: !0
|
|
4137
4249
|
}));
|
|
4138
|
-
return o.isCancel(
|
|
4139
|
-
`${
|
|
4140
|
-
`${
|
|
4141
|
-
`${
|
|
4142
|
-
])),
|
|
4250
|
+
return o.isCancel(E) && Z(), E ? await za(u, s) : (o.log.info(R.muted("You can start services later:")), la([
|
|
4251
|
+
`${R.command("docker compose up -d")} ${R.muted("(in apps/backend - start Postgres, Valkey, RustFS)")}`,
|
|
4252
|
+
`${R.command("pnpm --filter @internal/backend migration:latest")} ${R.muted("(apply migrations)")}`,
|
|
4253
|
+
`${R.command("pnpm run generate")} ${R.muted("(generate Prisma client)")}`
|
|
4254
|
+
])), la([`${R.command("pnpm dev")} ${R.muted("(start frontend + backend)")}`]), await qa("project_create"), o.outro(R.muted("Happy building!")), u;
|
|
4143
4255
|
}
|
|
4144
4256
|
//#endregion
|
|
4145
4257
|
//#region src/commands/init.ts
|
|
4146
|
-
async function
|
|
4258
|
+
async function ao(e) {
|
|
4147
4259
|
let t = e.cwd ?? process.cwd(), n = e.silent ?? !1;
|
|
4148
|
-
if (n || (
|
|
4149
|
-
o.log.error(`This doesn't look like a Hype Stack project. ${
|
|
4260
|
+
if (n || (X(), o.intro(R.brandBold("Initialize Hype Stack configuration"))), !await vr(t)) {
|
|
4261
|
+
o.log.error(`This doesn't look like a Hype Stack project. ${R.muted("Expected apps/ directory and package.json")}`), o.outro(R.muted(`Run ${R.command("npx @hype-stack/cli create")} to scaffold a new project.`));
|
|
4150
4262
|
return;
|
|
4151
4263
|
}
|
|
4152
|
-
if (await
|
|
4153
|
-
let e = await
|
|
4264
|
+
if (await pr(t)) {
|
|
4265
|
+
let e = await fr(t);
|
|
4154
4266
|
if (e && !n) {
|
|
4155
|
-
o.log.info(`Found existing ${
|
|
4267
|
+
o.log.info(`Found existing ${R.path("stack.json")} for project ${R.highlight(e.name)}`);
|
|
4156
4268
|
let t = await o.confirm({
|
|
4157
4269
|
message: "Overwrite existing configuration?",
|
|
4158
4270
|
initialValue: !1
|
|
4159
4271
|
});
|
|
4160
4272
|
if (o.isCancel(t) || !t) {
|
|
4161
|
-
o.outro(
|
|
4273
|
+
o.outro(R.muted("Keeping existing configuration."));
|
|
4162
4274
|
return;
|
|
4163
4275
|
}
|
|
4164
4276
|
}
|
|
4165
4277
|
}
|
|
4166
|
-
let r = await
|
|
4278
|
+
let r = await hr(t);
|
|
4167
4279
|
if (!n) {
|
|
4168
4280
|
let e = Object.entries(r.apps), t = Object.entries(r.packages);
|
|
4169
4281
|
if (e.length > 0) {
|
|
4170
|
-
o.log.info(
|
|
4171
|
-
for (let [t, n] of e) o.log.message(` ${
|
|
4282
|
+
o.log.info(R.bold("Detected apps:"));
|
|
4283
|
+
for (let [t, n] of e) o.log.message(` ${z.arrow} ${R.highlight(t)} ${R.muted(`→ ${n}`)}`);
|
|
4172
4284
|
}
|
|
4173
4285
|
if (t.length > 0) {
|
|
4174
|
-
o.log.info(
|
|
4175
|
-
for (let [e, n] of t) o.log.message(` ${
|
|
4286
|
+
o.log.info(R.bold("Detected packages:"));
|
|
4287
|
+
for (let [e, n] of t) o.log.message(` ${z.arrow} ${R.highlight(e)} ${R.muted(`→ ${n}`)}`);
|
|
4176
4288
|
}
|
|
4177
4289
|
e.length === 0 && t.length === 0 && o.log.warn("No apps or packages detected in the workspace.");
|
|
4178
4290
|
}
|
|
4179
|
-
let i = (await
|
|
4291
|
+
let i = (await ar(w.join(t, "package.json")))?.name?.replace(/^@/, "").replace(/\/source$/, "") ?? "my-app", a = i;
|
|
4180
4292
|
if (!n) {
|
|
4181
4293
|
let e = await o.text({
|
|
4182
4294
|
message: "Project name for stack.json?",
|
|
@@ -4185,28 +4297,28 @@ async function Wa(e) {
|
|
|
4185
4297
|
});
|
|
4186
4298
|
o.isCancel(e) && Z(), a = e;
|
|
4187
4299
|
}
|
|
4188
|
-
await
|
|
4300
|
+
await mr(t, _r(a, r)), n || (o.log.success(`${R.path("stack.json")} written successfully`), o.outro(R.muted("Your project is mapped and ready for Hype Stack CLI commands.")));
|
|
4189
4301
|
}
|
|
4190
|
-
async function
|
|
4191
|
-
if (await
|
|
4192
|
-
let n = t.runInit ?? ((e) =>
|
|
4302
|
+
async function oo(e, t = {}) {
|
|
4303
|
+
if (await pr(e)) return e;
|
|
4304
|
+
let n = t.runInit ?? ((e) => ao({
|
|
4193
4305
|
cwd: e,
|
|
4194
4306
|
silent: !0
|
|
4195
|
-
})), r = t.runCreate ?? ((e) =>
|
|
4196
|
-
if (await
|
|
4197
|
-
o.log.warn(`No ${
|
|
4307
|
+
})), r = t.runCreate ?? ((e) => io({ parentDirectory: e }));
|
|
4308
|
+
if (await vr(e)) {
|
|
4309
|
+
o.log.warn(`No ${R.path("stack.json")} found in ${R.path(e)}.`);
|
|
4198
4310
|
let t = await o.confirm({
|
|
4199
|
-
message: `Create ${
|
|
4311
|
+
message: `Create ${R.path("stack.json")} now?`,
|
|
4200
4312
|
initialValue: !0
|
|
4201
4313
|
});
|
|
4202
4314
|
if (o.isCancel(t) || !t) return null;
|
|
4203
4315
|
await n(e);
|
|
4204
|
-
let r = await
|
|
4205
|
-
return r && o.log.success(`${
|
|
4316
|
+
let r = await pr(e);
|
|
4317
|
+
return r && o.log.success(`${R.path("stack.json")} created`), r ? e : null;
|
|
4206
4318
|
}
|
|
4207
|
-
o.log.warn(`This doesn't look like a Hype Stack project, and there's no ${
|
|
4319
|
+
o.log.warn(`This doesn't look like a Hype Stack project, and there's no ${R.path("stack.json")} here.`);
|
|
4208
4320
|
let i = await o.confirm({
|
|
4209
|
-
message: `Is ${
|
|
4321
|
+
message: `Is ${R.path(e)} where you want to work?`,
|
|
4210
4322
|
initialValue: !0
|
|
4211
4323
|
});
|
|
4212
4324
|
if (o.isCancel(i) || !i) return null;
|
|
@@ -4216,11 +4328,11 @@ async function Ga(e, t = {}) {
|
|
|
4216
4328
|
});
|
|
4217
4329
|
if (o.isCancel(a) || !a) return null;
|
|
4218
4330
|
let s = await r(e);
|
|
4219
|
-
return await
|
|
4331
|
+
return await pr(s) ? s : null;
|
|
4220
4332
|
}
|
|
4221
4333
|
//#endregion
|
|
4222
4334
|
//#region src/core/npm-deps.ts
|
|
4223
|
-
function
|
|
4335
|
+
function so(e, t) {
|
|
4224
4336
|
let n = [], r = [];
|
|
4225
4337
|
if (!e) return {
|
|
4226
4338
|
errors: n,
|
|
@@ -4251,7 +4363,7 @@ function Ka(e, t) {
|
|
|
4251
4363
|
operations: r
|
|
4252
4364
|
};
|
|
4253
4365
|
}
|
|
4254
|
-
function
|
|
4366
|
+
function co(e) {
|
|
4255
4367
|
let t = {};
|
|
4256
4368
|
for (let n of e) if (n) for (let [e, r] of Object.entries(n)) t[e] = {
|
|
4257
4369
|
...t[e],
|
|
@@ -4259,15 +4371,15 @@ function qa(e) {
|
|
|
4259
4371
|
};
|
|
4260
4372
|
return t;
|
|
4261
4373
|
}
|
|
4262
|
-
async function
|
|
4374
|
+
async function lo(e, t, n = q) {
|
|
4263
4375
|
let r = [];
|
|
4264
4376
|
for (let i of e) {
|
|
4265
|
-
let e =
|
|
4266
|
-
if (!await
|
|
4377
|
+
let e = w.join(t, i.relativeDir);
|
|
4378
|
+
if (!await J(w.join(e, "package.json"))) {
|
|
4267
4379
|
r.push(`Cannot install npm dependencies under "${i.relativeDir}": package.json not found.`);
|
|
4268
4380
|
continue;
|
|
4269
4381
|
}
|
|
4270
|
-
let a =
|
|
4382
|
+
let a = w.normalize(i.relativeDir), o;
|
|
4271
4383
|
try {
|
|
4272
4384
|
o = await n("pnpm", [
|
|
4273
4385
|
"add",
|
|
@@ -4295,25 +4407,25 @@ async function Ja(e, t, n = q) {
|
|
|
4295
4407
|
function $(e) {
|
|
4296
4408
|
return e instanceof Error ? e.message : String(e);
|
|
4297
4409
|
}
|
|
4298
|
-
async function
|
|
4410
|
+
async function uo(e, t, n) {
|
|
4299
4411
|
let r = e.filter((e) => e.tier === "paid" && !t.has(e.name)).map((e) => e.name);
|
|
4300
|
-
return r.length === 0 ? {} :
|
|
4412
|
+
return r.length === 0 ? {} : Tr(r, n).catch(() => ({}));
|
|
4301
4413
|
}
|
|
4302
|
-
function
|
|
4303
|
-
return e === "free" ?
|
|
4414
|
+
function fo(e, t) {
|
|
4415
|
+
return e === "free" ? R.success("free") : e === "owned" ? R.accent("owned") : `${R.highlight(`$${t}`)} ${R.muted("locked")}`;
|
|
4304
4416
|
}
|
|
4305
|
-
async function
|
|
4417
|
+
async function po(e, t, n) {
|
|
4306
4418
|
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
|
|
4419
|
+
i.length > 0 && o.log.warning(`Skipping ${i.join(", ")} because ${i.length === 1 ? "it depends" : "they depend"} on a pack you don't own yet.`), await nr(r.map((e) => n.get(e)).filter((e) => e !== void 0).map((e) => ({
|
|
4308
4420
|
name: e.name,
|
|
4309
4421
|
displayName: e.displayName,
|
|
4310
4422
|
price: e.price
|
|
4311
4423
|
})));
|
|
4312
4424
|
}
|
|
4313
|
-
function
|
|
4425
|
+
function mo(e, t) {
|
|
4314
4426
|
let n = e.map((e, n) => {
|
|
4315
4427
|
let r = t.get(e), i = r ? r.displayName : e;
|
|
4316
|
-
return ` ${
|
|
4428
|
+
return ` ${R.muted(`${n + 1}.`)} ${R.brand(i)}`;
|
|
4317
4429
|
});
|
|
4318
4430
|
o.note([
|
|
4319
4431
|
"These packs will be installed, in order:",
|
|
@@ -4321,10 +4433,10 @@ function Qa(e, t) {
|
|
|
4321
4433
|
...n
|
|
4322
4434
|
].join("\n"), "Install Plan");
|
|
4323
4435
|
}
|
|
4324
|
-
async function
|
|
4436
|
+
async function ho(e, t) {
|
|
4325
4437
|
let n = [];
|
|
4326
4438
|
for (let r of e) {
|
|
4327
|
-
let e = await
|
|
4439
|
+
let e = await yr(r), i = await br(r, t);
|
|
4328
4440
|
if (i.status === "denied") throw Error(`Access to "${r}" was denied (${i.reason}). Try 'npx @hype-stack/cli login' or check your license.`);
|
|
4329
4441
|
n.push({
|
|
4330
4442
|
manifest: e,
|
|
@@ -4333,36 +4445,36 @@ async function $a(e, t) {
|
|
|
4333
4445
|
}
|
|
4334
4446
|
return n;
|
|
4335
4447
|
}
|
|
4336
|
-
async function
|
|
4337
|
-
let { prepared: t, paths: n, cwd: r, spinner: i } = e, a =
|
|
4448
|
+
async function go(e) {
|
|
4449
|
+
let { prepared: t, paths: n, cwd: r, spinner: i } = e, a = so(co(t.map((e) => e.manifest.dependencies_npm)), n);
|
|
4338
4450
|
if (a.errors.length > 0) {
|
|
4339
4451
|
for (let e of a.errors) o.log.error(e);
|
|
4340
4452
|
return;
|
|
4341
4453
|
}
|
|
4342
4454
|
if (a.operations.length === 0) return;
|
|
4343
4455
|
i.start("Installing npm dependencies...");
|
|
4344
|
-
let s = await
|
|
4456
|
+
let s = await lo(a.operations, r);
|
|
4345
4457
|
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
4458
|
}
|
|
4347
|
-
function
|
|
4459
|
+
function _o(e) {
|
|
4348
4460
|
let t = e.flatMap((e) => e.manifest.postInstall ?? []), n = [...new Set(t)];
|
|
4349
|
-
n.length !== 0 && o.note(n.map((e) => ` ${
|
|
4461
|
+
n.length !== 0 && o.note(n.map((e) => ` ${R.muted("→")} ${e}`).join("\n"), "Next Steps");
|
|
4350
4462
|
}
|
|
4351
|
-
async function
|
|
4463
|
+
async function vo(e) {
|
|
4352
4464
|
let { prepared: t, config: n, cwd: r, force: i, yes: a, slotsByPack: s } = e, c = /* @__PURE__ */ new Set();
|
|
4353
4465
|
if (i) return c;
|
|
4354
|
-
let l = await
|
|
4466
|
+
let l = await ji({
|
|
4355
4467
|
packs: t,
|
|
4356
4468
|
config: n,
|
|
4357
4469
|
projectRoot: r,
|
|
4358
4470
|
slotsByPack: s
|
|
4359
4471
|
});
|
|
4360
4472
|
if (l.length === 0) return c;
|
|
4361
|
-
if (a) return o.log.warning(`${l.length} existing file${l.length === 1 ? "" : "s"} kept. Pass ${
|
|
4473
|
+
if (a) return o.log.warning(`${l.length} existing file${l.length === 1 ? "" : "s"} kept. Pass ${R.command("--force")} to overwrite.`), c;
|
|
4362
4474
|
o.log.warning(`${l.length} file${l.length === 1 ? "" : "s"} already exist in your project.`);
|
|
4363
4475
|
for (let e of l) {
|
|
4364
|
-
let t =
|
|
4365
|
-
message: `Overwrite ${
|
|
4476
|
+
let t = w.relative(r, e.targetPath) || e.target, n = await o.confirm({
|
|
4477
|
+
message: `Overwrite ${R.path(t)}? ${R.muted(`(${e.packName})`)}`,
|
|
4366
4478
|
initialValue: !1
|
|
4367
4479
|
});
|
|
4368
4480
|
o.isCancel(n) && (o.cancel("Installation cancelled."), process.exit(0)), n && c.add(e.targetPath);
|
|
@@ -4371,92 +4483,92 @@ async function no(e) {
|
|
|
4371
4483
|
}
|
|
4372
4484
|
//#endregion
|
|
4373
4485
|
//#region src/commands/compose.ts
|
|
4374
|
-
async function
|
|
4486
|
+
async function yo(e = {}) {
|
|
4375
4487
|
let t = e.cwd ?? process.cwd();
|
|
4376
|
-
|
|
4377
|
-
let n = await
|
|
4488
|
+
X();
|
|
4489
|
+
let n = await oo(t), r;
|
|
4378
4490
|
try {
|
|
4379
|
-
r = await
|
|
4491
|
+
r = await fr(n ?? t);
|
|
4380
4492
|
} catch (e) {
|
|
4381
|
-
o.cancel(`Could not parse ${
|
|
4493
|
+
o.cancel(`Could not parse ${R.path("stack.json")}: ${$(e)} Run 'npx @hype-stack/cli init' to regenerate it.`), process.exit(1);
|
|
4382
4494
|
}
|
|
4383
|
-
r || (o.cancel(n ? `Could not read ${
|
|
4495
|
+
r || (o.cancel(n ? `Could not read ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' to regenerate it, then run 'npx @hype-stack/cli compose' again.` : `No ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' first, then 'npx @hype-stack/cli compose'.`), process.exit(1)), r.paths || (o.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'npx @hype-stack/cli init' again to regenerate it.`), process.exit(1));
|
|
4384
4496
|
let i = n ?? t;
|
|
4385
|
-
o.intro(
|
|
4497
|
+
o.intro(R.brandBold("Compose your stack"));
|
|
4386
4498
|
let a = o.spinner();
|
|
4387
4499
|
a.start("Loading packs...");
|
|
4388
|
-
let
|
|
4500
|
+
let s;
|
|
4389
4501
|
try {
|
|
4390
|
-
|
|
4502
|
+
s = await wr();
|
|
4391
4503
|
} catch (e) {
|
|
4392
4504
|
a.stop("Failed to load packs"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
|
|
4393
4505
|
}
|
|
4394
4506
|
a.stop("Packs loaded");
|
|
4395
|
-
let
|
|
4396
|
-
token:
|
|
4397
|
-
key:
|
|
4398
|
-
}),
|
|
4399
|
-
let t =
|
|
4400
|
-
return !t || t.tier === "free" ? "free" :
|
|
4401
|
-
},
|
|
4402
|
-
packs:
|
|
4403
|
-
installedSet:
|
|
4404
|
-
stateOf:
|
|
4507
|
+
let c = r.installedPacks ?? [], l = new Set(c), u = new Map(s.map((e) => [e.name, e])), d = e.licenseKey ?? r.licenseKey ?? null, f = (await Gn(P()))?.token ?? null, p = await uo(s, l, {
|
|
4508
|
+
token: f,
|
|
4509
|
+
key: d
|
|
4510
|
+
}), m = (e) => {
|
|
4511
|
+
let t = u.get(e);
|
|
4512
|
+
return !t || t.tier === "free" ? "free" : p[e]?.owned ? "owned" : "locked";
|
|
4513
|
+
}, h = (e) => !l.has(e) && m(e) === "locked", g = await bo({
|
|
4514
|
+
packs: s,
|
|
4515
|
+
installedSet: l,
|
|
4516
|
+
stateOf: m,
|
|
4405
4517
|
options: e,
|
|
4406
4518
|
adminAvailable: !!r.apps.admin
|
|
4407
4519
|
});
|
|
4408
|
-
if (
|
|
4409
|
-
o.outro(
|
|
4520
|
+
if (g === null && (o.cancel("Cancelled."), process.exit(0)), g.length === 0) {
|
|
4521
|
+
o.outro(R.muted("No packs selected. Nothing to do."));
|
|
4410
4522
|
return;
|
|
4411
4523
|
}
|
|
4412
|
-
let
|
|
4524
|
+
let _ = Co(g), y = wo(g), b = Xi(s, _), x = Ui(Zi(s, b)), S;
|
|
4413
4525
|
try {
|
|
4414
|
-
S =
|
|
4526
|
+
S = Gi(_, x, c);
|
|
4415
4527
|
} catch (e) {
|
|
4416
4528
|
o.cancel($(e)), process.exit(1);
|
|
4417
4529
|
}
|
|
4418
4530
|
if (S.order.length === 0) {
|
|
4419
|
-
o.note(`${S.alreadyInstalled.join(", ")} already installed.`, "Nothing to do"), o.outro(
|
|
4531
|
+
o.note(`${S.alreadyInstalled.join(", ")} already installed.`, "Nothing to do"), o.outro(R.muted("Your selection is already part of the project."));
|
|
4420
4532
|
return;
|
|
4421
4533
|
}
|
|
4422
|
-
let C =
|
|
4534
|
+
let C = Ki({
|
|
4423
4535
|
order: S.order,
|
|
4424
4536
|
graph: x,
|
|
4425
|
-
isLocked:
|
|
4426
|
-
installed:
|
|
4537
|
+
isLocked: h,
|
|
4538
|
+
installed: c
|
|
4427
4539
|
});
|
|
4428
|
-
if (C.blocked.length > 0 && !
|
|
4429
|
-
let e = await
|
|
4430
|
-
e && (
|
|
4431
|
-
token:
|
|
4432
|
-
key:
|
|
4433
|
-
}), C =
|
|
4540
|
+
if (C.blocked.length > 0 && !f && !d) {
|
|
4541
|
+
let e = await tr();
|
|
4542
|
+
e && (f = e, p = await uo(s, l, {
|
|
4543
|
+
token: f,
|
|
4544
|
+
key: d
|
|
4545
|
+
}), C = Ki({
|
|
4434
4546
|
order: S.order,
|
|
4435
4547
|
graph: x,
|
|
4436
|
-
isLocked:
|
|
4437
|
-
installed:
|
|
4548
|
+
isLocked: h,
|
|
4549
|
+
installed: c
|
|
4438
4550
|
}));
|
|
4439
4551
|
}
|
|
4440
|
-
if (C.blocked.length > 0 && await
|
|
4441
|
-
o.outro(
|
|
4552
|
+
if (C.blocked.length > 0 && await po(C.blocked, h, u), C.installable.length === 0) {
|
|
4553
|
+
o.outro(R.muted("Nothing left to install once locked packs are removed."));
|
|
4442
4554
|
return;
|
|
4443
4555
|
}
|
|
4444
|
-
if (
|
|
4556
|
+
if (mo(C.installable, u), !e.yes) {
|
|
4445
4557
|
let e = await o.confirm({ message: `Install ${C.installable.length} pack${C.installable.length === 1 ? "" : "s"}?` });
|
|
4446
4558
|
(o.isCancel(e) || !e) && (o.cancel("Installation cancelled."), process.exit(0));
|
|
4447
4559
|
}
|
|
4448
4560
|
a.start("Downloading packs...");
|
|
4449
4561
|
let w;
|
|
4450
4562
|
try {
|
|
4451
|
-
w = await
|
|
4452
|
-
token:
|
|
4453
|
-
key:
|
|
4563
|
+
w = await ho(C.installable, {
|
|
4564
|
+
token: f,
|
|
4565
|
+
key: d
|
|
4454
4566
|
});
|
|
4455
4567
|
} catch (e) {
|
|
4456
4568
|
a.stop("Download failed"), o.cancel($(e)), process.exit(1);
|
|
4457
4569
|
}
|
|
4458
4570
|
a.stop(`Downloaded ${w.length} pack${w.length === 1 ? "" : "s"}`);
|
|
4459
|
-
let T = await
|
|
4571
|
+
let T = await vo({
|
|
4460
4572
|
prepared: w,
|
|
4461
4573
|
config: r,
|
|
4462
4574
|
cwd: i,
|
|
@@ -4466,7 +4578,7 @@ async function ro(e = {}) {
|
|
|
4466
4578
|
});
|
|
4467
4579
|
try {
|
|
4468
4580
|
a.start("Installing pack files...");
|
|
4469
|
-
let t = await
|
|
4581
|
+
let t = await Pi({
|
|
4470
4582
|
packs: w,
|
|
4471
4583
|
config: r,
|
|
4472
4584
|
projectRoot: i,
|
|
@@ -4479,44 +4591,44 @@ async function ro(e = {}) {
|
|
|
4479
4591
|
for (let e of t.errors) o.log.error(e);
|
|
4480
4592
|
o.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
|
|
4481
4593
|
}
|
|
4482
|
-
a.stop("Files installed"), t.installed.length > 0 && o.log.success(`${
|
|
4594
|
+
a.stop("Files installed"), t.installed.length > 0 && o.log.success(`${R.highlight(String(t.installed.length))} files installed`), t.skipped.length > 0 && o.log.warning(`${t.skipped.length} files skipped (use --force to overwrite)`);
|
|
4483
4595
|
for (let e of t.errors) o.log.error(e);
|
|
4484
|
-
await
|
|
4596
|
+
await go({
|
|
4485
4597
|
prepared: w,
|
|
4486
4598
|
paths: r.paths,
|
|
4487
4599
|
cwd: i,
|
|
4488
4600
|
spinner: a
|
|
4489
|
-
}), await
|
|
4601
|
+
}), await dr({
|
|
4490
4602
|
projectRoot: i,
|
|
4491
4603
|
paths: r.paths,
|
|
4492
4604
|
skipPrompts: e.yes ?? !1
|
|
4493
|
-
}),
|
|
4605
|
+
}), _o(w), o.outro(R.brand(`Installed ${t.appliedPacks.join(", ")}.`));
|
|
4494
4606
|
} finally {
|
|
4495
|
-
await Promise.all(w.map((e) =>
|
|
4607
|
+
await Promise.all(w.map((e) => v.rm(e.packDir, {
|
|
4496
4608
|
recursive: !0,
|
|
4497
4609
|
force: !0
|
|
4498
4610
|
})));
|
|
4499
4611
|
}
|
|
4500
4612
|
}
|
|
4501
|
-
async function
|
|
4613
|
+
async function bo(e) {
|
|
4502
4614
|
let { packs: t, installedSet: n, stateOf: r, options: i, adminAvailable: a } = e;
|
|
4503
4615
|
if (i.packs && i.packs.length > 0) {
|
|
4504
|
-
let e = i.packs.map(
|
|
4616
|
+
let e = i.packs.map(So), n = e.filter((e) => !t.some((t) => t.name === e.name));
|
|
4505
4617
|
return n.length > 0 && (o.cancel(`Unknown pack${n.length === 1 ? "" : "s"}: ${n.map((e) => e.name).join(", ")}`), process.exit(1)), e;
|
|
4506
4618
|
}
|
|
4507
4619
|
let s = t.filter((e) => n.has(e.name));
|
|
4508
|
-
s.length > 0 && o.note(s.map((e) => ` ${
|
|
4620
|
+
s.length > 0 && o.note(s.map((e) => ` ${R.muted("✓")} ${e.displayName}`).join("\n"), "Already Installed");
|
|
4509
4621
|
let c = t.filter((e) => !n.has(e.name));
|
|
4510
|
-
if (c.length === 0) return o.outro(
|
|
4511
|
-
let l =
|
|
4512
|
-
o.note(c.map((e) => ` ${
|
|
4513
|
-
let u =
|
|
4622
|
+
if (c.length === 0) return o.outro(R.muted("Every available pack is already installed.")), [];
|
|
4623
|
+
let l = F();
|
|
4624
|
+
o.note(c.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${ge(`${l}/packs/${e.name}`)}`).join("\n"), "Browse packs");
|
|
4625
|
+
let u = Vi(c, { adminAvailable: a }), d = [];
|
|
4514
4626
|
for (let e of u) {
|
|
4515
4627
|
let t = e.packs.map((e) => {
|
|
4516
4628
|
let t = r(e.name);
|
|
4517
4629
|
return {
|
|
4518
4630
|
value: e.name,
|
|
4519
|
-
label: `${e.displayName} ${
|
|
4631
|
+
label: `${e.displayName} ${fo(t, e.price)}`,
|
|
4520
4632
|
hint: e.description
|
|
4521
4633
|
};
|
|
4522
4634
|
});
|
|
@@ -4533,30 +4645,30 @@ async function io(e) {
|
|
|
4533
4645
|
});
|
|
4534
4646
|
continue;
|
|
4535
4647
|
}
|
|
4536
|
-
let n = await
|
|
4648
|
+
let n = await ca({
|
|
4537
4649
|
message: `Select ${e.label.toLowerCase()} to add (optional)`,
|
|
4538
4650
|
options: t,
|
|
4539
4651
|
required: !1
|
|
4540
4652
|
});
|
|
4541
|
-
if (
|
|
4653
|
+
if (p(n)) return null;
|
|
4542
4654
|
for (let e of n) d.push({ name: e });
|
|
4543
4655
|
}
|
|
4544
4656
|
return d;
|
|
4545
4657
|
}
|
|
4546
|
-
var
|
|
4547
|
-
function
|
|
4548
|
-
let t = e.match(
|
|
4658
|
+
var xo = /@(frontend|admin)$/;
|
|
4659
|
+
function So(e) {
|
|
4660
|
+
let t = e.match(xo);
|
|
4549
4661
|
return t ? {
|
|
4550
4662
|
name: e.slice(0, -t[0].length),
|
|
4551
4663
|
slot: t[1]
|
|
4552
4664
|
} : { name: e };
|
|
4553
4665
|
}
|
|
4554
|
-
function
|
|
4666
|
+
function Co(e) {
|
|
4555
4667
|
let t = /* @__PURE__ */ new Set(), n = [];
|
|
4556
4668
|
for (let r of e) t.has(r.name) || (t.add(r.name), n.push(r.name));
|
|
4557
4669
|
return n;
|
|
4558
4670
|
}
|
|
4559
|
-
function
|
|
4671
|
+
function wo(e) {
|
|
4560
4672
|
let t = /* @__PURE__ */ new Map();
|
|
4561
4673
|
for (let n of e) {
|
|
4562
4674
|
if (!n.slot) continue;
|
|
@@ -4567,41 +4679,41 @@ function co(e) {
|
|
|
4567
4679
|
}
|
|
4568
4680
|
//#endregion
|
|
4569
4681
|
//#region src/commands/login.ts
|
|
4570
|
-
async function
|
|
4571
|
-
|
|
4682
|
+
async function To() {
|
|
4683
|
+
X(), o.intro(R.brandBold("Log in to Hype Stack")), o.log.step("Opening your browser to sign in...");
|
|
4572
4684
|
let e;
|
|
4573
4685
|
try {
|
|
4574
|
-
e = await
|
|
4575
|
-
o.log.info(`If your browser didn't open, visit:\n ${
|
|
4686
|
+
e = await er({ onUrl: (e) => {
|
|
4687
|
+
o.log.info(`If your browser didn't open, visit:\n ${R.path(e)}`);
|
|
4576
4688
|
} });
|
|
4577
4689
|
} catch (e) {
|
|
4578
4690
|
o.cancel(e instanceof Error ? e.message : String(e)), process.exit(1);
|
|
4579
4691
|
}
|
|
4580
|
-
o.outro(
|
|
4692
|
+
o.outro(R.brand(e.email ? `Logged in as ${e.email}. You can now install packs your organization owns.` : "Logged in. You can now install packs your organization owns."));
|
|
4581
4693
|
}
|
|
4582
4694
|
//#endregion
|
|
4583
4695
|
//#region src/commands/logout.ts
|
|
4584
|
-
async function
|
|
4585
|
-
|
|
4586
|
-
let e =
|
|
4696
|
+
async function Eo() {
|
|
4697
|
+
X(), o.intro(R.brandBold("Log out of Hype Stack"));
|
|
4698
|
+
let e = P(), t = await Gn(e);
|
|
4587
4699
|
if (!t) {
|
|
4588
|
-
o.outro(
|
|
4700
|
+
o.outro(R.muted("You're not logged in."));
|
|
4589
4701
|
return;
|
|
4590
4702
|
}
|
|
4591
|
-
await
|
|
4703
|
+
await Ln(t.token).catch(() => null), await qn(e), o.outro(R.brand("Logged out."));
|
|
4592
4704
|
}
|
|
4593
4705
|
//#endregion
|
|
4594
4706
|
//#region src/core/templates.ts
|
|
4595
|
-
var
|
|
4707
|
+
var Do = K.createRequest()({
|
|
4596
4708
|
endpoint: "/templates/list",
|
|
4597
4709
|
method: "GET"
|
|
4598
4710
|
});
|
|
4599
|
-
async function
|
|
4600
|
-
let { data: e, error: t } = await
|
|
4711
|
+
async function Oo() {
|
|
4712
|
+
let { data: e, error: t } = await Do.send();
|
|
4601
4713
|
if (t || !e) throw Error(`Failed to fetch template list: ${String(t)}`);
|
|
4602
4714
|
return e.templates;
|
|
4603
4715
|
}
|
|
4604
|
-
async function
|
|
4716
|
+
async function ko(e) {
|
|
4605
4717
|
let { data: t, error: n, status: r } = await K.createRequest()({
|
|
4606
4718
|
endpoint: `/templates/${encodeURIComponent(e)}/manifest`,
|
|
4607
4719
|
method: "GET"
|
|
@@ -4610,13 +4722,13 @@ async function mo(e) {
|
|
|
4610
4722
|
if (n || !t) throw Error(`Failed to load manifest for template "${e}": ${String(n)}`);
|
|
4611
4723
|
return t;
|
|
4612
4724
|
}
|
|
4613
|
-
async function
|
|
4725
|
+
async function Ao(e, t = {}) {
|
|
4614
4726
|
let n = K.createRequest()({
|
|
4615
4727
|
endpoint: `/templates/${encodeURIComponent(e)}/download`,
|
|
4616
4728
|
method: "POST"
|
|
4617
4729
|
}), r = {
|
|
4618
|
-
"X-Device-Id":
|
|
4619
|
-
"X-Client-Info":
|
|
4730
|
+
"X-Device-Id": Yn(),
|
|
4731
|
+
"X-Client-Info": Xn()
|
|
4620
4732
|
};
|
|
4621
4733
|
t.token && (r.Authorization = `Bearer ${t.token}`);
|
|
4622
4734
|
let { data: i, error: a, success: o } = await n.setPayload({ key: t.licenseKey ?? void 0 }).setHeaders(r).send();
|
|
@@ -4627,183 +4739,183 @@ async function ho(e, t = {}) {
|
|
|
4627
4739
|
packs: i.packs ?? [],
|
|
4628
4740
|
expiresAt: i.expiresAt ?? null
|
|
4629
4741
|
};
|
|
4630
|
-
let
|
|
4742
|
+
let s = await v.mkdtemp(w.join(C.tmpdir(), `hype-stack-template-${e}-`));
|
|
4631
4743
|
return await Promise.all(i.files.map(async (e) => {
|
|
4632
|
-
let t =
|
|
4633
|
-
await
|
|
4744
|
+
let t = w.join(s, ...e.path.split("/"));
|
|
4745
|
+
await v.mkdir(w.dirname(t), { recursive: !0 }), await v.writeFile(t, Buffer.from(e.content, "base64"));
|
|
4634
4746
|
})), {
|
|
4635
4747
|
status: "ok",
|
|
4636
|
-
templateDir:
|
|
4748
|
+
templateDir: s
|
|
4637
4749
|
};
|
|
4638
4750
|
}
|
|
4639
4751
|
//#endregion
|
|
4640
4752
|
//#region src/commands/template.ts
|
|
4641
|
-
async function
|
|
4753
|
+
async function jo(e = {}) {
|
|
4642
4754
|
let t = e.cwd ?? process.cwd();
|
|
4643
|
-
|
|
4644
|
-
let n = await
|
|
4755
|
+
X();
|
|
4756
|
+
let n = await oo(t), a;
|
|
4645
4757
|
try {
|
|
4646
|
-
a = await
|
|
4758
|
+
a = await fr(n ?? t);
|
|
4647
4759
|
} catch (e) {
|
|
4648
|
-
o.cancel(`Could not parse ${
|
|
4760
|
+
o.cancel(`Could not parse ${R.path("stack.json")}: ${$(e)} Run 'npx @hype-stack/cli init' to regenerate it.`), process.exit(1);
|
|
4649
4761
|
}
|
|
4650
|
-
a || (o.cancel(n ? `Could not read ${
|
|
4651
|
-
let
|
|
4652
|
-
o.intro(
|
|
4653
|
-
let
|
|
4654
|
-
|
|
4655
|
-
let
|
|
4762
|
+
a || (o.cancel(n ? `Could not read ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' to regenerate it, then run 'npx @hype-stack/cli template' again.` : `No ${R.path("stack.json")}. Run 'npx @hype-stack/cli init' first, then 'npx @hype-stack/cli template'.`), process.exit(1)), a.paths || (o.cancel(`${R.path("stack.json")} is missing ${R.path("paths")}. Run 'npx @hype-stack/cli init' again to regenerate it.`), process.exit(1));
|
|
4763
|
+
let s = n ?? t;
|
|
4764
|
+
o.intro(R.brandBold("Install a template"));
|
|
4765
|
+
let c = o.spinner();
|
|
4766
|
+
c.start("Loading packs...");
|
|
4767
|
+
let l;
|
|
4656
4768
|
try {
|
|
4657
|
-
|
|
4769
|
+
l = await wr();
|
|
4658
4770
|
} catch (e) {
|
|
4659
|
-
|
|
4771
|
+
c.stop("Failed to load packs"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
|
|
4660
4772
|
}
|
|
4661
|
-
|
|
4662
|
-
let
|
|
4663
|
-
|
|
4664
|
-
let
|
|
4773
|
+
c.stop("Packs loaded");
|
|
4774
|
+
let u = a.installedPacks ?? [], d = new Set(u), f = new Map(l.map((e) => [e.name, e])), p = e.licenseKey ?? a.licenseKey ?? null, m = (await Gn(P()))?.token ?? null;
|
|
4775
|
+
c.start("Loading templates...");
|
|
4776
|
+
let h;
|
|
4665
4777
|
try {
|
|
4666
|
-
|
|
4778
|
+
h = await Oo();
|
|
4667
4779
|
} catch (e) {
|
|
4668
|
-
|
|
4780
|
+
c.stop("Failed to load templates"), o.cancel(`Could not reach Hype Stack. Check your connection and try again.\n${$(e)}`), process.exit(1);
|
|
4669
4781
|
}
|
|
4670
|
-
let
|
|
4671
|
-
if (!
|
|
4672
|
-
e.yes && (
|
|
4673
|
-
let t =
|
|
4674
|
-
o.note(
|
|
4782
|
+
let g = e.templateId;
|
|
4783
|
+
if (!g) {
|
|
4784
|
+
e.yes && (c.stop("Template id required"), o.cancel("Pass a template id with `npx @hype-stack/cli template <id>` (required in --yes mode)."), process.exit(1)), h.length === 0 && (c.stop("No templates available"), o.cancel("No templates are available yet. Check back later."), process.exit(1)), c.stop("Templates loaded");
|
|
4785
|
+
let t = F();
|
|
4786
|
+
o.note(h.map((e) => ` ${z.arrow} ${R.highlight(e.name)} ${ge(`${t}/templates/${e.id}`)}`).join("\n"), "Browse templates");
|
|
4675
4787
|
let n = await o.select({
|
|
4676
4788
|
message: "Choose a template",
|
|
4677
|
-
options:
|
|
4789
|
+
options: h.map((e) => ({
|
|
4678
4790
|
value: e.id,
|
|
4679
4791
|
label: e.name,
|
|
4680
4792
|
hint: e.description
|
|
4681
4793
|
}))
|
|
4682
4794
|
});
|
|
4683
|
-
o.isCancel(n) && (o.cancel("Cancelled."), process.exit(0)),
|
|
4684
|
-
}
|
|
4685
|
-
let
|
|
4686
|
-
|
|
4687
|
-
let
|
|
4688
|
-
packs:
|
|
4689
|
-
templatePacks:
|
|
4690
|
-
installedSet:
|
|
4795
|
+
o.isCancel(n) && (o.cancel("Cancelled."), process.exit(0)), g = n;
|
|
4796
|
+
}
|
|
4797
|
+
let _ = h.find((e) => e.id === g);
|
|
4798
|
+
_ || (c.stop("Template not found"), o.cancel(`Template "${g}" not found. Available: ${h.map((e) => e.id).join(", ") || "(none)"}`), process.exit(1)), c.stop(`Template: ${_.name}`);
|
|
4799
|
+
let y = await Mo(_, e.variants, e.yes ?? !1), b = qi(_.slots, y), x = Ji(_.slots, _.packs, b), S = await No({
|
|
4800
|
+
packs: l,
|
|
4801
|
+
templatePacks: x,
|
|
4802
|
+
installedSet: d,
|
|
4691
4803
|
options: e
|
|
4692
|
-
}),
|
|
4804
|
+
}), C = [...x, ...S.filter((e) => !x.includes(e))], T = C.filter((e) => !f.has(e));
|
|
4693
4805
|
T.length > 0 && (o.cancel(`Unknown pack${T.length === 1 ? "" : "s"}: ${T.join(", ")}`), process.exit(1));
|
|
4694
|
-
let E =
|
|
4806
|
+
let E = Zi(l, b), D = Ui(E), O;
|
|
4695
4807
|
try {
|
|
4696
|
-
O =
|
|
4808
|
+
O = Gi(C, D, u);
|
|
4697
4809
|
} catch (e) {
|
|
4698
4810
|
o.cancel($(e)), process.exit(1);
|
|
4699
4811
|
}
|
|
4700
4812
|
if (O.order.length === 0) {
|
|
4701
|
-
o.outro(
|
|
4813
|
+
o.outro(R.muted("Every pack in this template is already installed."));
|
|
4702
4814
|
return;
|
|
4703
4815
|
}
|
|
4704
|
-
let ee = await
|
|
4705
|
-
token:
|
|
4706
|
-
key:
|
|
4707
|
-
}),
|
|
4708
|
-
let t =
|
|
4816
|
+
let ee = await uo(E, d, {
|
|
4817
|
+
token: m,
|
|
4818
|
+
key: p
|
|
4819
|
+
}), k = (e) => {
|
|
4820
|
+
let t = f.get(e);
|
|
4709
4821
|
return !t || t.tier === "free" ? "free" : ee[e]?.owned ? "owned" : "locked";
|
|
4710
|
-
},
|
|
4822
|
+
}, A = (e) => !d.has(e) && k(e) === "locked", j = Ki({
|
|
4711
4823
|
order: O.order,
|
|
4712
4824
|
graph: D,
|
|
4713
|
-
isLocked:
|
|
4714
|
-
installed:
|
|
4825
|
+
isLocked: A,
|
|
4826
|
+
installed: u
|
|
4715
4827
|
});
|
|
4716
|
-
if (
|
|
4717
|
-
let e = await
|
|
4718
|
-
e && (
|
|
4719
|
-
token:
|
|
4720
|
-
key:
|
|
4721
|
-
}),
|
|
4828
|
+
if (j.blocked.length > 0 && !m && !p) {
|
|
4829
|
+
let e = await tr();
|
|
4830
|
+
e && (m = e, ee = await uo(E, d, {
|
|
4831
|
+
token: m,
|
|
4832
|
+
key: p
|
|
4833
|
+
}), j = Ki({
|
|
4722
4834
|
order: O.order,
|
|
4723
4835
|
graph: D,
|
|
4724
|
-
isLocked:
|
|
4725
|
-
installed:
|
|
4836
|
+
isLocked: A,
|
|
4837
|
+
installed: u
|
|
4726
4838
|
}));
|
|
4727
4839
|
}
|
|
4728
|
-
if (
|
|
4729
|
-
o.outro(
|
|
4840
|
+
if (j.blocked.length > 0 && await po(j.blocked, A, f), j.installable.length === 0) {
|
|
4841
|
+
o.outro(R.muted("Nothing left to install once locked packs are removed."));
|
|
4730
4842
|
return;
|
|
4731
4843
|
}
|
|
4732
|
-
if (
|
|
4733
|
-
let e = await o.confirm({ message: `Install template ${
|
|
4844
|
+
if (mo(j.installable, f), !e.yes) {
|
|
4845
|
+
let e = await o.confirm({ message: `Install template ${R.brandBold(_.name)} (${j.installable.length} pack${j.installable.length === 1 ? "" : "s"})?` });
|
|
4734
4846
|
(o.isCancel(e) || !e) && (o.cancel("Installation cancelled."), process.exit(0));
|
|
4735
4847
|
}
|
|
4736
|
-
|
|
4737
|
-
let
|
|
4848
|
+
c.start("Downloading packs...");
|
|
4849
|
+
let M;
|
|
4738
4850
|
try {
|
|
4739
|
-
|
|
4740
|
-
token:
|
|
4741
|
-
key:
|
|
4851
|
+
M = await ho(j.installable, {
|
|
4852
|
+
token: m,
|
|
4853
|
+
key: p
|
|
4742
4854
|
});
|
|
4743
4855
|
} catch (e) {
|
|
4744
|
-
|
|
4856
|
+
c.stop("Download failed"), o.cancel($(e)), process.exit(1);
|
|
4745
4857
|
}
|
|
4746
|
-
|
|
4747
|
-
let
|
|
4748
|
-
prepared:
|
|
4858
|
+
c.stop(`Downloaded ${M.length} pack${M.length === 1 ? "" : "s"}`);
|
|
4859
|
+
let te = await vo({
|
|
4860
|
+
prepared: M,
|
|
4749
4861
|
config: a,
|
|
4750
|
-
cwd:
|
|
4862
|
+
cwd: s,
|
|
4751
4863
|
force: e.force ?? !1,
|
|
4752
4864
|
yes: e.yes ?? !1
|
|
4753
|
-
}),
|
|
4865
|
+
}), N = null;
|
|
4754
4866
|
try {
|
|
4755
|
-
|
|
4756
|
-
let t = await
|
|
4757
|
-
packs:
|
|
4867
|
+
c.start("Installing pack files...");
|
|
4868
|
+
let t = await Pi({
|
|
4869
|
+
packs: M,
|
|
4758
4870
|
config: a,
|
|
4759
|
-
projectRoot:
|
|
4871
|
+
projectRoot: s,
|
|
4760
4872
|
force: e.force ?? !1,
|
|
4761
|
-
overwrite:
|
|
4873
|
+
overwrite: te
|
|
4762
4874
|
});
|
|
4763
4875
|
if (t.aborted) {
|
|
4764
|
-
|
|
4876
|
+
c.stop("Installation aborted");
|
|
4765
4877
|
for (let e of t.errors) o.log.error(e);
|
|
4766
4878
|
o.cancel("No files were written. Fix the errors above (or pass --force for existing files) and try again."), process.exit(1);
|
|
4767
4879
|
}
|
|
4768
|
-
|
|
4880
|
+
c.stop("Files installed"), t.installed.length > 0 && o.log.success(`${R.highlight(String(t.installed.length))} files installed`), t.skipped.length > 0 && o.log.warning(`${t.skipped.length} files skipped (use --force to overwrite)`);
|
|
4769
4881
|
for (let e of t.errors) o.log.error(e);
|
|
4770
|
-
|
|
4771
|
-
let n = await
|
|
4772
|
-
token:
|
|
4773
|
-
licenseKey:
|
|
4882
|
+
c.start("Applying template overrides...");
|
|
4883
|
+
let n = await ko(_.id), l = await Ao(_.id, {
|
|
4884
|
+
token: m,
|
|
4885
|
+
licenseKey: p
|
|
4774
4886
|
});
|
|
4775
|
-
|
|
4776
|
-
let u = await
|
|
4887
|
+
l.status === "denied" && (c.stop("Template download denied"), o.cancel(`Access to template "${_.id}" was denied (${l.reason}). Try 'npx @hype-stack/cli login' or check your license.`), process.exit(1)), N = l.templateDir;
|
|
4888
|
+
let u = await Ii({
|
|
4777
4889
|
manifest: n,
|
|
4778
4890
|
config: a,
|
|
4779
|
-
projectRoot:
|
|
4780
|
-
templateDir:
|
|
4891
|
+
projectRoot: s,
|
|
4892
|
+
templateDir: N
|
|
4781
4893
|
});
|
|
4782
|
-
|
|
4894
|
+
c.stop("Template overrides applied"), u.installed.length > 0 && o.log.success(`${u.installed.length} template file${u.installed.length === 1 ? "" : "s"} applied`);
|
|
4783
4895
|
for (let e of u.errors) o.log.error(e);
|
|
4784
4896
|
let d = n.theme ?? "zinc-mono";
|
|
4785
|
-
i(d) && (await
|
|
4786
|
-
prepared:
|
|
4897
|
+
i(d) && (await ha(w.resolve(s, a.paths?.frontend.root ?? "apps/frontend"), r(d)) ? o.log.success(`Applied the ${r(d).label} theme`) : o.log.warning(R.muted(`Could not find ${R.path("assets/styles.css")} to apply the theme`))), await Po({
|
|
4898
|
+
prepared: M,
|
|
4787
4899
|
templateNpm: n.dependencies_npm,
|
|
4788
4900
|
paths: a.paths,
|
|
4789
|
-
cwd:
|
|
4790
|
-
spinner:
|
|
4791
|
-
}), await
|
|
4792
|
-
projectRoot:
|
|
4901
|
+
cwd: s,
|
|
4902
|
+
spinner: c
|
|
4903
|
+
}), await dr({
|
|
4904
|
+
projectRoot: s,
|
|
4793
4905
|
paths: a.paths,
|
|
4794
4906
|
skipPrompts: e.yes ?? !1
|
|
4795
|
-
}),
|
|
4907
|
+
}), _o(M), n.postInstall && n.postInstall.length > 0 && o.note(n.postInstall.map((e) => ` ${R.muted("→")} ${e}`).join("\n"), "Template Next Steps"), o.outro(R.brand(`Installed template ${_.name}.`));
|
|
4796
4908
|
} finally {
|
|
4797
|
-
await Promise.all(
|
|
4909
|
+
await Promise.all(M.map((e) => v.rm(e.packDir, {
|
|
4798
4910
|
recursive: !0,
|
|
4799
4911
|
force: !0
|
|
4800
|
-
}))),
|
|
4912
|
+
}))), N && await v.rm(N, {
|
|
4801
4913
|
recursive: !0,
|
|
4802
4914
|
force: !0
|
|
4803
4915
|
});
|
|
4804
4916
|
}
|
|
4805
4917
|
}
|
|
4806
|
-
async function
|
|
4918
|
+
async function Mo(e, t, n) {
|
|
4807
4919
|
let r = {};
|
|
4808
4920
|
for (let i of e.slots) {
|
|
4809
4921
|
if (t?.[i.family]) {
|
|
@@ -4827,7 +4939,7 @@ async function _o(e, t, n) {
|
|
|
4827
4939
|
}
|
|
4828
4940
|
return r;
|
|
4829
4941
|
}
|
|
4830
|
-
async function
|
|
4942
|
+
async function No(e) {
|
|
4831
4943
|
let { packs: t, templatePacks: n, installedSet: r, options: i } = e, a = new Set(n);
|
|
4832
4944
|
if (i.packs && i.packs.length > 0) {
|
|
4833
4945
|
let e = i.packs.filter((e) => !t.some((t) => t.name === e));
|
|
@@ -4836,9 +4948,9 @@ async function vo(e) {
|
|
|
4836
4948
|
if (i.yes) return [];
|
|
4837
4949
|
let s = t.filter((e) => e.category === "feature" && !a.has(e.name) && !r.has(e.name));
|
|
4838
4950
|
if (s.length === 0) return [];
|
|
4839
|
-
let c =
|
|
4840
|
-
o.note(s.map((e) => ` ${
|
|
4841
|
-
let l = await
|
|
4951
|
+
let c = F();
|
|
4952
|
+
o.note(s.map((e) => ` ${z.arrow} ${R.highlight(e.displayName)} ${ge(`${c}/packs/${e.name}`)}`).join("\n"), "Browse packs");
|
|
4953
|
+
let l = await ca({
|
|
4842
4954
|
message: "Add extra packs on top of the template (optional)",
|
|
4843
4955
|
options: s.map((e) => ({
|
|
4844
4956
|
value: e.name,
|
|
@@ -4847,27 +4959,27 @@ async function vo(e) {
|
|
|
4847
4959
|
})),
|
|
4848
4960
|
required: !1
|
|
4849
4961
|
});
|
|
4850
|
-
return
|
|
4962
|
+
return p(l) && (o.cancel("Cancelled."), process.exit(0)), l;
|
|
4851
4963
|
}
|
|
4852
|
-
async function
|
|
4853
|
-
let { prepared: t, templateNpm: n, paths: r, cwd: i, spinner: a } = e, s =
|
|
4964
|
+
async function Po(e) {
|
|
4965
|
+
let { prepared: t, templateNpm: n, paths: r, cwd: i, spinner: a } = e, s = co(t.map((e) => e.manifest.dependencies_npm)), c = so(n ? co([s, n]) : s, r);
|
|
4854
4966
|
if (c.errors.length > 0) {
|
|
4855
4967
|
for (let e of c.errors) o.log.error(e);
|
|
4856
4968
|
return;
|
|
4857
4969
|
}
|
|
4858
4970
|
if (c.operations.length === 0) return;
|
|
4859
4971
|
a.start("Installing npm dependencies...");
|
|
4860
|
-
let l = await
|
|
4972
|
+
let l = await lo(c.operations, i);
|
|
4861
4973
|
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
4974
|
}
|
|
4863
4975
|
//#endregion
|
|
4864
4976
|
//#region src/cli.ts
|
|
4865
|
-
function
|
|
4977
|
+
function Fo(e) {
|
|
4866
4978
|
if (!e) return;
|
|
4867
4979
|
let t = e.split(",").map((e) => e.trim()).filter((e) => e.length > 0);
|
|
4868
4980
|
return t.length > 0 ? t : void 0;
|
|
4869
4981
|
}
|
|
4870
|
-
function
|
|
4982
|
+
function Io(e) {
|
|
4871
4983
|
if (!e) return;
|
|
4872
4984
|
let t = {};
|
|
4873
4985
|
for (let n of e.split(",")) {
|
|
@@ -4876,10 +4988,10 @@ function xo(e) {
|
|
|
4876
4988
|
}
|
|
4877
4989
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
4878
4990
|
}
|
|
4879
|
-
function
|
|
4991
|
+
function Lo() {
|
|
4880
4992
|
let e = new a();
|
|
4881
|
-
return e.name("hype-stack").description("Build with Hype Stack -- templates, components, modules, and more").version(
|
|
4882
|
-
await
|
|
4993
|
+
return e.name("hype-stack").description("Build with Hype Stack -- templates, components, modules, and more").version(k, "-v, --version"), e.command("create").description("Create a new Hype Stack project").option("-n, --name <name>", "Project name").option("-d, --directory <path>", "Target directory").option("-e, --editor <editor>", "Code editor (cursor, claude, windsurf, copilot)").option("-t, --theme <theme>", "Color theme (default, slate, rose, emerald, violet, amber, ocean, zinc-mono, crimson, midnight)").option("--no-install", "Skip dependency installation").option("--no-setup", "Skip Docker services and database migrations after create").option("-y, --yes", "Skip confirmation prompts (requires --name)").action(async (e) => {
|
|
4994
|
+
await io({
|
|
4883
4995
|
name: e.name,
|
|
4884
4996
|
directory: e.directory,
|
|
4885
4997
|
install: e.install,
|
|
@@ -4889,32 +5001,32 @@ function So() {
|
|
|
4889
5001
|
setup: e.setup
|
|
4890
5002
|
});
|
|
4891
5003
|
}), e.command("init").description("Initialize stack.json in the current project").action(async () => {
|
|
4892
|
-
await
|
|
5004
|
+
await ao({});
|
|
4893
5005
|
}), 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:
|
|
5006
|
+
await yo({
|
|
5007
|
+
packs: Fo(e.packs),
|
|
4896
5008
|
force: e.force,
|
|
4897
5009
|
yes: e.yes,
|
|
4898
5010
|
licenseKey: e.key ?? e.licenseKey,
|
|
4899
5011
|
cwd: e.cwd
|
|
4900
5012
|
});
|
|
4901
5013
|
}), 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
|
|
5014
|
+
await jo({
|
|
4903
5015
|
templateId: e,
|
|
4904
|
-
variants:
|
|
4905
|
-
packs:
|
|
5016
|
+
variants: Io(t.variants),
|
|
5017
|
+
packs: Fo(t.packs),
|
|
4906
5018
|
force: t.force,
|
|
4907
5019
|
yes: t.yes,
|
|
4908
5020
|
licenseKey: t.key ?? t.licenseKey,
|
|
4909
5021
|
cwd: t.cwd
|
|
4910
5022
|
});
|
|
4911
5023
|
}), e.command("login").description("Log in via your browser to install packs your organization owns").action(async () => {
|
|
4912
|
-
await
|
|
5024
|
+
await To();
|
|
4913
5025
|
}), e.command("logout").description("Log out and remove the saved CLI token").action(async () => {
|
|
4914
|
-
await
|
|
5026
|
+
await Eo();
|
|
4915
5027
|
}), e.command("auth").description("Alias for `login`").action(async () => {
|
|
4916
|
-
await
|
|
5028
|
+
await To();
|
|
4917
5029
|
}), e;
|
|
4918
5030
|
}
|
|
4919
5031
|
//#endregion
|
|
4920
|
-
export {
|
|
5032
|
+
export { oo as a, yo as i, Eo as n, ao as o, To as r, io as s, Lo as t };
|