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