@voltro/cli 0.11.3 → 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 +173 -0
- package/THIRD-PARTY-NOTICES.md +4 -4
- package/dist/apiBuild-D9MtlD02.js +2 -0
- package/dist/{apiBuild-zFDv0u8y.js → apiBuild-DHHuiwXF.js} +4 -4
- package/dist/bin.js +13 -6
- package/dist/{commands-BDGYrBhK.js → commands-BwbMqR-1.js} +1982 -1854
- package/dist/dev-BsBsIv93.js +2 -0
- package/dist/{dev-CGt0PP1f.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-SRtv8KDy.js → inspectMetrics-D4EJ8LTi.js} +331 -323
- package/dist/{serveCommand-p6e5Ahgx.js → serveCommand-ARqSs73o.js} +397 -350
- package/dist/serveEntry.js +3 -3
- package/dist/{start-Crl39M38.js → start-DyJE6w1R.js} +281 -273
- package/dist/startEntry.js +2 -2
- package/package.json +17 -17
- package/templates/agent-docs/_manifest.json +1 -1
- package/templates/agent-docs/cli.md +86 -2
- package/templates/agent-docs/data.md +104 -1
- package/templates/agent-docs/database/misc.md +32 -0
- package/templates/agent-docs/database/querying.md +14 -1
- package/templates/agent-docs/internationalization.md +3 -8
- package/templates/agent-docs/reference.md +35 -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-BmPdmhgi.js +0 -2
- package/dist/dev-D_PGP9Kx.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,7 +2756,7 @@ 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,
|
|
@@ -2756,7 +2764,7 @@ import {
|
|
|
2756
2764
|
...t.serverUrl ? { serverOrigin: t.serverUrl } : {},
|
|
2757
2765
|
...t.headers ? { headers: t.headers } : {},
|
|
2758
2766
|
...t.authHeaders ? { hasAuthHeaders: !0 } : {}
|
|
2759
|
-
}),
|
|
2767
|
+
}), Oi = (e, t, n) => {
|
|
2760
2768
|
let r = t.transport?.wsPath ?? n.wsPath;
|
|
2761
2769
|
return {
|
|
2762
2770
|
name: e,
|
|
@@ -2768,7 +2776,7 @@ import {
|
|
|
2768
2776
|
...t.headers ? { headers: t.headers } : {},
|
|
2769
2777
|
...t.authHeaders ? { hasAuthHeaders: !0 } : {}
|
|
2770
2778
|
};
|
|
2771
|
-
},
|
|
2779
|
+
}, ki = (e) => {
|
|
2772
2780
|
let t = /* @__PURE__ */ new Map();
|
|
2773
2781
|
for (let n of e) {
|
|
2774
2782
|
if (n.proxyTarget === void 0) continue;
|
|
@@ -2776,43 +2784,43 @@ import {
|
|
|
2776
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>.`);
|
|
2777
2785
|
t.set(n.browserWsUrl, n.name);
|
|
2778
2786
|
}
|
|
2779
|
-
},
|
|
2787
|
+
}, Ai = async (e, t) => {
|
|
2780
2788
|
let n = Object.entries(t.apis ?? {}), r = [];
|
|
2781
2789
|
for (let [t, i] of n) {
|
|
2782
2790
|
if (i.url) {
|
|
2783
|
-
r.push(
|
|
2791
|
+
r.push(Di(t, i));
|
|
2784
2792
|
continue;
|
|
2785
2793
|
}
|
|
2786
|
-
let n = await
|
|
2794
|
+
let n = await Ti(e, i.package);
|
|
2787
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.`);
|
|
2788
|
-
r.push(
|
|
2796
|
+
r.push(Oi(t, i, await Ei(n)));
|
|
2789
2797
|
}
|
|
2790
|
-
return
|
|
2791
|
-
},
|
|
2798
|
+
return ki(r), r;
|
|
2799
|
+
}, ji = (e) => {
|
|
2792
2800
|
if (!(!/^wss?:\/\//.test(e) && !/^https?:\/\//.test(e))) try {
|
|
2793
2801
|
let t = new URL(e);
|
|
2794
2802
|
return t.protocol = t.protocol === "wss:" || t.protocol === "https:" ? "https:" : "http:", `${t.protocol}//${t.host}`;
|
|
2795
2803
|
} catch {
|
|
2796
2804
|
return;
|
|
2797
2805
|
}
|
|
2798
|
-
},
|
|
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) => {
|
|
2799
2807
|
if (!e) return;
|
|
2800
|
-
let n =
|
|
2808
|
+
let n = Ni(e.name) ?? e.serverOrigin;
|
|
2801
2809
|
if (n) {
|
|
2802
|
-
let e =
|
|
2810
|
+
let e = ji(n);
|
|
2803
2811
|
if (e) return e;
|
|
2804
2812
|
}
|
|
2805
2813
|
if (t?.allowDevProxy && e.proxyTarget) {
|
|
2806
|
-
let t =
|
|
2814
|
+
let t = ji(e.proxyTarget);
|
|
2807
2815
|
if (t) return t;
|
|
2808
2816
|
}
|
|
2809
|
-
if (!e.proxyTarget && /^wss?:\/\//.test(e.browserWsUrl)) return
|
|
2810
|
-
},
|
|
2817
|
+
if (!e.proxyTarget && /^wss?:\/\//.test(e.browserWsUrl)) return ji(e.browserWsUrl);
|
|
2818
|
+
}, Fi = (e, t, n) => {
|
|
2811
2819
|
if (!e) {
|
|
2812
2820
|
if (n?.apiName === void 0) return;
|
|
2813
2821
|
let e = n.apiName;
|
|
2814
2822
|
return async () => {
|
|
2815
|
-
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.`);
|
|
2816
2824
|
};
|
|
2817
2825
|
}
|
|
2818
2826
|
return async (r, i) => {
|
|
@@ -2834,7 +2842,7 @@ import {
|
|
|
2834
2842
|
});
|
|
2835
2843
|
} catch (t) {
|
|
2836
2844
|
let i = t?.cause?.code ?? String(t?.message ?? t);
|
|
2837
|
-
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 });
|
|
2838
2846
|
}
|
|
2839
2847
|
if (!o.ok) throw Error(`[loader.query] ${r}: HTTP ${o.status} ${await o.text()}`);
|
|
2840
2848
|
let s = await o.json();
|
|
@@ -2852,8 +2860,8 @@ import {
|
|
|
2852
2860
|
}
|
|
2853
2861
|
if (u) return l;
|
|
2854
2862
|
};
|
|
2855
|
-
},
|
|
2856
|
-
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" ? [
|
|
2857
2865
|
" <script>",
|
|
2858
2866
|
" (function () {",
|
|
2859
2867
|
" var root = document.documentElement",
|
|
@@ -2892,7 +2900,7 @@ import {
|
|
|
2892
2900
|
"</html>",
|
|
2893
2901
|
""
|
|
2894
2902
|
].join("\n"), u = r(e, "src", "pages"), { pages: d, dirs: f } = await $(u);
|
|
2895
|
-
await
|
|
2903
|
+
await ir(u, d);
|
|
2896
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'`);
|
|
2897
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"));
|
|
2898
2906
|
let g = n.map((e) => {
|
|
@@ -2906,13 +2914,13 @@ import {
|
|
|
2906
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'`);
|
|
2907
2915
|
}
|
|
2908
2916
|
let r = d.map((e) => {
|
|
2909
|
-
let t =
|
|
2917
|
+
let t = vi(f, e.dirChain).map((e) => {
|
|
2910
2918
|
let t = [`id: ${JSON.stringify(e.dir || "/")}`], n = JSON.stringify(e.dir);
|
|
2911
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(", ")} }`;
|
|
2912
2920
|
}).join(",\n");
|
|
2913
2921
|
return ` makePageRoute(${JSON.stringify(e.pattern)}, ${t.length > 0 ? `[\n${t},\n ]` : "undefined"}),`;
|
|
2914
2922
|
}), i = f.filter((e) => e.hasNotFound).map((e) => {
|
|
2915
|
-
let t =
|
|
2923
|
+
let t = bi(e.chain), n = vi(f, e.chain).map((e) => {
|
|
2916
2924
|
let t = [`id: ${JSON.stringify(e.dir || "/")}`], n = JSON.stringify(e.dir);
|
|
2917
2925
|
return e.hasLayout && t.push(`Layout: refs.layouts[${n}]`), e.hasError && t.push(`Error: refs.errors[${n}]`), ` { ${t.join(", ")} }`;
|
|
2918
2926
|
}).join(",\n"), r = n.length > 0 ? `\n chain: [\n${n},\n ],` : "";
|
|
@@ -3151,14 +3159,14 @@ import {
|
|
|
3151
3159
|
"// resolved apis map. Side-effect only — no local component definitions —",
|
|
3152
3160
|
"// so downstream invalidations (user page edits) terminate at app.tsx.",
|
|
3153
3161
|
"",
|
|
3154
|
-
...
|
|
3162
|
+
...ci(t),
|
|
3155
3163
|
"import { mount } from '@voltro/web'",
|
|
3156
3164
|
...h,
|
|
3157
3165
|
"import { App } from './app'",
|
|
3158
3166
|
"import { preloadCurrentRoute } from './routeTable'",
|
|
3159
|
-
...ai(t),
|
|
3160
|
-
...ri(t, s),
|
|
3161
3167
|
...oi(t),
|
|
3168
|
+
...ii(t, s),
|
|
3169
|
+
...si(t),
|
|
3162
3170
|
"",
|
|
3163
3171
|
"// Preload the current route's page chunk BEFORE hydration so the first",
|
|
3164
3172
|
"// client render matches the SSG/SSR-prerendered HTML. Without it, a lazy",
|
|
@@ -3175,10 +3183,10 @@ import {
|
|
|
3175
3183
|
" apis: {",
|
|
3176
3184
|
...g,
|
|
3177
3185
|
" },",
|
|
3178
|
-
...
|
|
3186
|
+
...ai(t, s),
|
|
3179
3187
|
"})",
|
|
3180
3188
|
"",
|
|
3181
|
-
|
|
3189
|
+
xi
|
|
3182
3190
|
].join("\n");
|
|
3183
3191
|
} else _ = "", v = "", b = [
|
|
3184
3192
|
"// GENERATED BY `voltro dev` — do not edit; will be overwritten on next boot.",
|
|
@@ -3186,22 +3194,22 @@ import {
|
|
|
3186
3194
|
"// and calls mount(). Side-effect only, no component definitions, so the",
|
|
3187
3195
|
"// user's component file remains the Fast Refresh boundary.",
|
|
3188
3196
|
"",
|
|
3189
|
-
...
|
|
3197
|
+
...ci(t),
|
|
3190
3198
|
"import { mount } from '@voltro/web'",
|
|
3191
3199
|
...h,
|
|
3192
3200
|
"import App from '../src/App'",
|
|
3193
|
-
...ai(t),
|
|
3194
|
-
...ri(t, s),
|
|
3195
3201
|
...oi(t),
|
|
3202
|
+
...ii(t, s),
|
|
3203
|
+
...si(t),
|
|
3196
3204
|
"",
|
|
3197
3205
|
"mount(App, {",
|
|
3198
3206
|
" apis: {",
|
|
3199
3207
|
...g,
|
|
3200
3208
|
" },",
|
|
3201
|
-
...
|
|
3209
|
+
...ai(t, s),
|
|
3202
3210
|
"})",
|
|
3203
3211
|
"",
|
|
3204
|
-
|
|
3212
|
+
xi
|
|
3205
3213
|
].join("\n");
|
|
3206
3214
|
let x = r(e, ".framework");
|
|
3207
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 }));
|
|
@@ -3212,7 +3220,7 @@ import {
|
|
|
3212
3220
|
let T = ["/.framework/"], E = w.split("\n").filter((e) => e.trim() !== "");
|
|
3213
3221
|
for (let e of T) E.includes(e) || E.push(e);
|
|
3214
3222
|
await S.writeFile(C, E.join("\n") + "\n", "utf8");
|
|
3215
|
-
},
|
|
3223
|
+
}, Li = async (e, n) => {
|
|
3216
3224
|
try {
|
|
3217
3225
|
let i = r(t(e), "project.json");
|
|
3218
3226
|
if (!y(i)) return;
|
|
@@ -3225,24 +3233,24 @@ import {
|
|
|
3225
3233
|
projectJson: i
|
|
3226
3234
|
});
|
|
3227
3235
|
} catch {}
|
|
3228
|
-
},
|
|
3229
|
-
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");
|
|
3230
3238
|
try {
|
|
3231
3239
|
let e = (await import(s(n).href)).default;
|
|
3232
3240
|
return typeof e == "object" && e && "type" in e && e.type === "web" ? e : null;
|
|
3233
3241
|
} catch {
|
|
3234
3242
|
return null;
|
|
3235
3243
|
}
|
|
3236
|
-
},
|
|
3237
|
-
let n = await
|
|
3244
|
+
}, Bi = async (t) => {
|
|
3245
|
+
let n = await zi(t);
|
|
3238
3246
|
if (!n) return {
|
|
3239
3247
|
ran: !1,
|
|
3240
3248
|
exitCode: 0
|
|
3241
3249
|
};
|
|
3242
|
-
|
|
3243
|
-
let o =
|
|
3244
|
-
|
|
3245
|
-
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);
|
|
3246
3254
|
for (let e of s) Z.info("api wired", {
|
|
3247
3255
|
name: e.name,
|
|
3248
3256
|
pkg: e.pkg,
|
|
@@ -3261,13 +3269,13 @@ import {
|
|
|
3261
3269
|
log: Z,
|
|
3262
3270
|
generateTypes: !0
|
|
3263
3271
|
}), l = c.publicValues;
|
|
3264
|
-
await
|
|
3272
|
+
await Ii(t, n, s, l), Z.debug("generated framework entry files", { files: [
|
|
3265
3273
|
"index.html",
|
|
3266
3274
|
".framework/main.tsx",
|
|
3267
3275
|
...n.env ? [".framework/env.public.ts"] : []
|
|
3268
3276
|
] });
|
|
3269
|
-
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 =
|
|
3270
|
-
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({
|
|
3271
3279
|
id: f,
|
|
3272
3280
|
name: d,
|
|
3273
3281
|
kind: "web",
|
|
@@ -3275,14 +3283,14 @@ import {
|
|
|
3275
3283
|
pid: process.pid,
|
|
3276
3284
|
status: "booting",
|
|
3277
3285
|
logFile: p.path
|
|
3278
|
-
}).catch(() => {}), await
|
|
3286
|
+
}).catch(() => {}), await Li(t, u);
|
|
3279
3287
|
let { pages: m, dirs: h } = await $(r(t, "src", "pages")), g = h.map((e) => ({
|
|
3280
3288
|
dir: e.dir,
|
|
3281
3289
|
hasLayout: e.hasLayout,
|
|
3282
3290
|
hasError: e.hasError,
|
|
3283
3291
|
hasPending: e.hasPending,
|
|
3284
3292
|
hasNotFound: e.hasNotFound
|
|
3285
|
-
})), v = await
|
|
3293
|
+
})), v = await an({
|
|
3286
3294
|
appRoot: t,
|
|
3287
3295
|
pages: m
|
|
3288
3296
|
});
|
|
@@ -3311,7 +3319,7 @@ import {
|
|
|
3311
3319
|
...i.devDependencies
|
|
3312
3320
|
});
|
|
3313
3321
|
await Promise.all(a.map(async (n) => {
|
|
3314
|
-
let i = await
|
|
3322
|
+
let i = await Ti(t, n);
|
|
3315
3323
|
if (!i) return;
|
|
3316
3324
|
let a = r(i, "src");
|
|
3317
3325
|
try {
|
|
@@ -3323,9 +3331,9 @@ import {
|
|
|
3323
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) => {
|
|
3324
3332
|
try {
|
|
3325
3333
|
let r = Date.now();
|
|
3326
|
-
await
|
|
3334
|
+
await Ii(t, n, s, l);
|
|
3327
3335
|
let { pages: i } = await $(D);
|
|
3328
|
-
await
|
|
3336
|
+
await an({
|
|
3329
3337
|
appRoot: t,
|
|
3330
3338
|
pages: i
|
|
3331
3339
|
}), Z.info("page tree regenerated", {
|
|
@@ -3417,7 +3425,7 @@ import {
|
|
|
3417
3425
|
}
|
|
3418
3426
|
try {
|
|
3419
3427
|
let r = Date.now();
|
|
3420
|
-
await
|
|
3428
|
+
await Ii(t, e, await Ai(t, e)), M = e, n.ws && n.ws.send({
|
|
3421
3429
|
type: "full-reload",
|
|
3422
3430
|
path: "*"
|
|
3423
3431
|
}), Z.info("app.config.ts soft-regen", {
|
|
@@ -3457,7 +3465,7 @@ import {
|
|
|
3457
3465
|
let n = /* @__PURE__ */ new Map();
|
|
3458
3466
|
for (let i of s) {
|
|
3459
3467
|
if (!i.proxyTarget) continue;
|
|
3460
|
-
let a = await
|
|
3468
|
+
let a = await Ti(t, i.pkg);
|
|
3461
3469
|
if (!a) continue;
|
|
3462
3470
|
let o = r(a, "rpcGroup.generated.ts");
|
|
3463
3471
|
try {
|
|
@@ -3543,7 +3551,7 @@ import {
|
|
|
3543
3551
|
pattern: i.pattern,
|
|
3544
3552
|
file: i.file,
|
|
3545
3553
|
dirChain: i.dirChain,
|
|
3546
|
-
renderMode:
|
|
3554
|
+
renderMode: er(a, r("src", "pages", i.file)),
|
|
3547
3555
|
interactive: a.interactive ?? "full",
|
|
3548
3556
|
tenantAware: a.tenantAware === !0,
|
|
3549
3557
|
revalidateMs: it(a.revalidate),
|
|
@@ -3652,7 +3660,7 @@ import {
|
|
|
3652
3660
|
for (let [t, n] of Object.entries(e.headers ?? {})) n !== void 0 && (s[String(t).toLowerCase()] = Array.isArray(n) ? n.join(", ") : String(n));
|
|
3653
3661
|
let c = i.split("?")[0];
|
|
3654
3662
|
if (e.method === "GET" && (c === "/_voltro/inspect/logs" || i.startsWith("/_voltro/inspect/logs?"))) {
|
|
3655
|
-
let e = G(s.origin), n =
|
|
3663
|
+
let e = G(s.origin), n = An(i, hn(), s);
|
|
3656
3664
|
t.statusCode = n.status, t.setHeader("content-type", n.contentType);
|
|
3657
3665
|
for (let [n, r] of Object.entries(e)) t.setHeader(n, r);
|
|
3658
3666
|
t.end(n.body);
|
|
@@ -3670,7 +3678,7 @@ import {
|
|
|
3670
3678
|
e.setEncoding("utf-8"), e.on("data", (e) => {
|
|
3671
3679
|
r += e;
|
|
3672
3680
|
}), e.on("end", () => {
|
|
3673
|
-
let e =
|
|
3681
|
+
let e = wn(r, o);
|
|
3674
3682
|
t.statusCode = e.status, t.setHeader("content-type", e.contentType);
|
|
3675
3683
|
for (let [e, r] of Object.entries(n)) t.setHeader(e, r);
|
|
3676
3684
|
t.end(e.body);
|
|
@@ -3701,14 +3709,14 @@ import {
|
|
|
3701
3709
|
for (let [e, r] of Object.entries(n)) t.setHeader(e, r);
|
|
3702
3710
|
t.flushHeaders?.(), t.write("retry: 5000\n\n");
|
|
3703
3711
|
let a = i.indexOf("?");
|
|
3704
|
-
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));
|
|
3705
3713
|
let c = o.subscribe((e) => {
|
|
3706
3714
|
try {
|
|
3707
|
-
t.write(
|
|
3715
|
+
t.write(cn(e));
|
|
3708
3716
|
} catch {}
|
|
3709
3717
|
}), l = setInterval(() => {
|
|
3710
3718
|
try {
|
|
3711
|
-
t.write(
|
|
3719
|
+
t.write(ln());
|
|
3712
3720
|
} catch {}
|
|
3713
3721
|
}, 15e3), u = () => {
|
|
3714
3722
|
clearInterval(l), c();
|
|
@@ -3717,11 +3725,11 @@ import {
|
|
|
3717
3725
|
return;
|
|
3718
3726
|
}
|
|
3719
3727
|
try {
|
|
3720
|
-
let o =
|
|
3728
|
+
let o = yt(i, {
|
|
3721
3729
|
kind: "web",
|
|
3722
3730
|
meta: {
|
|
3723
3731
|
name: n.name ?? "(unnamed)",
|
|
3724
|
-
voltroVersion:
|
|
3732
|
+
voltroVersion: ni,
|
|
3725
3733
|
port: u,
|
|
3726
3734
|
mode: "dev",
|
|
3727
3735
|
apis: Object.entries(n.apis ?? {}).map(([e, t]) => {
|
|
@@ -3756,14 +3764,14 @@ import {
|
|
|
3756
3764
|
e.middlewares.use(async (e, t, n) => {
|
|
3757
3765
|
if (!(e.url ?? "").startsWith("/api/dashboard/registry")) return n();
|
|
3758
3766
|
try {
|
|
3759
|
-
let e = await
|
|
3767
|
+
let e = await mr();
|
|
3760
3768
|
t.statusCode = 200, t.setHeader("content-type", "application/json; charset=utf-8"), t.end(JSON.stringify(e));
|
|
3761
3769
|
} catch (e) {
|
|
3762
3770
|
t.statusCode = 500, t.setHeader("content-type", "text/plain"), t.end(`registry read error: ${e.message}`);
|
|
3763
3771
|
}
|
|
3764
3772
|
});
|
|
3765
3773
|
}
|
|
3766
|
-
} : null, ue =
|
|
3774
|
+
} : null, ue = Ci(m), de = /* @__PURE__ */ new Set(), I = Kt(), pe = Jt({
|
|
3767
3775
|
limit: I,
|
|
3768
3776
|
onColdStart: (e) => Z.debug("ssr cold-compile start", { id: e }),
|
|
3769
3777
|
onColdEnd: (e) => Z.debug("ssr cold-compile end", { id: e })
|
|
@@ -3777,7 +3785,7 @@ import {
|
|
|
3777
3785
|
if (i.method !== "GET" && i.method !== "HEAD") return o();
|
|
3778
3786
|
let c = i.url ?? "/", l = c.indexOf("?"), u = (l === -1 ? c : c.slice(0, l)) || "/";
|
|
3779
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();
|
|
3780
|
-
let d =
|
|
3788
|
+
let d = wi(u, ue);
|
|
3781
3789
|
if (!d) return o();
|
|
3782
3790
|
let f = !de.has(d.route.pattern), p = Date.now();
|
|
3783
3791
|
f && Z.info(`ssr compiling ${d.route.pattern}`, {
|
|
@@ -3799,15 +3807,15 @@ import {
|
|
|
3799
3807
|
}
|
|
3800
3808
|
};
|
|
3801
3809
|
try {
|
|
3802
|
-
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);
|
|
3803
3811
|
if (v !== "ssr" && v !== "isr" && !b) return o();
|
|
3804
3812
|
let x = {};
|
|
3805
3813
|
for (let [e, t] of Object.entries(i.headers ?? {})) typeof t == "string" ? x[e] = t : Array.isArray(t) && (x[e] = t.join(", "));
|
|
3806
|
-
let S = Pi(
|
|
3814
|
+
let S = Fi(Pi(s[0], { allowDevProxy: !0 }), x.cookie, { apiName: s[0]?.name }), C = new AbortController(), w = () => C.abort();
|
|
3807
3815
|
a.once("close", w);
|
|
3808
3816
|
let T = null, E = [], ee = {};
|
|
3809
3817
|
try {
|
|
3810
|
-
({chain: E, segmentLoaderData: ee} = await g("loadChain", () =>
|
|
3818
|
+
({chain: E, segmentLoaderData: ee} = await g("loadChain", () => yi({
|
|
3811
3819
|
entries: y,
|
|
3812
3820
|
loadLayout: (e) => n(r(t, "src", "pages", e.dir, "layout.tsx")),
|
|
3813
3821
|
loadError: (e) => n(r(t, "src", "pages", e.dir, "error.tsx")),
|
|
@@ -3844,7 +3852,7 @@ import {
|
|
|
3844
3852
|
cookies: D.parseCookieHeader(x.cookie),
|
|
3845
3853
|
headers: x,
|
|
3846
3854
|
url: c
|
|
3847
|
-
}, k = l.interactive ?? "full", A = b ?
|
|
3855
|
+
}, k = l.interactive ?? "full", A = b ? Ur({
|
|
3848
3856
|
helpers: D,
|
|
3849
3857
|
page: `src/pages/${d.route.file}`,
|
|
3850
3858
|
interactive: k,
|
|
@@ -3856,7 +3864,7 @@ import {
|
|
|
3856
3864
|
segmentLoaderData: ee,
|
|
3857
3865
|
requestContext: O
|
|
3858
3866
|
}
|
|
3859
|
-
}) : null, j = b ? null :
|
|
3867
|
+
}) : null, j = b ? null : Hr({
|
|
3860
3868
|
helpers: D,
|
|
3861
3869
|
page: `src/pages/${d.route.file}`,
|
|
3862
3870
|
pathname: u,
|
|
@@ -3880,16 +3888,16 @@ import {
|
|
|
3880
3888
|
});
|
|
3881
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();
|
|
3882
3890
|
if (A) {
|
|
3883
|
-
let e = (e) =>
|
|
3891
|
+
let e = (e) => Gr({
|
|
3884
3892
|
helpers: D,
|
|
3885
3893
|
prepared: A,
|
|
3886
3894
|
meta: e,
|
|
3887
3895
|
interactive: k,
|
|
3888
3896
|
extra: [ie]
|
|
3889
3897
|
});
|
|
3890
|
-
if (A.hasDeferred)
|
|
3898
|
+
if (A.hasDeferred) ei({
|
|
3891
3899
|
res: a,
|
|
3892
|
-
shell:
|
|
3900
|
+
shell: Qr({
|
|
3893
3901
|
shell: M,
|
|
3894
3902
|
inlineModuleScriptsAsync: !0
|
|
3895
3903
|
}),
|
|
@@ -3911,7 +3919,7 @@ import {
|
|
|
3911
3919
|
}
|
|
3912
3920
|
});
|
|
3913
3921
|
else {
|
|
3914
|
-
let t =
|
|
3922
|
+
let t = Wr({
|
|
3915
3923
|
helpers: D,
|
|
3916
3924
|
prepared: A
|
|
3917
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}"`);
|
|
@@ -3932,9 +3940,9 @@ import {
|
|
|
3932
3940
|
segmentLoaderData: j.segmentLoaderData,
|
|
3933
3941
|
requestContext: O
|
|
3934
3942
|
};
|
|
3935
|
-
if (v === "ssr" && k === "full")
|
|
3943
|
+
if (v === "ssr" && k === "full") ei({
|
|
3936
3944
|
res: a,
|
|
3937
|
-
shell:
|
|
3945
|
+
shell: Qr({
|
|
3938
3946
|
shell: M,
|
|
3939
3947
|
inlineModuleScriptsAsync: !0
|
|
3940
3948
|
}),
|
|
@@ -3976,7 +3984,7 @@ import {
|
|
|
3976
3984
|
phases: m
|
|
3977
3985
|
});
|
|
3978
3986
|
} catch (e) {
|
|
3979
|
-
if (
|
|
3987
|
+
if (Vr(e)) {
|
|
3980
3988
|
Z.error("ssr-dev render refused", {
|
|
3981
3989
|
pathname: u,
|
|
3982
3990
|
pattern: d.route.pattern
|
|
@@ -3990,11 +3998,11 @@ import {
|
|
|
3990
3998
|
}
|
|
3991
3999
|
});
|
|
3992
4000
|
}
|
|
3993
|
-
}, 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 () => {
|
|
3994
4002
|
let e = [];
|
|
3995
4003
|
for (let n of s) {
|
|
3996
4004
|
if (!n.proxyTarget) continue;
|
|
3997
|
-
let i = await
|
|
4005
|
+
let i = await Ti(t, n.pkg);
|
|
3998
4006
|
if (i) try {
|
|
3999
4007
|
e.push(await S.readFile(r(i, "rpcGroup.generated.ts"), "utf8"));
|
|
4000
4008
|
} catch {}
|
|
@@ -4049,9 +4057,9 @@ import {
|
|
|
4049
4057
|
include: [...s.map((e) => `${e.pkg}/rpcGroup`), ...xe],
|
|
4050
4058
|
force: Se
|
|
4051
4059
|
},
|
|
4052
|
-
customLogger:
|
|
4060
|
+
customLogger: Gt(),
|
|
4053
4061
|
plugins: [
|
|
4054
|
-
|
|
4062
|
+
Jn(r(t, "src", "pages")),
|
|
4055
4063
|
x(),
|
|
4056
4064
|
C(),
|
|
4057
4065
|
ee,
|
|
@@ -4069,12 +4077,12 @@ import {
|
|
|
4069
4077
|
host: !0,
|
|
4070
4078
|
allowedHosts: n.allowedHosts === !0 || [...n.allowedHosts ?? []],
|
|
4071
4079
|
proxy: F,
|
|
4072
|
-
fs: { allow: [t, ...
|
|
4080
|
+
fs: { allow: [t, ...li(t)] }
|
|
4073
4081
|
},
|
|
4074
4082
|
appType: "spa",
|
|
4075
4083
|
cacheDir: r(w, ".vite"),
|
|
4076
4084
|
publicDir: r(t, "public")
|
|
4077
|
-
})).listen(),
|
|
4085
|
+
})).listen(), ti.info(`v${ve} ready in ${Date.now() - L}ms`, {
|
|
4078
4086
|
version: ve,
|
|
4079
4087
|
bootMs: Date.now() - L
|
|
4080
4088
|
}), Z.info(`listening on http://localhost:${u}`, {
|
|
@@ -4086,7 +4094,7 @@ import {
|
|
|
4086
4094
|
target: e.proxyTarget
|
|
4087
4095
|
}), Z.info(`proxy /_voltro/api/${e.name} → ${e.proxyTarget.replace(/^ws/, "http")}/_voltro/inspect`, { api: e.name }));
|
|
4088
4096
|
try {
|
|
4089
|
-
await
|
|
4097
|
+
await hr({
|
|
4090
4098
|
id: f,
|
|
4091
4099
|
name: d,
|
|
4092
4100
|
kind: "web",
|
|
@@ -4095,13 +4103,13 @@ import {
|
|
|
4095
4103
|
status: "live",
|
|
4096
4104
|
logFile: p.path
|
|
4097
4105
|
});
|
|
4098
|
-
let e =
|
|
4106
|
+
let e = kr(t);
|
|
4099
4107
|
if (e) {
|
|
4100
|
-
let t = await
|
|
4108
|
+
let t = await zr({ dashboardAppPath: e });
|
|
4101
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 });
|
|
4102
4110
|
}
|
|
4103
4111
|
setInterval(() => {
|
|
4104
|
-
|
|
4112
|
+
hr({
|
|
4105
4113
|
id: f,
|
|
4106
4114
|
name: d,
|
|
4107
4115
|
kind: "web",
|
|
@@ -4112,7 +4120,7 @@ import {
|
|
|
4112
4120
|
}).catch(() => {});
|
|
4113
4121
|
}, 1e4).unref();
|
|
4114
4122
|
let n = () => {
|
|
4115
|
-
|
|
4123
|
+
gr(f), p.dispose();
|
|
4116
4124
|
};
|
|
4117
4125
|
process.on("SIGINT", n), process.on("SIGTERM", n);
|
|
4118
4126
|
} catch (e) {
|
|
@@ -4124,24 +4132,24 @@ import {
|
|
|
4124
4132
|
url: `http://localhost:${u}`,
|
|
4125
4133
|
bootMs: Date.now() - L
|
|
4126
4134
|
}), new Promise(() => {});
|
|
4127
|
-
},
|
|
4135
|
+
}, Vi = async (e) => {
|
|
4128
4136
|
process.env.NODE_ENV || (process.env.NODE_ENV = "production");
|
|
4129
|
-
let t = await
|
|
4137
|
+
let t = await zi(e);
|
|
4130
4138
|
if (!t) return {
|
|
4131
4139
|
ran: !1,
|
|
4132
4140
|
exitCode: 0
|
|
4133
4141
|
};
|
|
4134
4142
|
let n = Date.now(), i = Z.child("serve");
|
|
4135
4143
|
i.info("booting voltro serve (preview)", { app: t.name ?? "(unnamed)" });
|
|
4136
|
-
let a = await
|
|
4144
|
+
let a = await Ai(e, t);
|
|
4137
4145
|
for (let e of a) i.info("api wired", {
|
|
4138
4146
|
name: e.name,
|
|
4139
4147
|
pkg: e.pkg
|
|
4140
4148
|
});
|
|
4141
|
-
await
|
|
4149
|
+
await Ii(e, t, a);
|
|
4142
4150
|
{
|
|
4143
4151
|
let { pages: t } = await $(r(e, "src", "pages"));
|
|
4144
|
-
await
|
|
4152
|
+
await an({
|
|
4145
4153
|
appRoot: e,
|
|
4146
4154
|
pages: t
|
|
4147
4155
|
});
|
|
@@ -4151,11 +4159,11 @@ import {
|
|
|
4151
4159
|
root: l,
|
|
4152
4160
|
envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
|
|
4153
4161
|
plugins: [c()],
|
|
4154
|
-
customLogger:
|
|
4162
|
+
customLogger: Gt(),
|
|
4155
4163
|
resolve: { dedupe: ["react", "react-dom"] },
|
|
4156
4164
|
build: {
|
|
4157
4165
|
outDir: "dist",
|
|
4158
|
-
rollupOptions: { output: { manualChunks:
|
|
4166
|
+
rollupOptions: { output: { manualChunks: fi } }
|
|
4159
4167
|
},
|
|
4160
4168
|
publicDir: r(e, "public")
|
|
4161
4169
|
});
|
|
@@ -4175,14 +4183,14 @@ import {
|
|
|
4175
4183
|
extras: f,
|
|
4176
4184
|
bootMs: Date.now() - n
|
|
4177
4185
|
}), new Promise(() => {});
|
|
4178
|
-
},
|
|
4186
|
+
}, Hi = 5e3, Ui = 6e4, Wi = (e, t) => {
|
|
4179
4187
|
if (e.length === 0) return 0;
|
|
4180
4188
|
if (e.length === 1) return e[0];
|
|
4181
4189
|
let n = t * (e.length - 1), r = Math.floor(n), i = Math.ceil(n);
|
|
4182
4190
|
if (r === i) return e[r];
|
|
4183
4191
|
let a = n - r;
|
|
4184
4192
|
return e[r] * (1 - a) + e[i] * a;
|
|
4185
|
-
},
|
|
4193
|
+
}, Gi = (e) => {
|
|
4186
4194
|
if (e.length === 0) return {
|
|
4187
4195
|
p50: 0,
|
|
4188
4196
|
p95: 0,
|
|
@@ -4194,15 +4202,15 @@ import {
|
|
|
4194
4202
|
let t = e.slice().sort((e, t) => e - t), n = 0;
|
|
4195
4203
|
for (let e of t) n += e;
|
|
4196
4204
|
return {
|
|
4197
|
-
p50:
|
|
4198
|
-
p95:
|
|
4199
|
-
p99:
|
|
4205
|
+
p50: Wi(t, .5),
|
|
4206
|
+
p95: Wi(t, .95),
|
|
4207
|
+
p99: Wi(t, .99),
|
|
4200
4208
|
mean: n / t.length,
|
|
4201
4209
|
min: t[0],
|
|
4202
4210
|
max: t[t.length - 1]
|
|
4203
4211
|
};
|
|
4204
|
-
},
|
|
4205
|
-
let t = e.maxSamples ??
|
|
4212
|
+
}, Ki = (e = {}) => {
|
|
4213
|
+
let t = e.maxSamples ?? Hi, n = e.defaultWindowMs ?? Ui, r = [];
|
|
4206
4214
|
return {
|
|
4207
4215
|
record(e) {
|
|
4208
4216
|
A(e), r.push({
|
|
@@ -4231,7 +4239,7 @@ import {
|
|
|
4231
4239
|
tag: e.tag,
|
|
4232
4240
|
count: e.samples.length,
|
|
4233
4241
|
errorCount: n,
|
|
4234
|
-
latencyMs:
|
|
4242
|
+
latencyMs: Gi(t)
|
|
4235
4243
|
});
|
|
4236
4244
|
}
|
|
4237
4245
|
return c.sort((e, t) => t.count - e.count), {
|
|
@@ -4244,4 +4252,4 @@ import {
|
|
|
4244
4252
|
};
|
|
4245
4253
|
};
|
|
4246
4254
|
//#endregion
|
|
4247
|
-
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 };
|