@voltro/cli 0.37.0 → 0.39.0
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 +316 -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-2GvK8CUB.js +2 -0
- package/dist/{apiBuild-DGsShRuF.js → apiBuild-DGalUk9v.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/bootRefusal-pgvDxlrU.js +7 -0
- package/dist/{build-CiFA-E19.js → build-CfF6t0UM.js} +88 -81
- package/dist/{capabilitiesCommand-nq_pz5xd.js → capabilitiesCommand-D5gucwYa.js} +8 -8
- package/dist/{checkCommand-CIPYyNyc.js → checkCommand-BV56Pcc1.js} +1 -1
- package/dist/{checkCommand-CLPTzYqM.js → checkCommand-CBtynBKW.js} +34 -34
- 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-W7SDdiAQ.js +129 -0
- package/dist/{codemodRunner-cyqu5oxr.js → codemodRunner-D-jTyvWo.js} +679 -495
- package/dist/{commands-BwG9A9Vv.js → commands-BD9eBRY3.js} +48 -48
- package/dist/{connectionConfig-UFlIEiys.js → connectionConfig-Bk9IC7D0.js} +1 -1
- package/dist/{dashboardCommand-C7U146xQ.js → dashboardCommand-7qGylm0F.js} +3 -3
- package/dist/{dataCommand-BOwd8_aJ.js → dataCommand-C_F2DYxe.js} +14 -11
- package/dist/{dbCommand-C4UW8cVN.js → dbCommand-DSwGv9wS.js} +50 -49
- package/dist/dbCommand-DcqEyxju.js +2 -0
- package/dist/dev-alhkKoEX.js +3 -0
- package/dist/{dev-bwDgSObH.js → dev-gqpnzVhI.js} +2357 -2280
- package/dist/{dialectDriver-CgXnDfec.js → dialectDriver-czCHYpeH.js} +2 -1
- package/dist/{doctorCommand-BXyrtN2l.js → doctorCommand-Bvs-BQrM.js} +242 -238
- package/dist/doctorCommand-CVXfRrng.js +2 -0
- package/dist/{dormancyCommand-BDdRRLsa.js → dormancyCommand-B-PPHc9Q.js} +1 -1
- package/dist/{e2eCmd-BRabZww-.js → e2eCmd-uFHig1hV.js} +8 -2
- package/dist/{embeddingsCommand-CjWGcAE6.js → embeddingsCommand-OKY6XjUf.js} +6 -6
- package/dist/{envCommand-B_TeG297.js → envCommand-B1-Zm85H.js} +2 -2
- package/dist/{evolveCommand-D6N-WfA4.js → evolveCommand-C4-NlFbd.js} +6 -8
- package/dist/{generateCommand-DbgcUpGw.js → generateCommand-CcyvH2ve.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{infoCommand-BHKTprrx.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-WYV7qYvz.js → runtimeTrace-DzZOCd94.js} +1 -1
- package/dist/{scheduleManifestCmd-D2x0CTTY.js → scheduleManifestCmd-kmWzrO_w.js} +6 -9
- package/dist/{sdkgen-TM5sSdf7.js → sdkgen-C4roLErM.js} +4 -4
- package/dist/{seedRunner-ZmLSqNe2.js → seedRunner-IdHEprqf.js} +1 -4
- package/dist/serveCommand-B6TATyCj.js +1770 -0
- package/dist/serveCommand-CNR0gI9V.js +2 -0
- package/dist/serveEntry.js +2 -2
- package/dist/{serverlessCommand-CfJZy6dS.js → serverlessCommand-DbJ7Plg9.js} +3 -3
- package/dist/{start-BgN62boB.js → start-BNuTWdRd.js} +1 -1
- package/dist/{start-T4VesWiM.js → start-ft_KzFTd.js} +240 -237
- package/dist/startEntry.js +1 -1
- package/dist/startup.d.ts +40 -1
- package/dist/startup.js +2 -2
- package/dist/startupRunner-CEqQq7ax.js +108 -0
- 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-9GHHsmDf.js → updateCommand-CHBmCB17.js} +5 -3
- package/dist/{webDev-Dybxew86.js → webDev-CTpSY-e_.js} +892 -856
- 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-CHWSPk5z.js → webhooksCommand-BVvOtZ1B.js} +1 -1
- package/package.json +39 -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 +30 -0
- 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/audit.md +4 -0
- package/templates/agent-docs/plugins/auth.md +4 -6
- 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/reference.md +3 -2
- 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 +178 -44
- 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-cms/tests/content.write.test.ts +16 -2
- package/templates/apps/api-collab/mutations/documents.setBody.mutation.server.ts +11 -5
- package/templates/apps/api-collab/package.json +8 -8
- package/templates/apps/api-collab/tests/documents.setBody.test.ts +8 -2
- 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/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/mutations/documents.update.mutation.server.ts +7 -5
- 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/templates/patches/@effect__cluster@0.60.0.patch +51 -3
- package/dist/addCommand-aXSQveak.js +0 -2
- package/dist/agentsMd-BTchIZku.js +0 -2
- package/dist/apiBuild-D0f6hYbH.js +0 -2
- package/dist/baselineCommand-Cfw2Afwm.js +0 -2
- package/dist/codegen-uYrrDzQv.js +0 -2
- package/dist/codegenCommand-BxS3sCeJ.js +0 -30
- package/dist/dbCommand-CC-qNzpz.js +0 -2
- package/dist/dev-BV6XNYKf.js +0 -3
- package/dist/doctorCommand-C4L61G_L.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-CyZsXL1l.js +0 -1766
- package/dist/serveCommand-qumm7jdF.js +0 -2
- package/dist/startupRunner-DPGFchOa.js +0 -71
- package/dist/updateCommand-BN0tkl9-.js +0 -2
- package/dist/webDev-BcykISYQ2.js +0 -2
|
@@ -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-gqpnzVhI.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 };
|