everything-dev 1.44.0 → 1.45.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/dist/api-contract.cjs +26 -21
- package/dist/api-contract.cjs.map +1 -1
- package/dist/api-contract.mjs +27 -22
- package/dist/api-contract.mjs.map +1 -1
- package/dist/cli/catalog.cjs +2 -2
- package/dist/cli/catalog.cjs.map +1 -1
- package/dist/cli/catalog.mjs +2 -2
- package/dist/cli/catalog.mjs.map +1 -1
- package/dist/cli/infra.cjs +3 -0
- package/dist/cli/infra.cjs.map +1 -1
- package/dist/cli/infra.mjs +3 -0
- package/dist/cli/infra.mjs.map +1 -1
- package/dist/cli/init.cjs +5 -2
- package/dist/cli/init.cjs.map +1 -1
- package/dist/cli/init.d.cts +1 -1
- package/dist/cli/init.d.cts.map +1 -1
- package/dist/cli/init.d.mts +1 -1
- package/dist/cli/init.d.mts.map +1 -1
- package/dist/cli/init.mjs +5 -2
- package/dist/cli/init.mjs.map +1 -1
- package/dist/cli/status.cjs +8 -19
- package/dist/cli/status.cjs.map +1 -1
- package/dist/cli/status.mjs +8 -19
- package/dist/cli/status.mjs.map +1 -1
- package/dist/cli/sync.cjs +6 -0
- package/dist/cli/sync.cjs.map +1 -1
- package/dist/cli/sync.mjs +6 -0
- package/dist/cli/sync.mjs.map +1 -1
- package/dist/cli.cjs +43 -4
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +43 -4
- package/dist/cli.mjs.map +1 -1
- package/dist/config.cjs +22 -11
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts.map +1 -1
- package/dist/config.d.mts.map +1 -1
- package/dist/config.mjs +22 -11
- package/dist/config.mjs.map +1 -1
- package/dist/contract.cjs +22 -7
- package/dist/contract.cjs.map +1 -1
- package/dist/contract.d.cts +80 -7
- package/dist/contract.d.cts.map +1 -1
- package/dist/contract.d.mts +80 -7
- package/dist/contract.d.mts.map +1 -1
- package/dist/contract.meta.cjs +2 -0
- package/dist/contract.meta.cjs.map +1 -1
- package/dist/contract.meta.d.cts +6 -0
- package/dist/contract.meta.d.mts +6 -0
- package/dist/contract.meta.mjs +2 -0
- package/dist/contract.meta.mjs.map +1 -1
- package/dist/contract.mjs +22 -8
- package/dist/contract.mjs.map +1 -1
- package/dist/dev-session.cjs +3 -1
- package/dist/dev-session.cjs.map +1 -1
- package/dist/dev-session.mjs +3 -1
- package/dist/dev-session.mjs.map +1 -1
- package/dist/fastkv.cjs +2 -1
- package/dist/fastkv.cjs.map +1 -1
- package/dist/fastkv.mjs +2 -1
- package/dist/fastkv.mjs.map +1 -1
- package/dist/http-client.cjs +22 -2
- package/dist/http-client.cjs.map +1 -1
- package/dist/http-client.mjs +22 -2
- package/dist/http-client.mjs.map +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -2
- package/dist/integrity.cjs +116 -0
- package/dist/integrity.cjs.map +1 -1
- package/dist/integrity.d.cts +21 -1
- package/dist/integrity.d.cts.map +1 -1
- package/dist/integrity.d.mts +21 -1
- package/dist/integrity.d.mts.map +1 -1
- package/dist/integrity.mjs +111 -1
- package/dist/integrity.mjs.map +1 -1
- package/dist/near-cli.cjs +12 -15
- package/dist/near-cli.cjs.map +1 -1
- package/dist/near-cli.mjs +12 -15
- package/dist/near-cli.mjs.map +1 -1
- package/dist/orchestrator.cjs +39 -23
- package/dist/orchestrator.cjs.map +1 -1
- package/dist/orchestrator.mjs +39 -23
- package/dist/orchestrator.mjs.map +1 -1
- package/dist/plugin.cjs +332 -108
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +32 -2
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.mts +32 -2
- package/dist/plugin.d.mts.map +1 -1
- package/dist/plugin.mjs +335 -111
- package/dist/plugin.mjs.map +1 -1
- package/dist/types.d.cts +2 -2
- package/dist/types.d.mts +2 -2
- package/package.json +1 -1
package/dist/cli.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.cjs","names":["colors","frames","icons","gradients","formatDuration","sumPhaseDurations","findConfigPath","findCommandDescriptor","bosPlugin","parseCommandInput","p","consumeDevSession","promptInitBasic","fetchParentConfig","promptInitOverrides","runDockerComposeUp"],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { dirname } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { findCommandDescriptor } from \"./cli/catalog\";\nimport { printHelp } from \"./cli/help\";\nimport { loadProjectEnv } from \"./cli/infra\";\nimport { fetchParentConfig, runDockerComposeUp } from \"./cli/init\";\nimport { parseCommandInput } from \"./cli/parse\";\nimport { promptInitBasic, promptInitOverrides } from \"./cli/prompts\";\nimport { formatDuration, sumPhaseDurations } from \"./cli/timing\";\nimport { findConfigPath } from \"./config\";\nimport type {\n DevOptions,\n DevResult,\n InitOptions,\n InitResult,\n OverrideSection,\n StartOptions,\n StartResult,\n} from \"./contract\";\nimport type { ProgressEvent, StartSummary } from \"./plugin\";\nimport bosPlugin, { consumeDevSession, pluginEvents } from \"./plugin\";\nimport { createPluginRuntime } from \"./sdk\";\nimport { printBanner } from \"./utils/banner\";\nimport { colors, frames, gradients, icons } from \"./utils/theme\";\n\nfunction printConfigView(result: {\n account: string;\n domain?: string;\n staging?: { domain: string };\n app?: {\n host: { name?: string; development: string; production?: string };\n ui: { name?: string; development?: string; production?: string; ssr?: string };\n api: { name?: string; development?: string; production?: string; proxy?: string };\n };\n}) {\n console.log();\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.app} ${gradients.cyber(\"CONFIG\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n\n console.log(` ${colors.dim(\"Account\")} ${colors.cyan(result.account)}`);\n console.log(` ${colors.dim(\"Domain\")} ${colors.white(result.domain ?? \"not configured\")}`);\n if (result.staging) {\n console.log(` ${colors.dim(\"Staging\")} ${colors.magenta(result.staging.domain)}`);\n }\n console.log();\n}\n\nfunction formatTimeAgo(isoTimestamp: string): string {\n const now = Date.now();\n const then = new Date(isoTimestamp).getTime();\n const diffMs = now - then;\n const diffMins = Math.floor(diffMs / 60_000);\n if (diffMins < 1) return \"just now\";\n if (diffMins < 60) return `${diffMins} minute${diffMins > 1 ? \"s\" : \"\"} ago`;\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? \"s\" : \"\"} ago`;\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 30) return `${diffDays} day${diffDays > 1 ? \"s\" : \"\"} ago`;\n return isoTimestamp.split(\"T\")[0] ?? isoTimestamp;\n}\n\nfunction normalizeVersion(v: string): string {\n return v.replace(/^[\\^~>=v]+/, \"\").trim();\n}\n\nfunction printTimingSummary(timings: Array<{ name: string; durationMs: number }> | undefined) {\n if (!timings || timings.length === 0) return;\n\n console.log(` ${colors.dim(\"Timings:\")}`);\n for (const timing of timings) {\n console.log(` ${colors.dim(timing.name.padEnd(22))} ${formatDuration(timing.durationMs)}`);\n }\n console.log(\n ` ${colors.dim(\"total\".padEnd(22))} ${formatDuration(sumPhaseDurations(timings))}`,\n );\n}\n\nfunction printStartSummary(summary: StartSummary) {\n console.log();\n console.log(` ${colors.dim(\"Config Source:\")} ${summary.configSource}`);\n if (summary.configSourceHttp) {\n console.log(` ${colors.dim(summary.configSourceHttp)}`);\n }\n console.log(` ${colors.dim(\"Account:\")} ${summary.account}`);\n console.log(` ${colors.dim(\"Domain:\")} ${summary.domain ?? \"not configured\"}`);\n console.log();\n console.log(` ${colors.dim(\"Modules:\")}`);\n console.log(` ${colors.dim(\"HOST\")} → ${summary.modules.host ?? \"local\"}`);\n console.log(` ${colors.dim(\"UI\")} → ${summary.modules.ui ?? \"local\"}`);\n console.log(` ${colors.dim(\"API\")} → ${summary.modules.api ?? \"local\"}`);\n if (summary.modules.auth) {\n console.log(` ${colors.dim(\"AUTH\")} → ${summary.modules.auth}`);\n }\n if (summary.warnings.length > 0) {\n console.log();\n for (const w of summary.warnings) {\n console.log(` ${colors.yellow(w)}`);\n }\n }\n console.log();\n}\n\nfunction clearSpinnerStopLine() {\n if (!process.stdout.isTTY) return;\n process.stdout.write(\"\\u001B[1A\\u001B[2K\\u001B[1G\");\n}\n\nasync function warnIfOutdated(client: any, command: string): Promise<void> {\n if (![\"dev\", \"build\", \"start\"].includes(command)) return;\n\n try {\n const status = await client.status();\n if (status.status === \"error\" || !status.packages) return;\n\n const frameworkPackages = [\"everything-dev\", \"every-plugin\"];\n\n const outdated = status.packages.filter(\n (p: { name: string; installed?: string; latest?: string }) =>\n p.installed &&\n p.latest &&\n normalizeVersion(p.installed) !== normalizeVersion(p.latest) &&\n frameworkPackages.includes(p.name),\n );\n\n if (outdated.length === 0) return;\n\n console.log();\n console.log(colors.yellow(` ! Outdated packages detected:`));\n for (const pkg of outdated) {\n console.log(colors.dim(` ${pkg.name} ${pkg.installed} → ${pkg.latest}`));\n }\n console.log(\n colors.dim(\n ` Run ${colors.cyan(\"bos upgrade\")} to update packages and sync template files.`,\n ),\n );\n console.log();\n } catch {\n // silently ignore if status check fails\n }\n}\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.includes(\"--help\") || args.includes(\"-h\")) {\n printHelp();\n return;\n }\n\n const invocationArgs = args.length > 0 ? args : [\"dev\"];\n const command = invocationArgs[0] ?? \"dev\";\n const configPath = findConfigPath();\n\n const commandMatch = findCommandDescriptor(invocationArgs);\n if (!commandMatch) {\n console.error(`Unknown command: ${command}`);\n process.exit(1);\n }\n\n const { descriptor, consumed } = commandMatch;\n const commandArgs = invocationArgs.slice(consumed);\n\n printBanner();\n\n const runtime = createPluginRuntime({\n registry: {\n bos: { module: bosPlugin },\n },\n secrets: {},\n });\n\n const pluginRuntime: any = runtime;\n const loadPlugin = pluginRuntime.usePlugin.bind(pluginRuntime);\n const plugin = await loadPlugin(\"bos\", {\n variables: {\n configPath: configPath ?? undefined,\n },\n secrets: {},\n });\n\n const client = plugin.createClient();\n\n await warnIfOutdated(client, command);\n\n try {\n const input = parseCommandInput(descriptor, commandArgs);\n\n if (descriptor.key === \"dev\") {\n const devSpinner = p.spinner();\n devSpinner.start(\"Starting dev environment\");\n\n const devPhaseLabels: Record<string, string> = {\n config: \"Preparing config...\",\n install: \"Installing dependencies...\",\n \"build plugin\": \"Building plugin...\",\n build: \"Building everything-dev...\",\n };\n\n const onDevProgress = (event: ProgressEvent) => {\n const label = devPhaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n devSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onDevProgress);\n\n let result: DevResult;\n try {\n result = await client.dev(input as DevOptions);\n } finally {\n pluginEvents.off(\"progress\", onDevProgress);\n }\n\n if (result.status === \"error\") {\n devSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.description}`);\n process.exit(1);\n }\n\n devSpinner.stop();\n clearSpinnerStopLine();\n\n const session = consumeDevSession();\n if (session) {\n const { devApp } = await import(\"./dev-session\");\n devApp(session.orchestrator, session.services, session.runtimeConfig);\n }\n return;\n }\n\n if (descriptor.key === \"start\") {\n const startSpinner = p.spinner();\n startSpinner.start(\"Starting production environment\");\n\n const startPhaseLabels: Record<string, string> = {\n config: \"Preparing config...\",\n \"generate artifacts\": \"Generating code artifacts...\",\n };\n\n const onStartProgress = (event: ProgressEvent) => {\n const label = startPhaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n startSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onStartProgress);\n\n let result: StartResult;\n try {\n result = await client.start(input as StartOptions);\n } finally {\n pluginEvents.off(\"progress\", onStartProgress);\n }\n\n if (result.status === \"error\") {\n startSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n startSpinner.stop(\"Ready\");\n\n const session = consumeDevSession();\n if (session) {\n const summary = session.summary;\n if (summary) {\n printStartSummary(summary);\n }\n const { startApp } = await import(\"./dev-session\");\n startApp(session.orchestrator, session.services, session.runtimeConfig);\n }\n return;\n }\n\n if (descriptor.key === \"init\") {\n let initInput: InitOptions = { ...(input as InitOptions) };\n\n if (!initInput.noInteractive) {\n const basic = await promptInitBasic({\n extends: initInput.extends,\n account: initInput.account,\n domain: initInput.domain,\n });\n\n let parentPluginKeys: string[] = [];\n let parentConfig: {\n title?: string;\n description?: string;\n plugins?: Record<string, unknown>;\n } | null = null;\n\n const fetchSpinner = p.spinner();\n fetchSpinner.start(\"Fetching parent config\");\n try {\n parentConfig = await fetchParentConfig(basic.extendsAccount, basic.extendsGateway);\n if (parentConfig?.plugins && typeof parentConfig.plugins === \"object\") {\n parentPluginKeys = Object.keys(parentConfig.plugins);\n }\n } catch {\n fetchSpinner.stop(\"Config not found\");\n console.error(\n `[CLI] No config found at bos://${basic.extendsAccount}/${basic.extendsGateway}`,\n );\n process.exit(1);\n }\n fetchSpinner.stop(\"Config fetched\");\n\n if (\n typeof parentConfig?.title === \"string\" &&\n parentConfig.title.trim() &&\n typeof parentConfig?.description === \"string\" &&\n parentConfig.description.trim()\n ) {\n const shouldContinue = await p.confirm({\n message: `You will be extending ${parentConfig.title} - ${parentConfig.description}. Continue?`,\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n process.exit(0);\n }\n }\n\n const overrides = await promptInitOverrides({\n parentPluginKeys,\n plugins: initInput.plugins,\n overrides: initInput.overrides as OverrideSection[] | undefined,\n });\n\n const directory = initInput.directory || basic.domain || basic.extendsGateway;\n\n initInput = {\n ...initInput,\n extends: `bos://${basic.extendsAccount}/${basic.extendsGateway}`,\n directory,\n account: basic.account,\n domain: basic.domain || undefined,\n plugins: overrides.plugins,\n overrides: overrides.overrides,\n noInteractive: true,\n };\n }\n\n const initSpinner = p.spinner();\n initSpinner.start(\"Initializing project\");\n\n const phaseLabels: Record<string, string> = {\n \"parent config\": \"Fetching parent config...\",\n \"template source\": \"Resolving template source...\",\n \"scaffold project\": \"Creating project scaffold...\",\n \"copy files\": \"Copying template files...\",\n \"personalize config\": \"Personalizing config...\",\n \"write snapshot\": \"Writing snapshot...\",\n \"resolve config\": \"Resolving config...\",\n \"generate env/docker\": \"Generating environment config...\",\n \"create env file\": \"Creating .env file...\",\n \"install dependencies\": \"Installing dependencies...\",\n \"generate types\": \"Generating types...\",\n \"generate migrations\": \"Generating database migrations...\",\n \"generate code artifacts\": \"Generating code artifacts...\",\n };\n\n const onProgress = (event: ProgressEvent) => {\n const label = phaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n initSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onProgress);\n\n let result: InitResult;\n try {\n result = await client.init(initInput);\n } finally {\n pluginEvents.off(\"progress\", onProgress);\n }\n\n if (result.status === \"error\") {\n initSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n initSpinner.stop(\"Project initialized\");\n\n console.log(` ${colors.dim(\"Extends:\")} ${result.extends}`);\n console.log(` ${colors.dim(\"Directory:\")} ${result.directory}`);\n if (result.account) console.log(` ${colors.dim(\"Account:\")} ${result.account}`);\n if (result.domain) console.log(` ${colors.dim(\"Domain:\")} ${result.domain}`);\n if (result.overrides && result.overrides.length > 0)\n console.log(` ${colors.dim(\"Overrides:\")} ${result.overrides.join(\", \")}`);\n if (result.plugins && result.plugins.length > 0)\n console.log(` ${colors.dim(\"Plugins:\")} ${result.plugins.join(\", \")}`);\n console.log(` ${colors.dim(\"Files copied:\")} ${result.filesCopied}`);\n printTimingSummary(result.timings);\n console.log();\n console.log(colors.dim(\" Next steps:\"));\n console.log(colors.dim(` cd ${result.directory}`));\n if (!initInput.noInstall) {\n console.log(colors.dim(\" docker compose up -d --wait\"));\n console.log(colors.dim(\" bun run dev\"));\n } else {\n console.log(colors.dim(\" bun install\"));\n console.log(colors.dim(\" docker compose up -d --wait\"));\n console.log(colors.dim(\" bun run dev\"));\n }\n console.log();\n\n if (initInput.noInteractive !== true && !initInput.noInstall && result.targetDir) {\n const shouldStartDocker = await p.confirm({\n message: \"Run docker compose up -d --wait?\",\n initialValue: true,\n });\n\n if (shouldStartDocker === true) {\n const dockerSpinner = p.spinner();\n dockerSpinner.start(\"Starting Docker services\");\n try {\n await runDockerComposeUp(result.targetDir);\n dockerSpinner.stop(\"Docker services ready\");\n } catch (error) {\n dockerSpinner.stop(\"Docker services not started\");\n p.log.warn(\n `docker compose up -d --wait failed: ${error instanceof Error ? error.message : error}`,\n );\n }\n }\n }\n\n return;\n }\n\n const result = await (client as any)[descriptor.key](input);\n\n if (descriptor.key === \"dbStudio\") {\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n const configPath = findConfigPath();\n if (configPath) loadProjectEnv(dirname(configPath));\n\n const { runStudioLocal, runStudioRemote } = await import(\"./cli/db-studio\");\n const info = {\n key: result.plugin as string,\n source: result.source as \"local\" | \"remote\",\n section: result.section as \"app.api\" | \"app.auth\" | \"plugins\",\n databaseSecret: result.databaseSecret as string,\n databaseUrl: result.databaseUrl as string,\n workspaceDir: result.workspaceDir as string | undefined,\n projectDir: dirname(configPath ?? process.cwd()),\n };\n\n try {\n if (info.source === \"local\" && info.workspaceDir) {\n await runStudioLocal(info);\n } else {\n await runStudioRemote(info);\n }\n } catch (error) {\n console.error(`[CLI] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n return;\n }\n\n if (descriptor.key === \"config\") {\n if (!result.config) {\n console.error(\"No bos.config.json found\");\n process.exit(1);\n }\n\n printConfigView(result.config);\n process.stdout.write(`${JSON.stringify(result.config, null, 2)}\\n`);\n return;\n }\n\n if (descriptor.key === \"sync\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n if (result.status === \"dry-run\") {\n console.log(colors.cyan(`${icons.ok} Dry run — no files written`));\n } else {\n console.log(colors.green(`${icons.ok} Template synced`));\n }\n if (result.updated.length > 0) {\n console.log(` ${colors.dim(\"Updated:\")} ${result.updated.length} file(s)`);\n for (const f of result.updated) console.log(` ${colors.dim(f)}`);\n }\n if (result.added.length > 0) {\n console.log(` ${colors.dim(\"Added:\")} ${result.added.length} file(s)`);\n for (const f of result.added) console.log(` ${colors.dim(f)}`);\n }\n if (result.skipped.length > 0) {\n console.log(\n ` ${colors.yellow(\"Skipped:\")} ${result.skipped.length} file(s) (locally modified, use --force to overwrite)`,\n );\n for (const f of result.skipped) console.log(` ${colors.dim(f)}`);\n }\n if (result.updated.length === 0 && result.added.length === 0 && result.skipped.length === 0) {\n console.log(` ${colors.dim(\"Already up to date\")}`);\n }\n if (result.status !== \"dry-run\" && result.updated.length > 0) {\n console.log();\n console.log(colors.dim(\" Review changes — your customizations take priority:\"));\n console.log(\n colors.dim(\n \" • api/src/contract.ts, api/src/index.ts, api/src/db/schema.ts — never overwritten\",\n ),\n );\n console.log(\n colors.dim(\" • ui/src/components/**, ui/src/styles.css — never overwritten\"),\n );\n console.log(\n colors.dim(\n \" • Other updated files — accept framework improvements, then restore your changes\",\n ),\n );\n console.log(colors.dim(\" • Skipped files — yours already, only update with --force\"));\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"upgrade\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n if (result.status === \"dry-run\") {\n console.log(colors.cyan(`${icons.ok} Dry run — no changes applied`));\n } else {\n console.log(colors.green(`${icons.ok} Upgrade successful`));\n }\n for (const pkg of result.packages) {\n if (pkg.from && pkg.from !== pkg.to) {\n console.log(` ${colors.dim(`${pkg.name}:`)} ${pkg.from} → ${pkg.to}`);\n } else if (!pkg.from) {\n console.log(` ${colors.dim(`${pkg.name}:`)} ${pkg.to} (new)`);\n } else {\n console.log(` ${colors.dim(`${pkg.name}:`)} ${pkg.to} (up to date)`);\n }\n }\n if (result.changelogUrl) {\n console.log(` ${colors.dim(\"Changelog:\")} ${result.changelogUrl}`);\n }\n if (result.availablePlugins && result.availablePlugins.length > 0) {\n console.log(` ${colors.dim(\"New parent plugins:\")} ${result.availablePlugins.join(\", \")}`);\n }\n if (result.selectedPlugins && result.selectedPlugins.length > 0) {\n console.log(` ${colors.dim(\"Added plugins:\")} ${result.selectedPlugins.join(\", \")}`);\n }\n printTimingSummary(result.timings);\n if (result.sync) {\n const sync = result.sync;\n if (sync.updated.length > 0) {\n console.log(` ${colors.dim(\"Updated:\")} ${sync.updated.length} file(s)`);\n for (const f of sync.updated) console.log(` ${colors.dim(f)}`);\n }\n if (sync.added.length > 0) {\n console.log(` ${colors.dim(\"Added:\")} ${sync.added.length} file(s)`);\n for (const f of sync.added) console.log(` ${colors.dim(f)}`);\n }\n if (sync.skipped.length > 0) {\n console.log(\n ` ${colors.yellow(\"Skipped:\")} ${sync.skipped.length} file(s) (locally modified, use --force to overwrite)`,\n );\n for (const f of sync.skipped) console.log(` ${colors.dim(f)}`);\n }\n if (\n result.status !== \"dry-run\" &&\n (sync.updated.length > 0 || sync.added.length > 0 || sync.skipped.length > 0)\n ) {\n console.log();\n console.log(colors.dim(\" Resolve differences — your code takes priority:\"));\n console.log();\n console.log(colors.dim(\" Never overwritten (safe):\"));\n console.log(\n colors.dim(\" • api/src/contract.ts, api/src/index.ts, api/src/db/schema.ts\"),\n );\n console.log(colors.dim(\" • ui/src/components/**, ui/src/styles.css\"));\n console.log();\n console.log(colors.dim(\" Replaced — review and keep your changes:\"));\n console.log(\n colors.dim(\n \" • api/drizzle.config.ts, api/tsconfig.json, api/tsconfig.contract.json\",\n ),\n );\n console.log(colors.dim(\" • api/plugin.dev.ts, api/rspack.config.js\"));\n console.log(colors.dim(\" • ui/src/routes/* (core routes only)\"));\n console.log();\n console.log(colors.dim(\" Merged — your deps preserved:\"));\n console.log(colors.dim(\" • package.json, api/package.json, ui/package.json\"));\n console.log();\n console.log(colors.dim(\" Skipped — already yours:\"));\n console.log(colors.dim(\" • Use --force only if you want framework updates\"));\n }\n }\n if (result.migrated && result.migrated.length > 0) {\n console.log(` ${colors.yellow(\"Removed:\")} ${result.migrated.length} obsolete file(s)`);\n for (const f of result.migrated) console.log(` ${colors.dim(f)}`);\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"status\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.app} ${gradients.cyber(\"STATUS\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n if (result.extends) console.log(` ${colors.dim(\"Extends:\")} ${result.extends}`);\n if (result.account) console.log(` ${colors.dim(\"Account:\")} ${result.account}`);\n if (result.domain) console.log(` ${colors.dim(\"Domain:\")} ${result.domain}`);\n console.log();\n console.log(` ${colors.dim(\"Packages:\")}`);\n for (const pkg of result.packages) {\n const hasUpdate =\n pkg.installed &&\n pkg.latest &&\n normalizeVersion(pkg.installed) !== normalizeVersion(pkg.latest);\n const versionStr = hasUpdate\n ? `${pkg.installed} → ${pkg.latest}`\n : pkg.installed || \"not installed\";\n const label = hasUpdate ? colors.yellow(versionStr) : colors.dim(versionStr);\n console.log(` ${colors.dim(`${pkg.name}`)} ${label}`);\n }\n console.log();\n if (result.lastSync) {\n const ago = formatTimeAgo(result.lastSync);\n console.log(` ${colors.dim(\"Last sync:\")} ${ago}`);\n } else {\n console.log(` ${colors.dim(\"Last sync:\")} never`);\n }\n const envLabel =\n result.envFile === \"found\"\n ? colors.green(\"found\")\n : result.envFile === \"example-only\"\n ? colors.yellow(\"missing (only .env.example found)\")\n : colors.error(\"missing\");\n console.log(` ${colors.dim(\".env:\")} ${envLabel}`);\n if (result.parentReachable !== undefined) {\n const parentLabel = result.parentReachable\n ? colors.green(\"reachable\")\n : colors.error(\"unreachable\");\n console.log(` ${colors.dim(\"Parent:\")} ${parentLabel}`);\n }\n const hasUpdates = result.packages.some(\n (p: { installed?: string; latest?: string }) =>\n p.installed && p.latest && normalizeVersion(p.installed) !== normalizeVersion(p.latest),\n );\n if (hasUpdates) {\n console.log();\n console.log(\n colors.dim(\n ` Run ${colors.cyan(\"bos upgrade\")} to update packages and sync template files.`,\n ),\n );\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"typesGen\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n console.log(colors.green(`${icons.ok} Types generated`));\n if (result.source) {\n console.log(\n ` ${colors.dim(\"Mode:\")} ${result.source === \"remote\" ? colors.cyan(\"remote\") : colors.dim(\"local\")}`,\n );\n }\n if (result.generated.length > 0) {\n console.log(` ${colors.dim(\"Generated:\")}`);\n for (const f of result.generated) console.log(` ${colors.dim(f)}`);\n }\n if (result.fetched.length > 0) {\n console.log(` ${colors.dim(\"Fetched (remote):\")}`);\n for (const url of result.fetched) console.log(` ${colors.dim(url)}`);\n }\n if (result.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")}`);\n for (const s of result.skipped) console.log(` ${colors.dim(s)}`);\n }\n if (result.failed.length > 0) {\n console.log(` ${colors.yellow(\"Failed:\")}`);\n for (const f of result.failed) console.log(` ${colors.error(f)}`);\n }\n console.log();\n return;\n }\n\n if (result?.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n if (descriptor.key === \"keyPublish\") {\n process.stdout.write(`Generated publish key for ${result.account}\\n`);\n process.stdout.write(` Network: ${result.network}\\n`);\n process.stdout.write(` Contract: ${result.contract}\\n`);\n process.stdout.write(` Allowance: ${result.allowance}\\n`);\n process.stdout.write(` Functions: ${result.functionNames.join(\", \")}\\n`);\n process.stdout.write(` Public key: ${result.publicKey}\\n`);\n process.stdout.write(` Private key: ${result.privateKey}\\n`);\n process.stdout.write(` Copy: NEAR_PRIVATE_KEY=${result.privateKey}\\n`);\n }\n\n if (descriptor.key === \"pluginAdd\") {\n console.log();\n console.log(colors.green(`${icons.ok} Added plugin ${result.key}`));\n if (result.development) console.log(` ${colors.dim(\"Development:\")} ${result.development}`);\n if (result.production) console.log(` ${colors.dim(\"Production:\")} ${result.production}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginRemove\") {\n console.log();\n console.log(colors.green(`${icons.ok} Removed plugin ${result.key}`));\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginList\") {\n console.log();\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.config} ${gradients.cyber(\"PLUGINS\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n if (result.plugins.length === 0) {\n console.log(colors.dim(\" No plugins configured\"));\n } else {\n for (const pluginItem of result.plugins) {\n console.log(` ${colors.cyan(pluginItem.key)}`);\n if (pluginItem.development)\n console.log(` ${colors.dim(\"Development:\")} ${pluginItem.development}`);\n if (pluginItem.production)\n console.log(` ${colors.dim(\"Production:\")} ${pluginItem.production}`);\n }\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginPublish\") {\n console.log();\n console.log(colors.green(`${icons.ok} Published plugin ${result.key}`));\n if (result.path) console.log(` ${colors.dim(\"Path:\")} ${result.path}`);\n if (result.script) console.log(` ${colors.dim(\"Script:\")} bun run ${result.script}`);\n if (result.production) console.log(` ${colors.dim(\"Production:\")} ${result.production}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"publish\") {\n if (result.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n console.log();\n return;\n }\n\n if (result.status === \"published\") {\n console.log();\n console.log(colors.green(`${icons.ok} Published successfully`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n if (result.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${result.txHash}`);\n }\n if (result.built && result.built.length > 0) {\n console.log(` ${colors.dim(\"Built:\")} ${result.built.join(\", \")}`);\n }\n if (result.skipped && result.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")} ${result.skipped.join(\", \")}`);\n }\n console.log();\n return;\n }\n }\n\n if (descriptor.key === \"deploy\") {\n const deployResult = result as any;\n if (deployResult.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n console.log();\n return;\n }\n\n if (deployResult.status === \"deployed\") {\n console.log();\n console.log(colors.green(`${icons.ok} Deployed successfully`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n if (deployResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${deployResult.txHash}`);\n }\n if (deployResult.built && deployResult.built.length > 0) {\n console.log(` ${colors.dim(\"Built:\")} ${deployResult.built.join(\", \")}`);\n }\n if (deployResult.skipped && deployResult.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")} ${deployResult.skipped.join(\", \")}`);\n }\n if (deployResult.redeployed) {\n console.log(\n ` ${colors.dim(\"Railway:\")} redeployed ${deployResult.service ?? \"service\"}`,\n );\n } else if (!process.env.RAILWAY_TOKEN) {\n console.log(` ${colors.yellow(\"Railway:\")} skipped (RAILWAY_TOKEN not set)`);\n }\n console.log();\n return;\n }\n\n if (deployResult.status === \"published\") {\n console.log();\n console.log(colors.yellow(`${icons.err} Config published, but Railway redeploy failed`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n if (deployResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${deployResult.txHash}`);\n }\n if (deployResult.error) {\n console.log(` ${colors.dim(\"Railway:\")} ${deployResult.error}`);\n }\n console.log();\n process.exit(1);\n }\n }\n } catch (error) {\n console.error(`[CLI] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n}\n\nvoid main().catch((error) => {\n console.error(\"[CLI] Fatal error:\", error);\n process.exit(1);\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.cjs","names":["colors","frames","icons","gradients","formatDuration","sumPhaseDurations","findConfigPath","findCommandDescriptor","bosPlugin","parseCommandInput","p","consumeDevSession","promptInitBasic","fetchParentConfig","promptInitOverrides","runDockerComposeUp"],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { dirname } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { findCommandDescriptor } from \"./cli/catalog\";\nimport { printHelp } from \"./cli/help\";\nimport { loadProjectEnv } from \"./cli/infra\";\nimport { fetchParentConfig, runDockerComposeUp } from \"./cli/init\";\nimport { parseCommandInput } from \"./cli/parse\";\nimport { promptInitBasic, promptInitOverrides } from \"./cli/prompts\";\nimport { formatDuration, sumPhaseDurations } from \"./cli/timing\";\nimport { findConfigPath } from \"./config\";\nimport type {\n DevOptions,\n DevResult,\n InitOptions,\n InitResult,\n OverrideSection,\n StartOptions,\n StartResult,\n} from \"./contract\";\nimport type { ProgressEvent, StartSummary } from \"./plugin\";\nimport bosPlugin, { consumeDevSession, pluginEvents } from \"./plugin\";\nimport { createPluginRuntime } from \"./sdk\";\nimport { printBanner } from \"./utils/banner\";\nimport { colors, frames, gradients, icons } from \"./utils/theme\";\n\nfunction printConfigView(result: {\n account: string;\n domain?: string;\n staging?: { domain: string };\n app?: {\n host: { name?: string; development: string; production?: string };\n ui: { name?: string; development?: string; production?: string; ssr?: string };\n api: { name?: string; development?: string; production?: string; proxy?: string };\n };\n}) {\n console.log();\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.app} ${gradients.cyber(\"CONFIG\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n\n console.log(` ${colors.dim(\"Account\")} ${colors.cyan(result.account)}`);\n console.log(` ${colors.dim(\"Domain\")} ${colors.white(result.domain ?? \"not configured\")}`);\n if (result.staging) {\n console.log(` ${colors.dim(\"Staging\")} ${colors.magenta(result.staging.domain)}`);\n }\n console.log();\n}\n\nfunction formatTimeAgo(isoTimestamp: string): string {\n const now = Date.now();\n const then = new Date(isoTimestamp).getTime();\n const diffMs = now - then;\n const diffMins = Math.floor(diffMs / 60_000);\n if (diffMins < 1) return \"just now\";\n if (diffMins < 60) return `${diffMins} minute${diffMins > 1 ? \"s\" : \"\"} ago`;\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? \"s\" : \"\"} ago`;\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 30) return `${diffDays} day${diffDays > 1 ? \"s\" : \"\"} ago`;\n return isoTimestamp.split(\"T\")[0] ?? isoTimestamp;\n}\n\nfunction normalizeVersion(v: string): string {\n return v.replace(/^[\\^~>=v]+/, \"\").trim();\n}\n\nfunction printTimingSummary(timings: Array<{ name: string; durationMs: number }> | undefined) {\n if (!timings || timings.length === 0) return;\n\n console.log(` ${colors.dim(\"Timings:\")}`);\n for (const timing of timings) {\n console.log(` ${colors.dim(timing.name.padEnd(22))} ${formatDuration(timing.durationMs)}`);\n }\n console.log(\n ` ${colors.dim(\"total\".padEnd(22))} ${formatDuration(sumPhaseDurations(timings))}`,\n );\n}\n\nfunction printStartSummary(summary: StartSummary) {\n console.log();\n console.log(` ${colors.dim(\"Config Source:\")} ${summary.configSource}`);\n if (summary.configSourceHttp) {\n console.log(` ${colors.dim(summary.configSourceHttp)}`);\n }\n console.log(` ${colors.dim(\"Account:\")} ${summary.account}`);\n console.log(` ${colors.dim(\"Domain:\")} ${summary.domain ?? \"not configured\"}`);\n console.log();\n console.log(` ${colors.dim(\"Modules:\")}`);\n console.log(` ${colors.dim(\"HOST\")} → ${summary.modules.host ?? \"local\"}`);\n console.log(` ${colors.dim(\"UI\")} → ${summary.modules.ui ?? \"local\"}`);\n console.log(` ${colors.dim(\"API\")} → ${summary.modules.api ?? \"local\"}`);\n if (summary.modules.auth) {\n console.log(` ${colors.dim(\"AUTH\")} → ${summary.modules.auth}`);\n }\n if (summary.warnings.length > 0) {\n console.log();\n for (const w of summary.warnings) {\n console.log(` ${colors.yellow(w)}`);\n }\n }\n console.log();\n}\n\nfunction clearSpinnerStopLine() {\n if (!process.stdout.isTTY) return;\n process.stdout.write(\"\\u001B[1A\\u001B[2K\\u001B[1G\");\n}\n\nasync function warnIfOutdated(client: any, command: string): Promise<void> {\n if (![\"dev\", \"build\", \"start\"].includes(command)) return;\n\n try {\n const status = await client.status();\n if (status.status === \"error\" || !status.packages) return;\n\n const frameworkPackages = [\"everything-dev\", \"every-plugin\"];\n\n const outdated = status.packages.filter(\n (p: { name: string; installed?: string; latest?: string }) =>\n p.installed &&\n p.latest &&\n normalizeVersion(p.installed) !== normalizeVersion(p.latest) &&\n frameworkPackages.includes(p.name),\n );\n\n if (outdated.length === 0) return;\n\n console.log();\n console.log(colors.yellow(` ! Outdated packages detected:`));\n for (const pkg of outdated) {\n console.log(colors.dim(` ${pkg.name} ${pkg.installed} → ${pkg.latest}`));\n }\n console.log(\n colors.dim(\n ` Run ${colors.cyan(\"bos upgrade\")} to update packages and sync template files.`,\n ),\n );\n console.log();\n } catch {\n // silently ignore if status check fails\n }\n}\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.includes(\"--help\") || args.includes(\"-h\")) {\n printHelp();\n return;\n }\n\n const invocationArgs = args.length > 0 ? args : [\"dev\"];\n const command = invocationArgs[0] ?? \"dev\";\n const configPath = findConfigPath();\n\n const commandMatch = findCommandDescriptor(invocationArgs);\n if (!commandMatch) {\n console.error(`Unknown command: ${command}`);\n process.exit(1);\n }\n\n const { descriptor, consumed } = commandMatch;\n const commandArgs = invocationArgs.slice(consumed);\n\n printBanner();\n\n const runtime = createPluginRuntime({\n registry: {\n bos: { module: bosPlugin },\n },\n secrets: {},\n });\n\n const pluginRuntime: any = runtime;\n const loadPlugin = pluginRuntime.usePlugin.bind(pluginRuntime);\n const plugin = await loadPlugin(\"bos\", {\n variables: {\n configPath: configPath ?? undefined,\n },\n secrets: {},\n });\n\n const client = plugin.createClient();\n\n const outdatedWarning = warnIfOutdated(client, command);\n\n try {\n const input = parseCommandInput(descriptor, commandArgs);\n\n if (descriptor.key === \"dev\") {\n const devSpinner = p.spinner();\n devSpinner.start(\"Starting dev environment\");\n\n const devPhaseLabels: Record<string, string> = {\n \"shared deps\": \"Preparing config...\",\n install: \"Installing dependencies...\",\n build: \"Building...\",\n \"resolve config\": \"Resolving config...\",\n ports: \"Finding available ports...\",\n \"generate artifacts\": \"Generating code artifacts...\",\n };\n\n const onDevProgress = (event: ProgressEvent) => {\n const label = devPhaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n devSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onDevProgress);\n\n let result: DevResult;\n try {\n result = await client.dev(input as DevOptions);\n } finally {\n pluginEvents.off(\"progress\", onDevProgress);\n }\n\n if (result.status === \"error\") {\n devSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.description}`);\n process.exit(1);\n }\n\n devSpinner.stop();\n clearSpinnerStopLine();\n\n const session = consumeDevSession();\n await outdatedWarning;\n if (session) {\n const { devApp } = await import(\"./dev-session\");\n devApp(session.orchestrator, session.services, session.runtimeConfig);\n }\n return;\n }\n\n if (descriptor.key === \"start\") {\n const startSpinner = p.spinner();\n startSpinner.start(\"Starting production environment\");\n\n const startPhaseLabels: Record<string, string> = {\n config: \"Preparing config...\",\n \"generate artifacts\": \"Generating code artifacts...\",\n };\n\n const onStartProgress = (event: ProgressEvent) => {\n const label = startPhaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n startSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onStartProgress);\n\n let result: StartResult;\n try {\n result = await client.start(input as StartOptions);\n } finally {\n pluginEvents.off(\"progress\", onStartProgress);\n }\n\n if (result.status === \"error\") {\n startSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n startSpinner.stop(\"Ready\");\n\n const session = consumeDevSession();\n await outdatedWarning;\n if (session) {\n const summary = session.summary;\n if (summary) {\n printStartSummary(summary);\n }\n const { startApp } = await import(\"./dev-session\");\n startApp(session.orchestrator, session.services, session.runtimeConfig);\n }\n return;\n }\n\n if (descriptor.key === \"init\") {\n let initInput: InitOptions = { ...(input as InitOptions) };\n\n if (!initInput.noInteractive) {\n const basic = await promptInitBasic({\n extends: initInput.extends,\n account: initInput.account,\n domain: initInput.domain,\n });\n\n let parentPluginKeys: string[] = [];\n let parentConfig: {\n title?: string;\n description?: string;\n plugins?: Record<string, unknown>;\n } | null = null;\n\n const fetchSpinner = p.spinner();\n fetchSpinner.start(\"Fetching parent config\");\n try {\n parentConfig = await fetchParentConfig(basic.extendsAccount, basic.extendsGateway);\n if (parentConfig?.plugins && typeof parentConfig.plugins === \"object\") {\n parentPluginKeys = Object.keys(parentConfig.plugins);\n }\n } catch {\n fetchSpinner.stop(\"Config not found\");\n console.error(\n `[CLI] No config found at bos://${basic.extendsAccount}/${basic.extendsGateway}`,\n );\n process.exit(1);\n }\n fetchSpinner.stop(\"Config fetched\");\n\n if (\n typeof parentConfig?.title === \"string\" &&\n parentConfig.title.trim() &&\n typeof parentConfig?.description === \"string\" &&\n parentConfig.description.trim()\n ) {\n const shouldContinue = await p.confirm({\n message: `You will be extending ${parentConfig.title} - ${parentConfig.description}. Continue?`,\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n process.exit(0);\n }\n }\n\n const overrides = await promptInitOverrides({\n parentPluginKeys,\n plugins: initInput.plugins,\n overrides: initInput.overrides as OverrideSection[] | undefined,\n });\n\n const directory = initInput.directory || basic.domain || basic.extendsGateway;\n\n initInput = {\n ...initInput,\n extends: `bos://${basic.extendsAccount}/${basic.extendsGateway}`,\n directory,\n account: basic.account,\n domain: basic.domain || undefined,\n plugins: overrides.plugins,\n overrides: overrides.overrides,\n noInteractive: true,\n };\n }\n\n const initSpinner = p.spinner();\n initSpinner.start(\"Initializing project\");\n\n const phaseLabels: Record<string, string> = {\n \"parent config\": \"Fetching parent config...\",\n \"template source\": \"Resolving template source...\",\n \"scaffold project\": \"Creating project scaffold...\",\n \"copy files\": \"Copying template files...\",\n \"personalize config\": \"Personalizing config...\",\n \"write snapshot\": \"Writing snapshot...\",\n \"resolve config\": \"Resolving config...\",\n \"generate env/docker\": \"Generating environment config...\",\n \"create env file\": \"Creating .env file...\",\n \"install dependencies\": \"Installing dependencies...\",\n \"generate types\": \"Generating types...\",\n \"generate migrations\": \"Generating database migrations...\",\n \"generate code artifacts\": \"Generating code artifacts...\",\n };\n\n const onProgress = (event: ProgressEvent) => {\n const label = phaseLabels[event.phase] ?? event.phase;\n if (event.status === \"running\") {\n initSpinner.message(label);\n }\n };\n pluginEvents.on(\"progress\", onProgress);\n\n let result: InitResult;\n try {\n result = await client.init(initInput);\n } finally {\n pluginEvents.off(\"progress\", onProgress);\n }\n\n if (result.status === \"error\") {\n initSpinner.stop(\"Failed\");\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n initSpinner.stop(\"Project initialized\");\n\n console.log(` ${colors.dim(\"Extends:\")} ${result.extends}`);\n console.log(` ${colors.dim(\"Directory:\")} ${result.directory}`);\n if (result.account) console.log(` ${colors.dim(\"Account:\")} ${result.account}`);\n if (result.domain) console.log(` ${colors.dim(\"Domain:\")} ${result.domain}`);\n if (result.overrides && result.overrides.length > 0)\n console.log(` ${colors.dim(\"Overrides:\")} ${result.overrides.join(\", \")}`);\n if (result.plugins && result.plugins.length > 0)\n console.log(` ${colors.dim(\"Plugins:\")} ${result.plugins.join(\", \")}`);\n console.log(` ${colors.dim(\"Files copied:\")} ${result.filesCopied}`);\n printTimingSummary(result.timings);\n console.log();\n console.log(colors.dim(\" Next steps:\"));\n console.log(colors.dim(` cd ${result.directory}`));\n if (!initInput.noInstall) {\n console.log(colors.dim(\" docker compose up -d --wait\"));\n console.log(colors.dim(\" bun run dev\"));\n } else {\n console.log(colors.dim(\" bun install\"));\n console.log(colors.dim(\" docker compose up -d --wait\"));\n console.log(colors.dim(\" bun run dev\"));\n }\n console.log();\n\n if (initInput.noInteractive !== true && !initInput.noInstall && result.targetDir) {\n const shouldStartDocker = await p.confirm({\n message: \"Run docker compose up -d --wait?\",\n initialValue: true,\n });\n\n if (shouldStartDocker === true) {\n const dockerSpinner = p.spinner();\n dockerSpinner.start(\"Starting Docker services\");\n try {\n await runDockerComposeUp(result.targetDir);\n dockerSpinner.stop(\"Docker services ready\");\n } catch (error) {\n dockerSpinner.stop(\"Docker services not started\");\n p.log.warn(\n `docker compose up -d --wait failed: ${error instanceof Error ? error.message : error}`,\n );\n }\n }\n }\n\n return;\n }\n\n await outdatedWarning;\n\n const result = await (client as any)[descriptor.key](input);\n\n if (descriptor.key === \"dbStudio\") {\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n const configPath = findConfigPath();\n if (configPath) loadProjectEnv(dirname(configPath));\n\n const { runStudioLocal, runStudioRemote } = await import(\"./cli/db-studio\");\n const info = {\n key: result.plugin as string,\n source: result.source as \"local\" | \"remote\",\n section: result.section as \"app.api\" | \"app.auth\" | \"plugins\",\n databaseSecret: result.databaseSecret as string,\n databaseUrl: result.databaseUrl as string,\n workspaceDir: result.workspaceDir as string | undefined,\n projectDir: dirname(configPath ?? process.cwd()),\n };\n\n try {\n if (info.source === \"local\" && info.workspaceDir) {\n await runStudioLocal(info);\n } else {\n await runStudioRemote(info);\n }\n } catch (error) {\n console.error(`[CLI] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n return;\n }\n\n if (descriptor.key === \"config\") {\n if (!result.config) {\n console.error(\"No bos.config.json found\");\n process.exit(1);\n }\n\n printConfigView(result.config);\n process.stdout.write(`${JSON.stringify(result.config, null, 2)}\\n`);\n return;\n }\n\n if (descriptor.key === \"sync\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n if (result.status === \"dry-run\") {\n console.log(colors.cyan(`${icons.ok} Dry run — no files written`));\n } else {\n console.log(colors.green(`${icons.ok} Template synced`));\n }\n if (result.updated.length > 0) {\n console.log(` ${colors.dim(\"Updated:\")} ${result.updated.length} file(s)`);\n for (const f of result.updated) console.log(` ${colors.dim(f)}`);\n }\n if (result.added.length > 0) {\n console.log(` ${colors.dim(\"Added:\")} ${result.added.length} file(s)`);\n for (const f of result.added) console.log(` ${colors.dim(f)}`);\n }\n if (result.skipped.length > 0) {\n console.log(\n ` ${colors.yellow(\"Skipped:\")} ${result.skipped.length} file(s) (locally modified, use --force to overwrite)`,\n );\n for (const f of result.skipped) console.log(` ${colors.dim(f)}`);\n }\n if (result.updated.length === 0 && result.added.length === 0 && result.skipped.length === 0) {\n console.log(` ${colors.dim(\"Already up to date\")}`);\n }\n if (result.status !== \"dry-run\" && result.updated.length > 0) {\n console.log();\n console.log(colors.dim(\" Review changes — your customizations take priority:\"));\n console.log(\n colors.dim(\n \" • api/src/contract.ts, api/src/index.ts, api/src/db/schema.ts — never overwritten\",\n ),\n );\n console.log(\n colors.dim(\" • ui/src/components/**, ui/src/styles.css — never overwritten\"),\n );\n console.log(\n colors.dim(\n \" • Other updated files — accept framework improvements, then restore your changes\",\n ),\n );\n console.log(colors.dim(\" • Skipped files — yours already, only update with --force\"));\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"upgrade\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n if (result.status === \"dry-run\") {\n console.log(colors.cyan(`${icons.ok} Dry run — no changes applied`));\n } else {\n console.log(colors.green(`${icons.ok} Upgrade successful`));\n }\n for (const pkg of result.packages) {\n if (pkg.from && pkg.from !== pkg.to) {\n console.log(` ${colors.dim(`${pkg.name}:`)} ${pkg.from} → ${pkg.to}`);\n } else if (!pkg.from) {\n console.log(` ${colors.dim(`${pkg.name}:`)} ${pkg.to} (new)`);\n } else {\n console.log(` ${colors.dim(`${pkg.name}:`)} ${pkg.to} (up to date)`);\n }\n }\n if (result.changelogUrl) {\n console.log(` ${colors.dim(\"Changelog:\")} ${result.changelogUrl}`);\n }\n if (result.availablePlugins && result.availablePlugins.length > 0) {\n console.log(` ${colors.dim(\"New parent plugins:\")} ${result.availablePlugins.join(\", \")}`);\n }\n if (result.selectedPlugins && result.selectedPlugins.length > 0) {\n console.log(` ${colors.dim(\"Added plugins:\")} ${result.selectedPlugins.join(\", \")}`);\n }\n printTimingSummary(result.timings);\n if (result.sync) {\n const sync = result.sync;\n if (sync.updated.length > 0) {\n console.log(` ${colors.dim(\"Updated:\")} ${sync.updated.length} file(s)`);\n for (const f of sync.updated) console.log(` ${colors.dim(f)}`);\n }\n if (sync.added.length > 0) {\n console.log(` ${colors.dim(\"Added:\")} ${sync.added.length} file(s)`);\n for (const f of sync.added) console.log(` ${colors.dim(f)}`);\n }\n if (sync.skipped.length > 0) {\n console.log(\n ` ${colors.yellow(\"Skipped:\")} ${sync.skipped.length} file(s) (locally modified, use --force to overwrite)`,\n );\n for (const f of sync.skipped) console.log(` ${colors.dim(f)}`);\n }\n if (\n result.status !== \"dry-run\" &&\n (sync.updated.length > 0 || sync.added.length > 0 || sync.skipped.length > 0)\n ) {\n console.log();\n console.log(colors.dim(\" Resolve differences — your code takes priority:\"));\n console.log();\n console.log(colors.dim(\" Never overwritten (safe):\"));\n console.log(\n colors.dim(\" • api/src/contract.ts, api/src/index.ts, api/src/db/schema.ts\"),\n );\n console.log(colors.dim(\" • ui/src/components/**, ui/src/styles.css\"));\n console.log();\n console.log(colors.dim(\" Replaced — review and keep your changes:\"));\n console.log(\n colors.dim(\n \" • api/drizzle.config.ts, api/tsconfig.json, api/tsconfig.contract.json\",\n ),\n );\n console.log(colors.dim(\" • api/plugin.dev.ts, api/rspack.config.js\"));\n console.log(colors.dim(\" • ui/src/routes/* (core routes only)\"));\n console.log();\n console.log(colors.dim(\" Merged — your deps preserved:\"));\n console.log(colors.dim(\" • package.json, api/package.json, ui/package.json\"));\n console.log();\n console.log(colors.dim(\" Skipped — already yours:\"));\n console.log(colors.dim(\" • Use --force only if you want framework updates\"));\n }\n }\n if (result.migrated && result.migrated.length > 0) {\n console.log(` ${colors.yellow(\"Removed:\")} ${result.migrated.length} obsolete file(s)`);\n for (const f of result.migrated) console.log(` ${colors.dim(f)}`);\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"status\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.app} ${gradients.cyber(\"STATUS\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n if (result.extends) console.log(` ${colors.dim(\"Extends:\")} ${result.extends}`);\n if (result.account) console.log(` ${colors.dim(\"Account:\")} ${result.account}`);\n if (result.domain) console.log(` ${colors.dim(\"Domain:\")} ${result.domain}`);\n console.log();\n console.log(` ${colors.dim(\"Packages:\")}`);\n for (const pkg of result.packages) {\n const hasUpdate =\n pkg.installed &&\n pkg.latest &&\n normalizeVersion(pkg.installed) !== normalizeVersion(pkg.latest);\n const versionStr = hasUpdate\n ? `${pkg.installed} → ${pkg.latest}`\n : pkg.installed || \"not installed\";\n const label = hasUpdate ? colors.yellow(versionStr) : colors.dim(versionStr);\n console.log(` ${colors.dim(`${pkg.name}`)} ${label}`);\n }\n console.log();\n if (result.lastSync) {\n const ago = formatTimeAgo(result.lastSync);\n console.log(` ${colors.dim(\"Last sync:\")} ${ago}`);\n } else {\n console.log(` ${colors.dim(\"Last sync:\")} never`);\n }\n const envLabel =\n result.envFile === \"found\"\n ? colors.green(\"found\")\n : result.envFile === \"example-only\"\n ? colors.yellow(\"missing (only .env.example found)\")\n : colors.error(\"missing\");\n console.log(` ${colors.dim(\".env:\")} ${envLabel}`);\n if (result.parentReachable !== undefined) {\n const parentLabel = result.parentReachable\n ? colors.green(\"reachable\")\n : colors.error(\"unreachable\");\n console.log(` ${colors.dim(\"Parent:\")} ${parentLabel}`);\n }\n const hasUpdates = result.packages.some(\n (p: { installed?: string; latest?: string }) =>\n p.installed && p.latest && normalizeVersion(p.installed) !== normalizeVersion(p.latest),\n );\n if (hasUpdates) {\n console.log();\n console.log(\n colors.dim(\n ` Run ${colors.cyan(\"bos upgrade\")} to update packages and sync template files.`,\n ),\n );\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"typesGen\") {\n console.log();\n if (result.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n console.log(colors.green(`${icons.ok} Types generated`));\n if (result.source) {\n console.log(\n ` ${colors.dim(\"Mode:\")} ${result.source === \"remote\" ? colors.cyan(\"remote\") : colors.dim(\"local\")}`,\n );\n }\n if (result.generated.length > 0) {\n console.log(` ${colors.dim(\"Generated:\")}`);\n for (const f of result.generated) console.log(` ${colors.dim(f)}`);\n }\n if (result.fetched.length > 0) {\n console.log(` ${colors.dim(\"Fetched (remote):\")}`);\n for (const url of result.fetched) console.log(` ${colors.dim(url)}`);\n }\n if (result.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")}`);\n for (const s of result.skipped) console.log(` ${colors.dim(s)}`);\n }\n if (result.failed.length > 0) {\n console.log(` ${colors.yellow(\"Failed:\")}`);\n for (const f of result.failed) console.log(` ${colors.error(f)}`);\n }\n console.log();\n return;\n }\n\n if (result?.status === \"error\") {\n console.error(`[CLI] ${result.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n if (descriptor.key === \"keyPublish\") {\n process.stdout.write(`Generated publish key for ${result.account}\\n`);\n process.stdout.write(` Network: ${result.network}\\n`);\n process.stdout.write(` Contract: ${result.contract}\\n`);\n process.stdout.write(` Allowance: ${result.allowance}\\n`);\n process.stdout.write(` Functions: ${result.functionNames.join(\", \")}\\n`);\n process.stdout.write(` Public key: ${result.publicKey}\\n`);\n process.stdout.write(` Private key: ${result.privateKey}\\n`);\n process.stdout.write(` Copy: NEAR_PRIVATE_KEY=${result.privateKey}\\n`);\n }\n\n if (descriptor.key === \"pluginAdd\") {\n console.log();\n console.log(colors.green(`${icons.ok} Added plugin ${result.key}`));\n if (result.development) console.log(` ${colors.dim(\"Development:\")} ${result.development}`);\n if (result.production) console.log(` ${colors.dim(\"Production:\")} ${result.production}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginRemove\") {\n console.log();\n console.log(colors.green(`${icons.ok} Removed plugin ${result.key}`));\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginList\") {\n console.log();\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.config} ${gradients.cyber(\"PLUGINS\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n if (result.plugins.length === 0) {\n console.log(colors.dim(\" No plugins configured\"));\n } else {\n for (const pluginItem of result.plugins) {\n console.log(` ${colors.cyan(pluginItem.key)}`);\n if (pluginItem.development)\n console.log(` ${colors.dim(\"Development:\")} ${pluginItem.development}`);\n if (pluginItem.production)\n console.log(` ${colors.dim(\"Production:\")} ${pluginItem.production}`);\n }\n }\n console.log();\n return;\n }\n\n if (descriptor.key === \"pluginPublish\") {\n console.log();\n console.log(colors.green(`${icons.ok} Published plugin ${result.key}`));\n if (result.path) console.log(` ${colors.dim(\"Path:\")} ${result.path}`);\n if (result.script) console.log(` ${colors.dim(\"Script:\")} bun run ${result.script}`);\n if (result.production) console.log(` ${colors.dim(\"Production:\")} ${result.production}`);\n console.log();\n return;\n }\n\n if (descriptor.key === \"publish\") {\n if (result.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n console.log();\n return;\n }\n\n if (result.status === \"error\") {\n console.log();\n console.log(colors.error(`${icons.err} Publish failed`));\n if (result.error) {\n console.log(` ${colors.dim(\"Error:\")} ${result.error}`);\n }\n if (result.deployResults && result.deployResults.length > 0) {\n const failures = result.deployResults.filter((r: any) => !r.success);\n if (failures.length > 0) {\n console.log();\n for (const f of failures) {\n const errorLine = (f.error ?? \"Failed\").split(\"\\n\")[0];\n console.log(` ${colors.error(icons.err)} ${f.key}: ${errorLine}`);\n }\n }\n }\n console.log();\n process.exit(1);\n }\n\n if (result.status === \"published\") {\n console.log();\n console.log(colors.green(`${icons.ok} Published successfully`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n if (result.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${result.txHash}`);\n }\n if (result.built && result.built.length > 0) {\n console.log(` ${colors.dim(\"Built:\")} ${result.built.join(\", \")}`);\n }\n if (result.skipped && result.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")} ${result.skipped.join(\", \")}`);\n }\n console.log();\n return;\n }\n }\n\n if (descriptor.key === \"deploy\") {\n const deployResult = result as any;\n if (deployResult.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n console.log();\n return;\n }\n\n if (deployResult.status === \"error\") {\n console.log();\n console.log(colors.error(`${icons.err} Deploy failed`));\n if (deployResult.error) {\n console.log(` ${colors.dim(\"Error:\")} ${deployResult.error}`);\n }\n if (deployResult.deployResults && deployResult.deployResults.length > 0) {\n const failures = deployResult.deployResults.filter((r: any) => !r.success);\n if (failures.length > 0) {\n console.log();\n for (const f of failures) {\n const errorLine = (f.error ?? \"Failed\").split(\"\\n\")[0];\n console.log(` ${colors.error(icons.err)} ${f.key}: ${errorLine}`);\n }\n }\n }\n console.log();\n process.exit(1);\n }\n\n if (deployResult.status === \"deployed\") {\n console.log();\n console.log(colors.green(`${icons.ok} Deployed successfully`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n if (deployResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${deployResult.txHash}`);\n }\n if (deployResult.built && deployResult.built.length > 0) {\n console.log(` ${colors.dim(\"Built:\")} ${deployResult.built.join(\", \")}`);\n }\n if (deployResult.skipped && deployResult.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")} ${deployResult.skipped.join(\", \")}`);\n }\n if (deployResult.redeployed) {\n console.log(\n ` ${colors.dim(\"Railway:\")} redeployed ${deployResult.service ?? \"service\"}`,\n );\n } else if (!process.env.RAILWAY_TOKEN) {\n console.log(` ${colors.yellow(\"Railway:\")} skipped (RAILWAY_TOKEN not set)`);\n }\n console.log();\n return;\n }\n\n if (deployResult.status === \"published\") {\n console.log();\n console.log(colors.yellow(`${icons.err} Config published, but Railway redeploy failed`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n if (deployResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${deployResult.txHash}`);\n }\n if (deployResult.error) {\n console.log(` ${colors.dim(\"Railway:\")} ${deployResult.error}`);\n }\n console.log();\n process.exit(1);\n }\n }\n } catch (error) {\n console.error(`[CLI] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n}\n\nvoid main().catch((error) => {\n console.error(\"[CLI] Fatal error:\", error);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA0BA,SAAS,gBAAgB,QAStB;AACD,SAAQ,KAAK;AACb,SAAQ,IAAIA,qBAAO,KAAKC,qBAAO,IAAI,GAAG,CAAC,CAAC;AACxC,SAAQ,IAAI,KAAKC,oBAAM,IAAI,GAAGC,wBAAU,MAAM,SAAS,GAAG;AAC1D,SAAQ,IAAIH,qBAAO,KAAKC,qBAAO,OAAO,GAAG,CAAC,CAAC;AAC3C,SAAQ,KAAK;AAEb,SAAQ,IAAI,KAAKD,qBAAO,IAAI,UAAU,CAAC,IAAIA,qBAAO,KAAK,OAAO,QAAQ,GAAG;AACzE,SAAQ,IAAI,KAAKA,qBAAO,IAAI,SAAS,CAAC,KAAKA,qBAAO,MAAM,OAAO,UAAU,iBAAiB,GAAG;AAC7F,KAAI,OAAO,QACT,SAAQ,IAAI,KAAKA,qBAAO,IAAI,UAAU,CAAC,IAAIA,qBAAO,QAAQ,OAAO,QAAQ,OAAO,GAAG;AAErF,SAAQ,KAAK;;AAGf,SAAS,cAAc,cAA8B;CAGnD,MAAM,SAFM,KAAK,KAEC,GADL,IAAI,KAAK,aAAa,CAAC,SACX;CACzB,MAAM,WAAW,KAAK,MAAM,SAAS,IAAO;AAC5C,KAAI,WAAW,EAAG,QAAO;AACzB,KAAI,WAAW,GAAI,QAAO,GAAG,SAAS,SAAS,WAAW,IAAI,MAAM,GAAG;CACvE,MAAM,YAAY,KAAK,MAAM,WAAW,GAAG;AAC3C,KAAI,YAAY,GAAI,QAAO,GAAG,UAAU,OAAO,YAAY,IAAI,MAAM,GAAG;CACxE,MAAM,WAAW,KAAK,MAAM,YAAY,GAAG;AAC3C,KAAI,WAAW,GAAI,QAAO,GAAG,SAAS,MAAM,WAAW,IAAI,MAAM,GAAG;AACpE,QAAO,aAAa,MAAM,IAAI,CAAC,MAAM;;AAGvC,SAAS,iBAAiB,GAAmB;AAC3C,QAAO,EAAE,QAAQ,cAAc,GAAG,CAAC,MAAM;;AAG3C,SAAS,mBAAmB,SAAkE;AAC5F,KAAI,CAAC,WAAW,QAAQ,WAAW,EAAG;AAEtC,SAAQ,IAAI,KAAKA,qBAAO,IAAI,WAAW,GAAG;AAC1C,MAAK,MAAM,UAAU,QACnB,SAAQ,IAAI,OAAOA,qBAAO,IAAI,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,GAAGI,8BAAe,OAAO,WAAW,GAAG;AAE/F,SAAQ,IACN,OAAOJ,qBAAO,IAAI,QAAQ,OAAO,GAAG,CAAC,CAAC,GAAGI,8BAAeC,iCAAkB,QAAQ,CAAC,GACpF;;AAGH,SAAS,kBAAkB,SAAuB;AAChD,SAAQ,KAAK;AACb,SAAQ,IAAI,KAAKL,qBAAO,IAAI,iBAAiB,CAAC,IAAI,QAAQ,eAAe;AACzE,KAAI,QAAQ,iBACV,SAAQ,IAAI,qBAAqBA,qBAAO,IAAI,QAAQ,iBAAiB,GAAG;AAE1E,SAAQ,IAAI,KAAKA,qBAAO,IAAI,WAAW,CAAC,UAAU,QAAQ,UAAU;AACpE,SAAQ,IAAI,KAAKA,qBAAO,IAAI,UAAU,CAAC,WAAW,QAAQ,UAAU,mBAAmB;AACvF,SAAQ,KAAK;AACb,SAAQ,IAAI,KAAKA,qBAAO,IAAI,WAAW,GAAG;AAC1C,SAAQ,IAAI,OAAOA,qBAAO,IAAI,OAAO,CAAC,MAAM,QAAQ,QAAQ,QAAQ,UAAU;AAC9E,SAAQ,IAAI,OAAOA,qBAAO,IAAI,KAAK,CAAC,OAAO,QAAQ,QAAQ,MAAM,UAAU;AAC3E,SAAQ,IAAI,OAAOA,qBAAO,IAAI,MAAM,CAAC,MAAM,QAAQ,QAAQ,OAAO,UAAU;AAC5E,KAAI,QAAQ,QAAQ,KAClB,SAAQ,IAAI,OAAOA,qBAAO,IAAI,OAAO,CAAC,MAAM,QAAQ,QAAQ,OAAO;AAErE,KAAI,QAAQ,SAAS,SAAS,GAAG;AAC/B,UAAQ,KAAK;AACb,OAAK,MAAM,KAAK,QAAQ,SACtB,SAAQ,IAAI,KAAKA,qBAAO,OAAO,EAAE,GAAG;;AAGxC,SAAQ,KAAK;;AAGf,SAAS,uBAAuB;AAC9B,KAAI,CAAC,QAAQ,OAAO,MAAO;AAC3B,SAAQ,OAAO,MAAM,wBAA8B;;AAGrD,eAAe,eAAe,QAAa,SAAgC;AACzE,KAAI,CAAC;EAAC;EAAO;EAAS;EAAQ,CAAC,SAAS,QAAQ,CAAE;AAElD,KAAI;EACF,MAAM,SAAS,MAAM,OAAO,QAAQ;AACpC,MAAI,OAAO,WAAW,WAAW,CAAC,OAAO,SAAU;EAEnD,MAAM,oBAAoB,CAAC,kBAAkB,eAAe;EAE5D,MAAM,WAAW,OAAO,SAAS,QAC9B,MACC,EAAE,aACF,EAAE,UACF,iBAAiB,EAAE,UAAU,KAAK,iBAAiB,EAAE,OAAO,IAC5D,kBAAkB,SAAS,EAAE,KAAK,CACrC;AAED,MAAI,SAAS,WAAW,EAAG;AAE3B,UAAQ,KAAK;AACb,UAAQ,IAAIA,qBAAO,OAAO,kCAAkC,CAAC;AAC7D,OAAK,MAAM,OAAO,SAChB,SAAQ,IAAIA,qBAAO,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,SAAS,CAAC;AAE9E,UAAQ,IACNA,qBAAO,IACL,WAAWA,qBAAO,KAAK,cAAc,CAAC,8CACvC,CACF;AACD,UAAQ,KAAK;SACP;;AAKV,eAAe,OAAO;CACpB,MAAM,OAAO,QAAQ,KAAK,MAAM,EAAE;AAElC,KAAI,KAAK,SAAS,SAAS,IAAI,KAAK,SAAS,KAAK,EAAE;AAClD,0BAAW;AACX;;CAGF,MAAM,iBAAiB,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM;CACvD,MAAM,UAAU,eAAe,MAAM;CACrC,MAAM,aAAaM,+BAAgB;CAEnC,MAAM,eAAeC,sCAAsB,eAAe;AAC1D,KAAI,CAAC,cAAc;AACjB,UAAQ,MAAM,oBAAoB,UAAU;AAC5C,UAAQ,KAAK,EAAE;;CAGjB,MAAM,EAAE,YAAY,aAAa;CACjC,MAAM,cAAc,eAAe,MAAM,SAAS;AAElD,6BAAa;CASb,MAAM,sDAP8B;EAClC,UAAU,EACR,KAAK,EAAE,QAAQC,wBAAW,EAC3B;EACD,SAAS,EAAE;EACZ,CAEiC;CASlC,MAAM,UAAS,MARI,cAAc,UAAU,KAAK,cACjB,CAAC,OAAO;EACrC,WAAW,EACT,YAAY,cAAc,QAC3B;EACD,SAAS,EAAE;EACZ,CAAC,EAEoB,cAAc;CAEpC,MAAM,kBAAkB,eAAe,QAAQ,QAAQ;AAEvD,KAAI;EACF,MAAM,QAAQC,gCAAkB,YAAY,YAAY;AAExD,MAAI,WAAW,QAAQ,OAAO;GAC5B,MAAM,aAAaC,eAAE,SAAS;AAC9B,cAAW,MAAM,2BAA2B;GAE5C,MAAM,iBAAyC;IAC7C,eAAe;IACf,SAAS;IACT,OAAO;IACP,kBAAkB;IAClB,OAAO;IACP,sBAAsB;IACvB;GAED,MAAM,iBAAiB,UAAyB;IAC9C,MAAM,QAAQ,eAAe,MAAM,UAAU,MAAM;AACnD,QAAI,MAAM,WAAW,UACnB,YAAW,QAAQ,MAAM;;AAG7B,+BAAa,GAAG,YAAY,cAAc;GAE1C,IAAI;AACJ,OAAI;AACF,aAAS,MAAM,OAAO,IAAI,MAAoB;aACtC;AACR,gCAAa,IAAI,YAAY,cAAc;;AAG7C,OAAI,OAAO,WAAW,SAAS;AAC7B,eAAW,KAAK,SAAS;AACzB,YAAQ,MAAM,SAAS,OAAO,cAAc;AAC5C,YAAQ,KAAK,EAAE;;AAGjB,cAAW,MAAM;AACjB,yBAAsB;GAEtB,MAAM,UAAUC,kCAAmB;AACnC,SAAM;AACN,OAAI,SAAS;IACX,MAAM,EAAE,WAAW,2CAAM;AACzB,WAAO,QAAQ,cAAc,QAAQ,UAAU,QAAQ,cAAc;;AAEvE;;AAGF,MAAI,WAAW,QAAQ,SAAS;GAC9B,MAAM,eAAeD,eAAE,SAAS;AAChC,gBAAa,MAAM,kCAAkC;GAErD,MAAM,mBAA2C;IAC/C,QAAQ;IACR,sBAAsB;IACvB;GAED,MAAM,mBAAmB,UAAyB;IAChD,MAAM,QAAQ,iBAAiB,MAAM,UAAU,MAAM;AACrD,QAAI,MAAM,WAAW,UACnB,cAAa,QAAQ,MAAM;;AAG/B,+BAAa,GAAG,YAAY,gBAAgB;GAE5C,IAAI;AACJ,OAAI;AACF,aAAS,MAAM,OAAO,MAAM,MAAsB;aAC1C;AACR,gCAAa,IAAI,YAAY,gBAAgB;;AAG/C,OAAI,OAAO,WAAW,SAAS;AAC7B,iBAAa,KAAK,SAAS;AAC3B,YAAQ,MAAM,SAAS,OAAO,SAAS,kBAAkB;AACzD,YAAQ,KAAK,EAAE;;AAGjB,gBAAa,KAAK,QAAQ;GAE1B,MAAM,UAAUC,kCAAmB;AACnC,SAAM;AACN,OAAI,SAAS;IACX,MAAM,UAAU,QAAQ;AACxB,QAAI,QACF,mBAAkB,QAAQ;IAE5B,MAAM,EAAE,aAAa,2CAAM;AAC3B,aAAS,QAAQ,cAAc,QAAQ,UAAU,QAAQ,cAAc;;AAEzE;;AAGF,MAAI,WAAW,QAAQ,QAAQ;GAC7B,IAAI,YAAyB,EAAE,GAAI,OAAuB;AAE1D,OAAI,CAAC,UAAU,eAAe;IAC5B,MAAM,QAAQ,MAAMC,gCAAgB;KAClC,SAAS,UAAU;KACnB,SAAS,UAAU;KACnB,QAAQ,UAAU;KACnB,CAAC;IAEF,IAAI,mBAA6B,EAAE;IACnC,IAAI,eAIO;IAEX,MAAM,eAAeF,eAAE,SAAS;AAChC,iBAAa,MAAM,yBAAyB;AAC5C,QAAI;AACF,oBAAe,MAAMG,mCAAkB,MAAM,gBAAgB,MAAM,eAAe;AAClF,SAAI,cAAc,WAAW,OAAO,aAAa,YAAY,SAC3D,oBAAmB,OAAO,KAAK,aAAa,QAAQ;YAEhD;AACN,kBAAa,KAAK,mBAAmB;AACrC,aAAQ,MACN,kCAAkC,MAAM,eAAe,GAAG,MAAM,iBACjE;AACD,aAAQ,KAAK,EAAE;;AAEjB,iBAAa,KAAK,iBAAiB;AAEnC,QACE,OAAO,cAAc,UAAU,YAC/B,aAAa,MAAM,MAAM,IACzB,OAAO,cAAc,gBAAgB,YACrC,aAAa,YAAY,MAAM,EAC/B;KACA,MAAM,iBAAiB,MAAMH,eAAE,QAAQ;MACrC,SAAS,yBAAyB,aAAa,MAAM,KAAK,aAAa,YAAY;MACnF,cAAc;MACf,CAAC;AAEF,SAAIA,eAAE,SAAS,eAAe,IAAI,CAAC,eACjC,SAAQ,KAAK,EAAE;;IAInB,MAAM,YAAY,MAAMI,oCAAoB;KAC1C;KACA,SAAS,UAAU;KACnB,WAAW,UAAU;KACtB,CAAC;IAEF,MAAM,YAAY,UAAU,aAAa,MAAM,UAAU,MAAM;AAE/D,gBAAY;KACV,GAAG;KACH,SAAS,SAAS,MAAM,eAAe,GAAG,MAAM;KAChD;KACA,SAAS,MAAM;KACf,QAAQ,MAAM,UAAU;KACxB,SAAS,UAAU;KACnB,WAAW,UAAU;KACrB,eAAe;KAChB;;GAGH,MAAM,cAAcJ,eAAE,SAAS;AAC/B,eAAY,MAAM,uBAAuB;GAEzC,MAAM,cAAsC;IAC1C,iBAAiB;IACjB,mBAAmB;IACnB,oBAAoB;IACpB,cAAc;IACd,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,uBAAuB;IACvB,mBAAmB;IACnB,wBAAwB;IACxB,kBAAkB;IAClB,uBAAuB;IACvB,2BAA2B;IAC5B;GAED,MAAM,cAAc,UAAyB;IAC3C,MAAM,QAAQ,YAAY,MAAM,UAAU,MAAM;AAChD,QAAI,MAAM,WAAW,UACnB,aAAY,QAAQ,MAAM;;AAG9B,+BAAa,GAAG,YAAY,WAAW;GAEvC,IAAI;AACJ,OAAI;AACF,aAAS,MAAM,OAAO,KAAK,UAAU;aAC7B;AACR,gCAAa,IAAI,YAAY,WAAW;;AAG1C,OAAI,OAAO,WAAW,SAAS;AAC7B,gBAAY,KAAK,SAAS;AAC1B,YAAQ,MAAM,SAAS,OAAO,SAAS,kBAAkB;AACzD,YAAQ,KAAK,EAAE;;AAGjB,eAAY,KAAK,sBAAsB;AAEvC,WAAQ,IAAI,KAAKV,qBAAO,IAAI,WAAW,CAAC,GAAG,OAAO,UAAU;AAC5D,WAAQ,IAAI,KAAKA,qBAAO,IAAI,aAAa,CAAC,GAAG,OAAO,YAAY;AAChE,OAAI,OAAO,QAAS,SAAQ,IAAI,KAAKA,qBAAO,IAAI,WAAW,CAAC,GAAG,OAAO,UAAU;AAChF,OAAI,OAAO,OAAQ,SAAQ,IAAI,KAAKA,qBAAO,IAAI,UAAU,CAAC,GAAG,OAAO,SAAS;AAC7E,OAAI,OAAO,aAAa,OAAO,UAAU,SAAS,EAChD,SAAQ,IAAI,KAAKA,qBAAO,IAAI,aAAa,CAAC,GAAG,OAAO,UAAU,KAAK,KAAK,GAAG;AAC7E,OAAI,OAAO,WAAW,OAAO,QAAQ,SAAS,EAC5C,SAAQ,IAAI,KAAKA,qBAAO,IAAI,WAAW,CAAC,GAAG,OAAO,QAAQ,KAAK,KAAK,GAAG;AACzE,WAAQ,IAAI,KAAKA,qBAAO,IAAI,gBAAgB,CAAC,GAAG,OAAO,cAAc;AACrE,sBAAmB,OAAO,QAAQ;AAClC,WAAQ,KAAK;AACb,WAAQ,IAAIA,qBAAO,IAAI,gBAAgB,CAAC;AACxC,WAAQ,IAAIA,qBAAO,IAAI,UAAU,OAAO,YAAY,CAAC;AACrD,OAAI,CAAC,UAAU,WAAW;AACxB,YAAQ,IAAIA,qBAAO,IAAI,kCAAkC,CAAC;AAC1D,YAAQ,IAAIA,qBAAO,IAAI,kBAAkB,CAAC;UACrC;AACL,YAAQ,IAAIA,qBAAO,IAAI,kBAAkB,CAAC;AAC1C,YAAQ,IAAIA,qBAAO,IAAI,kCAAkC,CAAC;AAC1D,YAAQ,IAAIA,qBAAO,IAAI,kBAAkB,CAAC;;AAE5C,WAAQ,KAAK;AAEb,OAAI,UAAU,kBAAkB,QAAQ,CAAC,UAAU,aAAa,OAAO,WAMrE;QAAI,MAL4BU,eAAE,QAAQ;KACxC,SAAS;KACT,cAAc;KACf,CAAC,KAEwB,MAAM;KAC9B,MAAM,gBAAgBA,eAAE,SAAS;AACjC,mBAAc,MAAM,2BAA2B;AAC/C,SAAI;AACF,YAAMK,oCAAmB,OAAO,UAAU;AAC1C,oBAAc,KAAK,wBAAwB;cACpC,OAAO;AACd,oBAAc,KAAK,8BAA8B;AACjD,qBAAE,IAAI,KACJ,uCAAuC,iBAAiB,QAAQ,MAAM,UAAU,QACjF;;;;AAKP;;AAGF,QAAM;EAEN,MAAM,SAAS,MAAO,OAAe,WAAW,KAAK,MAAM;AAE3D,MAAI,WAAW,QAAQ,YAAY;AACjC,OAAI,OAAO,WAAW,SAAS;AAC7B,YAAQ,MAAM,SAAS,OAAO,SAAS,kBAAkB;AACzD,YAAQ,KAAK,EAAE;;GAGjB,MAAM,aAAaT,+BAAgB;AACnC,OAAI,WAAY,qDAAuB,WAAW,CAAC;GAEnD,MAAM,EAAE,gBAAgB,oBAAoB,2CAAM;GAClD,MAAM,OAAO;IACX,KAAK,OAAO;IACZ,QAAQ,OAAO;IACf,SAAS,OAAO;IAChB,gBAAgB,OAAO;IACvB,aAAa,OAAO;IACpB,cAAc,OAAO;IACrB,mCAAoB,cAAc,QAAQ,KAAK,CAAC;IACjD;AAED,OAAI;AACF,QAAI,KAAK,WAAW,WAAW,KAAK,aAClC,OAAM,eAAe,KAAK;QAE1B,OAAM,gBAAgB,KAAK;YAEtB,OAAO;AACd,YAAQ,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GAAG;AAChF,YAAQ,KAAK,EAAE;;AAEjB;;AAGF,MAAI,WAAW,QAAQ,UAAU;AAC/B,OAAI,CAAC,OAAO,QAAQ;AAClB,YAAQ,MAAM,2BAA2B;AACzC,YAAQ,KAAK,EAAE;;AAGjB,mBAAgB,OAAO,OAAO;AAC9B,WAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,OAAO,QAAQ,MAAM,EAAE,CAAC,IAAI;AACnE;;AAGF,MAAI,WAAW,QAAQ,QAAQ;AAC7B,WAAQ,KAAK;AACb,OAAI,OAAO,WAAW,SAAS;AAC7B,YAAQ,MAAM,SAAS,OAAO,SAAS,kBAAkB;AACzD,YAAQ,KAAK,EAAE;;AAEjB,OAAI,OAAO,WAAW,UACpB,SAAQ,IAAIN,qBAAO,KAAK,GAAGE,oBAAM,GAAG,6BAA6B,CAAC;OAElE,SAAQ,IAAIF,qBAAO,MAAM,GAAGE,oBAAM,GAAG,kBAAkB,CAAC;AAE1D,OAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,YAAQ,IAAI,KAAKF,qBAAO,IAAI,WAAW,CAAC,GAAG,OAAO,QAAQ,OAAO,UAAU;AAC3E,SAAK,MAAM,KAAK,OAAO,QAAS,SAAQ,IAAI,OAAOA,qBAAO,IAAI,EAAE,GAAG;;AAErE,OAAI,OAAO,MAAM,SAAS,GAAG;AAC3B,YAAQ,IAAI,KAAKA,qBAAO,IAAI,SAAS,CAAC,GAAG,OAAO,MAAM,OAAO,UAAU;AACvE,SAAK,MAAM,KAAK,OAAO,MAAO,SAAQ,IAAI,OAAOA,qBAAO,IAAI,EAAE,GAAG;;AAEnE,OAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,YAAQ,IACN,KAAKA,qBAAO,OAAO,WAAW,CAAC,GAAG,OAAO,QAAQ,OAAO,uDACzD;AACD,SAAK,MAAM,KAAK,OAAO,QAAS,SAAQ,IAAI,OAAOA,qBAAO,IAAI,EAAE,GAAG;;AAErE,OAAI,OAAO,QAAQ,WAAW,KAAK,OAAO,MAAM,WAAW,KAAK,OAAO,QAAQ,WAAW,EACxF,SAAQ,IAAI,KAAKA,qBAAO,IAAI,qBAAqB,GAAG;AAEtD,OAAI,OAAO,WAAW,aAAa,OAAO,QAAQ,SAAS,GAAG;AAC5D,YAAQ,KAAK;AACb,YAAQ,IAAIA,qBAAO,IAAI,wDAAwD,CAAC;AAChF,YAAQ,IACNA,qBAAO,IACL,wFACD,CACF;AACD,YAAQ,IACNA,qBAAO,IAAI,oEAAoE,CAChF;AACD,YAAQ,IACNA,qBAAO,IACL,uFACD,CACF;AACD,YAAQ,IAAIA,qBAAO,IAAI,gEAAgE,CAAC;;AAE1F,WAAQ,KAAK;AACb;;AAGF,MAAI,WAAW,QAAQ,WAAW;AAChC,WAAQ,KAAK;AACb,OAAI,OAAO,WAAW,SAAS;AAC7B,YAAQ,MAAM,SAAS,OAAO,SAAS,kBAAkB;AACzD,YAAQ,KAAK,EAAE;;AAEjB,OAAI,OAAO,WAAW,UACpB,SAAQ,IAAIA,qBAAO,KAAK,GAAGE,oBAAM,GAAG,+BAA+B,CAAC;OAEpE,SAAQ,IAAIF,qBAAO,MAAM,GAAGE,oBAAM,GAAG,qBAAqB,CAAC;AAE7D,QAAK,MAAM,OAAO,OAAO,SACvB,KAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,GAC/B,SAAQ,IAAI,KAAKF,qBAAO,IAAI,GAAG,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK,KAAK,IAAI,KAAK;YAC7D,CAAC,IAAI,KACd,SAAQ,IAAI,KAAKA,qBAAO,IAAI,GAAG,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,QAAQ;OAE9D,SAAQ,IAAI,KAAKA,qBAAO,IAAI,GAAG,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,eAAe;AAGzE,OAAI,OAAO,aACT,SAAQ,IAAI,KAAKA,qBAAO,IAAI,aAAa,CAAC,GAAG,OAAO,eAAe;AAErE,OAAI,OAAO,oBAAoB,OAAO,iBAAiB,SAAS,EAC9D,SAAQ,IAAI,KAAKA,qBAAO,IAAI,sBAAsB,CAAC,GAAG,OAAO,iBAAiB,KAAK,KAAK,GAAG;AAE7F,OAAI,OAAO,mBAAmB,OAAO,gBAAgB,SAAS,EAC5D,SAAQ,IAAI,KAAKA,qBAAO,IAAI,iBAAiB,CAAC,GAAG,OAAO,gBAAgB,KAAK,KAAK,GAAG;AAEvF,sBAAmB,OAAO,QAAQ;AAClC,OAAI,OAAO,MAAM;IACf,MAAM,OAAO,OAAO;AACpB,QAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,aAAQ,IAAI,KAAKA,qBAAO,IAAI,WAAW,CAAC,GAAG,KAAK,QAAQ,OAAO,UAAU;AACzE,UAAK,MAAM,KAAK,KAAK,QAAS,SAAQ,IAAI,OAAOA,qBAAO,IAAI,EAAE,GAAG;;AAEnE,QAAI,KAAK,MAAM,SAAS,GAAG;AACzB,aAAQ,IAAI,KAAKA,qBAAO,IAAI,SAAS,CAAC,GAAG,KAAK,MAAM,OAAO,UAAU;AACrE,UAAK,MAAM,KAAK,KAAK,MAAO,SAAQ,IAAI,OAAOA,qBAAO,IAAI,EAAE,GAAG;;AAEjE,QAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,aAAQ,IACN,KAAKA,qBAAO,OAAO,WAAW,CAAC,GAAG,KAAK,QAAQ,OAAO,uDACvD;AACD,UAAK,MAAM,KAAK,KAAK,QAAS,SAAQ,IAAI,OAAOA,qBAAO,IAAI,EAAE,GAAG;;AAEnE,QACE,OAAO,WAAW,cACjB,KAAK,QAAQ,SAAS,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK,QAAQ,SAAS,IAC3E;AACA,aAAQ,KAAK;AACb,aAAQ,IAAIA,qBAAO,IAAI,oDAAoD,CAAC;AAC5E,aAAQ,KAAK;AACb,aAAQ,IAAIA,qBAAO,IAAI,8BAA8B,CAAC;AACtD,aAAQ,IACNA,qBAAO,IAAI,oEAAoE,CAChF;AACD,aAAQ,IAAIA,qBAAO,IAAI,gDAAgD,CAAC;AACxE,aAAQ,KAAK;AACb,aAAQ,IAAIA,qBAAO,IAAI,6CAA6C,CAAC;AACrE,aAAQ,IACNA,qBAAO,IACL,6EACD,CACF;AACD,aAAQ,IAAIA,qBAAO,IAAI,gDAAgD,CAAC;AACxE,aAAQ,IAAIA,qBAAO,IAAI,2CAA2C,CAAC;AACnE,aAAQ,KAAK;AACb,aAAQ,IAAIA,qBAAO,IAAI,kCAAkC,CAAC;AAC1D,aAAQ,IAAIA,qBAAO,IAAI,wDAAwD,CAAC;AAChF,aAAQ,KAAK;AACb,aAAQ,IAAIA,qBAAO,IAAI,6BAA6B,CAAC;AACrD,aAAQ,IAAIA,qBAAO,IAAI,uDAAuD,CAAC;;;AAGnF,OAAI,OAAO,YAAY,OAAO,SAAS,SAAS,GAAG;AACjD,YAAQ,IAAI,KAAKA,qBAAO,OAAO,WAAW,CAAC,GAAG,OAAO,SAAS,OAAO,mBAAmB;AACxF,SAAK,MAAM,KAAK,OAAO,SAAU,SAAQ,IAAI,OAAOA,qBAAO,IAAI,EAAE,GAAG;;AAEtE,WAAQ,KAAK;AACb;;AAGF,MAAI,WAAW,QAAQ,UAAU;AAC/B,WAAQ,KAAK;AACb,OAAI,OAAO,WAAW,SAAS;AAC7B,YAAQ,MAAM,SAAS,OAAO,SAAS,kBAAkB;AACzD,YAAQ,KAAK,EAAE;;AAEjB,WAAQ,IAAIA,qBAAO,KAAKC,qBAAO,IAAI,GAAG,CAAC,CAAC;AACxC,WAAQ,IAAI,KAAKC,oBAAM,IAAI,GAAGC,wBAAU,MAAM,SAAS,GAAG;AAC1D,WAAQ,IAAIH,qBAAO,KAAKC,qBAAO,OAAO,GAAG,CAAC,CAAC;AAC3C,WAAQ,KAAK;AACb,OAAI,OAAO,QAAS,SAAQ,IAAI,KAAKD,qBAAO,IAAI,WAAW,CAAC,OAAO,OAAO,UAAU;AACpF,OAAI,OAAO,QAAS,SAAQ,IAAI,KAAKA,qBAAO,IAAI,WAAW,CAAC,OAAO,OAAO,UAAU;AACpF,OAAI,OAAO,OAAQ,SAAQ,IAAI,KAAKA,qBAAO,IAAI,UAAU,CAAC,QAAQ,OAAO,SAAS;AAClF,WAAQ,KAAK;AACb,WAAQ,IAAI,KAAKA,qBAAO,IAAI,YAAY,GAAG;AAC3C,QAAK,MAAM,OAAO,OAAO,UAAU;IACjC,MAAM,YACJ,IAAI,aACJ,IAAI,UACJ,iBAAiB,IAAI,UAAU,KAAK,iBAAiB,IAAI,OAAO;IAClE,MAAM,aAAa,YACf,GAAG,IAAI,UAAU,OAAO,IAAI,WAC5B,IAAI,aAAa;IACrB,MAAM,QAAQ,YAAYA,qBAAO,OAAO,WAAW,GAAGA,qBAAO,IAAI,WAAW;AAC5E,YAAQ,IAAI,OAAOA,qBAAO,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,QAAQ;;AAE3D,WAAQ,KAAK;AACb,OAAI,OAAO,UAAU;IACnB,MAAM,MAAM,cAAc,OAAO,SAAS;AAC1C,YAAQ,IAAI,KAAKA,qBAAO,IAAI,aAAa,CAAC,KAAK,MAAM;SAErD,SAAQ,IAAI,KAAKA,qBAAO,IAAI,aAAa,CAAC,UAAU;GAEtD,MAAM,WACJ,OAAO,YAAY,UACfA,qBAAO,MAAM,QAAQ,GACrB,OAAO,YAAY,iBACjBA,qBAAO,OAAO,oCAAoC,GAClDA,qBAAO,MAAM,UAAU;AAC/B,WAAQ,IAAI,KAAKA,qBAAO,IAAI,QAAQ,CAAC,WAAW,WAAW;AAC3D,OAAI,OAAO,oBAAoB,QAAW;IACxC,MAAM,cAAc,OAAO,kBACvBA,qBAAO,MAAM,YAAY,GACzBA,qBAAO,MAAM,cAAc;AAC/B,YAAQ,IAAI,KAAKA,qBAAO,IAAI,UAAU,CAAC,QAAQ,cAAc;;AAM/D,OAJmB,OAAO,SAAS,MAChC,MACC,EAAE,aAAa,EAAE,UAAU,iBAAiB,EAAE,UAAU,KAAK,iBAAiB,EAAE,OAAO,CAE7E,EAAE;AACd,YAAQ,KAAK;AACb,YAAQ,IACNA,qBAAO,IACL,SAASA,qBAAO,KAAK,cAAc,CAAC,8CACrC,CACF;;AAEH,WAAQ,KAAK;AACb;;AAGF,MAAI,WAAW,QAAQ,YAAY;AACjC,WAAQ,KAAK;AACb,OAAI,OAAO,WAAW,SAAS;AAC7B,YAAQ,MAAM,SAAS,OAAO,SAAS,kBAAkB;AACzD,YAAQ,KAAK,EAAE;;AAEjB,WAAQ,IAAIA,qBAAO,MAAM,GAAGE,oBAAM,GAAG,kBAAkB,CAAC;AACxD,OAAI,OAAO,OACT,SAAQ,IACN,KAAKF,qBAAO,IAAI,QAAQ,CAAC,GAAG,OAAO,WAAW,WAAWA,qBAAO,KAAK,SAAS,GAAGA,qBAAO,IAAI,QAAQ,GACrG;AAEH,OAAI,OAAO,UAAU,SAAS,GAAG;AAC/B,YAAQ,IAAI,KAAKA,qBAAO,IAAI,aAAa,GAAG;AAC5C,SAAK,MAAM,KAAK,OAAO,UAAW,SAAQ,IAAI,OAAOA,qBAAO,IAAI,EAAE,GAAG;;AAEvE,OAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,YAAQ,IAAI,KAAKA,qBAAO,IAAI,oBAAoB,GAAG;AACnD,SAAK,MAAM,OAAO,OAAO,QAAS,SAAQ,IAAI,OAAOA,qBAAO,IAAI,IAAI,GAAG;;AAEzE,OAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,YAAQ,IAAI,KAAKA,qBAAO,IAAI,WAAW,GAAG;AAC1C,SAAK,MAAM,KAAK,OAAO,QAAS,SAAQ,IAAI,OAAOA,qBAAO,IAAI,EAAE,GAAG;;AAErE,OAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,YAAQ,IAAI,KAAKA,qBAAO,OAAO,UAAU,GAAG;AAC5C,SAAK,MAAM,KAAK,OAAO,OAAQ,SAAQ,IAAI,OAAOA,qBAAO,MAAM,EAAE,GAAG;;AAEtE,WAAQ,KAAK;AACb;;AAGF,MAAI,QAAQ,WAAW,SAAS;AAC9B,WAAQ,MAAM,SAAS,OAAO,SAAS,kBAAkB;AACzD,WAAQ,KAAK,EAAE;;AAGjB,MAAI,WAAW,QAAQ,cAAc;AACnC,WAAQ,OAAO,MAAM,6BAA6B,OAAO,QAAQ,IAAI;AACrE,WAAQ,OAAO,MAAM,cAAc,OAAO,QAAQ,IAAI;AACtD,WAAQ,OAAO,MAAM,eAAe,OAAO,SAAS,IAAI;AACxD,WAAQ,OAAO,MAAM,gBAAgB,OAAO,UAAU,IAAI;AAC1D,WAAQ,OAAO,MAAM,gBAAgB,OAAO,cAAc,KAAK,KAAK,CAAC,IAAI;AACzE,WAAQ,OAAO,MAAM,iBAAiB,OAAO,UAAU,IAAI;AAC3D,WAAQ,OAAO,MAAM,kBAAkB,OAAO,WAAW,IAAI;AAC7D,WAAQ,OAAO,MAAM,4BAA4B,OAAO,WAAW,IAAI;;AAGzE,MAAI,WAAW,QAAQ,aAAa;AAClC,WAAQ,KAAK;AACb,WAAQ,IAAIA,qBAAO,MAAM,GAAGE,oBAAM,GAAG,gBAAgB,OAAO,MAAM,CAAC;AACnE,OAAI,OAAO,YAAa,SAAQ,IAAI,KAAKF,qBAAO,IAAI,eAAe,CAAC,GAAG,OAAO,cAAc;AAC5F,OAAI,OAAO,WAAY,SAAQ,IAAI,KAAKA,qBAAO,IAAI,cAAc,CAAC,GAAG,OAAO,aAAa;AACzF,WAAQ,KAAK;AACb;;AAGF,MAAI,WAAW,QAAQ,gBAAgB;AACrC,WAAQ,KAAK;AACb,WAAQ,IAAIA,qBAAO,MAAM,GAAGE,oBAAM,GAAG,kBAAkB,OAAO,MAAM,CAAC;AACrE,WAAQ,KAAK;AACb;;AAGF,MAAI,WAAW,QAAQ,cAAc;AACnC,WAAQ,KAAK;AACb,WAAQ,IAAIF,qBAAO,KAAKC,qBAAO,IAAI,GAAG,CAAC,CAAC;AACxC,WAAQ,IAAI,KAAKC,oBAAM,OAAO,GAAGC,wBAAU,MAAM,UAAU,GAAG;AAC9D,WAAQ,IAAIH,qBAAO,KAAKC,qBAAO,OAAO,GAAG,CAAC,CAAC;AAC3C,WAAQ,KAAK;AACb,OAAI,OAAO,QAAQ,WAAW,EAC5B,SAAQ,IAAID,qBAAO,IAAI,0BAA0B,CAAC;OAElD,MAAK,MAAM,cAAc,OAAO,SAAS;AACvC,YAAQ,IAAI,KAAKA,qBAAO,KAAK,WAAW,IAAI,GAAG;AAC/C,QAAI,WAAW,YACb,SAAQ,IAAI,OAAOA,qBAAO,IAAI,eAAe,CAAC,GAAG,WAAW,cAAc;AAC5E,QAAI,WAAW,WACb,SAAQ,IAAI,OAAOA,qBAAO,IAAI,cAAc,CAAC,GAAG,WAAW,aAAa;;AAG9E,WAAQ,KAAK;AACb;;AAGF,MAAI,WAAW,QAAQ,iBAAiB;AACtC,WAAQ,KAAK;AACb,WAAQ,IAAIA,qBAAO,MAAM,GAAGE,oBAAM,GAAG,oBAAoB,OAAO,MAAM,CAAC;AACvE,OAAI,OAAO,KAAM,SAAQ,IAAI,KAAKF,qBAAO,IAAI,QAAQ,CAAC,GAAG,OAAO,OAAO;AACvE,OAAI,OAAO,OAAQ,SAAQ,IAAI,KAAKA,qBAAO,IAAI,UAAU,CAAC,WAAW,OAAO,SAAS;AACrF,OAAI,OAAO,WAAY,SAAQ,IAAI,KAAKA,qBAAO,IAAI,cAAc,CAAC,GAAG,OAAO,aAAa;AACzF,WAAQ,KAAK;AACb;;AAGF,MAAI,WAAW,QAAQ,WAAW;AAChC,OAAI,OAAO,WAAW,WAAW;AAC/B,YAAQ,KAAK;AACb,YAAQ,IAAIA,qBAAO,KAAK,GAAGE,oBAAM,GAAG,mBAAmB,CAAC;AACxD,YAAQ,IAAI,KAAKF,qBAAO,IAAI,gBAAgB,CAAC,GAAG,OAAO,cAAc;AACrE,YAAQ,KAAK;AACb;;AAGF,OAAI,OAAO,WAAW,SAAS;AAC7B,YAAQ,KAAK;AACb,YAAQ,IAAIA,qBAAO,MAAM,GAAGE,oBAAM,IAAI,iBAAiB,CAAC;AACxD,QAAI,OAAO,MACT,SAAQ,IAAI,KAAKF,qBAAO,IAAI,SAAS,CAAC,GAAG,OAAO,QAAQ;AAE1D,QAAI,OAAO,iBAAiB,OAAO,cAAc,SAAS,GAAG;KAC3D,MAAM,WAAW,OAAO,cAAc,QAAQ,MAAW,CAAC,EAAE,QAAQ;AACpE,SAAI,SAAS,SAAS,GAAG;AACvB,cAAQ,KAAK;AACb,WAAK,MAAM,KAAK,UAAU;OACxB,MAAM,aAAa,EAAE,SAAS,UAAU,MAAM,KAAK,CAAC;AACpD,eAAQ,IAAI,KAAKA,qBAAO,MAAME,oBAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,YAAY;;;;AAIxE,YAAQ,KAAK;AACb,YAAQ,KAAK,EAAE;;AAGjB,OAAI,OAAO,WAAW,aAAa;AACjC,YAAQ,KAAK;AACb,YAAQ,IAAIF,qBAAO,MAAM,GAAGE,oBAAM,GAAG,yBAAyB,CAAC;AAC/D,YAAQ,IAAI,KAAKF,qBAAO,IAAI,gBAAgB,CAAC,GAAG,OAAO,cAAc;AACrE,QAAI,OAAO,OACT,SAAQ,IAAI,KAAKA,qBAAO,IAAI,eAAe,CAAC,GAAG,OAAO,SAAS;AAEjE,QAAI,OAAO,SAAS,OAAO,MAAM,SAAS,EACxC,SAAQ,IAAI,KAAKA,qBAAO,IAAI,SAAS,CAAC,GAAG,OAAO,MAAM,KAAK,KAAK,GAAG;AAErE,QAAI,OAAO,WAAW,OAAO,QAAQ,SAAS,EAC5C,SAAQ,IAAI,KAAKA,qBAAO,IAAI,WAAW,CAAC,GAAG,OAAO,QAAQ,KAAK,KAAK,GAAG;AAEzE,YAAQ,KAAK;AACb;;;AAIJ,MAAI,WAAW,QAAQ,UAAU;GAC/B,MAAM,eAAe;AACrB,OAAI,aAAa,WAAW,WAAW;AACrC,YAAQ,KAAK;AACb,YAAQ,IAAIA,qBAAO,KAAK,GAAGE,oBAAM,GAAG,mBAAmB,CAAC;AACxD,YAAQ,IAAI,KAAKF,qBAAO,IAAI,gBAAgB,CAAC,GAAG,aAAa,cAAc;AAC3E,YAAQ,KAAK;AACb;;AAGF,OAAI,aAAa,WAAW,SAAS;AACnC,YAAQ,KAAK;AACb,YAAQ,IAAIA,qBAAO,MAAM,GAAGE,oBAAM,IAAI,gBAAgB,CAAC;AACvD,QAAI,aAAa,MACf,SAAQ,IAAI,KAAKF,qBAAO,IAAI,SAAS,CAAC,GAAG,aAAa,QAAQ;AAEhE,QAAI,aAAa,iBAAiB,aAAa,cAAc,SAAS,GAAG;KACvE,MAAM,WAAW,aAAa,cAAc,QAAQ,MAAW,CAAC,EAAE,QAAQ;AAC1E,SAAI,SAAS,SAAS,GAAG;AACvB,cAAQ,KAAK;AACb,WAAK,MAAM,KAAK,UAAU;OACxB,MAAM,aAAa,EAAE,SAAS,UAAU,MAAM,KAAK,CAAC;AACpD,eAAQ,IAAI,KAAKA,qBAAO,MAAME,oBAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,YAAY;;;;AAIxE,YAAQ,KAAK;AACb,YAAQ,KAAK,EAAE;;AAGjB,OAAI,aAAa,WAAW,YAAY;AACtC,YAAQ,KAAK;AACb,YAAQ,IAAIF,qBAAO,MAAM,GAAGE,oBAAM,GAAG,wBAAwB,CAAC;AAC9D,YAAQ,IAAI,KAAKF,qBAAO,IAAI,gBAAgB,CAAC,GAAG,aAAa,cAAc;AAC3E,QAAI,aAAa,OACf,SAAQ,IAAI,KAAKA,qBAAO,IAAI,eAAe,CAAC,GAAG,aAAa,SAAS;AAEvE,QAAI,aAAa,SAAS,aAAa,MAAM,SAAS,EACpD,SAAQ,IAAI,KAAKA,qBAAO,IAAI,SAAS,CAAC,GAAG,aAAa,MAAM,KAAK,KAAK,GAAG;AAE3E,QAAI,aAAa,WAAW,aAAa,QAAQ,SAAS,EACxD,SAAQ,IAAI,KAAKA,qBAAO,IAAI,WAAW,CAAC,GAAG,aAAa,QAAQ,KAAK,KAAK,GAAG;AAE/E,QAAI,aAAa,WACf,SAAQ,IACN,KAAKA,qBAAO,IAAI,WAAW,CAAC,cAAc,aAAa,WAAW,YACnE;aACQ,CAAC,QAAQ,IAAI,cACtB,SAAQ,IAAI,KAAKA,qBAAO,OAAO,WAAW,CAAC,kCAAkC;AAE/E,YAAQ,KAAK;AACb;;AAGF,OAAI,aAAa,WAAW,aAAa;AACvC,YAAQ,KAAK;AACb,YAAQ,IAAIA,qBAAO,OAAO,GAAGE,oBAAM,IAAI,gDAAgD,CAAC;AACxF,YAAQ,IAAI,KAAKF,qBAAO,IAAI,gBAAgB,CAAC,GAAG,aAAa,cAAc;AAC3E,QAAI,aAAa,OACf,SAAQ,IAAI,KAAKA,qBAAO,IAAI,eAAe,CAAC,GAAG,aAAa,SAAS;AAEvE,QAAI,aAAa,MACf,SAAQ,IAAI,KAAKA,qBAAO,IAAI,WAAW,CAAC,GAAG,aAAa,QAAQ;AAElE,YAAQ,KAAK;AACb,YAAQ,KAAK,EAAE;;;UAGZ,OAAO;AACd,UAAQ,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GAAG;AAChF,UAAQ,KAAK,EAAE;;;AAId,MAAM,CAAC,OAAO,UAAU;AAC3B,SAAQ,MAAM,sBAAsB,MAAM;AAC1C,SAAQ,KAAK,EAAE;EACf"}
|
package/dist/cli.mjs
CHANGED
|
@@ -112,17 +112,19 @@ async function main() {
|
|
|
112
112
|
variables: { configPath: configPath ?? void 0 },
|
|
113
113
|
secrets: {}
|
|
114
114
|
})).createClient();
|
|
115
|
-
|
|
115
|
+
const outdatedWarning = warnIfOutdated(client, command);
|
|
116
116
|
try {
|
|
117
117
|
const input = parseCommandInput(descriptor, commandArgs);
|
|
118
118
|
if (descriptor.key === "dev") {
|
|
119
119
|
const devSpinner = p.spinner();
|
|
120
120
|
devSpinner.start("Starting dev environment");
|
|
121
121
|
const devPhaseLabels = {
|
|
122
|
-
|
|
122
|
+
"shared deps": "Preparing config...",
|
|
123
123
|
install: "Installing dependencies...",
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
build: "Building...",
|
|
125
|
+
"resolve config": "Resolving config...",
|
|
126
|
+
ports: "Finding available ports...",
|
|
127
|
+
"generate artifacts": "Generating code artifacts..."
|
|
126
128
|
};
|
|
127
129
|
const onDevProgress = (event) => {
|
|
128
130
|
const label = devPhaseLabels[event.phase] ?? event.phase;
|
|
@@ -143,6 +145,7 @@ async function main() {
|
|
|
143
145
|
devSpinner.stop();
|
|
144
146
|
clearSpinnerStopLine();
|
|
145
147
|
const session = consumeDevSession();
|
|
148
|
+
await outdatedWarning;
|
|
146
149
|
if (session) {
|
|
147
150
|
const { devApp } = await import("./dev-session.mjs");
|
|
148
151
|
devApp(session.orchestrator, session.services, session.runtimeConfig);
|
|
@@ -174,6 +177,7 @@ async function main() {
|
|
|
174
177
|
}
|
|
175
178
|
startSpinner.stop("Ready");
|
|
176
179
|
const session = consumeDevSession();
|
|
180
|
+
await outdatedWarning;
|
|
177
181
|
if (session) {
|
|
178
182
|
const summary = session.summary;
|
|
179
183
|
if (summary) printStartSummary(summary);
|
|
@@ -299,6 +303,7 @@ async function main() {
|
|
|
299
303
|
}
|
|
300
304
|
return;
|
|
301
305
|
}
|
|
306
|
+
await outdatedWarning;
|
|
302
307
|
const result = await client[descriptor.key](input);
|
|
303
308
|
if (descriptor.key === "dbStudio") {
|
|
304
309
|
if (result.status === "error") {
|
|
@@ -549,6 +554,23 @@ async function main() {
|
|
|
549
554
|
console.log();
|
|
550
555
|
return;
|
|
551
556
|
}
|
|
557
|
+
if (result.status === "error") {
|
|
558
|
+
console.log();
|
|
559
|
+
console.log(colors.error(`${icons.err} Publish failed`));
|
|
560
|
+
if (result.error) console.log(` ${colors.dim("Error:")} ${result.error}`);
|
|
561
|
+
if (result.deployResults && result.deployResults.length > 0) {
|
|
562
|
+
const failures = result.deployResults.filter((r) => !r.success);
|
|
563
|
+
if (failures.length > 0) {
|
|
564
|
+
console.log();
|
|
565
|
+
for (const f of failures) {
|
|
566
|
+
const errorLine = (f.error ?? "Failed").split("\n")[0];
|
|
567
|
+
console.log(` ${colors.error(icons.err)} ${f.key}: ${errorLine}`);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
console.log();
|
|
572
|
+
process.exit(1);
|
|
573
|
+
}
|
|
552
574
|
if (result.status === "published") {
|
|
553
575
|
console.log();
|
|
554
576
|
console.log(colors.green(`${icons.ok} Published successfully`));
|
|
@@ -569,6 +591,23 @@ async function main() {
|
|
|
569
591
|
console.log();
|
|
570
592
|
return;
|
|
571
593
|
}
|
|
594
|
+
if (deployResult.status === "error") {
|
|
595
|
+
console.log();
|
|
596
|
+
console.log(colors.error(`${icons.err} Deploy failed`));
|
|
597
|
+
if (deployResult.error) console.log(` ${colors.dim("Error:")} ${deployResult.error}`);
|
|
598
|
+
if (deployResult.deployResults && deployResult.deployResults.length > 0) {
|
|
599
|
+
const failures = deployResult.deployResults.filter((r) => !r.success);
|
|
600
|
+
if (failures.length > 0) {
|
|
601
|
+
console.log();
|
|
602
|
+
for (const f of failures) {
|
|
603
|
+
const errorLine = (f.error ?? "Failed").split("\n")[0];
|
|
604
|
+
console.log(` ${colors.error(icons.err)} ${f.key}: ${errorLine}`);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
console.log();
|
|
609
|
+
process.exit(1);
|
|
610
|
+
}
|
|
572
611
|
if (deployResult.status === "deployed") {
|
|
573
612
|
console.log();
|
|
574
613
|
console.log(colors.green(`${icons.ok} Deployed successfully`));
|