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