UNPKG

everything-dev

Version:

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

132 lines (130 loc) • 5.71 kB
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs'); const require_theme = require('../../utils/theme.cjs'); const require_docker = require('../../infra/docker.cjs'); const require_progress = require('../../services/dev/progress.cjs'); const require_init_flow = require('../../services/scaffold/init-flow.cjs'); const require_exit_codes = require('../exit-codes.cjs'); const require_dev = require('../render/dev.cjs'); const require_prompts = require('../prompts.cjs'); let _clack_prompts = require("@clack/prompts"); _clack_prompts = require_runtime.__toESM(_clack_prompts, 1); //#region src/cli/commands/init.ts const runInit = async (ctx) => { const client = ctx.client; let initInput = { ...ctx.input }; if (!initInput.noInteractive) { const basic = await require_prompts.promptInitBasic({ extends: initInput.extends, account: initInput.account, domain: initInput.domain }); let parentPluginKeys = []; let parentConfig = null; const fetchSpinner = _clack_prompts.spinner(); fetchSpinner.start("Fetching parent config"); try { const parent = await require_init_flow.fetchInitParent(basic.extendsAccount, basic.extendsGateway); parentConfig = parent.parentConfig; parentPluginKeys = parent.parentPluginKeys; } catch { fetchSpinner.stop("Config not found"); console.error(`[CLI] No config found at bos://${basic.extendsAccount}/${basic.extendsGateway}`); process.exit(1); } fetchSpinner.stop("Config fetched"); if (typeof parentConfig?.title === "string" && parentConfig.title.trim() && typeof parentConfig?.description === "string" && parentConfig.description.trim()) { const shouldContinue = await _clack_prompts.confirm({ message: `You will be extending ${parentConfig.title} - ${parentConfig.description}. Continue?`, initialValue: true }); if (_clack_prompts.isCancel(shouldContinue) || !shouldContinue) process.exit(0); } const overrides = await require_prompts.promptInitOverrides({ parentPluginKeys, plugins: initInput.plugins, overrides: initInput.overrides, level: initInput.level }); const directory = initInput.directory || basic.domain || basic.extendsGateway; initInput = { ...initInput, extends: `bos://${basic.extendsAccount}/${basic.extendsGateway}`, directory, account: basic.account, domain: basic.domain || void 0, plugins: overrides.plugins, overrides: overrides.overrides, level: overrides.level ?? initInput.level, noInteractive: true }; } const initSpinner = _clack_prompts.spinner(); initSpinner.start("Initializing project"); const phaseLabels = { "parent config": "Fetching parent config...", "template source": "Resolving template source...", "scaffold project": "Creating project scaffold...", "copy files": "Copying template files...", "personalize config": "Personalizing config...", "write snapshot": "Writing snapshot...", "resolve config": "Resolving config...", "generate env/docker": "Generating environment config...", "create env file": "Creating .env file...", "install dependencies": "Installing dependencies...", "generate types": "Generating types...", "generate migrations": "Generating database migrations...", "generate code artifacts": "Generating code artifacts..." }; const onProgress = (event) => { const label = phaseLabels[event.phase] ?? event.phase; if (event.status === "running") initSpinner.message(label); }; require_progress.pluginEvents.on("progress", onProgress); let result; try { result = await client.init(initInput); } finally { require_progress.pluginEvents.off("progress", onProgress); } if (require_exit_codes.exitCodeFor(result) === 1) { initSpinner.stop("Failed"); console.error(`[CLI] ${result.error || "Unknown error"}`); process.exit(1); } initSpinner.stop("Project initialized"); console.log(` ${require_theme.colors.dim("Extends:")} ${result.extends}`); console.log(` ${require_theme.colors.dim("Directory:")} ${result.directory}`); if (result.account) console.log(` ${require_theme.colors.dim("Account:")} ${result.account}`); if (result.domain) console.log(` ${require_theme.colors.dim("Domain:")} ${result.domain}`); if (result.overrides && result.overrides.length > 0) console.log(` ${require_theme.colors.dim("Overrides:")} ${result.overrides.join(", ")}`); if (result.plugins && result.plugins.length > 0) console.log(` ${require_theme.colors.dim("Plugins:")} ${result.plugins.join(", ")}`); console.log(` ${require_theme.colors.dim("Files copied:")} ${result.filesCopied}`); require_dev.printTimingSummary(result.timings); console.log(); console.log(require_theme.colors.dim(" Next steps:")); console.log(require_theme.colors.dim(` cd ${result.directory}`)); if (!initInput.noInstall) console.log(require_theme.colors.dim(" pnpm run dev")); else { console.log(require_theme.colors.dim(" pnpm install")); console.log(require_theme.colors.dim(" pnpm run dev")); } console.log(); if (initInput.noInteractive !== true && !initInput.noInstall && result.targetDir) { if (await _clack_prompts.confirm({ message: "Run docker compose up -d --wait?", initialValue: true }) === true) { const dockerSpinner = _clack_prompts.spinner(); dockerSpinner.start("Starting Docker services"); const compose = await require_docker.runDockerComposeUp(result.targetDir); if (compose.ok) dockerSpinner.stop("Docker services ready"); else { dockerSpinner.stop("Docker services not started"); _clack_prompts.log.warn(`docker compose up -d --wait failed${compose.tail ? `:\n${compose.tail}` : ""}`); } } } }; //#endregion exports.runInit = runInit; //# sourceMappingURL=init.cjs.map