@voltro/cli 0.38.0 → 0.39.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +276 -0
- package/THIRD-PARTY-NOTICES.md +80 -45
- package/dist/{addCommand-BNeoeSxe.js → addCommand-C05L9tZh.js} +2 -2
- package/dist/addCommand-C3MdJG-a.js +2 -0
- package/dist/{agentsMd-mhQMF1bx.js → agentsMd-7zI2h5l9.js} +3 -3
- package/dist/agentsMd-BFCXh2gl.js +2 -0
- package/dist/apiBuild-BmR_bIxN.js +2 -0
- package/dist/{apiBuild-CvacV4zA.js → apiBuild-D9FB13_2.js} +3 -3
- package/dist/baselineCommand-CXv680Dc.js +2 -0
- package/dist/{baselineCommand-C6NMt-oa.js → baselineCommand-Ck2Xm8M7.js} +18 -18
- package/dist/bin.js +1 -1
- package/dist/{build-_LoTC1s0.js → build-DORV5mLM.js} +107 -100
- package/dist/{capabilitiesCommand-nq_pz5xd.js → capabilitiesCommand-D5gucwYa.js} +8 -8
- package/dist/{checkCommand-Pjk5sBl2.js → checkCommand-Bf6oMao4.js} +35 -35
- package/dist/{checkCommand-wibtQx-N.js → checkCommand-D9qK_gtA.js} +1 -1
- package/dist/{cloudCmd-NQSwe_Qk.js → cloudCmd-C42gaO8s.js} +16 -16
- package/dist/{clusterCmd-D5wsCmA_.js → clusterCmd-DrVFCzSj.js} +8 -4
- package/dist/{codegen-GYYcdpCg.js → codegen-CbpGCWLG.js} +1 -1
- package/dist/codegen-i8QGcHsi.js +2 -0
- package/dist/codegenCommand-CxOyKmc1.js +129 -0
- package/dist/{codemodRunner-CXgQ-ecJ.js → codemodRunner-D-jTyvWo.js} +622 -551
- package/dist/{commands-DaZVi9wi.js → commands-D6aW_6AR.js} +48 -48
- package/dist/{connectionConfig-UFlIEiys.js → connectionConfig-Bk9IC7D0.js} +1 -1
- package/dist/{dashboardCommand-Dxy_kmoW.js → dashboardCommand-CwTZh-XZ.js} +3 -3
- package/dist/{dataCommand-D6-Ha2lf.js → dataCommand-Cc9RiLQZ.js} +14 -11
- package/dist/{dbCommand-C4UW8cVN.js → dbCommand-DSwGv9wS.js} +50 -49
- package/dist/dbCommand-DcqEyxju.js +2 -0
- package/dist/{dev-E7Eo5GHc.js → dev-3mgc8c-H.js} +2260 -2184
- package/dist/dev-CjJAasDs.js +3 -0
- package/dist/{dialectDriver-CgXnDfec.js → dialectDriver-czCHYpeH.js} +2 -1
- package/dist/doctorCommand-Cghssndo.js +2 -0
- package/dist/{doctorCommand-gmDyALFL.js → doctorCommand-oLuzc-aC.js} +261 -244
- package/dist/{dormancyCommand-CE6wG8lj.js → dormancyCommand-Bxe4WtHU.js} +1 -1
- package/dist/{e2eCmd-BRabZww-.js → e2eCmd-uFHig1hV.js} +8 -2
- package/dist/{embeddingsCommand-C3uAuf6N.js → embeddingsCommand-CyNQkFIc.js} +6 -6
- package/dist/{envCommand-DzuWh8ya.js → envCommand-CAkSgBbh.js} +19 -19
- package/dist/{evolveCommand-DPLqcYb2.js → evolveCommand-CWhBoe_P.js} +6 -8
- package/dist/frameworkTableAssembly-DgylYh9_.js +2 -0
- package/dist/{generateCommand-DbgcUpGw.js → generateCommand-CcyvH2ve.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{infoCommand-CmczGj_l.js → infoCommand-CTo8Jnhq.js} +7 -7
- package/dist/inspect-B7U7Cl_Z.js +1192 -0
- package/dist/inspect-DUze25t0.js +2 -0
- package/dist/{inspectCmd-EHFZ9yYu.js → inspectCmd-niF97fAq.js} +5 -5
- package/dist/inspectGateHint-BjnFubmH.js +7 -0
- package/dist/{logFileSink-C_D2wRN1.js → logFileSink-B4uP8pvf.js} +1 -1
- package/dist/{logsCmd-D36xK7Zu.js → logsCmd-B6oNsfaZ.js} +10 -7
- package/dist/{manifestBuild-hpPLaGxV.js → manifestBuild-BK42hu0k.js} +1 -1
- package/dist/manifestBuild-j0n109tt.js +2 -0
- package/dist/{metaCommands-CIoQNlaQ.js → metaCommands-DUYR--Ts.js} +1 -1
- package/dist/{migrate-RwgUWXfc.js → migrate-BnPw2zC8.js} +7 -4
- package/dist/{packageCommand-Cug_3Ogl.js → packageCommand-9SVyvsSo.js} +3 -2
- package/dist/{probeCommand-BPEpwT32.js → probeCommand-C9gazU0H.js} +35 -24
- package/dist/{projectScaffold-CxgtJvlb.js → projectScaffold-BEhhHjPr.js} +1 -1
- package/dist/{projectScaffold-DDgWbNLe.js → projectScaffold-BvhLOrLq.js} +17 -15
- package/dist/{runtimeTrace-6jfznSzr.js → runtimeTrace-gNXeLf6H.js} +1 -1
- package/dist/{scheduleManifestCmd-D2x0CTTY.js → scheduleManifestCmd-kmWzrO_w.js} +6 -9
- package/dist/{sdkgen-CEJZZQUA.js → sdkgen-C8zz10-X.js} +4 -4
- package/dist/{seedRunner-ZmLSqNe2.js → seedRunner-IdHEprqf.js} +1 -4
- package/dist/serveCommand-BpK8-m1N.js +1770 -0
- package/dist/serveCommand-CW-goXvh.js +2 -0
- package/dist/serveEntry.js +2 -2
- package/dist/{serverlessCommand-CfJZy6dS.js → serverlessCommand-DbJ7Plg9.js} +3 -3
- package/dist/{start-CidwCcjl.js → start-BNuTWdRd.js} +1 -1
- package/dist/{start-RCh6qKFe.js → start-ft_KzFTd.js} +257 -254
- package/dist/startEntry.js +1 -1
- package/dist/{test-DIQ0jlkQ.js → test-CLYXrZ2F.js} +1 -1
- package/dist/{tracesCmd-DStmCJPi.js → tracesCmd-DgtgOUdi.js} +7 -4
- package/dist/{typecheckCommand-BlsWiCNq.js → typecheckCommand-BuCtT92o.js} +7 -7
- package/dist/updateCommand-6FMU2klq.js +2 -0
- package/dist/{updateCommand-CmksX7m_.js → updateCommand-CHBmCB17.js} +5 -3
- package/dist/{webDev-BKdD7c_a.js → webDev-CTpSY-e_.js} +813 -775
- package/dist/webDev-id3I5PvG.js +2 -0
- package/dist/{webhookDiscovery-D7VaeMlz.js → webhookDiscovery-CphsQe59.js} +4 -6
- package/dist/{webhookDiscovery-CrGAfhIG.js → webhookDiscovery-il9ti-HE.js} +1 -1
- package/dist/{webhooksCommand-BHeaF1ZJ.js → webhooksCommand-EccPZQZ4.js} +1 -1
- package/package.json +27 -21
- package/templates/AGENTS.md +2 -2
- package/templates/agent-docs/_index.md +2 -2
- package/templates/agent-docs/_manifest.json +2 -2
- package/templates/agent-docs/authentication.md +43 -4
- package/templates/agent-docs/cli.md +17 -13
- package/templates/agent-docs/data.md +44 -1
- package/templates/agent-docs/database/migrations.md +2 -2
- package/templates/agent-docs/database/seedsdialects.md +2 -2
- package/templates/agent-docs/deployment.md +21 -7
- package/templates/agent-docs/internationalization.md +10 -3
- package/templates/agent-docs/local-first-mobile.md +141 -20
- package/templates/agent-docs/plugins/mail.md +1 -1
- package/templates/agent-docs/plugins/ratelimit.md +1 -1
- package/templates/agent-docs/plugins.md +3 -1
- package/templates/agent-docs/releases.md +130 -1
- package/templates/agent-docs/routing.md +34 -2
- package/templates/agent-docs/templates/apibackends.md +1 -1
- package/templates/agent-docs/templates/mobile.md +1 -1
- package/templates/agent-docs/whats-new.md +26 -66
- 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-sqlite/package.json +8 -8
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/package.json +10 -10
- package/templates/apps/api-collab/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-durable/startup/warm.startup.tsx +16 -2
- 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/authz.ts +16 -1
- 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-saas-starter/package.json +10 -10
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- 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 +9 -9
- package/templates/apps/frontend-auth/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-cms/package.json +9 -9
- package/templates/apps/frontend-collab/package.json +10 -10
- 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-portal/package.json +8 -8
- package/templates/apps/frontend-saas/package.json +8 -8
- 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/templates/apps/frontend-status/package.json +8 -8
- package/templates/apps/mobile-app/README.md +41 -17
- package/templates/apps/mobile-app/app.config.ts +1 -1
- package/templates/apps/mobile-app/package.json +15 -11
- package/templates/apps/mobile-app/src/app/_layout.tsx +44 -13
- package/templates/apps/mobile-app/src/app/index.tsx +1 -1
- package/templates/apps/mobile-app/src/app/settings.tsx +4 -1
- package/templates/apps/mobile-app/src/client.ts +74 -57
- package/templates/apps/mobile-app/src/lib/api.ts +4 -4
- package/templates/apps/mobile-app/src/lib/deeplinks.ts +6 -6
- package/templates/apps/mobile-app/src/persistence.ts +24 -3
- package/templates/apps/mobile-app/tsconfig.json +17 -3
- package/dist/addCommand-aXSQveak.js +0 -2
- package/dist/agentsMd-BTchIZku.js +0 -2
- package/dist/apiBuild-ttSDDOGp.js +0 -2
- package/dist/baselineCommand-Cfw2Afwm.js +0 -2
- package/dist/codegen-uYrrDzQv.js +0 -2
- package/dist/codegenCommand-C60m_LCp.js +0 -30
- package/dist/dbCommand-CC-qNzpz.js +0 -2
- package/dist/dev-CAOoXOkc.js +0 -3
- package/dist/doctorCommand-Cjl8Yii8.js +0 -2
- package/dist/frameworkTableAssembly-YyVe32Cb.js +0 -2
- package/dist/inspect-CjTYzAs_.js +0 -1190
- package/dist/inspect-P4pxoMaV.js +0 -2
- package/dist/inspectGateHint-BF6608UT.js +0 -4
- package/dist/manifestBuild-COkJoyAr.js +0 -2
- package/dist/serveCommand-DNRF2nDI.js +0 -2
- package/dist/serveCommand-DnY4VS3D.js +0 -1767
- package/dist/updateCommand-B0J_T9Vs.js +0 -2
- package/dist/webDev-CcJfdSjl2.js +0 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { a as e, t } from "./cliArgs-D4p8n7EE.js";
|
|
2
2
|
import { a as n, i as r, n as i, r as a, t as o } from "./cloudClient-DWL-Hw_T.js";
|
|
3
3
|
import { n as s } from "./cliOutput-D1tSBoRM.js";
|
|
4
|
-
import { d as c, f as l, o as u } from "./projectScaffold-
|
|
4
|
+
import { d as c, f as l, o as u } from "./projectScaffold-BvhLOrLq.js";
|
|
5
5
|
import { basename as d, join as f, resolve as p } from "node:path";
|
|
6
6
|
import { promises as m } from "node:fs";
|
|
7
7
|
import { ansi as h } from "@voltro/logger";
|
|
@@ -115,7 +115,7 @@ var b = y(_), x = async (e) => {
|
|
|
115
115
|
let s = setTimeout(() => a({
|
|
116
116
|
ok: !1,
|
|
117
117
|
error: "timed out waiting for the browser login (5 min)"
|
|
118
|
-
}),
|
|
118
|
+
}), 3e5);
|
|
119
119
|
typeof s.unref == "function" && s.unref();
|
|
120
120
|
});
|
|
121
121
|
return r.close(), r.closeAllConnections?.(), i.ok ? (await n({
|
|
@@ -269,7 +269,7 @@ replicas = 1
|
|
|
269
269
|
let f = d.data.deploymentId;
|
|
270
270
|
if (typeof f != "string") return console.error("voltro cloud deploy: unexpected response from the control plane"), 1;
|
|
271
271
|
console.log(`${h.green("queued")} ${f} · ${r} @ ${u.slice(0, 8)}`);
|
|
272
|
-
let p = Date.now() +
|
|
272
|
+
let p = Date.now() + 9e5, m = "";
|
|
273
273
|
for (; Date.now() < p;) {
|
|
274
274
|
await S(3e3);
|
|
275
275
|
let e = await i(`/deployments/${encodeURIComponent(f)}`, { token: l });
|
|
@@ -285,23 +285,23 @@ replicas = 1
|
|
|
285
285
|
}, q = async (e) => {
|
|
286
286
|
let { json: t, rest: n } = D(e), { value: r, rest: a } = T(n, "--dir"), { project: o } = z(a), s = await w();
|
|
287
287
|
if (s === null) return 1;
|
|
288
|
-
let c = p(r ?? process.cwd()), u = await
|
|
289
|
-
if (
|
|
290
|
-
let
|
|
291
|
-
if (/\bimport\s|\bexport\s|=>|function\s/.test(
|
|
292
|
-
let
|
|
288
|
+
let c = p(r ?? process.cwd()), u = await H(), d = await l(c, u);
|
|
289
|
+
if (d.apps.length === 0) return console.error(`voltro cloud scan: no apps (no app.config.ts found under ${c})`), 1;
|
|
290
|
+
let f = JSON.stringify(d);
|
|
291
|
+
if (/\bimport\s|\bexport\s|=>|function\s/.test(f)) return console.error("voltro cloud scan: refusing to send — payload looks like it contains source, not metadata"), 1;
|
|
292
|
+
let m = await i(`/projects/${encodeURIComponent(o)}/inventory`, {
|
|
293
293
|
method: "POST",
|
|
294
294
|
token: s,
|
|
295
|
-
body:
|
|
295
|
+
body: d
|
|
296
296
|
});
|
|
297
|
-
if (
|
|
298
|
-
if (t) return O(!0,
|
|
299
|
-
let
|
|
300
|
-
for (let e of
|
|
301
|
-
let t =
|
|
297
|
+
if (m.kind === "err") return console.error(`voltro cloud scan: ${m.error}`), 1;
|
|
298
|
+
if (t) return O(!0, m.data), 0;
|
|
299
|
+
let g = m.data;
|
|
300
|
+
for (let e of d.apps) {
|
|
301
|
+
let t = g.apps?.find((t) => t.slug === e.slug), n = t?.created ? h.green("registered") : h.green("updated");
|
|
302
302
|
console.log(` ${n} ${e.slug} (${e.kind}) · ${t?.primitiveCount ?? 0} primitives · voltro ${e.voltroVersion ?? "unknown"}`);
|
|
303
303
|
}
|
|
304
|
-
return console.log(`${h.green("ok")} scanned ${
|
|
304
|
+
return console.log(`${h.green("ok")} scanned ${d.apps.length} app(s) into ${o}`), 0;
|
|
305
305
|
}, J = async (e) => {
|
|
306
306
|
if (!G()) return console.error(W), 1;
|
|
307
307
|
let { json: t, rest: n } = D(e), { project: r, rest: a } = z(n), { value: o } = T(a, "--app");
|
|
@@ -317,7 +317,7 @@ replicas = 1
|
|
|
317
317
|
let l = c.data.deploymentId, u = c.data.rolledBackTo;
|
|
318
318
|
if (typeof l != "string") return console.error("voltro cloud rollback: unexpected response from the control plane"), 1;
|
|
319
319
|
console.log(`${h.green("queued")} ${l} · rollback ${o} → ${String(u).slice(0, 12)}`);
|
|
320
|
-
let d = Date.now() +
|
|
320
|
+
let d = Date.now() + 9e5, f = "";
|
|
321
321
|
for (; Date.now() < d;) {
|
|
322
322
|
await S(3e3);
|
|
323
323
|
let e = await i(`/deployments/${encodeURIComponent(l)}`, { token: s });
|
|
@@ -15,10 +15,14 @@ var o = () => {
|
|
|
15
15
|
name: e.name,
|
|
16
16
|
error: e.error
|
|
17
17
|
});
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
if (r === "json") {
|
|
19
|
+
let t = u.length > 0 ? {
|
|
20
|
+
instances: l,
|
|
21
|
+
fetchErrors: u
|
|
22
|
+
} : { instances: l };
|
|
23
|
+
return e(t, { pretty: !1 }), +!!s.every((e) => e.kind === "err");
|
|
24
|
+
}
|
|
25
|
+
return c(l, u, s);
|
|
22
26
|
}, c = (e, t, n) => {
|
|
23
27
|
if (e.length > 0) {
|
|
24
28
|
console.log(a.bold("cluster instances")), console.log("");
|
|
@@ -588,7 +588,7 @@ ${o.join("\n\n")}\n`);
|
|
|
588
588
|
} catch (n) {
|
|
589
589
|
e = `// <plugin:${t.pluginName}> ERROR: ${n?.message ?? String(n)}\n// </plugin:${t.pluginName}>`;
|
|
590
590
|
}
|
|
591
|
-
e
|
|
591
|
+
e !== null && e !== "" && b.push([
|
|
592
592
|
`// <plugin:${t.pluginName}>`,
|
|
593
593
|
e,
|
|
594
594
|
`// </plugin:${t.pluginName}>`,
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { l as e, z as t } from "./dev-3mgc8c-H.js";
|
|
2
|
+
import { rt as n } from "./webDev-CTpSY-e_.js";
|
|
3
|
+
import { r } from "./codegen-CbpGCWLG.js";
|
|
4
|
+
import { basename as i, join as a, relative as o, resolve as s } from "node:path";
|
|
5
|
+
import { promises as c } from "node:fs";
|
|
6
|
+
import { pathToFileURL as l } from "node:url";
|
|
7
|
+
//#region src/mobileCodegen.ts
|
|
8
|
+
var u = "voltro.mobile.ts", d = a(".framework", "mobileApis.generated.ts"), f = (e) => e.replace(/[^a-zA-Z0-9]/g, "_"), p = async (e) => {
|
|
9
|
+
let t = a(e, u);
|
|
10
|
+
try {
|
|
11
|
+
await c.stat(t);
|
|
12
|
+
} catch {
|
|
13
|
+
return { present: !1 };
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
let e = (await import(`${l(t).href}?t=${Date.now()}`)).default;
|
|
17
|
+
return e === void 0 || typeof e != "object" || e.apis === void 0 ? {
|
|
18
|
+
present: !0,
|
|
19
|
+
error: /* @__PURE__ */ Error(`${u} has no default export with an \`apis\` map`)
|
|
20
|
+
} : {
|
|
21
|
+
present: !0,
|
|
22
|
+
binding: e
|
|
23
|
+
};
|
|
24
|
+
} catch (e) {
|
|
25
|
+
return {
|
|
26
|
+
present: !0,
|
|
27
|
+
error: e instanceof Error ? e : Error(String(e))
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}, m = (e, t) => {
|
|
31
|
+
let n = t.filter(([, e]) => e.package !== void 0).map(([e, t]) => {
|
|
32
|
+
let n = `${f(e)}Group`, r = `${f(e)}Descriptors`;
|
|
33
|
+
return `import { ${n === "appGroup" ? "appGroup" : `appGroup as ${n}`}, ${r === "appDescriptors" ? "appDescriptors" : `appDescriptors as ${r}`} } from '${t.package}/rpcGroup'`;
|
|
34
|
+
}), r = t.map(([e, t]) => t.package === void 0 ? ` // ${JSON.stringify(e)}: declared with \`url\` only — no local rpc surface to import.\n // Add \`package: '<the api package>'\` to ${u} to get typed hooks for it.` : ` { ${[
|
|
35
|
+
`name: ${JSON.stringify(e)}`,
|
|
36
|
+
`group: ${f(e)}Group`,
|
|
37
|
+
`descriptors: ${f(e)}Descriptors`,
|
|
38
|
+
`wsUrl: wsUrl(${JSON.stringify(e)})`
|
|
39
|
+
].join(", ")} },`), i = t.filter(([, e]) => e.url !== void 0).map(([e, t]) => ` ${JSON.stringify(e)}: ${JSON.stringify(t.url)},`);
|
|
40
|
+
return [
|
|
41
|
+
"// GENERATED BY `voltro codegen` — do not edit; regenerate with `voltro codegen`.",
|
|
42
|
+
"//",
|
|
43
|
+
`// The api bindings declared in ${u}. Only the BINDING is`,
|
|
44
|
+
"// generated: the procedure types ride the imports below, so a schema change",
|
|
45
|
+
"// in an api needs no regeneration here.",
|
|
46
|
+
"",
|
|
47
|
+
...n,
|
|
48
|
+
"import type { MobileApiBinding } from '@voltro/react-native'",
|
|
49
|
+
"",
|
|
50
|
+
"/** Every api this app talks to, bound to a runtime-resolved ws URL.",
|
|
51
|
+
" *",
|
|
52
|
+
" * The URL is a parameter because it differs per environment and `localhost`",
|
|
53
|
+
" * on a device is the DEVICE — see `resolveDevWsUrl` in @voltro/react-native. */",
|
|
54
|
+
"export const mobileApis = (",
|
|
55
|
+
" wsUrl: (apiName: string) => string,",
|
|
56
|
+
"): ReadonlyArray<MobileApiBinding> => [",
|
|
57
|
+
...r,
|
|
58
|
+
"]",
|
|
59
|
+
"",
|
|
60
|
+
"/** Api names in declaration order — the keys the hooks bind to. */",
|
|
61
|
+
`export const MOBILE_API_NAMES = [${t.map(([e]) => JSON.stringify(e)).join(", ")}] as const`,
|
|
62
|
+
...i.length > 0 ? [
|
|
63
|
+
"",
|
|
64
|
+
`/** URLs declared in ${u} for apis this app does not build. */`,
|
|
65
|
+
"export const MOBILE_API_URLS: Readonly<Record<string, string>> = {",
|
|
66
|
+
...i,
|
|
67
|
+
"}"
|
|
68
|
+
] : [],
|
|
69
|
+
""
|
|
70
|
+
].join("\n");
|
|
71
|
+
}, h = async (e) => {
|
|
72
|
+
let t = s(e), r = await p(t);
|
|
73
|
+
if (!r.present) return { kind: "not-a-mobile-app" };
|
|
74
|
+
if ("error" in r) return {
|
|
75
|
+
kind: "refused",
|
|
76
|
+
reason: `${u} could not be loaded — ${r.error.message}`
|
|
77
|
+
};
|
|
78
|
+
let i = Object.entries(r.binding.apis);
|
|
79
|
+
if (i.length === 0) return {
|
|
80
|
+
kind: "refused",
|
|
81
|
+
reason: `${u} declares no apis`
|
|
82
|
+
};
|
|
83
|
+
for (let [e, t] of i) if (t.package === void 0 && t.url === void 0) return {
|
|
84
|
+
kind: "refused",
|
|
85
|
+
reason: `api ${JSON.stringify(e)} declares neither \`package\` nor \`url\``
|
|
86
|
+
};
|
|
87
|
+
for (let [e, r] of i) if (r.package !== void 0 && await n(t, r.package) === null) return {
|
|
88
|
+
kind: "refused",
|
|
89
|
+
reason: `api ${JSON.stringify(e)}: ${r.package} is not a workspace dependency of this app. Add it to the app's package.json (\`"${r.package}": "workspace:*"\`) and install.`
|
|
90
|
+
};
|
|
91
|
+
let o = a(t, d), l = m(t, i);
|
|
92
|
+
await c.mkdir(a(t, ".framework"), { recursive: !0 });
|
|
93
|
+
let f = null;
|
|
94
|
+
try {
|
|
95
|
+
f = await c.readFile(o, "utf8");
|
|
96
|
+
} catch {}
|
|
97
|
+
return f !== l && await c.writeFile(o, l, "utf8"), {
|
|
98
|
+
kind: "wrote",
|
|
99
|
+
file: o,
|
|
100
|
+
apis: i.map(([e]) => e)
|
|
101
|
+
};
|
|
102
|
+
}, g = (e, t) => t.kind === "wrote" ? `voltro codegen: wrote ${o(e, t.file)} (apis ${t.apis.join(", ")})` : t.kind === "refused" ? `voltro codegen: ${t.reason} — refusing to write.` : `voltro codegen: no ${u} here — not a mobile app.`, _ = async (n) => {
|
|
103
|
+
let { config: a, present: o, error: s } = await e(n);
|
|
104
|
+
if (o && a === null) return {
|
|
105
|
+
kind: "refused",
|
|
106
|
+
reason: "app.config.ts exists but could not be loaded" + (s === void 0 ? "" : ` — ${s instanceof Error ? s.message : String(s)}`)
|
|
107
|
+
};
|
|
108
|
+
let c = a?.plugins ?? [], { pluginContributions: l, pluginErrorImports: u, pluginRpcImports: d } = await t(c, a?.name ?? i(n), n), f = await r({
|
|
109
|
+
root: n,
|
|
110
|
+
...l.length > 0 ? { pluginContributions: l } : {},
|
|
111
|
+
...u.length > 0 ? { pluginErrorImports: u } : {},
|
|
112
|
+
...d.length > 0 ? { pluginRpcImports: d } : {},
|
|
113
|
+
...a?.name === void 0 ? {} : { apiName: a.name }
|
|
114
|
+
});
|
|
115
|
+
return f ? {
|
|
116
|
+
kind: "wrote",
|
|
117
|
+
file: f,
|
|
118
|
+
plugins: c.length,
|
|
119
|
+
errorSchemas: u.length,
|
|
120
|
+
routes: d.length
|
|
121
|
+
} : { kind: "nothing-to-write" };
|
|
122
|
+
}, v = async (e) => {
|
|
123
|
+
let t = s(e.find((e) => !e.startsWith("-")) ?? process.cwd()), n = await h(t);
|
|
124
|
+
if (n.kind !== "not-a-mobile-app") return console.log(g(t, n)), n.kind === "wrote" ? 0 : 1;
|
|
125
|
+
let r = await _(t);
|
|
126
|
+
return r.kind === "refused" ? (console.error(`voltro codegen: ${r.reason} — refusing to write.`), console.error(" The generated file would omit every plugin's error union and client routes, and would typecheck, so the omission would only surface as a missing error tag at runtime."), 1) : r.kind === "nothing-to-write" ? (console.log("voltro codegen: no rpc primitives found — nothing to write."), 0) : (console.log(`voltro codegen: wrote ${o(t, r.file)} (plugins ${r.plugins}, error schemas ${r.errorSchemas}, plugin routes ${r.routes})`), r.plugins > 0 && r.errorSchemas === 0 && console.log(" note: no plugin contributed a cross-cutting error schema, so the wire error union carries only each procedure's own `error:`. Expected if none of your plugins declare `errorSchemas` — but `guards:` needs @voltro/plugin-rbac for its ScopeError to decode typed."), 0);
|
|
127
|
+
};
|
|
128
|
+
//#endregion
|
|
129
|
+
export { _ as regenerateRpcGroup, v as runCodegenCommand };
|