UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

111 lines (109 loc) 3.11 kB
import process from "node:process"; import * as p from "@clack/prompts"; //#region src/cli/prompts.ts function parseExtendsRef(ref) { const match = (ref.startsWith("bos://") ? ref : `bos://${ref}`).match(/^bos:\/\/([^/]+)\/(.+)$/); if (!match) return null; return { account: match[1], gateway: match[2] }; } function deriveAccountFromExtends(domain, extendsAccount) { const firstSegment = domain.split(".")[0]; if (!firstSegment) return ""; return `${firstSegment}.${extendsAccount.includes(".") ? extendsAccount.substring(extendsAccount.indexOf(".") + 1) : extendsAccount}`; } const OVERRIDE_OPTIONS = [ { value: "ui", label: "ui", hint: "Override UI with local source" }, { value: "api", label: "api", hint: "Override API with local source" }, { value: "host", label: "host", hint: "Override host with local source" }, { value: "plugins", label: "plugins", hint: "Override selected plugins with local source" } ]; async function promptInitBasic(input) { p.intro("Let's build an app..."); const domain = input.domain ?? await p.text({ message: "Starting with a domain?", placeholder: "no" }); if (p.isCancel(domain)) process.exit(0); let extendsAccount = "dev.everything.near"; let extendsGateway = "everything.dev"; const accountDefault = domain ? deriveAccountFromExtends(domain, extendsAccount) : ""; const account = input.account ?? await p.text({ message: "What NEAR account will you publish from?", placeholder: accountDefault || "skip", defaultValue: accountDefault }); if (p.isCancel(account)) process.exit(0); const resolvedAccount = account || accountDefault; const extendsInput = input.extends ?? await p.text({ message: "Extending an existing app?", placeholder: "bos://dev.everything.near/everything.dev" }); if (p.isCancel(extendsInput)) process.exit(0); if (extendsInput) { const parsed = parseExtendsRef(extendsInput); if (parsed) { extendsAccount = parsed.account; extendsGateway = parsed.gateway; } } return { extendsAccount, extendsGateway, domain: domain || "", account: resolvedAccount || void 0 }; } async function promptInitOverrides(input) { const overrides = input.overrides ?? await p.multiselect({ message: "What do you want to customize?", options: OVERRIDE_OPTIONS, initialValues: ["ui", "api"], required: false }); if (p.isCancel(overrides)) process.exit(0); let plugins = []; if (overrides.includes("plugins")) { const parentPlugins = input.parentPluginKeys ?? []; const pluginOptions = parentPlugins.length > 0 ? parentPlugins.map((key) => ({ value: key, label: key })) : []; plugins = input.plugins ?? (pluginOptions.length > 0 ? await p.multiselect({ message: "Select plugins to include:", options: pluginOptions, required: false }) : []); if (p.isCancel(plugins)) process.exit(0); } const go = await p.confirm({ message: "GO!", initialValue: true }); if (p.isCancel(go) || !go) process.exit(0); return { overrides, plugins }; } //#endregion export { promptInitBasic, promptInitOverrides }; //# sourceMappingURL=prompts.mjs.map