@voltro/cli 0.11.2 → 0.11.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +228 -0
- package/THIRD-PARTY-NOTICES.md +4 -4
- package/dist/apiBuild-D9MtlD02.js +2 -0
- package/dist/{apiBuild-BVIiATXr.js → apiBuild-DHHuiwXF.js} +4 -4
- package/dist/bin.js +13 -6
- package/dist/{commands-C0ytPFfl.js → commands-BwbMqR-1.js} +1982 -1854
- package/dist/dev-BsBsIv93.js +2 -0
- package/dist/{dev-zJGsTTNb.js → dev-Cvojvb_J.js} +1696 -1654
- package/dist/{devActivity-1WtIVyHc.js → devActivity-BhIu6ncs.js} +7 -1
- package/dist/devActivity.js +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -1
- package/dist/{inspectMetrics-BuBwg1yW.js → inspectMetrics-D4EJ8LTi.js} +339 -327
- package/dist/{serveCommand-Dd3oLzbo.js → serveCommand-ARqSs73o.js} +397 -350
- package/dist/serveEntry.js +3 -3
- package/dist/{start-ChN6PO-c.js → start-DyJE6w1R.js} +281 -273
- package/dist/startEntry.js +2 -2
- package/package.json +17 -17
- package/templates/agent-docs/_manifest.json +2 -2
- package/templates/agent-docs/authentication.md +22 -0
- package/templates/agent-docs/cli.md +86 -2
- package/templates/agent-docs/data.md +171 -0
- package/templates/agent-docs/database/misc.md +32 -0
- package/templates/agent-docs/database/querying.md +29 -0
- package/templates/agent-docs/internationalization.md +8 -1
- package/templates/agent-docs/reference.md +35 -0
- package/templates/agent-docs/routing.md +17 -0
- package/templates/agent-docs/workflows.md +31 -0
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/README.md +3 -1
- package/templates/apps/api-webhooks/package.json +8 -8
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/dist/apiBuild-C_KY5oY_.js +0 -2
- package/dist/dev-DH13Ysgs.js +0 -2
|
@@ -581,20 +581,28 @@ __installPublicEnv(publicEnvValues)
|
|
|
581
581
|
contentType: "application/json; charset=utf-8",
|
|
582
582
|
body: JSON.stringify(t),
|
|
583
583
|
headers: n
|
|
584
|
-
}),
|
|
584
|
+
}), mt = (e) => {
|
|
585
|
+
let t;
|
|
586
|
+
try {
|
|
587
|
+
t = new URL(e).hostname;
|
|
588
|
+
} catch {
|
|
589
|
+
return !1;
|
|
590
|
+
}
|
|
591
|
+
return t = t.replace(/^\[|\]$/g, ""), t === "localhost" || t.endsWith(".localhost") || t === "::1" ? !0 : /^127(?:\.\d{1,3}){3}$/.test(t);
|
|
592
|
+
}, G = (e) => !e || e.length === 0 ? {} : mt(e) ? {
|
|
585
593
|
"access-control-allow-origin": e,
|
|
586
594
|
"access-control-allow-credentials": "true",
|
|
587
595
|
"access-control-allow-methods": "GET, POST, OPTIONS",
|
|
588
596
|
"access-control-allow-headers": "authorization, content-type, accept",
|
|
589
597
|
"access-control-expose-headers": "content-type, content-length",
|
|
590
598
|
vary: "Origin"
|
|
591
|
-
}, K = (e) => {
|
|
599
|
+
} : { vary: "Origin" }, K = (e) => {
|
|
592
600
|
let t = e.indexOf("?");
|
|
593
601
|
return t === -1 ? e : e.slice(0, t);
|
|
594
|
-
},
|
|
602
|
+
}, ht = (e) => {
|
|
595
603
|
let t = e.indexOf("?");
|
|
596
604
|
return t === -1 ? new URLSearchParams() : new URLSearchParams(e.slice(t + 1));
|
|
597
|
-
},
|
|
605
|
+
}, gt = (e) => e === "/_voltro/inspect" || e.startsWith("/_voltro/inspect/"), _t = [
|
|
598
606
|
"text",
|
|
599
607
|
"textarea",
|
|
600
608
|
"number",
|
|
@@ -610,7 +618,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
610
618
|
"file",
|
|
611
619
|
"hidden",
|
|
612
620
|
"custom"
|
|
613
|
-
],
|
|
621
|
+
], vt = (e, t, n = []) => ({
|
|
614
622
|
version: 2,
|
|
615
623
|
procedures: [...e].sort((e, t) => e.tag.localeCompare(t.tag)).map((e) => ({
|
|
616
624
|
tag: e.tag,
|
|
@@ -624,7 +632,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
624
632
|
...e.exposeAsTool === void 0 ? {} : { exposeAsTool: e.exposeAsTool }
|
|
625
633
|
})),
|
|
626
634
|
workflows: [...t].sort((e, t) => e.tag.localeCompare(t.tag)).map((e) => ({ name: e.tag })),
|
|
627
|
-
widgets:
|
|
635
|
+
widgets: _t,
|
|
628
636
|
tables: [...n].filter((e) => !e.isFrameworkTable).sort((e, t) => e.name.localeCompare(t.name)).map((e) => ({
|
|
629
637
|
name: e.name,
|
|
630
638
|
reactive: e.isReactive,
|
|
@@ -637,9 +645,9 @@ __installPublicEnv(publicEnvValues)
|
|
|
637
645
|
...e.oneOf === void 0 ? {} : { enum: e.oneOf }
|
|
638
646
|
}))
|
|
639
647
|
}))
|
|
640
|
-
}),
|
|
648
|
+
}), yt = (e, t, n = {}, r = {}) => {
|
|
641
649
|
let i = K(e);
|
|
642
|
-
if (!
|
|
650
|
+
if (!gt(i)) return null;
|
|
643
651
|
let a = G(n.origin ?? n.Origin);
|
|
644
652
|
if ((r.method ?? "GET").toUpperCase() === "OPTIONS") return {
|
|
645
653
|
status: 204,
|
|
@@ -669,7 +677,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
669
677
|
if (i === "/_voltro/inspect/manifest") {
|
|
670
678
|
if (t.kind !== "api") return W(404, { error: "manifest endpoint is api-only" }, a);
|
|
671
679
|
let e = t.inspectTables?.().tables ?? [];
|
|
672
|
-
return W(200,
|
|
680
|
+
return W(200, vt(t.rpc, t.workflows, e), a);
|
|
673
681
|
}
|
|
674
682
|
return i === "/_voltro/inspect/metrics" ? t.metrics === void 0 ? W(200, [], a) : W(200, t.metrics(), a) : i === "/_voltro/inspect/subscriptions" ? t.kind === "api" ? t.subscriptions === void 0 ? W(200, {
|
|
675
683
|
subscriptions: [],
|
|
@@ -700,7 +708,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
700
708
|
error: "unknown inspect endpoint",
|
|
701
709
|
path: i
|
|
702
710
|
}, a);
|
|
703
|
-
},
|
|
711
|
+
}, bt = async (e, t, n, r = {}) => {
|
|
704
712
|
let i = G(t.origin ?? t.Origin);
|
|
705
713
|
if (H()) return W(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, i);
|
|
706
714
|
if ((r.method ?? "POST").toUpperCase() !== "POST") return W(405, {
|
|
@@ -734,9 +742,9 @@ __installPublicEnv(publicEnvValues)
|
|
|
734
742
|
n !== "cookie" && (u[n] = t);
|
|
735
743
|
}
|
|
736
744
|
return W(200, await c(s.input, u), i);
|
|
737
|
-
},
|
|
745
|
+
}, xt = async (e, t, n, r, i = {}) => {
|
|
738
746
|
let a = K(e);
|
|
739
|
-
if (!
|
|
747
|
+
if (!gt(a) || !a.startsWith("/_voltro/inspect/webhooks/")) return null;
|
|
740
748
|
let o = G(n.origin ?? n.Origin);
|
|
741
749
|
if ((i.method ?? "POST").toUpperCase() !== "POST") return null;
|
|
742
750
|
if (H()) return W(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, o);
|
|
@@ -792,9 +800,9 @@ __installPublicEnv(publicEnvValues)
|
|
|
792
800
|
message: e?.message ?? String(e)
|
|
793
801
|
}, o);
|
|
794
802
|
}
|
|
795
|
-
},
|
|
803
|
+
}, St = async (e, t, n, r, i = {}) => {
|
|
796
804
|
let a = K(e);
|
|
797
|
-
if (!
|
|
805
|
+
if (!gt(a)) return null;
|
|
798
806
|
let o = G(n.origin ?? n.Origin);
|
|
799
807
|
if ((i.method ?? "POST").toUpperCase() !== "POST") return null;
|
|
800
808
|
if (H()) return W(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, o);
|
|
@@ -835,7 +843,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
835
843
|
message: e?.message ?? String(e)
|
|
836
844
|
}, o);
|
|
837
845
|
}
|
|
838
|
-
},
|
|
846
|
+
}, Ct = async (e, t, n, r = {}) => {
|
|
839
847
|
if (K(e) !== "/_voltro/inspect/data/rows") return null;
|
|
840
848
|
let i = G(n.origin ?? n.Origin);
|
|
841
849
|
if ((r.method ?? "GET").toUpperCase() !== "GET") return W(405, {
|
|
@@ -877,7 +885,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
877
885
|
message: e?.message ?? String(e)
|
|
878
886
|
}, i);
|
|
879
887
|
}
|
|
880
|
-
},
|
|
888
|
+
}, wt = async (e, t, n, r = {}) => {
|
|
881
889
|
if (K(e) !== "/_voltro/inspect/provenance") return null;
|
|
882
890
|
let i = G(n.origin ?? n.Origin);
|
|
883
891
|
if ((r.method ?? "GET").toUpperCase() !== "GET") return W(405, {
|
|
@@ -926,7 +934,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
926
934
|
if (e === null || e === "") return;
|
|
927
935
|
let t = Number(e);
|
|
928
936
|
return Number.isFinite(t) && t >= 0 ? Math.floor(t) : void 0;
|
|
929
|
-
},
|
|
937
|
+
}, Tt = async (e, t, n, r = {}) => {
|
|
930
938
|
if (K(e) !== "/_voltro/inspect/workflows/runs") return null;
|
|
931
939
|
let i = G(n.origin ?? n.Origin);
|
|
932
940
|
if ((r.method ?? "GET").toUpperCase() !== "GET") return W(405, {
|
|
@@ -960,7 +968,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
960
968
|
message: e?.message ?? String(e)
|
|
961
969
|
}, i);
|
|
962
970
|
}
|
|
963
|
-
},
|
|
971
|
+
}, Et = async (e, t, n, r, i = {}) => {
|
|
964
972
|
let a = K(e).match(/^\/_voltro\/inspect\/workflows\/start\/([^/]+)$/);
|
|
965
973
|
if (!a) return null;
|
|
966
974
|
let o = decodeURIComponent(a[1] ?? ""), s = G(n.origin ?? n.Origin);
|
|
@@ -993,7 +1001,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
993
1001
|
message: e?.message ?? String(e)
|
|
994
1002
|
}, s);
|
|
995
1003
|
}
|
|
996
|
-
},
|
|
1004
|
+
}, Dt = async (e, t, n, r = {}) => {
|
|
997
1005
|
let i = K(e);
|
|
998
1006
|
if (!i.startsWith("/_voltro/inspect/schedules")) return null;
|
|
999
1007
|
let a = G(n.origin ?? n.Origin);
|
|
@@ -1059,7 +1067,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1059
1067
|
error: "unknown schedules endpoint",
|
|
1060
1068
|
path: i
|
|
1061
1069
|
}, a);
|
|
1062
|
-
},
|
|
1070
|
+
}, Ot = async (e, t, n, r = {}) => {
|
|
1063
1071
|
if (K(e) !== "/_voltro/inspect/cluster") return null;
|
|
1064
1072
|
let i = G(n.origin ?? n.Origin);
|
|
1065
1073
|
if (H()) return W(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, i);
|
|
@@ -1105,7 +1113,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1105
1113
|
message: e?.message ?? String(e)
|
|
1106
1114
|
}, i);
|
|
1107
1115
|
}
|
|
1108
|
-
},
|
|
1116
|
+
}, kt = async (e, t, n, r = {}) => {
|
|
1109
1117
|
let i = K(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/steps$/);
|
|
1110
1118
|
if (!i) return null;
|
|
1111
1119
|
let a = decodeURIComponent(i[1] ?? ""), o = G(n.origin ?? n.Origin);
|
|
@@ -1129,7 +1137,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1129
1137
|
message: e?.message ?? String(e)
|
|
1130
1138
|
}, o);
|
|
1131
1139
|
}
|
|
1132
|
-
},
|
|
1140
|
+
}, At = async (e, t, n, r = {}) => {
|
|
1133
1141
|
let i = K(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/events$/);
|
|
1134
1142
|
if (!i) return null;
|
|
1135
1143
|
let a = decodeURIComponent(i[1] ?? ""), o = G(n.origin ?? n.Origin);
|
|
@@ -1153,7 +1161,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1153
1161
|
message: e?.message ?? String(e)
|
|
1154
1162
|
}, o);
|
|
1155
1163
|
}
|
|
1156
|
-
},
|
|
1164
|
+
}, jt = async (e, t, n, r = {}) => {
|
|
1157
1165
|
if (K(t) !== "/_voltro/inspect/workflows/events") return null;
|
|
1158
1166
|
let i = G(n.origin ?? n.Origin);
|
|
1159
1167
|
if ((r.method ?? "GET").toUpperCase() !== "GET") return W(405, {
|
|
@@ -1173,7 +1181,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1173
1181
|
offset: 0,
|
|
1174
1182
|
limit: 100
|
|
1175
1183
|
}, i);
|
|
1176
|
-
let o =
|
|
1184
|
+
let o = ht(t), s = o.get("name") ?? void 0, c = Number(o.get("offset") ?? "0"), l = Number(o.get("limit") ?? "100");
|
|
1177
1185
|
try {
|
|
1178
1186
|
return W(200, await e.inspectWorkflowDomainEvents({
|
|
1179
1187
|
...s !== void 0 && s !== "" ? { name: s } : {},
|
|
@@ -1186,7 +1194,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1186
1194
|
message: e?.message ?? String(e)
|
|
1187
1195
|
}, i);
|
|
1188
1196
|
}
|
|
1189
|
-
},
|
|
1197
|
+
}, Mt = async (e, t, n, r = {}) => {
|
|
1190
1198
|
let i = K(t).match(/^\/_voltro\/inspect\/workflows\/events\/([^/]+)\/deliveries$/);
|
|
1191
1199
|
if (!i) return null;
|
|
1192
1200
|
let a = decodeURIComponent(i[1] ?? ""), o = G(n.origin ?? n.Origin);
|
|
@@ -1210,7 +1218,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1210
1218
|
message: e?.message ?? String(e)
|
|
1211
1219
|
}, o);
|
|
1212
1220
|
}
|
|
1213
|
-
},
|
|
1221
|
+
}, Nt = async (e, t, n, r = {}) => {
|
|
1214
1222
|
if (K(e) !== "/_voltro/inspect/workflows/children") return null;
|
|
1215
1223
|
let i = G(n.origin ?? n.Origin);
|
|
1216
1224
|
if ((r.method ?? "GET").toUpperCase() !== "GET") return W(405, {
|
|
@@ -1240,7 +1248,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1240
1248
|
message: e?.message ?? String(e)
|
|
1241
1249
|
}, i);
|
|
1242
1250
|
}
|
|
1243
|
-
},
|
|
1251
|
+
}, Pt = async (e, t, n, r, i = {}) => {
|
|
1244
1252
|
let a = K(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/(cancel|retry|suspend|resume|signal|update)$/);
|
|
1245
1253
|
if (!a) return null;
|
|
1246
1254
|
let o = decodeURIComponent(a[1] ?? ""), s = a[2], c = G(n.origin ?? n.Origin);
|
|
@@ -1291,7 +1299,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1291
1299
|
message: e?.message ?? String(e)
|
|
1292
1300
|
}, c);
|
|
1293
1301
|
}
|
|
1294
|
-
},
|
|
1302
|
+
}, Ft = async (e, t, n, r, i = {}) => {
|
|
1295
1303
|
if (K(e) !== "/_voltro/inspect/data/import" || (i.method ?? "POST").toUpperCase() !== "POST") return null;
|
|
1296
1304
|
let a = G(n.origin ?? n.Origin);
|
|
1297
1305
|
if (H()) return W(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, a);
|
|
@@ -1322,7 +1330,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1322
1330
|
message: e?.message ?? String(e)
|
|
1323
1331
|
}, a);
|
|
1324
1332
|
}
|
|
1325
|
-
},
|
|
1333
|
+
}, It = async (e, t, n, r, i = {}) => {
|
|
1326
1334
|
let a = K(e);
|
|
1327
1335
|
if (!a.startsWith("/_voltro/inspect/data/rows")) return null;
|
|
1328
1336
|
let o = (i.method ?? "POST").toUpperCase();
|
|
@@ -1402,53 +1410,53 @@ __installPublicEnv(publicEnvValues)
|
|
|
1402
1410
|
error: "method not allowed",
|
|
1403
1411
|
expected: "POST | PATCH | DELETE"
|
|
1404
1412
|
}, s);
|
|
1405
|
-
},
|
|
1413
|
+
}, Lt = g({ scope: "vite" }), Rt = /\x1b\[[0-9;]*m/g, zt = /^\s*\[?vite\]?\s*(\([a-z-]+\)\s*)?/, Bt = (e) => e.replace(Rt, "").replace(zt, "").trim(), Vt = /proxy error/i, Ht = [
|
|
1406
1414
|
"ECONNREFUSED",
|
|
1407
1415
|
"ECONNRESET",
|
|
1408
1416
|
"ECONNABORTED",
|
|
1409
1417
|
"EPIPE",
|
|
1410
1418
|
"ETIMEDOUT"
|
|
1411
|
-
],
|
|
1419
|
+
], Ut = (e, t = 0) => {
|
|
1412
1420
|
if (e == null || t > 5) return !1;
|
|
1413
1421
|
let n = e;
|
|
1414
|
-
return typeof n.code == "string" &&
|
|
1415
|
-
},
|
|
1422
|
+
return typeof n.code == "string" && Ht.includes(n.code) || typeof n.message == "string" && Ht.some((e) => n.message.includes(e)) || Array.isArray(n.errors) && n.errors.some((e) => Ut(e, t + 1)) ? !0 : Ut(n.cause, t + 1);
|
|
1423
|
+
}, Wt = 4e3, Gt = () => {
|
|
1416
1424
|
let e = /* @__PURE__ */ new Set(), t = 0, n = {
|
|
1417
1425
|
hasWarned: !1,
|
|
1418
1426
|
info: (e) => {
|
|
1419
|
-
let t =
|
|
1420
|
-
t.length !== 0 &&
|
|
1427
|
+
let t = Bt(e);
|
|
1428
|
+
t.length !== 0 && Lt.info(t);
|
|
1421
1429
|
},
|
|
1422
1430
|
warn: (e) => {
|
|
1423
1431
|
n.hasWarned = !0;
|
|
1424
|
-
let t =
|
|
1425
|
-
t.length !== 0 &&
|
|
1432
|
+
let t = Bt(e);
|
|
1433
|
+
t.length !== 0 && Lt.warn(t);
|
|
1426
1434
|
},
|
|
1427
1435
|
warnOnce: (t) => {
|
|
1428
|
-
let r =
|
|
1429
|
-
e.has(r) || (e.add(r), n.hasWarned = !0, r.length !== 0 &&
|
|
1436
|
+
let r = Bt(t);
|
|
1437
|
+
e.has(r) || (e.add(r), n.hasWarned = !0, r.length !== 0 && Lt.warn(r));
|
|
1430
1438
|
},
|
|
1431
1439
|
error: (e, n) => {
|
|
1432
|
-
let r =
|
|
1440
|
+
let r = Bt(e), i = n?.error;
|
|
1433
1441
|
if (r.length !== 0) {
|
|
1434
|
-
if (
|
|
1442
|
+
if (Vt.test(r) && Ut(i)) {
|
|
1435
1443
|
let e = Date.now();
|
|
1436
|
-
e - t >
|
|
1444
|
+
e - t > Wt && (t = e, Lt.info("waiting for api — proxy upstream not accepting connections yet (still starting?)"));
|
|
1437
1445
|
return;
|
|
1438
1446
|
}
|
|
1439
|
-
|
|
1447
|
+
Lt.error(r, {}, i);
|
|
1440
1448
|
}
|
|
1441
1449
|
},
|
|
1442
1450
|
clearScreen: () => {},
|
|
1443
1451
|
hasErrorLogged: (e) => !1
|
|
1444
1452
|
};
|
|
1445
1453
|
return n;
|
|
1446
|
-
},
|
|
1454
|
+
}, Kt = (e = process.env) => {
|
|
1447
1455
|
let t = e.VOLTRO_DEV_SSR_COMPILE_CONCURRENCY;
|
|
1448
1456
|
if (t === void 0 || t.trim() === "") return 4;
|
|
1449
1457
|
let n = Number(t);
|
|
1450
1458
|
return Number.isFinite(n) && n >= 1 ? Math.floor(n) : 4;
|
|
1451
|
-
},
|
|
1459
|
+
}, qt = (e) => {
|
|
1452
1460
|
let t = Math.max(1, Math.floor(e)), n = 0, r = [], i = () => n < t ? (n++, Promise.resolve()) : new Promise((e) => r.push(e)), a = () => {
|
|
1453
1461
|
let e = r.shift();
|
|
1454
1462
|
e ? e() : n--;
|
|
@@ -1466,8 +1474,8 @@ __installPublicEnv(publicEnvValues)
|
|
|
1466
1474
|
return n;
|
|
1467
1475
|
}
|
|
1468
1476
|
};
|
|
1469
|
-
},
|
|
1470
|
-
let t =
|
|
1477
|
+
}, Jt = (e) => {
|
|
1478
|
+
let t = qt(e.limit), n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Set();
|
|
1471
1479
|
return {
|
|
1472
1480
|
load: (i, a) => {
|
|
1473
1481
|
if (r.has(i)) return a();
|
|
@@ -1492,7 +1500,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1492
1500
|
return r.size;
|
|
1493
1501
|
}
|
|
1494
1502
|
};
|
|
1495
|
-
},
|
|
1503
|
+
}, Yt = (e) => {
|
|
1496
1504
|
let t = [];
|
|
1497
1505
|
for (let n of e.split("/").filter(Boolean)) n.startsWith("[[...") && n.endsWith("]]") ? t.push({
|
|
1498
1506
|
name: n.slice(5, -2),
|
|
@@ -1508,7 +1516,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1508
1516
|
optional: !1
|
|
1509
1517
|
});
|
|
1510
1518
|
return t;
|
|
1511
|
-
},
|
|
1519
|
+
}, Xt = (e) => e.replace(/-([a-z0-9])/g, (e, t) => t.toUpperCase()), Zt = async (e) => {
|
|
1512
1520
|
let n = a(e);
|
|
1513
1521
|
for (let e = 0; e < 4; e++) {
|
|
1514
1522
|
let e = r(n, "project.json");
|
|
@@ -1526,8 +1534,8 @@ __installPublicEnv(publicEnvValues)
|
|
|
1526
1534
|
n = i;
|
|
1527
1535
|
}
|
|
1528
1536
|
return null;
|
|
1529
|
-
},
|
|
1530
|
-
let n = await
|
|
1537
|
+
}, Qt = async (t) => {
|
|
1538
|
+
let n = await Zt(t);
|
|
1531
1539
|
if (!n) return [];
|
|
1532
1540
|
let { projectDir: i, manifest: a } = n, o = e(t), s = a.apps ?? {}, c = [];
|
|
1533
1541
|
for (let [e, t] of Object.entries(s)) {
|
|
@@ -1539,20 +1547,20 @@ __installPublicEnv(publicEnvValues)
|
|
|
1539
1547
|
let { pages: e } = await $(n);
|
|
1540
1548
|
a = e.map((e) => ({
|
|
1541
1549
|
pattern: e.pattern,
|
|
1542
|
-
params:
|
|
1550
|
+
params: Yt(e.pattern)
|
|
1543
1551
|
}));
|
|
1544
1552
|
} catch {
|
|
1545
1553
|
continue;
|
|
1546
1554
|
}
|
|
1547
1555
|
c.push({
|
|
1548
|
-
key:
|
|
1556
|
+
key: Xt(e),
|
|
1549
1557
|
origin: `http://localhost:${t.port}`,
|
|
1550
1558
|
...typeof t.origin == "string" && t.origin.length > 0 ? { prodOrigin: t.origin } : {},
|
|
1551
1559
|
routes: a
|
|
1552
1560
|
});
|
|
1553
1561
|
}
|
|
1554
1562
|
return c;
|
|
1555
|
-
},
|
|
1563
|
+
}, $t = (e) => {
|
|
1556
1564
|
if (e.params.length === 0) return `'${e.pattern}'`;
|
|
1557
1565
|
let t = e.pattern;
|
|
1558
1566
|
for (let n of e.params) {
|
|
@@ -1560,21 +1568,21 @@ __installPublicEnv(publicEnvValues)
|
|
|
1560
1568
|
t = t.replace(e, r);
|
|
1561
1569
|
}
|
|
1562
1570
|
return "`" + t + "`";
|
|
1563
|
-
},
|
|
1571
|
+
}, en = (e) => e.params.length === 0 ? "EmptyParams" : `{ ${e.params.map((e) => {
|
|
1564
1572
|
let t = "string";
|
|
1565
1573
|
return e.optional ? `readonly ${e.name}?: ${t}` : `readonly ${e.name}: ${t}`;
|
|
1566
|
-
}).join("; ")} }`,
|
|
1567
|
-
let r =
|
|
1574
|
+
}).join("; ")} }`, tn = (e, t, n) => {
|
|
1575
|
+
let r = en(e), i = $t(e), a = t ? "VoltroExternalUrl" : "VoltroRouteUrl", o = t && n ? `${n} + ` : "";
|
|
1568
1576
|
return e.params.length === 0 ? `() => (${o}${i}) as ${a}` : `({ ${e.params.map((e) => e.name).join(", ")} }: ${r}) => (${o}${i}) as ${a}`;
|
|
1569
|
-
},
|
|
1577
|
+
}, nn = (e) => `{\n${[...e].sort((e, t) => e.pattern.localeCompare(t.pattern)).map((e) => ` ${JSON.stringify(e.pattern)}: ${tn(e, !1)},`).join("\n")}\n}`, rn = (e, t) => {
|
|
1570
1578
|
if (e.routes.length === 0) return ` ${e.key}: {} as Record<string, never>,`;
|
|
1571
|
-
let n = [...e.routes].sort((e, t) => e.pattern.localeCompare(t.pattern)), r = t === "prod" && e.prodOrigin ? e.prodOrigin : e.origin, i = JSON.stringify(r), a = n.map((e) => ` ${JSON.stringify(e.pattern)}: ${
|
|
1579
|
+
let n = [...e.routes].sort((e, t) => e.pattern.localeCompare(t.pattern)), r = t === "prod" && e.prodOrigin ? e.prodOrigin : e.origin, i = JSON.stringify(r), a = n.map((e) => ` ${JSON.stringify(e.pattern)}: ${tn(e, !0, i)},`);
|
|
1572
1580
|
return ` ${e.key}: {\n${a.join("\n")}\n },`;
|
|
1573
|
-
},
|
|
1581
|
+
}, an = async (e) => {
|
|
1574
1582
|
let n = e.pages.map((e) => ({
|
|
1575
1583
|
pattern: e.pattern,
|
|
1576
|
-
params:
|
|
1577
|
-
})), i = await
|
|
1584
|
+
params: Yt(e.pattern)
|
|
1585
|
+
})), i = await Qt(e.appRoot), a = [
|
|
1578
1586
|
"// THIS FILE IS GENERATED — DO NOT EDIT BY HAND.",
|
|
1579
1587
|
"// Re-emitted by `voltro dev` whenever `src/pages/**` changes.",
|
|
1580
1588
|
"// Type-safe route builders consumed by <Link to={...}>.",
|
|
@@ -1583,7 +1591,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1583
1591
|
"",
|
|
1584
1592
|
"type EmptyParams = Record<string, never>",
|
|
1585
1593
|
""
|
|
1586
|
-
].join("\n"), o = e.mode ?? "dev", s = `${a}\n${`export const routes = ${
|
|
1594
|
+
].join("\n"), o = e.mode ?? "dev", s = `${a}\n${`export const routes = ${nn(n)} as const\n`}\n${i.length === 0 ? "export const siblingApps = {} as Record<string, never>\n" : `export const siblingApps = {\n${i.map((e) => rn(e, o)).join("\n")}\n} as const\n`}`, c = r(e.appRoot, ".framework", "routes.generated.ts");
|
|
1587
1595
|
await S.mkdir(t(c), { recursive: !0 });
|
|
1588
1596
|
let l = null;
|
|
1589
1597
|
try {
|
|
@@ -1596,7 +1604,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1596
1604
|
path: c,
|
|
1597
1605
|
wrote: !0
|
|
1598
1606
|
});
|
|
1599
|
-
},
|
|
1607
|
+
}, on = 256, sn = (e = on) => {
|
|
1600
1608
|
let t = [], n = /* @__PURE__ */ new Set();
|
|
1601
1609
|
return {
|
|
1602
1610
|
emit(r, i) {
|
|
@@ -1619,27 +1627,27 @@ __installPublicEnv(publicEnvValues)
|
|
|
1619
1627
|
return t.slice();
|
|
1620
1628
|
}
|
|
1621
1629
|
};
|
|
1622
|
-
},
|
|
1630
|
+
}, cn = (e) => `event: ${e.channel}\ndata: ${JSON.stringify(e)}\n\n`, ln = () => `: keep-alive ${Date.now()}\n\n`, un = {
|
|
1623
1631
|
trace: 0,
|
|
1624
1632
|
debug: 1,
|
|
1625
1633
|
info: 2,
|
|
1626
1634
|
warn: 3,
|
|
1627
1635
|
error: 4,
|
|
1628
1636
|
fatal: 5
|
|
1629
|
-
},
|
|
1637
|
+
}, dn = 2e3, fn = 200, pn = class {
|
|
1630
1638
|
capacity;
|
|
1631
1639
|
buffer = [];
|
|
1632
|
-
constructor(e =
|
|
1640
|
+
constructor(e = dn) {
|
|
1633
1641
|
this.capacity = e;
|
|
1634
1642
|
}
|
|
1635
1643
|
append(e) {
|
|
1636
1644
|
this.buffer.push(e), this.buffer.length > this.capacity && this.buffer.shift();
|
|
1637
1645
|
}
|
|
1638
1646
|
query(e = {}) {
|
|
1639
|
-
let t = e.since ?? 0, n = e.until ?? Date.now(), r = Math.min(e.max ??
|
|
1647
|
+
let t = e.since ?? 0, n = e.until ?? Date.now(), r = Math.min(e.max ?? fn, this.capacity), i = e.minLevel === void 0 ? un.trace : un[e.minLevel], a = e.scope?.toLowerCase(), o = e.source, s = e.filter?.toLowerCase(), c = e.traceId, l = [];
|
|
1640
1648
|
for (let e = this.buffer.length - 1; e >= 0 && l.length < r; e--) {
|
|
1641
1649
|
let r = this.buffer[e];
|
|
1642
|
-
r.ts < t || r.ts > n ||
|
|
1650
|
+
r.ts < t || r.ts > n || un[r.level] < i || o !== void 0 && r.source !== o || a !== void 0 && (r.scope === void 0 || !r.scope.toLowerCase().includes(a)) || s !== void 0 && !r.message.toLowerCase().includes(s) || c !== void 0 && r.fields.traceId !== c || l.push(r);
|
|
1643
1651
|
}
|
|
1644
1652
|
return l.reverse();
|
|
1645
1653
|
}
|
|
@@ -1652,7 +1660,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1652
1660
|
clear() {
|
|
1653
1661
|
this.buffer = [];
|
|
1654
1662
|
}
|
|
1655
|
-
},
|
|
1663
|
+
}, mn = null, hn = () => (mn === null && (mn = new pn()), mn), gn = (e) => {
|
|
1656
1664
|
if (typeof e == "string") return e;
|
|
1657
1665
|
if (e instanceof Error) return e.message;
|
|
1658
1666
|
try {
|
|
@@ -1660,18 +1668,18 @@ __installPublicEnv(publicEnvValues)
|
|
|
1660
1668
|
} catch {
|
|
1661
1669
|
return String(e);
|
|
1662
1670
|
}
|
|
1663
|
-
},
|
|
1671
|
+
}, _n = (e) => {
|
|
1664
1672
|
let t = {
|
|
1665
1673
|
log: console.log.bind(console),
|
|
1666
1674
|
info: console.info.bind(console),
|
|
1667
1675
|
warn: console.warn.bind(console),
|
|
1668
1676
|
error: console.error.bind(console),
|
|
1669
1677
|
debug: console.debug.bind(console)
|
|
1670
|
-
}, n =
|
|
1678
|
+
}, n = hn(), r = !1, i = (i) => (...a) => {
|
|
1671
1679
|
if (t[i](...a), !r) {
|
|
1672
1680
|
r = !0;
|
|
1673
1681
|
try {
|
|
1674
|
-
let t = a.length > 0 ?
|
|
1682
|
+
let t = a.length > 0 ? gn(a[0]) : "", r = t.length > 500 ? t.slice(0, 500) + "…" : t, o = O();
|
|
1675
1683
|
e.emit("log", {
|
|
1676
1684
|
level: i,
|
|
1677
1685
|
message: r,
|
|
@@ -1729,24 +1737,24 @@ __installPublicEnv(publicEnvValues)
|
|
|
1729
1737
|
return () => {
|
|
1730
1738
|
console.log = t.log, console.info = t.info, console.warn = t.warn, console.error = t.error, console.debug = t.debug, a();
|
|
1731
1739
|
};
|
|
1732
|
-
},
|
|
1740
|
+
}, vn = 2e3, yn = 8, bn = 1e3, xn = 200, Y = (e, t) => e.length > t ? `${e.slice(0, t)}…` : e, Sn = (e) => {
|
|
1733
1741
|
switch (e) {
|
|
1734
1742
|
case "error": return "error";
|
|
1735
1743
|
case "warn": return "warn";
|
|
1736
1744
|
case "debug": return "debug";
|
|
1737
1745
|
default: return "info";
|
|
1738
1746
|
}
|
|
1739
|
-
},
|
|
1747
|
+
}, Cn = g({ scope: "client" }), wn = (e, t) => {
|
|
1740
1748
|
let n;
|
|
1741
1749
|
try {
|
|
1742
1750
|
n = JSON.parse(e);
|
|
1743
1751
|
} catch {
|
|
1744
|
-
return
|
|
1752
|
+
return Tn(400, { error: "invalid JSON body" });
|
|
1745
1753
|
}
|
|
1746
|
-
if (typeof n != "object" || !n) return
|
|
1754
|
+
if (typeof n != "object" || !n) return Tn(400, { error: "body must be a JSON object" });
|
|
1747
1755
|
let r = n;
|
|
1748
|
-
if (!Array.isArray(r.entries)) return
|
|
1749
|
-
let i = typeof r.app == "string" ? Y(r.app, 120) : void 0, a = typeof r.page == "string" ? Y(r.page, 200) : void 0, o = typeof r.ua == "string" ? Y(r.ua, 200) : void 0, s = r.entries.slice(0,
|
|
1756
|
+
if (!Array.isArray(r.entries)) return Tn(400, { error: "entries must be an array" });
|
|
1757
|
+
let i = typeof r.app == "string" ? Y(r.app, 120) : void 0, a = typeof r.page == "string" ? Y(r.page, 200) : void 0, o = typeof r.ua == "string" ? Y(r.ua, 200) : void 0, s = r.entries.slice(0, xn), c = 0;
|
|
1750
1758
|
for (let e of s) {
|
|
1751
1759
|
if (typeof e != "object" || !e) continue;
|
|
1752
1760
|
let n = e;
|
|
@@ -1757,7 +1765,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1757
1765
|
"warn",
|
|
1758
1766
|
"error",
|
|
1759
1767
|
"debug"
|
|
1760
|
-
].includes(n.level) ? n.level : "log", s = typeof n.ts == "number" && Number.isFinite(n.ts) ? n.ts : Date.now(), l = Y(n.message,
|
|
1768
|
+
].includes(n.level) ? n.level : "log", s = typeof n.ts == "number" && Number.isFinite(n.ts) ? n.ts : Date.now(), l = Y(n.message, vn), u = Array.isArray(n.args) ? n.args.slice(0, yn).filter((e) => typeof e == "string").map((e) => Y(e, bn)) : void 0, d = typeof n.stack == "string" ? Y(n.stack, vn) : void 0;
|
|
1761
1769
|
t.emit("clientLog", {
|
|
1762
1770
|
ts: s,
|
|
1763
1771
|
level: r,
|
|
@@ -1772,35 +1780,35 @@ __installPublicEnv(publicEnvValues)
|
|
|
1772
1780
|
...i === void 0 ? {} : { app: i },
|
|
1773
1781
|
...a === void 0 ? {} : { page: a },
|
|
1774
1782
|
...u !== void 0 && u.length > 0 ? { args: u } : {}
|
|
1775
|
-
}, p =
|
|
1776
|
-
(p === "error" || p === "warn") && d !== void 0 ?
|
|
1783
|
+
}, p = Sn(r);
|
|
1784
|
+
(p === "error" || p === "warn") && d !== void 0 ? Cn[p](l, f, { stack: d }) : Cn[p](l, {
|
|
1777
1785
|
...f,
|
|
1778
1786
|
...d === void 0 ? {} : { stack: d }
|
|
1779
1787
|
}), c++;
|
|
1780
1788
|
}
|
|
1781
|
-
return
|
|
1789
|
+
return Tn(202, {
|
|
1782
1790
|
accepted: c,
|
|
1783
1791
|
dropped: r.entries.length - c
|
|
1784
1792
|
});
|
|
1785
|
-
},
|
|
1793
|
+
}, Tn = (e, t) => ({
|
|
1786
1794
|
status: e,
|
|
1787
1795
|
contentType: "application/json; charset=utf-8",
|
|
1788
1796
|
body: JSON.stringify(t)
|
|
1789
|
-
}),
|
|
1797
|
+
}), En = "/_voltro/inspect/clientLog", Dn = [
|
|
1790
1798
|
"trace",
|
|
1791
1799
|
"debug",
|
|
1792
1800
|
"info",
|
|
1793
1801
|
"warn",
|
|
1794
1802
|
"error",
|
|
1795
1803
|
"fatal"
|
|
1796
|
-
],
|
|
1804
|
+
], On = {
|
|
1797
1805
|
trace: "TRACE",
|
|
1798
1806
|
debug: "DEBUG",
|
|
1799
1807
|
info: "INFO ",
|
|
1800
1808
|
warn: "WARN ",
|
|
1801
1809
|
error: "ERROR",
|
|
1802
1810
|
fatal: "FATAL"
|
|
1803
|
-
},
|
|
1811
|
+
}, kn = (e) => Dn.includes(e), An = (e, t, n = {}) => {
|
|
1804
1812
|
if (H()) return {
|
|
1805
1813
|
status: 503,
|
|
1806
1814
|
contentType: "application/json",
|
|
@@ -1831,7 +1839,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1831
1839
|
Number.isFinite(e) && e > 0 && (o.max = Math.floor(e));
|
|
1832
1840
|
}
|
|
1833
1841
|
let u = a.get("level");
|
|
1834
|
-
u !== null &&
|
|
1842
|
+
u !== null && kn(u) && (o.minLevel = u);
|
|
1835
1843
|
let d = a.get("source");
|
|
1836
1844
|
(d === "server" || d === "client") && (o.source = d);
|
|
1837
1845
|
let f = a.get("scope");
|
|
@@ -1844,7 +1852,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1844
1852
|
if ((a.get("format") ?? "json") === "text") return {
|
|
1845
1853
|
status: 200,
|
|
1846
1854
|
contentType: "text/plain; charset=utf-8",
|
|
1847
|
-
body: h.map(
|
|
1855
|
+
body: h.map(jn).join("\n") + (h.length > 0 ? "\n" : "")
|
|
1848
1856
|
};
|
|
1849
1857
|
let g = {
|
|
1850
1858
|
capturedAt: Date.now(),
|
|
@@ -1858,33 +1866,33 @@ __installPublicEnv(publicEnvValues)
|
|
|
1858
1866
|
contentType: "application/json; charset=utf-8",
|
|
1859
1867
|
body: JSON.stringify(g)
|
|
1860
1868
|
};
|
|
1861
|
-
},
|
|
1862
|
-
let t = new Date(e.ts), n = String(t.getHours()).padStart(2, "0"), r = String(t.getMinutes()).padStart(2, "0"), i = String(t.getSeconds()).padStart(2, "0"), a = String(t.getMilliseconds()).padStart(3, "0"), o = `[${e.scope ?? "?"}/${e.source}]`, s =
|
|
1863
|
-
return `${n}:${r}:${i}.${a} ${
|
|
1864
|
-
},
|
|
1869
|
+
}, jn = (e) => {
|
|
1870
|
+
let t = new Date(e.ts), n = String(t.getHours()).padStart(2, "0"), r = String(t.getMinutes()).padStart(2, "0"), i = String(t.getSeconds()).padStart(2, "0"), a = String(t.getMilliseconds()).padStart(3, "0"), o = `[${e.scope ?? "?"}/${e.source}]`, s = Nn(e.fields);
|
|
1871
|
+
return `${n}:${r}:${i}.${a} ${On[e.level]} ${o} ${e.message}${s}`;
|
|
1872
|
+
}, Mn = 80, Nn = (e) => {
|
|
1865
1873
|
let t = Object.entries(e);
|
|
1866
1874
|
if (t.length === 0) return "";
|
|
1867
1875
|
let n = [];
|
|
1868
1876
|
for (let [e, r] of t) {
|
|
1869
1877
|
if (r === void 0) continue;
|
|
1870
|
-
let t =
|
|
1878
|
+
let t = Pn(r);
|
|
1871
1879
|
n.push(`${e}=${t}`);
|
|
1872
1880
|
}
|
|
1873
1881
|
return n.length > 0 ? " " + n.join(" ") : "";
|
|
1874
|
-
},
|
|
1882
|
+
}, Pn = (e) => {
|
|
1875
1883
|
if (typeof e == "string") {
|
|
1876
|
-
let t = e.length >
|
|
1884
|
+
let t = e.length > Mn ? e.slice(0, Mn) + "…" : e;
|
|
1877
1885
|
return /[\s=]/.test(t) ? `"${t.replace(/"/g, "\\\"")}"` : t;
|
|
1878
1886
|
}
|
|
1879
1887
|
if (e === null) return "null";
|
|
1880
1888
|
if (typeof e == "number" || typeof e == "boolean") return String(e);
|
|
1881
1889
|
try {
|
|
1882
1890
|
let t = JSON.stringify(e);
|
|
1883
|
-
return t.length >
|
|
1891
|
+
return t.length > Mn ? t.slice(0, Mn) + "…" : t;
|
|
1884
1892
|
} catch {
|
|
1885
1893
|
return "[unserialisable]";
|
|
1886
1894
|
}
|
|
1887
|
-
},
|
|
1895
|
+
}, Fn = "/_voltro/inspect/logs", In = [{
|
|
1888
1896
|
match: (e) => typeof e == "string" && e.startsWith("[BABEL] Note: The code generator has deoptimised"),
|
|
1889
1897
|
handle: (e, t) => {
|
|
1890
1898
|
let n = e[0], r = n.match(/deoptimised the styling of (.+?) as it exceeds the max of (\d+\w*B)\.?/);
|
|
@@ -1896,13 +1904,13 @@ __installPublicEnv(publicEnvValues)
|
|
|
1896
1904
|
});
|
|
1897
1905
|
} else t.info(n);
|
|
1898
1906
|
}
|
|
1899
|
-
}],
|
|
1907
|
+
}], Ln = () => {
|
|
1900
1908
|
let e = {
|
|
1901
1909
|
warn: console.warn.bind(console),
|
|
1902
1910
|
error: console.error.bind(console)
|
|
1903
1911
|
}, t = g({ scope: "babel" }), n = !1, r = (r) => (...i) => {
|
|
1904
1912
|
if (!n) {
|
|
1905
|
-
for (let e of
|
|
1913
|
+
for (let e of In) if (e.match(i[0])) {
|
|
1906
1914
|
n = !0;
|
|
1907
1915
|
try {
|
|
1908
1916
|
e.handle(i, t);
|
|
@@ -1917,7 +1925,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1917
1925
|
return console.warn = r("warn"), console.error = r("error"), () => {
|
|
1918
1926
|
console.warn = e.warn, console.error = e.error;
|
|
1919
1927
|
};
|
|
1920
|
-
},
|
|
1928
|
+
}, Rn = {
|
|
1921
1929
|
loader: "it runs on the server, and the router caches its result per route + params",
|
|
1922
1930
|
renderMode: "it picks the server render strategy",
|
|
1923
1931
|
dynamic: "it picks the server render strategy",
|
|
@@ -1928,7 +1936,7 @@ __installPublicEnv(publicEnvValues)
|
|
|
1928
1936
|
cacheInvalidatesOn: "it wires this page into the ISR cache invalidator",
|
|
1929
1937
|
interactive: "it decides how much client JS the server ships",
|
|
1930
1938
|
tenantAware: "it is part of the server-side cache key"
|
|
1931
|
-
},
|
|
1939
|
+
}, zn = Object.keys(Rn), Bn = "virtual:voltro-route-refresh", Vn = `\0${Bn}`, Hn = /(?:^|&)(raw|url|inline|worker|sharedworker|direct)(?:&|=|$)/, Un = () => `
|
|
1932
1940
|
// GENERATED by @voltro/cli — the \`voltro dev\` route Fast Refresh runtime.
|
|
1933
1941
|
|
|
1934
1942
|
/** Mirrors react-refresh's own \`isLikelyComponentType\` closely enough for the
|
|
@@ -1957,11 +1965,11 @@ const stableForm = (value) => {
|
|
|
1957
1965
|
* readers (\`build.ts\` prerender, \`webDev.ts\` dev SSR, \`start.ts\`). A change to
|
|
1958
1966
|
* one of THESE cannot be hot-applied: the server already ran with the old
|
|
1959
1967
|
* value. Everything else a page exports is plain client-side data. */
|
|
1960
|
-
const serverRelevantExports = ${JSON.stringify(
|
|
1968
|
+
const serverRelevantExports = ${JSON.stringify(zn)}
|
|
1961
1969
|
|
|
1962
1970
|
/** Name → the server step that already consumed it, so the reload message can
|
|
1963
1971
|
* say WHY rather than just WHAT. Injected from the same single source. */
|
|
1964
|
-
const serverExportEffect = ${JSON.stringify(
|
|
1972
|
+
const serverExportEffect = ${JSON.stringify(Rn)}
|
|
1965
1973
|
|
|
1966
1974
|
/** The reason \`name\` forces a reload, for the console line. */
|
|
1967
1975
|
export const serverEffectOf = (name) =>
|
|
@@ -2004,7 +2012,7 @@ export const routeUpdateNeedsReload = (prevExports, nextExports) => {
|
|
|
2004
2012
|
const previousHook = globalThis.__getReactRefreshIgnoredExports
|
|
2005
2013
|
globalThis.__getReactRefreshIgnoredExports = (args) =>
|
|
2006
2014
|
ignoredExports.get(args.id) ?? previousHook?.(args) ?? []
|
|
2007
|
-
`,
|
|
2015
|
+
`, Wn = (e) => `
|
|
2008
2016
|
if (import.meta.hot) {
|
|
2009
2017
|
// Self-import to read our OWN exports, the same technique the react plugin
|
|
2010
2018
|
// uses; the namespace is only complete after evaluation, hence the promise.
|
|
@@ -2031,45 +2039,45 @@ import {
|
|
|
2031
2039
|
registerRouteModule as __voltro_registerRouteModule,
|
|
2032
2040
|
routeUpdateNeedsReload as __voltro_routeUpdateNeedsReload,
|
|
2033
2041
|
serverEffectOf as __voltro_serverEffect,
|
|
2034
|
-
} from '${
|
|
2035
|
-
`,
|
|
2036
|
-
let [n = "", r] =
|
|
2037
|
-
if (!n.endsWith(".tsx") || r !== void 0 &&
|
|
2038
|
-
let i =
|
|
2042
|
+
} from '${Bn}'
|
|
2043
|
+
`, Gn = (e) => e.replace(/\\/g, "/"), Kn = (e, t) => {
|
|
2044
|
+
let [n = "", r] = Gn(e).split("?");
|
|
2045
|
+
if (!n.endsWith(".tsx") || r !== void 0 && Hn.test(r)) return !1;
|
|
2046
|
+
let i = Gn(t).replace(/\/$/, "");
|
|
2039
2047
|
return n.startsWith(`${i}/`);
|
|
2040
|
-
},
|
|
2048
|
+
}, qn = (e, t, n) => Kn(t, n) ? `${e}${Wn(Gn(t).split("?")[0] ?? t)}` : null, Jn = (e) => ({
|
|
2041
2049
|
name: "voltro:route-fast-refresh",
|
|
2042
2050
|
enforce: "pre",
|
|
2043
|
-
resolveId: (e) => e === "virtual:voltro-route-refresh" ?
|
|
2044
|
-
load: (e) => e ===
|
|
2051
|
+
resolveId: (e) => e === "virtual:voltro-route-refresh" ? Vn : void 0,
|
|
2052
|
+
load: (e) => e === Vn ? Un() : void 0,
|
|
2045
2053
|
transform: (t, n, r) => {
|
|
2046
2054
|
if (r?.ssr === !0) return null;
|
|
2047
|
-
let i =
|
|
2055
|
+
let i = qn(t, n, e);
|
|
2048
2056
|
return i === null ? null : {
|
|
2049
2057
|
code: i,
|
|
2050
2058
|
map: null
|
|
2051
2059
|
};
|
|
2052
2060
|
}
|
|
2053
|
-
}),
|
|
2061
|
+
}), Yn = [
|
|
2054
2062
|
"static",
|
|
2055
2063
|
"spa",
|
|
2056
2064
|
"ssr",
|
|
2057
2065
|
"isr"
|
|
2058
|
-
],
|
|
2066
|
+
], Xn = (e) => typeof e == "string" && Yn.includes(e), Zn = Yn.map((e) => `'${e}'`).join(" | "), Qn = (e, t) => `[voltro] ${e}: unknown renderMode '${t}'.\n Valid values: ${Zn}.${t === "client" || t === "csr" || t === "browser" ? "\n A page that renders only in the browser is 'spa': it is skipped by the prerender and mounts on the client. If its route has a layout, that layout still renders server-side as an SSR shell." : t === "server" || t === "dynamic" ? "\n A page rendered per request is 'ssr'." : t === "ssg" || t === "prerender" ? "\n A page rendered once at build time is 'static' (the default)." : ""}`, $n = class extends Error {
|
|
2059
2067
|
page;
|
|
2060
2068
|
value;
|
|
2061
2069
|
name = "InvalidRenderModeError";
|
|
2062
2070
|
constructor(e, t) {
|
|
2063
|
-
super(
|
|
2071
|
+
super(Qn(e, t)), this.page = e, this.value = t;
|
|
2064
2072
|
}
|
|
2065
|
-
},
|
|
2073
|
+
}, er = (e, t = "<page>") => {
|
|
2066
2074
|
if (e.renderMode !== void 0 && e.renderMode !== null) {
|
|
2067
|
-
if (!
|
|
2075
|
+
if (!Xn(e.renderMode)) throw new $n(t, String(e.renderMode));
|
|
2068
2076
|
return e.renderMode;
|
|
2069
2077
|
}
|
|
2070
2078
|
return e.dynamic === "force-dynamic" ? "ssr" : (e.dynamic, "static");
|
|
2071
|
-
},
|
|
2072
|
-
renderMode:
|
|
2079
|
+
}, tr = (e, t = "<page>") => ({
|
|
2080
|
+
renderMode: er(e, t),
|
|
2073
2081
|
tenantAware: e.tenantAware === !0,
|
|
2074
2082
|
revalidateMs: it(e.revalidate),
|
|
2075
2083
|
staleWhileRevalidateMs: it(e.staleWhileRevalidate) ?? 0,
|
|
@@ -2078,7 +2086,7 @@ import {
|
|
|
2078
2086
|
hasLoader: typeof e.loader == "function",
|
|
2079
2087
|
hasMeta: e.meta != null,
|
|
2080
2088
|
hasGetStaticPaths: typeof e.getStaticPaths == "function"
|
|
2081
|
-
}),
|
|
2089
|
+
}), nr = /export\s+const\s+renderMode\s*(?::[^=]+)?=\s*['"]([^'"]*)['"]/, rr = (e) => nr.exec(e)?.[1] ?? null, ir = async (e, t) => {
|
|
2082
2090
|
let n = (await Promise.all(t.map(async (t) => {
|
|
2083
2091
|
let n;
|
|
2084
2092
|
try {
|
|
@@ -2086,21 +2094,21 @@ import {
|
|
|
2086
2094
|
} catch {
|
|
2087
2095
|
return null;
|
|
2088
2096
|
}
|
|
2089
|
-
let i =
|
|
2090
|
-
return i === null ||
|
|
2097
|
+
let i = rr(n);
|
|
2098
|
+
return i === null || Xn(i) ? null : {
|
|
2091
2099
|
file: t.file,
|
|
2092
2100
|
value: i
|
|
2093
2101
|
};
|
|
2094
2102
|
}))).filter((e) => e !== null);
|
|
2095
|
-
if (n.length !== 0) throw Error(n.map((e) =>
|
|
2096
|
-
},
|
|
2103
|
+
if (n.length !== 0) throw Error(n.map((e) => Qn(r("src", "pages", e.file), e.value)).join("\n\n"));
|
|
2104
|
+
}, ar = r(re(), ".voltro"), or = r(ar, "runtime-registry.json"), sr = 3e4, cr = () => {
|
|
2097
2105
|
let e = Math.random().toString(36).slice(2, 10);
|
|
2098
|
-
return `${
|
|
2099
|
-
}, cr = async () => {
|
|
2100
|
-
await S.mkdir(ir, { recursive: !0 });
|
|
2106
|
+
return `${or}.${process.pid}.${Date.now()}.${e}.tmp`;
|
|
2101
2107
|
}, lr = async () => {
|
|
2108
|
+
await S.mkdir(ar, { recursive: !0 });
|
|
2109
|
+
}, ur = async () => {
|
|
2102
2110
|
try {
|
|
2103
|
-
let e = await S.readFile(
|
|
2111
|
+
let e = await S.readFile(or, "utf8"), t = JSON.parse(e);
|
|
2104
2112
|
return t.version !== 1 || !Array.isArray(t.apps) ? {
|
|
2105
2113
|
version: 1,
|
|
2106
2114
|
apps: []
|
|
@@ -2111,31 +2119,31 @@ import {
|
|
|
2111
2119
|
apps: []
|
|
2112
2120
|
};
|
|
2113
2121
|
}
|
|
2114
|
-
},
|
|
2115
|
-
await
|
|
2116
|
-
let t =
|
|
2122
|
+
}, dr = async (e) => {
|
|
2123
|
+
await lr();
|
|
2124
|
+
let t = cr();
|
|
2117
2125
|
try {
|
|
2118
|
-
await S.writeFile(t, JSON.stringify(e, null, 2), "utf8"), await S.rename(t,
|
|
2126
|
+
await S.writeFile(t, JSON.stringify(e, null, 2), "utf8"), await S.rename(t, or);
|
|
2119
2127
|
} catch (e) {
|
|
2120
2128
|
try {
|
|
2121
2129
|
await S.unlink(t);
|
|
2122
2130
|
} catch {}
|
|
2123
2131
|
throw e;
|
|
2124
2132
|
}
|
|
2125
|
-
},
|
|
2133
|
+
}, fr = (e) => {
|
|
2126
2134
|
try {
|
|
2127
2135
|
return process.kill(e, 0), !0;
|
|
2128
2136
|
} catch {
|
|
2129
2137
|
return !1;
|
|
2130
2138
|
}
|
|
2131
|
-
},
|
|
2139
|
+
}, pr = (e) => {
|
|
2132
2140
|
let t = Date.now();
|
|
2133
|
-
return e.filter((e) =>
|
|
2134
|
-
},
|
|
2135
|
-
let e = await
|
|
2141
|
+
return e.filter((e) => fr(e.pid) ? t - new Date(e.heartbeatAt).getTime() < sr : !1);
|
|
2142
|
+
}, mr = async () => {
|
|
2143
|
+
let e = await ur(), t = pr(e.apps);
|
|
2136
2144
|
if (t.length === e.apps.length) return e;
|
|
2137
2145
|
try {
|
|
2138
|
-
await
|
|
2146
|
+
await dr({
|
|
2139
2147
|
version: 1,
|
|
2140
2148
|
apps: t
|
|
2141
2149
|
});
|
|
@@ -2144,32 +2152,32 @@ import {
|
|
|
2144
2152
|
version: 1,
|
|
2145
2153
|
apps: t
|
|
2146
2154
|
};
|
|
2147
|
-
},
|
|
2148
|
-
let t = await
|
|
2155
|
+
}, hr = async (e) => {
|
|
2156
|
+
let t = await ur(), n = (/* @__PURE__ */ new Date()).toISOString(), r = t.apps.findIndex((t) => t.id === e.id), i = {
|
|
2149
2157
|
...e,
|
|
2150
2158
|
registeredAt: r >= 0 ? t.apps[r].registeredAt : n,
|
|
2151
2159
|
heartbeatAt: n
|
|
2152
2160
|
};
|
|
2153
|
-
await
|
|
2161
|
+
await dr({
|
|
2154
2162
|
version: 1,
|
|
2155
2163
|
apps: r >= 0 ? t.apps.map((e, t) => t === r ? i : e) : [...t.apps, i]
|
|
2156
2164
|
});
|
|
2157
|
-
},
|
|
2165
|
+
}, gr = async (e) => {
|
|
2158
2166
|
try {
|
|
2159
|
-
let t = await
|
|
2167
|
+
let t = await ur(), n = t.apps.filter((t) => t.id !== e);
|
|
2160
2168
|
if (n.length === t.apps.length) return;
|
|
2161
|
-
await
|
|
2169
|
+
await dr({
|
|
2162
2170
|
version: 1,
|
|
2163
2171
|
apps: n
|
|
2164
2172
|
});
|
|
2165
2173
|
} catch {}
|
|
2166
|
-
},
|
|
2174
|
+
}, _r = (e, t, n) => `${e}:${t}:${n}`, X = r(re(), ".voltro", "logs"), vr = () => {
|
|
2167
2175
|
let e = Number(process.env.VOLTRO_LOG_FILE_TTL_MS);
|
|
2168
2176
|
return Number.isFinite(e) && e > 0 ? e : 3600 * 1e3;
|
|
2169
|
-
},
|
|
2170
|
-
if (
|
|
2171
|
-
|
|
2172
|
-
let e = Date.now() -
|
|
2177
|
+
}, yr = !1, br = () => {
|
|
2178
|
+
if (yr) return;
|
|
2179
|
+
yr = !0;
|
|
2180
|
+
let e = Date.now() - vr(), t = [];
|
|
2173
2181
|
try {
|
|
2174
2182
|
t = w(X);
|
|
2175
2183
|
} catch {
|
|
@@ -2182,8 +2190,8 @@ import {
|
|
|
2182
2190
|
T(t).mtimeMs < e && E(t);
|
|
2183
2191
|
} catch {}
|
|
2184
2192
|
}
|
|
2185
|
-
},
|
|
2186
|
-
let t =
|
|
2193
|
+
}, xr = (e) => e.replace(/[^a-zA-Z0-9._-]/g, "_").slice(0, 80), Sr = (e, t) => r(X, `${xr(e)}-${t}.log`), Cr = (e) => {
|
|
2194
|
+
let t = xr(e), n = [];
|
|
2187
2195
|
try {
|
|
2188
2196
|
n = w(X);
|
|
2189
2197
|
} catch {
|
|
@@ -2200,12 +2208,12 @@ import {
|
|
|
2200
2208
|
} catch {}
|
|
2201
2209
|
}
|
|
2202
2210
|
return a;
|
|
2203
|
-
},
|
|
2211
|
+
}, wr = (e) => {
|
|
2204
2212
|
try {
|
|
2205
2213
|
b(X, { recursive: !0 });
|
|
2206
2214
|
} catch {}
|
|
2207
|
-
|
|
2208
|
-
let t =
|
|
2215
|
+
br();
|
|
2216
|
+
let t = Sr(e, process.pid), n = x(t, "w"), r = (e) => {
|
|
2209
2217
|
let t = {
|
|
2210
2218
|
ts: e.ts.getTime(),
|
|
2211
2219
|
level: e.level,
|
|
@@ -2246,7 +2254,7 @@ import {
|
|
|
2246
2254
|
a(), o(), process.off("exit", o), process.off("uncaughtException", s), process.off("unhandledRejection", s);
|
|
2247
2255
|
}
|
|
2248
2256
|
};
|
|
2249
|
-
},
|
|
2257
|
+
}, Tr = async (e, t) => {
|
|
2250
2258
|
let n;
|
|
2251
2259
|
try {
|
|
2252
2260
|
n = await S.readFile(e, "utf8");
|
|
@@ -2260,11 +2268,11 @@ import {
|
|
|
2260
2268
|
i.push(t);
|
|
2261
2269
|
} catch {}
|
|
2262
2270
|
return t?.max !== void 0 && i.length > t.max ? i.slice(i.length - t.max) : i;
|
|
2263
|
-
},
|
|
2271
|
+
}, Er = g({ scope: "voltro:dashboard" }), Dr = ne(import.meta.url), Or = 5179, kr = (e) => {
|
|
2264
2272
|
let n = process.env.VOLTRO_DASHBOARD_PATH;
|
|
2265
2273
|
if (n && y(r(a(n), "app.config.ts"))) return a(n);
|
|
2266
2274
|
try {
|
|
2267
|
-
let e = t(
|
|
2275
|
+
let e = t(Dr.resolve("@voltro/dashboard/package.json"));
|
|
2268
2276
|
if (y(r(e, "app.config.ts"))) return e;
|
|
2269
2277
|
} catch {}
|
|
2270
2278
|
let i = r("voltro-devtools", "apps", "dashboard"), o = a(e);
|
|
@@ -2276,7 +2284,7 @@ import {
|
|
|
2276
2284
|
o = n;
|
|
2277
2285
|
}
|
|
2278
2286
|
return null;
|
|
2279
|
-
},
|
|
2287
|
+
}, Ar = "VOLTRO_IS_DASHBOARD", jr = (e, t = "127.0.0.1", n = 250) => new Promise((r) => {
|
|
2280
2288
|
let i = he({
|
|
2281
2289
|
port: e,
|
|
2282
2290
|
host: t
|
|
@@ -2284,45 +2292,45 @@ import {
|
|
|
2284
2292
|
a || (a = !0, i.destroy(), r(e));
|
|
2285
2293
|
};
|
|
2286
2294
|
i.once("connect", () => o(!0)), i.once("error", () => o(!1)), setTimeout(() => o(!1), n);
|
|
2287
|
-
}),
|
|
2295
|
+
}), Mr = () => !!(process.env.VOLTRO_DASHBOARD === "off" || process.argv.includes("--disable-dashboard")), Nr = () => process.env[Ar] === "1", Pr = () => process.stdout.isTTY === !0, Fr = r(re(), ".voltro", "dashboard-launch.lock"), Ir = 1e4, Lr = async () => {
|
|
2288
2296
|
try {
|
|
2289
|
-
await S.mkdir(t(
|
|
2290
|
-
let e = await S.open(
|
|
2297
|
+
await S.mkdir(t(Fr), { recursive: !0 });
|
|
2298
|
+
let e = await S.open(Fr, "wx");
|
|
2291
2299
|
return await e.write(`${process.pid}\n${Date.now()}\n`), await e.close(), !0;
|
|
2292
2300
|
} catch {
|
|
2293
2301
|
try {
|
|
2294
|
-
let e = await S.stat(
|
|
2295
|
-
if (Date.now() - e.mtimeMs >
|
|
2302
|
+
let e = await S.stat(Fr);
|
|
2303
|
+
if (Date.now() - e.mtimeMs > Ir) return await S.unlink(Fr).catch(() => void 0), Lr();
|
|
2296
2304
|
} catch {}
|
|
2297
2305
|
return !1;
|
|
2298
2306
|
}
|
|
2299
|
-
},
|
|
2307
|
+
}, Rr = async () => {
|
|
2300
2308
|
try {
|
|
2301
|
-
await S.unlink(
|
|
2309
|
+
await S.unlink(Fr);
|
|
2302
2310
|
} catch {}
|
|
2303
|
-
},
|
|
2311
|
+
}, zr = async (e) => {
|
|
2304
2312
|
let n = e.port ?? 5179;
|
|
2305
|
-
if (
|
|
2313
|
+
if (Mr()) return {
|
|
2306
2314
|
status: "skipped",
|
|
2307
2315
|
reason: "disabled by flag/env",
|
|
2308
2316
|
port: n
|
|
2309
2317
|
};
|
|
2310
|
-
if (
|
|
2318
|
+
if (Nr()) return {
|
|
2311
2319
|
status: "skipped",
|
|
2312
2320
|
reason: "this process IS the dashboard",
|
|
2313
2321
|
port: n
|
|
2314
2322
|
};
|
|
2315
|
-
if (!
|
|
2323
|
+
if (!Pr()) return {
|
|
2316
2324
|
status: "skipped",
|
|
2317
2325
|
reason: "stdout is not a TTY (CI/smoke)",
|
|
2318
2326
|
port: n
|
|
2319
2327
|
};
|
|
2320
|
-
if (!await
|
|
2328
|
+
if (!await Lr()) return {
|
|
2321
2329
|
status: "skipped",
|
|
2322
2330
|
reason: "another voltro process is currently launching the dashboard",
|
|
2323
2331
|
port: n
|
|
2324
2332
|
};
|
|
2325
|
-
if (await
|
|
2333
|
+
if (await jr(n)) return await Rr(), {
|
|
2326
2334
|
status: "already-running",
|
|
2327
2335
|
port: n
|
|
2328
2336
|
};
|
|
@@ -2339,7 +2347,7 @@ import {
|
|
|
2339
2347
|
stdio: "ignore",
|
|
2340
2348
|
env: {
|
|
2341
2349
|
...process.env,
|
|
2342
|
-
[
|
|
2350
|
+
[Ar]: "1",
|
|
2343
2351
|
VOLTRO_DASHBOARD_PORT: String(n)
|
|
2344
2352
|
}
|
|
2345
2353
|
});
|
|
@@ -2347,22 +2355,22 @@ import {
|
|
|
2347
2355
|
if (s.exitCode === null && s.signalCode === null) try {
|
|
2348
2356
|
s.kill("SIGTERM");
|
|
2349
2357
|
} catch {}
|
|
2350
|
-
}),
|
|
2358
|
+
}), Er.info(`auto-launching dashboard at http://localhost:${n}`, {
|
|
2351
2359
|
port: n,
|
|
2352
2360
|
mode: o,
|
|
2353
2361
|
prebuilt: a
|
|
2354
|
-
}), a ||
|
|
2355
|
-
|
|
2362
|
+
}), a || Er.debug("no pre-built dashboard — running `voltro dev`. Build with `cd voltro-devtools && pnpm build` for a fast prod boot."), Er.debug("disable via --disable-dashboard or VOLTRO_DASHBOARD=off"), setTimeout(() => {
|
|
2363
|
+
Rr();
|
|
2356
2364
|
}, 4e3).unref(), {
|
|
2357
2365
|
status: "launched",
|
|
2358
2366
|
port: n
|
|
2359
2367
|
};
|
|
2360
|
-
},
|
|
2368
|
+
}, Br = class extends Error {
|
|
2361
2369
|
_voltroDeferral = !0;
|
|
2362
2370
|
constructor(e) {
|
|
2363
2371
|
super(e), this.name = "DeferralNotSupportedError";
|
|
2364
2372
|
}
|
|
2365
|
-
},
|
|
2373
|
+
}, Vr = (e) => typeof e == "object" && !!e && e._voltroDeferral === !0, Hr = (e) => {
|
|
2366
2374
|
let { helpers: t } = e, n = t.prepareDeferredLoaderData(e.loaderData, "page"), r = {}, i = {}, a = {};
|
|
2367
2375
|
for (let [n, o] of Object.entries(e.segmentLoaderData)) {
|
|
2368
2376
|
let e = Number(n), s = t.prepareDeferredLoaderData(o, e);
|
|
@@ -2377,7 +2385,7 @@ import {
|
|
|
2377
2385
|
...e.layoutShell ? { layoutShell: e.layoutShell } : {}
|
|
2378
2386
|
});
|
|
2379
2387
|
} catch (e) {
|
|
2380
|
-
throw new
|
|
2388
|
+
throw new Br(e instanceof Error ? e.message : String(e));
|
|
2381
2389
|
}
|
|
2382
2390
|
return {
|
|
2383
2391
|
loaderData: n.renderData,
|
|
@@ -2393,8 +2401,8 @@ import {
|
|
|
2393
2401
|
...Object.keys(a).length > 0 ? { deferredSegmentIds: a } : {}
|
|
2394
2402
|
}
|
|
2395
2403
|
};
|
|
2396
|
-
},
|
|
2397
|
-
let { helpers: t, renderInput: n } = e, r =
|
|
2404
|
+
}, Ur = (e) => {
|
|
2405
|
+
let { helpers: t, renderInput: n } = e, r = Hr({
|
|
2398
2406
|
helpers: t,
|
|
2399
2407
|
page: e.page,
|
|
2400
2408
|
pathname: n.pathname,
|
|
@@ -2415,37 +2423,37 @@ import {
|
|
|
2415
2423
|
stateScript: t.renderRouterStateScript(r.stateInput),
|
|
2416
2424
|
hasDeferred: r.hasDeferred
|
|
2417
2425
|
};
|
|
2418
|
-
},
|
|
2426
|
+
}, Wr = (e) => {
|
|
2419
2427
|
let { html: t, meta: n } = e.helpers.renderPageToHtml(e.prepared.renderInput);
|
|
2420
2428
|
return {
|
|
2421
2429
|
body: t,
|
|
2422
2430
|
meta: n
|
|
2423
2431
|
};
|
|
2424
|
-
},
|
|
2432
|
+
}, Gr = (e) => [
|
|
2425
2433
|
...e.extra ?? [],
|
|
2426
2434
|
e.helpers.renderMetaToHtml(e.meta),
|
|
2427
2435
|
`<meta name="voltro-interactive" content="${e.interactive}" />`,
|
|
2428
2436
|
...e.prepared.hasDeferred ? [e.helpers.renderDeferredRegistryScript()] : [],
|
|
2429
2437
|
e.prepared.stateScript
|
|
2430
|
-
].filter((e) => e.length > 0).join("\n "),
|
|
2431
|
-
let t = e.keepScriptInHead ?? ((e) => e.startsWith("/@")), n = [], r = e.shell.replace(
|
|
2432
|
-
let r =
|
|
2438
|
+
].filter((e) => e.length > 0).join("\n "), Kr = "<div id=\"root\"></div>", qr = "<div id=\"root\">", Jr = "</div>", Yr = /<script\b[^>]*\btype=["']module["'][^>]*><\/script>[ \t]*\n?/gi, Xr = /\bsrc=["']([^"']+)["']/i, Zr = /<script(?![^>]*\basync\b)([^>]*\btype=["']module["'][^>]*)>/gi, Qr = (e) => {
|
|
2439
|
+
let t = e.keepScriptInHead ?? ((e) => e.startsWith("/@")), n = [], r = e.shell.replace(Yr, (e) => {
|
|
2440
|
+
let r = Xr.exec(e)?.[1];
|
|
2433
2441
|
return r === void 0 || t(r) ? e : (n.push(r), "");
|
|
2434
2442
|
});
|
|
2435
|
-
e.inlineModuleScriptsAsync && (r = r.replace(
|
|
2436
|
-
let i = r.indexOf(
|
|
2437
|
-
if (i === -1) throw Error(`[voltro] the generated shell has no \`${
|
|
2443
|
+
e.inlineModuleScriptsAsync && (r = r.replace(Zr, "<script async$1>"));
|
|
2444
|
+
let i = r.indexOf(Kr);
|
|
2445
|
+
if (i === -1) throw Error(`[voltro] the generated shell has no \`${Kr}\` element, so a streamed response cannot be split around the page body. This is a framework bug unless the app overrode \`.framework/index.html\` by hand.`);
|
|
2438
2446
|
return {
|
|
2439
|
-
head: `${r.slice(0, i)}${
|
|
2440
|
-
tail: `${
|
|
2447
|
+
head: `${r.slice(0, i)}${qr}`,
|
|
2448
|
+
tail: `${Jr}${r.slice(i + 21)}`,
|
|
2441
2449
|
bootstrapModules: n
|
|
2442
2450
|
};
|
|
2443
|
-
},
|
|
2451
|
+
}, $r = (e) => e.head.replace("</head>", ` ${e.headInjection}\n </head>`).replace(/<html(\s+lang="[^"]*")?/i, `<html lang="${e.htmlLang}"`), ei = (e) => {
|
|
2444
2452
|
let { res: t, shell: n, htmlLang: r, headInjection: i } = e, a = null, o = !1, s = !1, c = () => {
|
|
2445
2453
|
if (s || !o || a === null) return;
|
|
2446
2454
|
s = !0, t.statusCode = e.statusCode ?? 200;
|
|
2447
2455
|
for (let [n, r] of Object.entries(e.headers ?? {})) t.setHeader(n, r);
|
|
2448
|
-
t.flushHeaders?.(), t.write(
|
|
2456
|
+
t.flushHeaders?.(), t.write($r({
|
|
2449
2457
|
head: n.head,
|
|
2450
2458
|
headInjection: i(a.meta),
|
|
2451
2459
|
htmlLang: r
|
|
@@ -2475,14 +2483,14 @@ import {
|
|
|
2475
2483
|
return;
|
|
2476
2484
|
}
|
|
2477
2485
|
c();
|
|
2478
|
-
}, Z = g({ scope: "voltro:dev:web" }),
|
|
2486
|
+
}, Z = g({ scope: "voltro:dev:web" }), ti = g({ scope: "vite" }), ni = await (async () => {
|
|
2479
2487
|
try {
|
|
2480
2488
|
let e = r(t(o(import.meta.url)), "..", "package.json"), n = await S.readFile(e, "utf8");
|
|
2481
2489
|
return JSON.parse(n).version ?? "0.0.0";
|
|
2482
2490
|
} catch {
|
|
2483
2491
|
return "0.0.0";
|
|
2484
2492
|
}
|
|
2485
|
-
})(),
|
|
2493
|
+
})(), ri = async () => {
|
|
2486
2494
|
try {
|
|
2487
2495
|
let e = t(o(import.meta.url)), n = a(e, "..", "..", "devtools");
|
|
2488
2496
|
if (y(r(n, "package.json"))) return n;
|
|
@@ -2491,7 +2499,7 @@ import {
|
|
|
2491
2499
|
} catch {
|
|
2492
2500
|
return null;
|
|
2493
2501
|
}
|
|
2494
|
-
},
|
|
2502
|
+
}, ii = (e, t) => e.disableDevtools || !t ? [] : [
|
|
2495
2503
|
"",
|
|
2496
2504
|
"// Dev-only in-page devtools overlay. The `import.meta.env.DEV` guard is a",
|
|
2497
2505
|
"// compile-time constant, so prod builds strip this whole `if` block — the",
|
|
@@ -2501,12 +2509,12 @@ import {
|
|
|
2501
2509
|
" await import('@voltro/devtools/styles.css')",
|
|
2502
2510
|
" Devtools = (await import('@voltro/devtools')).VoltroDevtools",
|
|
2503
2511
|
"}"
|
|
2504
|
-
],
|
|
2512
|
+
], ai = (e, t) => e.disableDevtools || !t ? [] : [" ...(Devtools ? { Devtools } : {}),"], oi = (e) => e.sentry ? ["import { initSentryBrowser } from '@voltro/plugin-sentry/web'"] : [], si = (e) => e.sentry ? [
|
|
2505
2513
|
"",
|
|
2506
2514
|
"// Browser-side Sentry (frontend half of the deep integration). Errors +",
|
|
2507
2515
|
"// browser rpc spans flow to Sentry, sharing the server transactions' trace.",
|
|
2508
2516
|
`await initSentryBrowser(${JSON.stringify(e.sentry)})`
|
|
2509
|
-
] : [],
|
|
2517
|
+
] : [], ci = (e) => e.env ? ["import './env.public'"] : [], li = (e) => {
|
|
2510
2518
|
let n = [], i = a(e);
|
|
2511
2519
|
for (;;) {
|
|
2512
2520
|
y(r(i, "pnpm-workspace.yaml")) && n.push(i);
|
|
@@ -2515,19 +2523,19 @@ import {
|
|
|
2515
2523
|
i = e;
|
|
2516
2524
|
}
|
|
2517
2525
|
return n;
|
|
2518
|
-
},
|
|
2526
|
+
}, ui = /* @__PURE__ */ new Set([
|
|
2519
2527
|
"layout.tsx",
|
|
2520
2528
|
"error.tsx",
|
|
2521
2529
|
"loading.tsx",
|
|
2522
2530
|
"not-found.tsx"
|
|
2523
|
-
]),
|
|
2531
|
+
]), di = (e) => /\.(test|spec)\.tsx$/.test(e), fi = (e) => {
|
|
2524
2532
|
if (/\/node_modules\/(?:\.pnpm\/[^/]+\/node_modules\/)?(?:react|react-dom|scheduler)\//.test(e)) return "react";
|
|
2525
2533
|
let t = /\/([^/]+)\.island\.tsx?$/.exec(e);
|
|
2526
2534
|
if (t) return `island-${t[1]}`;
|
|
2527
|
-
},
|
|
2528
|
-
let t = e.replace(/\.tsx$/, "").split("/").filter(Boolean).filter((e) => !
|
|
2535
|
+
}, pi = /export\s+(?:async\s+)?(?:const|function|let|var)\s+loader\b/, mi = (e) => e.startsWith("(") && e.endsWith(")"), hi = (e) => e.filter((e) => !mi(e)), gi = (e) => {
|
|
2536
|
+
let t = e.replace(/\.tsx$/, "").split("/").filter(Boolean).filter((e) => !mi(e)), n = t.length > 0 && t[t.length - 1] === "index" ? t.slice(0, -1) : t;
|
|
2529
2537
|
return n.length === 0 ? "/" : "/" + n.join("/");
|
|
2530
|
-
},
|
|
2538
|
+
}, _i = (e) => `${e.replace(/\.tsx$/, "").split("/").filter(Boolean).map((e) => e.replace(/[()]/g, "").replace(/\[\.\.\./g, "_rest_").replace(/[[\]]/g, "_")).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("").replace(/[^A-Za-z0-9_]/g, "_") || "Index"}Page`, Q = (e, t) => e === "" ? `Root${t}` : `${e.split("/").filter(Boolean).map((e) => e.replace(/[()]/g, "").replace(/\[\.\.\./g, "_rest_").replace(/[[\]]/g, "_")).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("").replace(/[^A-Za-z0-9_]/g, "_") || "Root"}${t}`, $ = async (e) => {
|
|
2531
2539
|
let t = [], n = [], i = async (e, a) => {
|
|
2532
2540
|
let o = [];
|
|
2533
2541
|
try {
|
|
@@ -2535,17 +2543,17 @@ import {
|
|
|
2535
2543
|
} catch {
|
|
2536
2544
|
return;
|
|
2537
2545
|
}
|
|
2538
|
-
let s = o.filter((e) => e.isDirectory()).map((e) => e.name).sort(), c = o.filter((e) => e.isFile() && e.name.endsWith(".tsx") && !
|
|
2539
|
-
if (c.some((e) =>
|
|
2546
|
+
let s = o.filter((e) => e.isDirectory()).map((e) => e.name).sort(), c = o.filter((e) => e.isFile() && e.name.endsWith(".tsx") && !di(e.name)).map((e) => e.name).sort(), l = new Set(c), u = a.join("/");
|
|
2547
|
+
if (c.some((e) => ui.has(e))) {
|
|
2540
2548
|
let t = l.has("layout.tsx"), i = !1;
|
|
2541
2549
|
if (t) try {
|
|
2542
2550
|
let t = await S.readFile(r(e, "layout.tsx"), "utf8");
|
|
2543
|
-
i =
|
|
2551
|
+
i = pi.test(t);
|
|
2544
2552
|
} catch {}
|
|
2545
2553
|
n.push({
|
|
2546
2554
|
dir: u,
|
|
2547
2555
|
chain: a,
|
|
2548
|
-
contributesToUrl: a.length === 0 || !
|
|
2556
|
+
contributesToUrl: a.length === 0 || !mi(a[a.length - 1]),
|
|
2549
2557
|
hasLayout: t,
|
|
2550
2558
|
hasLayoutLoader: i,
|
|
2551
2559
|
hasError: l.has("error.tsx"),
|
|
@@ -2554,12 +2562,12 @@ import {
|
|
|
2554
2562
|
});
|
|
2555
2563
|
}
|
|
2556
2564
|
for (let e of c) {
|
|
2557
|
-
if (
|
|
2565
|
+
if (ui.has(e)) continue;
|
|
2558
2566
|
let n = u ? `${u}/${e}` : e;
|
|
2559
2567
|
t.push({
|
|
2560
2568
|
file: n,
|
|
2561
|
-
pattern:
|
|
2562
|
-
ident:
|
|
2569
|
+
pattern: gi(n),
|
|
2570
|
+
ident: _i(n),
|
|
2563
2571
|
dirChain: a
|
|
2564
2572
|
});
|
|
2565
2573
|
}
|
|
@@ -2569,14 +2577,14 @@ import {
|
|
|
2569
2577
|
pages: t,
|
|
2570
2578
|
dirs: n
|
|
2571
2579
|
};
|
|
2572
|
-
},
|
|
2580
|
+
}, vi = (e, t) => {
|
|
2573
2581
|
let n = [];
|
|
2574
2582
|
for (let r = 0; r <= t.length; r++) {
|
|
2575
2583
|
let i = t.slice(0, r).join("/"), a = e.find((e) => e.dir === i);
|
|
2576
2584
|
a && n.push(a);
|
|
2577
2585
|
}
|
|
2578
2586
|
return n;
|
|
2579
|
-
},
|
|
2587
|
+
}, yi = async (e) => {
|
|
2580
2588
|
let { entries: t, loadLayout: n, loadError: r, loadPending: i, ctx: a } = e, o = {};
|
|
2581
2589
|
return {
|
|
2582
2590
|
chain: await Promise.all(t.map(async (e, t) => {
|
|
@@ -2598,10 +2606,10 @@ import {
|
|
|
2598
2606
|
})),
|
|
2599
2607
|
segmentLoaderData: o
|
|
2600
2608
|
};
|
|
2601
|
-
},
|
|
2602
|
-
let t =
|
|
2609
|
+
}, bi = (e) => {
|
|
2610
|
+
let t = hi(e);
|
|
2603
2611
|
return t.length === 0 ? "" : "/" + t.join("/");
|
|
2604
|
-
},
|
|
2612
|
+
}, xi = [
|
|
2605
2613
|
"// Hot-reload bridge: keep SSR-injected <link rel=\"stylesheet\"> tags",
|
|
2606
2614
|
"// in sync with Vite's CSS HMR. Without this, edits to .css files",
|
|
2607
2615
|
"// only update the JS-injected <style> overlay; the underlying <link>",
|
|
@@ -2694,7 +2702,7 @@ import {
|
|
|
2694
2702
|
" _vdtErrorStart('Build error')",
|
|
2695
2703
|
" })",
|
|
2696
2704
|
"}"
|
|
2697
|
-
].join("\n"),
|
|
2705
|
+
].join("\n"), Si = (e) => {
|
|
2698
2706
|
let t = [], n = 0, r = e.split("/").filter(Boolean), i = [];
|
|
2699
2707
|
for (let e of r) e.startsWith("[[...") && e.endsWith("]]") ? (i.push("(.*)"), t.push(e.slice(5, -2)), n += 2) : e.startsWith("[...") && e.endsWith("]") ? (i.push("(.+)"), t.push(e.slice(4, -1)), n += 3) : e.startsWith("[") && e.endsWith("]") ? (i.push("([^/]+)"), t.push(e.slice(1, -1)), n += 1) : i.push(e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
|
|
2700
2708
|
let a = i.join("/");
|
|
@@ -2703,8 +2711,8 @@ import {
|
|
|
2703
2711
|
paramNames: t,
|
|
2704
2712
|
priority: n
|
|
2705
2713
|
};
|
|
2706
|
-
},
|
|
2707
|
-
let { regex: t, paramNames: n, priority: r } =
|
|
2714
|
+
}, Ci = (e) => e.map((e) => {
|
|
2715
|
+
let { regex: t, paramNames: n, priority: r } = Si(e.pattern);
|
|
2708
2716
|
return {
|
|
2709
2717
|
pattern: e.pattern,
|
|
2710
2718
|
file: e.file,
|
|
@@ -2713,7 +2721,7 @@ import {
|
|
|
2713
2721
|
paramNames: n,
|
|
2714
2722
|
priority: r
|
|
2715
2723
|
};
|
|
2716
|
-
}).slice().sort((e, t) => e.priority - t.priority),
|
|
2724
|
+
}).slice().sort((e, t) => e.priority - t.priority), wi = (e, t) => {
|
|
2717
2725
|
for (let n of t) {
|
|
2718
2726
|
let t = n.regex.exec(e);
|
|
2719
2727
|
if (!t) continue;
|
|
@@ -2725,7 +2733,7 @@ import {
|
|
|
2725
2733
|
};
|
|
2726
2734
|
}
|
|
2727
2735
|
return null;
|
|
2728
|
-
},
|
|
2736
|
+
}, Ti = async (e, n) => {
|
|
2729
2737
|
let i = e;
|
|
2730
2738
|
for (;;) {
|
|
2731
2739
|
let e = r(i, "node_modules", n);
|
|
@@ -2739,7 +2747,7 @@ import {
|
|
|
2739
2747
|
if (a === i) return null;
|
|
2740
2748
|
i = a;
|
|
2741
2749
|
}
|
|
2742
|
-
},
|
|
2750
|
+
}, Ei = async (e) => {
|
|
2743
2751
|
try {
|
|
2744
2752
|
let t = await import(s(r(e, "app.config.ts")).href), n = t.default?.port, i = typeof n == "number" ? n : 4e3, a = t.default?.transport?.wsPath, o = typeof a == "string" && a.startsWith("/") ? a : void 0;
|
|
2745
2753
|
return o ? {
|
|
@@ -2748,14 +2756,15 @@ import {
|
|
|
2748
2756
|
} : { port: i };
|
|
2749
2757
|
} catch {}
|
|
2750
2758
|
return { port: 4e3 };
|
|
2751
|
-
},
|
|
2759
|
+
}, Di = (e, t) => ({
|
|
2752
2760
|
name: e,
|
|
2753
2761
|
pkg: t.package,
|
|
2754
2762
|
browserWsUrl: t.url,
|
|
2755
2763
|
proxyTarget: void 0,
|
|
2756
2764
|
...t.serverUrl ? { serverOrigin: t.serverUrl } : {},
|
|
2757
|
-
...t.headers ? { headers: t.headers } : {}
|
|
2758
|
-
|
|
2765
|
+
...t.headers ? { headers: t.headers } : {},
|
|
2766
|
+
...t.authHeaders ? { hasAuthHeaders: !0 } : {}
|
|
2767
|
+
}), Oi = (e, t, n) => {
|
|
2759
2768
|
let r = t.transport?.wsPath ?? n.wsPath;
|
|
2760
2769
|
return {
|
|
2761
2770
|
name: e,
|
|
@@ -2764,9 +2773,10 @@ import {
|
|
|
2764
2773
|
proxyTarget: `ws://localhost:${n.port}`,
|
|
2765
2774
|
...r ? { wsPath: r } : {},
|
|
2766
2775
|
...t.serverUrl ? { serverOrigin: t.serverUrl } : {},
|
|
2767
|
-
...t.headers ? { headers: t.headers } : {}
|
|
2776
|
+
...t.headers ? { headers: t.headers } : {},
|
|
2777
|
+
...t.authHeaders ? { hasAuthHeaders: !0 } : {}
|
|
2768
2778
|
};
|
|
2769
|
-
},
|
|
2779
|
+
}, ki = (e) => {
|
|
2770
2780
|
let t = /* @__PURE__ */ new Map();
|
|
2771
2781
|
for (let n of e) {
|
|
2772
2782
|
if (n.proxyTarget === void 0) continue;
|
|
@@ -2774,43 +2784,43 @@ import {
|
|
|
2774
2784
|
if (e) throw Error(`[voltro] api ${JSON.stringify(n.name)} and ${JSON.stringify(e)} both resolve the same-origin WS path ${JSON.stringify(n.browserWsUrl)}. A custom transport.wsPath must be unique per origin (one api per origin may use a fixed path). Give each a distinct wsPath, or drop the override to use the default /ws/<name>.`);
|
|
2775
2785
|
t.set(n.browserWsUrl, n.name);
|
|
2776
2786
|
}
|
|
2777
|
-
},
|
|
2787
|
+
}, Ai = async (e, t) => {
|
|
2778
2788
|
let n = Object.entries(t.apis ?? {}), r = [];
|
|
2779
2789
|
for (let [t, i] of n) {
|
|
2780
2790
|
if (i.url) {
|
|
2781
|
-
r.push(
|
|
2791
|
+
r.push(Di(t, i));
|
|
2782
2792
|
continue;
|
|
2783
2793
|
}
|
|
2784
|
-
let n = await
|
|
2794
|
+
let n = await Ti(e, i.package);
|
|
2785
2795
|
if (!n) throw Error(`[voltro dev] api ${JSON.stringify(t)} (package ${JSON.stringify(i.package)}) is not a workspace dep and has no \`url\` set in app.config.ts. External apis need an explicit \`url\` because the framework can't discover their dev port.`);
|
|
2786
|
-
r.push(
|
|
2796
|
+
r.push(Oi(t, i, await Ei(n)));
|
|
2787
2797
|
}
|
|
2788
|
-
return
|
|
2789
|
-
},
|
|
2798
|
+
return ki(r), r;
|
|
2799
|
+
}, ji = (e) => {
|
|
2790
2800
|
if (!(!/^wss?:\/\//.test(e) && !/^https?:\/\//.test(e))) try {
|
|
2791
2801
|
let t = new URL(e);
|
|
2792
2802
|
return t.protocol = t.protocol === "wss:" || t.protocol === "https:" ? "https:" : "http:", `${t.protocol}//${t.host}`;
|
|
2793
2803
|
} catch {
|
|
2794
2804
|
return;
|
|
2795
2805
|
}
|
|
2796
|
-
},
|
|
2806
|
+
}, Mi = (e) => `VOLTRO_API_ORIGIN_${e.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, Ni = (e) => process.env[Mi(e)] ?? process.env.VOLTRO_API_ORIGIN, Pi = (e, t) => {
|
|
2797
2807
|
if (!e) return;
|
|
2798
|
-
let n =
|
|
2808
|
+
let n = Ni(e.name) ?? e.serverOrigin;
|
|
2799
2809
|
if (n) {
|
|
2800
|
-
let e =
|
|
2810
|
+
let e = ji(n);
|
|
2801
2811
|
if (e) return e;
|
|
2802
2812
|
}
|
|
2803
2813
|
if (t?.allowDevProxy && e.proxyTarget) {
|
|
2804
|
-
let t =
|
|
2814
|
+
let t = ji(e.proxyTarget);
|
|
2805
2815
|
if (t) return t;
|
|
2806
2816
|
}
|
|
2807
|
-
if (!e.proxyTarget && /^wss?:\/\//.test(e.browserWsUrl)) return
|
|
2808
|
-
},
|
|
2817
|
+
if (!e.proxyTarget && /^wss?:\/\//.test(e.browserWsUrl)) return ji(e.browserWsUrl);
|
|
2818
|
+
}, Fi = (e, t, n) => {
|
|
2809
2819
|
if (!e) {
|
|
2810
2820
|
if (n?.apiName === void 0) return;
|
|
2811
2821
|
let e = n.apiName;
|
|
2812
2822
|
return async () => {
|
|
2813
|
-
throw Error(`[loader.query] api '${e}' has no server-side origin for SSR. In a split web/api deployment the web pod reaches the api by internal DNS, not the browser's relative wsPath — set ${
|
|
2823
|
+
throw Error(`[loader.query] api '${e}' has no server-side origin for SSR. In a split web/api deployment the web pod reaches the api by internal DNS, not the browser's relative wsPath — set ${Mi(e)} (or VOLTRO_API_ORIGIN, or apis.${e}.serverUrl in app.config.ts) to the api's internal origin, e.g. http://api.<namespace>.svc.cluster.local. The browser transport is unaffected.`);
|
|
2814
2824
|
};
|
|
2815
2825
|
}
|
|
2816
2826
|
return async (r, i) => {
|
|
@@ -2832,7 +2842,7 @@ import {
|
|
|
2832
2842
|
});
|
|
2833
2843
|
} catch (t) {
|
|
2834
2844
|
let i = t?.cause?.code ?? String(t?.message ?? t);
|
|
2835
|
-
throw Error(`[loader.query] ${r}: could not reach the api at ${e}/rpc (${i}). ${n?.apiName ? `Set ${
|
|
2845
|
+
throw Error(`[loader.query] ${r}: could not reach the api at ${e}/rpc (${i}). ${n?.apiName ? `Set ${Mi(n.apiName)} / VOLTRO_API_ORIGIN` : "Set the api server origin"} to the api's SSR-reachable origin (internal cluster DNS in a split deployment).`, { cause: t });
|
|
2836
2846
|
}
|
|
2837
2847
|
if (!o.ok) throw Error(`[loader.query] ${r}: HTTP ${o.status} ${await o.text()}`);
|
|
2838
2848
|
let s = await o.json();
|
|
@@ -2850,8 +2860,8 @@ import {
|
|
|
2850
2860
|
}
|
|
2851
2861
|
if (u) return l;
|
|
2852
2862
|
};
|
|
2853
|
-
},
|
|
2854
|
-
let a = t.title ?? t.name ?? "app", o = t.theme === "dark" ? " class=\"dark\"" : t.theme === "light" ? " class=\"light\"" : "", s = y(r(e, "node_modules", "@voltro", "devtools", "package.json")) || await
|
|
2863
|
+
}, Ii = async (e, t, n, i = {}) => {
|
|
2864
|
+
let a = t.title ?? t.name ?? "app", o = t.theme === "dark" ? " class=\"dark\"" : t.theme === "light" ? " class=\"light\"" : "", s = y(r(e, "node_modules", "@voltro", "devtools", "package.json")) || await ri() !== null, c = t.theme === "system" ? [
|
|
2855
2865
|
" <script>",
|
|
2856
2866
|
" (function () {",
|
|
2857
2867
|
" var root = document.documentElement",
|
|
@@ -2890,10 +2900,12 @@ import {
|
|
|
2890
2900
|
"</html>",
|
|
2891
2901
|
""
|
|
2892
2902
|
].join("\n"), u = r(e, "src", "pages"), { pages: d, dirs: f } = await $(u);
|
|
2893
|
-
await
|
|
2894
|
-
let p = (e) => `${e.replace(/[^a-zA-Z0-9]/g, "_")}AppGroup`, m = (e) => `${e.replace(/[^a-zA-Z0-9]/g, "_")}AppDescriptors`, h = n.map((e) => `import { appGroup as ${p(e.name)}, appDescriptors as ${m(e.name)} } from '${e.pkg}/rpcGroup'`)
|
|
2903
|
+
await ir(u, d);
|
|
2904
|
+
let p = (e) => `${e.replace(/[^a-zA-Z0-9]/g, "_")}AppGroup`, m = (e) => `${e.replace(/[^a-zA-Z0-9]/g, "_")}AppDescriptors`, h = n.map((e) => `import { appGroup as ${p(e.name)}, appDescriptors as ${m(e.name)} } from '${e.pkg}/rpcGroup'`);
|
|
2905
|
+
n.some((e) => e.hasAuthHeaders) && (h.push("import __voltroAppConfig from '../app.config'"), h.push("const __voltroAuthHeaders = (__voltroAppConfig as { readonly apis?: Record<string, { readonly authHeaders?: () => Record<string, string> | Promise<Record<string, string>> }> }).apis"));
|
|
2906
|
+
let g = n.map((e) => {
|
|
2895
2907
|
let t = [`group: ${p(e.name)}`];
|
|
2896
|
-
return t.push(`descriptors: ${m(e.name)}`), t.push(`wsUrl: ${JSON.stringify(e.browserWsUrl)}`), e.headers && t.push(`headers: ${JSON.stringify(e.headers)}`), ` ${JSON.stringify(e.name)}: { ${t.join(", ")} },`;
|
|
2908
|
+
return t.push(`descriptors: ${m(e.name)}`), t.push(`wsUrl: ${JSON.stringify(e.browserWsUrl)}`), e.hasAuthHeaders ? t.push(`headers: __voltroAuthHeaders?.[${JSON.stringify(e.name)}]?.authHeaders`) : e.headers && t.push(`headers: ${JSON.stringify(e.headers)}`), ` ${JSON.stringify(e.name)}: { ${t.join(", ")} },`;
|
|
2897
2909
|
}), _, v, b;
|
|
2898
2910
|
if (d.length > 0) {
|
|
2899
2911
|
let e = d.map((e) => ` ${JSON.stringify(e.pattern)}: () => import('../src/pages/${e.file}'),`), n = [];
|
|
@@ -2902,13 +2914,13 @@ import {
|
|
|
2902
2914
|
e.hasLayout && e.hasLayoutLoader ? n.push(`import * as ${Q(e.dir, "Layout")}Mod from '${t}/layout.tsx'`) : e.hasLayout && n.push(`import ${Q(e.dir, "Layout")} from '${t}/layout.tsx'`), e.hasError && n.push(`import ${Q(e.dir, "Error")} from '${t}/error.tsx'`), e.hasPending && n.push(`import ${Q(e.dir, "Pending")} from '${t}/loading.tsx'`), e.hasNotFound && n.push(`import ${Q(e.dir, "NotFound")} from '${t}/not-found.tsx'`);
|
|
2903
2915
|
}
|
|
2904
2916
|
let r = d.map((e) => {
|
|
2905
|
-
let t =
|
|
2917
|
+
let t = vi(f, e.dirChain).map((e) => {
|
|
2906
2918
|
let t = [`id: ${JSON.stringify(e.dir || "/")}`], n = JSON.stringify(e.dir);
|
|
2907
2919
|
return e.hasLayout && t.push(`Layout: refs.layouts[${n}]`), e.hasLayoutLoader && t.push(`loader: refs.layoutLoaders[${n}]`), e.hasError && t.push(`Error: refs.errors[${n}]`), e.hasPending && t.push(`Pending: refs.pendings[${n}]`), ` { ${t.join(", ")} }`;
|
|
2908
2920
|
}).join(",\n");
|
|
2909
2921
|
return ` makePageRoute(${JSON.stringify(e.pattern)}, ${t.length > 0 ? `[\n${t},\n ]` : "undefined"}),`;
|
|
2910
2922
|
}), i = f.filter((e) => e.hasNotFound).map((e) => {
|
|
2911
|
-
let t =
|
|
2923
|
+
let t = bi(e.chain), n = vi(f, e.chain).map((e) => {
|
|
2912
2924
|
let t = [`id: ${JSON.stringify(e.dir || "/")}`], n = JSON.stringify(e.dir);
|
|
2913
2925
|
return e.hasLayout && t.push(`Layout: refs.layouts[${n}]`), e.hasError && t.push(`Error: refs.errors[${n}]`), ` { ${t.join(", ")} }`;
|
|
2914
2926
|
}).join(",\n"), r = n.length > 0 ? `\n chain: [\n${n},\n ],` : "";
|
|
@@ -3147,14 +3159,14 @@ import {
|
|
|
3147
3159
|
"// resolved apis map. Side-effect only — no local component definitions —",
|
|
3148
3160
|
"// so downstream invalidations (user page edits) terminate at app.tsx.",
|
|
3149
3161
|
"",
|
|
3150
|
-
...
|
|
3162
|
+
...ci(t),
|
|
3151
3163
|
"import { mount } from '@voltro/web'",
|
|
3152
3164
|
...h,
|
|
3153
3165
|
"import { App } from './app'",
|
|
3154
3166
|
"import { preloadCurrentRoute } from './routeTable'",
|
|
3155
|
-
...ai(t),
|
|
3156
|
-
...ri(t, s),
|
|
3157
3167
|
...oi(t),
|
|
3168
|
+
...ii(t, s),
|
|
3169
|
+
...si(t),
|
|
3158
3170
|
"",
|
|
3159
3171
|
"// Preload the current route's page chunk BEFORE hydration so the first",
|
|
3160
3172
|
"// client render matches the SSG/SSR-prerendered HTML. Without it, a lazy",
|
|
@@ -3171,10 +3183,10 @@ import {
|
|
|
3171
3183
|
" apis: {",
|
|
3172
3184
|
...g,
|
|
3173
3185
|
" },",
|
|
3174
|
-
...
|
|
3186
|
+
...ai(t, s),
|
|
3175
3187
|
"})",
|
|
3176
3188
|
"",
|
|
3177
|
-
|
|
3189
|
+
xi
|
|
3178
3190
|
].join("\n");
|
|
3179
3191
|
} else _ = "", v = "", b = [
|
|
3180
3192
|
"// GENERATED BY `voltro dev` — do not edit; will be overwritten on next boot.",
|
|
@@ -3182,22 +3194,22 @@ import {
|
|
|
3182
3194
|
"// and calls mount(). Side-effect only, no component definitions, so the",
|
|
3183
3195
|
"// user's component file remains the Fast Refresh boundary.",
|
|
3184
3196
|
"",
|
|
3185
|
-
...
|
|
3197
|
+
...ci(t),
|
|
3186
3198
|
"import { mount } from '@voltro/web'",
|
|
3187
3199
|
...h,
|
|
3188
3200
|
"import App from '../src/App'",
|
|
3189
|
-
...ai(t),
|
|
3190
|
-
...ri(t, s),
|
|
3191
3201
|
...oi(t),
|
|
3202
|
+
...ii(t, s),
|
|
3203
|
+
...si(t),
|
|
3192
3204
|
"",
|
|
3193
3205
|
"mount(App, {",
|
|
3194
3206
|
" apis: {",
|
|
3195
3207
|
...g,
|
|
3196
3208
|
" },",
|
|
3197
|
-
...
|
|
3209
|
+
...ai(t, s),
|
|
3198
3210
|
"})",
|
|
3199
3211
|
"",
|
|
3200
|
-
|
|
3212
|
+
xi
|
|
3201
3213
|
].join("\n");
|
|
3202
3214
|
let x = r(e, ".framework");
|
|
3203
3215
|
await S.mkdir(x, { recursive: !0 }), t.env ? await Qe(x, i) : await S.rm(r(x, "env.public.ts"), { force: !0 }), await S.writeFile(r(x, "index.html"), l, "utf8"), await S.writeFile(r(x, "main.tsx"), b, "utf8"), _ ? (await S.writeFile(r(x, "app.tsx"), _, "utf8"), await S.writeFile(r(x, "routeTable.ts"), v, "utf8")) : (await S.rm(r(x, "app.tsx"), { force: !0 }), await S.rm(r(x, "routeTable.ts"), { force: !0 }));
|
|
@@ -3208,7 +3220,7 @@ import {
|
|
|
3208
3220
|
let T = ["/.framework/"], E = w.split("\n").filter((e) => e.trim() !== "");
|
|
3209
3221
|
for (let e of T) E.includes(e) || E.push(e);
|
|
3210
3222
|
await S.writeFile(C, E.join("\n") + "\n", "utf8");
|
|
3211
|
-
},
|
|
3223
|
+
}, Li = async (e, n) => {
|
|
3212
3224
|
try {
|
|
3213
3225
|
let i = r(t(e), "project.json");
|
|
3214
3226
|
if (!y(i)) return;
|
|
@@ -3221,24 +3233,24 @@ import {
|
|
|
3221
3233
|
projectJson: i
|
|
3222
3234
|
});
|
|
3223
3235
|
} catch {}
|
|
3224
|
-
},
|
|
3225
|
-
let t =
|
|
3236
|
+
}, Ri = (e) => r(e, ".framework", "dist", "server", "appConfig.js"), zi = async (e) => {
|
|
3237
|
+
let t = Ri(e), n = y(t) ? t : r(e, "app.config.ts");
|
|
3226
3238
|
try {
|
|
3227
3239
|
let e = (await import(s(n).href)).default;
|
|
3228
3240
|
return typeof e == "object" && e && "type" in e && e.type === "web" ? e : null;
|
|
3229
3241
|
} catch {
|
|
3230
3242
|
return null;
|
|
3231
3243
|
}
|
|
3232
|
-
},
|
|
3233
|
-
let n = await
|
|
3244
|
+
}, Bi = async (t) => {
|
|
3245
|
+
let n = await zi(t);
|
|
3234
3246
|
if (!n) return {
|
|
3235
3247
|
ran: !1,
|
|
3236
3248
|
exitCode: 0
|
|
3237
3249
|
};
|
|
3238
|
-
|
|
3239
|
-
let o =
|
|
3240
|
-
|
|
3241
|
-
let s = await
|
|
3250
|
+
Ln();
|
|
3251
|
+
let o = sn();
|
|
3252
|
+
_n(o), Z.info("booting voltro dev (web)", { app: n.name ?? "(unnamed)" });
|
|
3253
|
+
let s = await Ai(t, n);
|
|
3242
3254
|
for (let e of s) Z.info("api wired", {
|
|
3243
3255
|
name: e.name,
|
|
3244
3256
|
pkg: e.pkg,
|
|
@@ -3257,13 +3269,13 @@ import {
|
|
|
3257
3269
|
log: Z,
|
|
3258
3270
|
generateTypes: !0
|
|
3259
3271
|
}), l = c.publicValues;
|
|
3260
|
-
await
|
|
3272
|
+
await Ii(t, n, s, l), Z.debug("generated framework entry files", { files: [
|
|
3261
3273
|
"index.html",
|
|
3262
3274
|
".framework/main.tsx",
|
|
3263
3275
|
...n.env ? [".framework/env.public.ts"] : []
|
|
3264
3276
|
] });
|
|
3265
|
-
let u = process.env.VOLTRO_IS_DASHBOARD === "1" && process.env.VOLTRO_DASHBOARD_PORT ? Number(process.env.VOLTRO_DASHBOARD_PORT) : n.port ?? 5173, d = n.name ?? "unnamed", f =
|
|
3266
|
-
await
|
|
3277
|
+
let u = process.env.VOLTRO_IS_DASHBOARD === "1" && process.env.VOLTRO_DASHBOARD_PORT ? Number(process.env.VOLTRO_DASHBOARD_PORT) : n.port ?? 5173, d = n.name ?? "unnamed", f = _r("web", d, u), p = wr(d);
|
|
3278
|
+
await hr({
|
|
3267
3279
|
id: f,
|
|
3268
3280
|
name: d,
|
|
3269
3281
|
kind: "web",
|
|
@@ -3271,14 +3283,14 @@ import {
|
|
|
3271
3283
|
pid: process.pid,
|
|
3272
3284
|
status: "booting",
|
|
3273
3285
|
logFile: p.path
|
|
3274
|
-
}).catch(() => {}), await
|
|
3286
|
+
}).catch(() => {}), await Li(t, u);
|
|
3275
3287
|
let { pages: m, dirs: h } = await $(r(t, "src", "pages")), g = h.map((e) => ({
|
|
3276
3288
|
dir: e.dir,
|
|
3277
3289
|
hasLayout: e.hasLayout,
|
|
3278
3290
|
hasError: e.hasError,
|
|
3279
3291
|
hasPending: e.hasPending,
|
|
3280
3292
|
hasNotFound: e.hasNotFound
|
|
3281
|
-
})), v = await
|
|
3293
|
+
})), v = await an({
|
|
3282
3294
|
appRoot: t,
|
|
3283
3295
|
pages: m
|
|
3284
3296
|
});
|
|
@@ -3307,7 +3319,7 @@ import {
|
|
|
3307
3319
|
...i.devDependencies
|
|
3308
3320
|
});
|
|
3309
3321
|
await Promise.all(a.map(async (n) => {
|
|
3310
|
-
let i = await
|
|
3322
|
+
let i = await Ti(t, n);
|
|
3311
3323
|
if (!i) return;
|
|
3312
3324
|
let a = r(i, "src");
|
|
3313
3325
|
try {
|
|
@@ -3319,9 +3331,9 @@ import {
|
|
|
3319
3331
|
}, D = r(t, "src", "pages"), te = (e) => e.endsWith(".tsx") && (e === D || e.startsWith(D + "/")), O = (e) => e === D || e.startsWith(D + "/"), k = async (e) => {
|
|
3320
3332
|
try {
|
|
3321
3333
|
let r = Date.now();
|
|
3322
|
-
await
|
|
3334
|
+
await Ii(t, n, s, l);
|
|
3323
3335
|
let { pages: i } = await $(D);
|
|
3324
|
-
await
|
|
3336
|
+
await an({
|
|
3325
3337
|
appRoot: t,
|
|
3326
3338
|
pages: i
|
|
3327
3339
|
}), Z.info("page tree regenerated", {
|
|
@@ -3413,7 +3425,7 @@ import {
|
|
|
3413
3425
|
}
|
|
3414
3426
|
try {
|
|
3415
3427
|
let r = Date.now();
|
|
3416
|
-
await
|
|
3428
|
+
await Ii(t, e, await Ai(t, e)), M = e, n.ws && n.ws.send({
|
|
3417
3429
|
type: "full-reload",
|
|
3418
3430
|
path: "*"
|
|
3419
3431
|
}), Z.info("app.config.ts soft-regen", {
|
|
@@ -3453,7 +3465,7 @@ import {
|
|
|
3453
3465
|
let n = /* @__PURE__ */ new Map();
|
|
3454
3466
|
for (let i of s) {
|
|
3455
3467
|
if (!i.proxyTarget) continue;
|
|
3456
|
-
let a = await
|
|
3468
|
+
let a = await Ti(t, i.pkg);
|
|
3457
3469
|
if (!a) continue;
|
|
3458
3470
|
let o = r(a, "rpcGroup.generated.ts");
|
|
3459
3471
|
try {
|
|
@@ -3539,7 +3551,7 @@ import {
|
|
|
3539
3551
|
pattern: i.pattern,
|
|
3540
3552
|
file: i.file,
|
|
3541
3553
|
dirChain: i.dirChain,
|
|
3542
|
-
renderMode:
|
|
3554
|
+
renderMode: er(a, r("src", "pages", i.file)),
|
|
3543
3555
|
interactive: a.interactive ?? "full",
|
|
3544
3556
|
tenantAware: a.tenantAware === !0,
|
|
3545
3557
|
revalidateMs: it(a.revalidate),
|
|
@@ -3648,7 +3660,7 @@ import {
|
|
|
3648
3660
|
for (let [t, n] of Object.entries(e.headers ?? {})) n !== void 0 && (s[String(t).toLowerCase()] = Array.isArray(n) ? n.join(", ") : String(n));
|
|
3649
3661
|
let c = i.split("?")[0];
|
|
3650
3662
|
if (e.method === "GET" && (c === "/_voltro/inspect/logs" || i.startsWith("/_voltro/inspect/logs?"))) {
|
|
3651
|
-
let e = G(s.origin), n =
|
|
3663
|
+
let e = G(s.origin), n = An(i, hn(), s);
|
|
3652
3664
|
t.statusCode = n.status, t.setHeader("content-type", n.contentType);
|
|
3653
3665
|
for (let [n, r] of Object.entries(e)) t.setHeader(n, r);
|
|
3654
3666
|
t.end(n.body);
|
|
@@ -3666,7 +3678,7 @@ import {
|
|
|
3666
3678
|
e.setEncoding("utf-8"), e.on("data", (e) => {
|
|
3667
3679
|
r += e;
|
|
3668
3680
|
}), e.on("end", () => {
|
|
3669
|
-
let e =
|
|
3681
|
+
let e = wn(r, o);
|
|
3670
3682
|
t.statusCode = e.status, t.setHeader("content-type", e.contentType);
|
|
3671
3683
|
for (let [e, r] of Object.entries(n)) t.setHeader(e, r);
|
|
3672
3684
|
t.end(e.body);
|
|
@@ -3697,14 +3709,14 @@ import {
|
|
|
3697
3709
|
for (let [e, r] of Object.entries(n)) t.setHeader(e, r);
|
|
3698
3710
|
t.flushHeaders?.(), t.write("retry: 5000\n\n");
|
|
3699
3711
|
let a = i.indexOf("?");
|
|
3700
|
-
if (!(a !== -1 && new URLSearchParams(i.slice(a + 1)).get("live") === "1")) for (let e of o.buffered()) t.write(
|
|
3712
|
+
if (!(a !== -1 && new URLSearchParams(i.slice(a + 1)).get("live") === "1")) for (let e of o.buffered()) t.write(cn(e));
|
|
3701
3713
|
let c = o.subscribe((e) => {
|
|
3702
3714
|
try {
|
|
3703
|
-
t.write(
|
|
3715
|
+
t.write(cn(e));
|
|
3704
3716
|
} catch {}
|
|
3705
3717
|
}), l = setInterval(() => {
|
|
3706
3718
|
try {
|
|
3707
|
-
t.write(
|
|
3719
|
+
t.write(ln());
|
|
3708
3720
|
} catch {}
|
|
3709
3721
|
}, 15e3), u = () => {
|
|
3710
3722
|
clearInterval(l), c();
|
|
@@ -3713,11 +3725,11 @@ import {
|
|
|
3713
3725
|
return;
|
|
3714
3726
|
}
|
|
3715
3727
|
try {
|
|
3716
|
-
let o =
|
|
3728
|
+
let o = yt(i, {
|
|
3717
3729
|
kind: "web",
|
|
3718
3730
|
meta: {
|
|
3719
3731
|
name: n.name ?? "(unnamed)",
|
|
3720
|
-
voltroVersion:
|
|
3732
|
+
voltroVersion: ni,
|
|
3721
3733
|
port: u,
|
|
3722
3734
|
mode: "dev",
|
|
3723
3735
|
apis: Object.entries(n.apis ?? {}).map(([e, t]) => {
|
|
@@ -3752,14 +3764,14 @@ import {
|
|
|
3752
3764
|
e.middlewares.use(async (e, t, n) => {
|
|
3753
3765
|
if (!(e.url ?? "").startsWith("/api/dashboard/registry")) return n();
|
|
3754
3766
|
try {
|
|
3755
|
-
let e = await
|
|
3767
|
+
let e = await mr();
|
|
3756
3768
|
t.statusCode = 200, t.setHeader("content-type", "application/json; charset=utf-8"), t.end(JSON.stringify(e));
|
|
3757
3769
|
} catch (e) {
|
|
3758
3770
|
t.statusCode = 500, t.setHeader("content-type", "text/plain"), t.end(`registry read error: ${e.message}`);
|
|
3759
3771
|
}
|
|
3760
3772
|
});
|
|
3761
3773
|
}
|
|
3762
|
-
} : null, ue =
|
|
3774
|
+
} : null, ue = Ci(m), de = /* @__PURE__ */ new Set(), I = Kt(), pe = Jt({
|
|
3763
3775
|
limit: I,
|
|
3764
3776
|
onColdStart: (e) => Z.debug("ssr cold-compile start", { id: e }),
|
|
3765
3777
|
onColdEnd: (e) => Z.debug("ssr cold-compile end", { id: e })
|
|
@@ -3773,7 +3785,7 @@ import {
|
|
|
3773
3785
|
if (i.method !== "GET" && i.method !== "HEAD") return o();
|
|
3774
3786
|
let c = i.url ?? "/", l = c.indexOf("?"), u = (l === -1 ? c : c.slice(0, l)) || "/";
|
|
3775
3787
|
if (u.startsWith("/@") || u.startsWith("/node_modules/") || u.startsWith("/.framework/") || u.startsWith("/_voltro/") || u === "/main.tsx" || u === "/index.html" || u === "/sw.js" || u === "/favicon.ico" || u === "/robots.txt" || /\.[a-z0-9]+$/i.test(u)) return o();
|
|
3776
|
-
let d =
|
|
3788
|
+
let d = wi(u, ue);
|
|
3777
3789
|
if (!d) return o();
|
|
3778
3790
|
let f = !de.has(d.route.pattern), p = Date.now();
|
|
3779
3791
|
f && Z.info(`ssr compiling ${d.route.pattern}`, {
|
|
@@ -3795,15 +3807,15 @@ import {
|
|
|
3795
3807
|
}
|
|
3796
3808
|
};
|
|
3797
3809
|
try {
|
|
3798
|
-
let l = await g("loadPage", async () => await n(r(t, "src", "pages", d.route.file))), v =
|
|
3810
|
+
let l = await g("loadPage", async () => await n(r(t, "src", "pages", d.route.file))), v = er(l, r("src", "pages", d.route.file)), y = vi(h, d.route.dirChain), b = v === "spa" && y.some((e) => e.hasLayout);
|
|
3799
3811
|
if (v !== "ssr" && v !== "isr" && !b) return o();
|
|
3800
3812
|
let x = {};
|
|
3801
3813
|
for (let [e, t] of Object.entries(i.headers ?? {})) typeof t == "string" ? x[e] = t : Array.isArray(t) && (x[e] = t.join(", "));
|
|
3802
|
-
let S = Pi(
|
|
3814
|
+
let S = Fi(Pi(s[0], { allowDevProxy: !0 }), x.cookie, { apiName: s[0]?.name }), C = new AbortController(), w = () => C.abort();
|
|
3803
3815
|
a.once("close", w);
|
|
3804
3816
|
let T = null, E = [], ee = {};
|
|
3805
3817
|
try {
|
|
3806
|
-
({chain: E, segmentLoaderData: ee} = await g("loadChain", () =>
|
|
3818
|
+
({chain: E, segmentLoaderData: ee} = await g("loadChain", () => yi({
|
|
3807
3819
|
entries: y,
|
|
3808
3820
|
loadLayout: (e) => n(r(t, "src", "pages", e.dir, "layout.tsx")),
|
|
3809
3821
|
loadError: (e) => n(r(t, "src", "pages", e.dir, "error.tsx")),
|
|
@@ -3840,7 +3852,7 @@ import {
|
|
|
3840
3852
|
cookies: D.parseCookieHeader(x.cookie),
|
|
3841
3853
|
headers: x,
|
|
3842
3854
|
url: c
|
|
3843
|
-
}, k = l.interactive ?? "full", A = b ?
|
|
3855
|
+
}, k = l.interactive ?? "full", A = b ? Ur({
|
|
3844
3856
|
helpers: D,
|
|
3845
3857
|
page: `src/pages/${d.route.file}`,
|
|
3846
3858
|
interactive: k,
|
|
@@ -3852,7 +3864,7 @@ import {
|
|
|
3852
3864
|
segmentLoaderData: ee,
|
|
3853
3865
|
requestContext: O
|
|
3854
3866
|
}
|
|
3855
|
-
}) : null, j = b ? null :
|
|
3867
|
+
}) : null, j = b ? null : Hr({
|
|
3856
3868
|
helpers: D,
|
|
3857
3869
|
page: `src/pages/${d.route.file}`,
|
|
3858
3870
|
pathname: u,
|
|
@@ -3876,16 +3888,16 @@ import {
|
|
|
3876
3888
|
});
|
|
3877
3889
|
let re = await g("readShell", ge), M = await g("transformShell", () => e.transformIndexHtml(c, re)), ie = ne.map((e) => `<link rel="stylesheet" href="${e}?direct" />`).join("\n "), N = O.cookies["voltro:locale"] ?? "en", ae = Date.now();
|
|
3878
3890
|
if (A) {
|
|
3879
|
-
let e = (e) =>
|
|
3891
|
+
let e = (e) => Gr({
|
|
3880
3892
|
helpers: D,
|
|
3881
3893
|
prepared: A,
|
|
3882
3894
|
meta: e,
|
|
3883
3895
|
interactive: k,
|
|
3884
3896
|
extra: [ie]
|
|
3885
3897
|
});
|
|
3886
|
-
if (A.hasDeferred)
|
|
3898
|
+
if (A.hasDeferred) ei({
|
|
3887
3899
|
res: a,
|
|
3888
|
-
shell:
|
|
3900
|
+
shell: Qr({
|
|
3889
3901
|
shell: M,
|
|
3890
3902
|
inlineModuleScriptsAsync: !0
|
|
3891
3903
|
}),
|
|
@@ -3907,7 +3919,7 @@ import {
|
|
|
3907
3919
|
}
|
|
3908
3920
|
});
|
|
3909
3921
|
else {
|
|
3910
|
-
let t =
|
|
3922
|
+
let t = Wr({
|
|
3911
3923
|
helpers: D,
|
|
3912
3924
|
prepared: A
|
|
3913
3925
|
}), n = M.replace("<div id=\"root\"></div>", `<div id="root">${t.body}</div>`).replace("</head>", ` ${e(t.meta)}\n </head>`).replace(/<html(\s+lang="[^"]*")?/i, `<html lang="${N}"`);
|
|
@@ -3928,9 +3940,9 @@ import {
|
|
|
3928
3940
|
segmentLoaderData: j.segmentLoaderData,
|
|
3929
3941
|
requestContext: O
|
|
3930
3942
|
};
|
|
3931
|
-
if (v === "ssr" && k === "full")
|
|
3943
|
+
if (v === "ssr" && k === "full") ei({
|
|
3932
3944
|
res: a,
|
|
3933
|
-
shell:
|
|
3945
|
+
shell: Qr({
|
|
3934
3946
|
shell: M,
|
|
3935
3947
|
inlineModuleScriptsAsync: !0
|
|
3936
3948
|
}),
|
|
@@ -3972,7 +3984,7 @@ import {
|
|
|
3972
3984
|
phases: m
|
|
3973
3985
|
});
|
|
3974
3986
|
} catch (e) {
|
|
3975
|
-
if (
|
|
3987
|
+
if (Vr(e)) {
|
|
3976
3988
|
Z.error("ssr-dev render refused", {
|
|
3977
3989
|
pathname: u,
|
|
3978
3990
|
pattern: d.route.pattern
|
|
@@ -3986,11 +3998,11 @@ import {
|
|
|
3986
3998
|
}
|
|
3987
3999
|
});
|
|
3988
4000
|
}
|
|
3989
|
-
}, L = Date.now(), ve = b.version ?? "?", ye = await
|
|
4001
|
+
}, L = Date.now(), ve = b.version ?? "?", ye = await ri(), be = r(t, "node_modules", "@voltro", "ui-shadcn"), R = y(r(be, "package.json")) ? be : null, xe = [], Se = await (async () => {
|
|
3990
4002
|
let e = [];
|
|
3991
4003
|
for (let n of s) {
|
|
3992
4004
|
if (!n.proxyTarget) continue;
|
|
3993
|
-
let i = await
|
|
4005
|
+
let i = await Ti(t, n.pkg);
|
|
3994
4006
|
if (i) try {
|
|
3995
4007
|
e.push(await S.readFile(r(i, "rpcGroup.generated.ts"), "utf8"));
|
|
3996
4008
|
} catch {}
|
|
@@ -4045,9 +4057,9 @@ import {
|
|
|
4045
4057
|
include: [...s.map((e) => `${e.pkg}/rpcGroup`), ...xe],
|
|
4046
4058
|
force: Se
|
|
4047
4059
|
},
|
|
4048
|
-
customLogger:
|
|
4060
|
+
customLogger: Gt(),
|
|
4049
4061
|
plugins: [
|
|
4050
|
-
|
|
4062
|
+
Jn(r(t, "src", "pages")),
|
|
4051
4063
|
x(),
|
|
4052
4064
|
C(),
|
|
4053
4065
|
ee,
|
|
@@ -4065,12 +4077,12 @@ import {
|
|
|
4065
4077
|
host: !0,
|
|
4066
4078
|
allowedHosts: n.allowedHosts === !0 || [...n.allowedHosts ?? []],
|
|
4067
4079
|
proxy: F,
|
|
4068
|
-
fs: { allow: [t, ...
|
|
4080
|
+
fs: { allow: [t, ...li(t)] }
|
|
4069
4081
|
},
|
|
4070
4082
|
appType: "spa",
|
|
4071
4083
|
cacheDir: r(w, ".vite"),
|
|
4072
4084
|
publicDir: r(t, "public")
|
|
4073
|
-
})).listen(),
|
|
4085
|
+
})).listen(), ti.info(`v${ve} ready in ${Date.now() - L}ms`, {
|
|
4074
4086
|
version: ve,
|
|
4075
4087
|
bootMs: Date.now() - L
|
|
4076
4088
|
}), Z.info(`listening on http://localhost:${u}`, {
|
|
@@ -4082,7 +4094,7 @@ import {
|
|
|
4082
4094
|
target: e.proxyTarget
|
|
4083
4095
|
}), Z.info(`proxy /_voltro/api/${e.name} → ${e.proxyTarget.replace(/^ws/, "http")}/_voltro/inspect`, { api: e.name }));
|
|
4084
4096
|
try {
|
|
4085
|
-
await
|
|
4097
|
+
await hr({
|
|
4086
4098
|
id: f,
|
|
4087
4099
|
name: d,
|
|
4088
4100
|
kind: "web",
|
|
@@ -4091,13 +4103,13 @@ import {
|
|
|
4091
4103
|
status: "live",
|
|
4092
4104
|
logFile: p.path
|
|
4093
4105
|
});
|
|
4094
|
-
let e =
|
|
4106
|
+
let e = kr(t);
|
|
4095
4107
|
if (e) {
|
|
4096
|
-
let t = await
|
|
4108
|
+
let t = await zr({ dashboardAppPath: e });
|
|
4097
4109
|
t.status === "launched" ? Z.info(`dashboard launched at http://localhost:${t.port}`, { port: t.port }) : t.status === "already-running" && Z.debug(`dashboard already running on :${t.port}`, { port: t.port });
|
|
4098
4110
|
}
|
|
4099
4111
|
setInterval(() => {
|
|
4100
|
-
|
|
4112
|
+
hr({
|
|
4101
4113
|
id: f,
|
|
4102
4114
|
name: d,
|
|
4103
4115
|
kind: "web",
|
|
@@ -4108,7 +4120,7 @@ import {
|
|
|
4108
4120
|
}).catch(() => {});
|
|
4109
4121
|
}, 1e4).unref();
|
|
4110
4122
|
let n = () => {
|
|
4111
|
-
|
|
4123
|
+
gr(f), p.dispose();
|
|
4112
4124
|
};
|
|
4113
4125
|
process.on("SIGINT", n), process.on("SIGTERM", n);
|
|
4114
4126
|
} catch (e) {
|
|
@@ -4120,24 +4132,24 @@ import {
|
|
|
4120
4132
|
url: `http://localhost:${u}`,
|
|
4121
4133
|
bootMs: Date.now() - L
|
|
4122
4134
|
}), new Promise(() => {});
|
|
4123
|
-
},
|
|
4135
|
+
}, Vi = async (e) => {
|
|
4124
4136
|
process.env.NODE_ENV || (process.env.NODE_ENV = "production");
|
|
4125
|
-
let t = await
|
|
4137
|
+
let t = await zi(e);
|
|
4126
4138
|
if (!t) return {
|
|
4127
4139
|
ran: !1,
|
|
4128
4140
|
exitCode: 0
|
|
4129
4141
|
};
|
|
4130
4142
|
let n = Date.now(), i = Z.child("serve");
|
|
4131
4143
|
i.info("booting voltro serve (preview)", { app: t.name ?? "(unnamed)" });
|
|
4132
|
-
let a = await
|
|
4144
|
+
let a = await Ai(e, t);
|
|
4133
4145
|
for (let e of a) i.info("api wired", {
|
|
4134
4146
|
name: e.name,
|
|
4135
4147
|
pkg: e.pkg
|
|
4136
4148
|
});
|
|
4137
|
-
await
|
|
4149
|
+
await Ii(e, t, a);
|
|
4138
4150
|
{
|
|
4139
4151
|
let { pages: t } = await $(r(e, "src", "pages"));
|
|
4140
|
-
await
|
|
4152
|
+
await an({
|
|
4141
4153
|
appRoot: e,
|
|
4142
4154
|
pages: t
|
|
4143
4155
|
});
|
|
@@ -4147,11 +4159,11 @@ import {
|
|
|
4147
4159
|
root: l,
|
|
4148
4160
|
envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
|
|
4149
4161
|
plugins: [c()],
|
|
4150
|
-
customLogger:
|
|
4162
|
+
customLogger: Gt(),
|
|
4151
4163
|
resolve: { dedupe: ["react", "react-dom"] },
|
|
4152
4164
|
build: {
|
|
4153
4165
|
outDir: "dist",
|
|
4154
|
-
rollupOptions: { output: { manualChunks:
|
|
4166
|
+
rollupOptions: { output: { manualChunks: fi } }
|
|
4155
4167
|
},
|
|
4156
4168
|
publicDir: r(e, "public")
|
|
4157
4169
|
});
|
|
@@ -4171,14 +4183,14 @@ import {
|
|
|
4171
4183
|
extras: f,
|
|
4172
4184
|
bootMs: Date.now() - n
|
|
4173
4185
|
}), new Promise(() => {});
|
|
4174
|
-
},
|
|
4186
|
+
}, Hi = 5e3, Ui = 6e4, Wi = (e, t) => {
|
|
4175
4187
|
if (e.length === 0) return 0;
|
|
4176
4188
|
if (e.length === 1) return e[0];
|
|
4177
4189
|
let n = t * (e.length - 1), r = Math.floor(n), i = Math.ceil(n);
|
|
4178
4190
|
if (r === i) return e[r];
|
|
4179
4191
|
let a = n - r;
|
|
4180
4192
|
return e[r] * (1 - a) + e[i] * a;
|
|
4181
|
-
},
|
|
4193
|
+
}, Gi = (e) => {
|
|
4182
4194
|
if (e.length === 0) return {
|
|
4183
4195
|
p50: 0,
|
|
4184
4196
|
p95: 0,
|
|
@@ -4190,15 +4202,15 @@ import {
|
|
|
4190
4202
|
let t = e.slice().sort((e, t) => e - t), n = 0;
|
|
4191
4203
|
for (let e of t) n += e;
|
|
4192
4204
|
return {
|
|
4193
|
-
p50:
|
|
4194
|
-
p95:
|
|
4195
|
-
p99:
|
|
4205
|
+
p50: Wi(t, .5),
|
|
4206
|
+
p95: Wi(t, .95),
|
|
4207
|
+
p99: Wi(t, .99),
|
|
4196
4208
|
mean: n / t.length,
|
|
4197
4209
|
min: t[0],
|
|
4198
4210
|
max: t[t.length - 1]
|
|
4199
4211
|
};
|
|
4200
|
-
},
|
|
4201
|
-
let t = e.maxSamples ??
|
|
4212
|
+
}, Ki = (e = {}) => {
|
|
4213
|
+
let t = e.maxSamples ?? Hi, n = e.defaultWindowMs ?? Ui, r = [];
|
|
4202
4214
|
return {
|
|
4203
4215
|
record(e) {
|
|
4204
4216
|
A(e), r.push({
|
|
@@ -4227,7 +4239,7 @@ import {
|
|
|
4227
4239
|
tag: e.tag,
|
|
4228
4240
|
count: e.samples.length,
|
|
4229
4241
|
errorCount: n,
|
|
4230
|
-
latencyMs:
|
|
4242
|
+
latencyMs: Gi(t)
|
|
4231
4243
|
});
|
|
4232
4244
|
}
|
|
4233
4245
|
return c.sort((e, t) => t.count - e.count), {
|
|
@@ -4240,4 +4252,4 @@ import {
|
|
|
4240
4252
|
};
|
|
4241
4253
|
};
|
|
4242
4254
|
//#endregion
|
|
4243
|
-
export {
|
|
4255
|
+
export { Ft as $, gr as A, $e as At, wn as B, zr as C, at as Ct, Tr as D, it as Dt, wr as E, rt as Et, Qn as F, Ve as Ft, ln as G, hn as H, er as I, He as It, Kt as J, an as K, Fn as L, ye as Lt, Yn as M, Xe as Mt, tr as N, Ke as Nt, _r as O, tt as Ot, Xn as P, We as Pt, Ot as Q, An as R, be as Rt, Or as S, lt as St, Cr as T, st as Tt, cn as U, _n as V, sn as W, vt as X, V as Y, U as Z, Hr as _, H as _t, yi as a, yt as at, Gr as b, ft as bt, Ai as c, Pt as ct, fi as d, Mt as dt, Ct as et, $ as f, At as ft, Vr as g, G as gt, ei as h, Et as ht, Fi as i, wt as it, hr as j, Ze as jt, mr as k, nt as kt, Bi as l, Nt as lt, Qr as m, Tt as mt, pi as n, St as nt, vi as o, Dt as ot, Ii as p, kt as pt, Jt as q, Pi as r, bt as rt, zi as s, xt as st, Ki as t, It as tt, Vi as u, jt as ut, Ur as v, mt as vt, kr as w, ot as wt, Ar as x, ut as xt, Wr as y, pt as yt, En as z };
|