everything-dev 1.28.11 → 1.29.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.
Files changed (61) hide show
  1. package/dist/cli/init.cjs +134 -88
  2. package/dist/cli/init.cjs.map +1 -1
  3. package/dist/cli/init.d.cts +12 -2
  4. package/dist/cli/init.d.cts.map +1 -1
  5. package/dist/cli/init.d.mts +12 -2
  6. package/dist/cli/init.d.mts.map +1 -1
  7. package/dist/cli/init.mjs +134 -89
  8. package/dist/cli/init.mjs.map +1 -1
  9. package/dist/cli/sync.cjs +24 -26
  10. package/dist/cli/sync.cjs.map +1 -1
  11. package/dist/cli/sync.mjs +26 -28
  12. package/dist/cli/sync.mjs.map +1 -1
  13. package/dist/cli/upgrade.cjs +16 -21
  14. package/dist/cli/upgrade.cjs.map +1 -1
  15. package/dist/cli/upgrade.mjs +17 -22
  16. package/dist/cli/upgrade.mjs.map +1 -1
  17. package/dist/cli.cjs.map +1 -1
  18. package/dist/cli.mjs.map +1 -1
  19. package/dist/config.cjs +20 -5
  20. package/dist/config.cjs.map +1 -1
  21. package/dist/config.d.cts +13 -3
  22. package/dist/config.d.cts.map +1 -1
  23. package/dist/config.d.mts +13 -3
  24. package/dist/config.d.mts.map +1 -1
  25. package/dist/config.mjs +19 -5
  26. package/dist/config.mjs.map +1 -1
  27. package/dist/contract.cjs +6 -5
  28. package/dist/contract.cjs.map +1 -1
  29. package/dist/contract.d.cts +17 -13
  30. package/dist/contract.d.cts.map +1 -1
  31. package/dist/contract.d.mts +16 -12
  32. package/dist/contract.d.mts.map +1 -1
  33. package/dist/contract.meta.cjs +2 -3
  34. package/dist/contract.meta.cjs.map +1 -1
  35. package/dist/contract.meta.d.cts +5 -6
  36. package/dist/contract.meta.d.mts +5 -6
  37. package/dist/contract.meta.mjs +2 -3
  38. package/dist/contract.meta.mjs.map +1 -1
  39. package/dist/contract.mjs +7 -7
  40. package/dist/contract.mjs.map +1 -1
  41. package/dist/index.cjs +3 -1
  42. package/dist/index.d.cts +3 -3
  43. package/dist/index.d.mts +3 -3
  44. package/dist/index.mjs +3 -3
  45. package/dist/plugin.cjs +17 -12
  46. package/dist/plugin.cjs.map +1 -1
  47. package/dist/plugin.d.cts +9 -8
  48. package/dist/plugin.d.cts.map +1 -1
  49. package/dist/plugin.d.mts +9 -8
  50. package/dist/plugin.d.mts.map +1 -1
  51. package/dist/plugin.mjs +18 -13
  52. package/dist/plugin.mjs.map +1 -1
  53. package/dist/sidebar.cjs +1 -1
  54. package/dist/sidebar.cjs.map +1 -1
  55. package/dist/sidebar.d.cts.map +1 -1
  56. package/dist/sidebar.d.mts.map +1 -1
  57. package/dist/sidebar.mjs +1 -1
  58. package/dist/sidebar.mjs.map +1 -1
  59. package/dist/types.d.cts +2 -2
  60. package/dist/types.d.mts +2 -2
  61. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import { resolveExtendsRef } from "../merge.mjs";
2
+ import { loadResolvedConfig } from "../config.mjs";
2
3
  import { saveBosConfig } from "../utils/save-config.mjs";
3
- import { buildChildRootScripts, fetchParentConfig, resolveSourceDir, runBunInstallForUpgrade, runTypesGen } from "./init.mjs";
4
+ import { buildChildRootScripts, fetchParentConfig, resolveCatalogChainSource, runBunInstallForUpgrade, runTypesGen } from "./init.mjs";
4
5
  import { readInstalledFrameworkVersion } from "./framework-version.mjs";
5
6
  import { syncTemplate } from "./sync.mjs";
6
7
  import { syncAndGenerateSharedUi } from "../shared.mjs";
@@ -217,25 +218,15 @@ async function readExtendedRootSource(projectDir) {
217
218
  repository,
218
219
  extendsChain
219
220
  };
220
- const { sourceDir, cleanup } = await resolveSourceDir({
221
+ const source = await resolveCatalogChainSource({
221
222
  extendsAccount: parsed.account,
222
223
  extendsGateway: parsed.gateway
223
224
  });
224
- try {
225
- const sourcePkgPath = join(sourceDir, "package.json");
226
- if (!existsSync(sourcePkgPath)) return {
227
- catalog: {},
228
- repository,
229
- extendsChain
230
- };
231
- return {
232
- catalog: { ...JSON.parse(readFileSync(sourcePkgPath, "utf-8")).workspaces?.catalog ?? {} },
233
- repository,
234
- extendsChain
235
- };
236
- } finally {
237
- await cleanup();
238
- }
225
+ return {
226
+ catalog: source.catalog,
227
+ repository: source.repository ?? repository,
228
+ extendsChain: source.extendsChain.length > 0 ? source.extendsChain : extendsChain
229
+ };
239
230
  }
240
231
  function getExtendsRef(config) {
241
232
  if (typeof config.extends === "string") return config.extends;
@@ -719,15 +710,19 @@ async function upgradeTemplate(projectDir, options) {
719
710
  });
720
711
  syncResult = await timePhase(timings, "sync template", () => syncTemplate(projectDir, {
721
712
  dryRun: false,
722
- force: options.force,
723
713
  noInstall: true
724
714
  }));
725
715
  if (inheritedCatalogPackageNames.length > 0) syncRootCatalogWithParent(projectDir, sourceRootCatalog);
726
716
  }
727
- const sharedSync = await timePhase(timings, "sync shared ui", () => syncAndGenerateSharedUi({
728
- configDir: projectDir,
729
- hostMode: "local"
730
- }));
717
+ const sharedSync = await timePhase(timings, "sync shared ui", async () => {
718
+ const configResult = await loadResolvedConfig({ cwd: projectDir });
719
+ if (!configResult) throw new Error("No bos.config.json found in current directory");
720
+ return syncAndGenerateSharedUi({
721
+ configDir: projectDir,
722
+ hostMode: "local",
723
+ bosConfig: configResult.config
724
+ });
725
+ });
731
726
  if ((hasUpdates || addedPlugins.length > 0 || sharedSync.catalogChanged) && !options.noInstall) {
732
727
  await timePhase(timings, "install dependencies", () => runBunInstallForUpgrade(projectDir));
733
728
  await timePhase(timings, "generate types", () => runTypesGen(projectDir));
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.mjs","names":[],"sources":["../../src/cli/upgrade.ts"],"sourcesContent":["import { existsSync, readFileSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport { glob } from \"glob\";\nimport type { PhaseTiming, UpgradeOptions, UpgradeResult } from \"../contract\";\nimport { resolveExtendsRef } from \"../merge\";\nimport { syncAndGenerateSharedUi } from \"../shared\";\nimport { saveBosConfig } from \"../utils/save-config\";\nimport { readInstalledFrameworkVersion } from \"./framework-version\";\nimport {\n buildChildRootScripts,\n fetchParentConfig,\n resolveSourceDir,\n runBunInstallForUpgrade,\n runTypesGen,\n} from \"./init\";\nimport { syncTemplate } from \"./sync\";\nimport { timePhase } from \"./timing\";\n\nconst FRAMEWORK_PACKAGES = [\"everything-dev\", \"every-plugin\"];\nconst AUTH_CORE_PACKAGE = \"@better-auth/core\";\nconst AUTH_CORE_TRIGGER_PACKAGES = [\n \"better-auth\",\n \"better-near-auth\",\n \"@better-auth/api-key\",\n \"@better-auth/passkey\",\n] as const;\nconst LEGACY_UI_IMPORT_REWRITES = [\n ['from \"@/auth\"', 'from \"@/app\"'],\n [\"from '@/auth'\", \"from '@/app'\"],\n ['from \"@/lib/use-api-client\"', 'from \"@/app\"'],\n [\"from '@/lib/use-api-client'\", \"from '@/app'\"],\n ['from \"@/lib/api-client\"', 'from \"@/app\"'],\n [\"from '@/lib/api-client'\", \"from '@/app'\"],\n] as const;\nconst OBSOLETE_FILES = [\n \"ui/src/auth.ts\",\n \"ui/src/auth-types.gen.ts\",\n \"ui/src/lib/api-client.ts\",\n \"ui/src/lib/use-api-client.ts\",\n \"ui/src/api-contract.ts\",\n \"ui/src/api-contract.gen.ts\",\n \"ui/src/lib/auth-client.ts\",\n \"ui/src/lib/session.ts\",\n \"ui/scripts/generate-metadata.ts\",\n \".github/dependabot.yml\",\n \".github/templates/dependabot.yml\",\n \".github/renovate.json\",\n \".github/workflows/packages-release.yml\",\n \".github/workflows/release.yml\",\n \".github/workflows/release-sync.yml\",\n \".github/workflows/staging.yml\",\n \"packages/everything-dev/cli.js\",\n \".templatekeep\",\n \".templatesync-exclude\",\n];\n\ninterface ExtendedRootSource {\n catalog: Record<string, string>;\n repository?: string;\n extendsChain: string[];\n}\n\nfunction extractSemver(value: string | undefined): string | null {\n if (!value) return null;\n const match = value.match(/\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?/);\n return match?.[0] ?? null;\n}\n\nfunction readJsonFile<T>(filePath: string): T {\n return JSON.parse(readFileSync(filePath, \"utf-8\")) as T;\n}\n\nfunction readRootPackageJson(projectDir: string): Record<string, unknown> {\n return readJsonFile<Record<string, unknown>>(join(projectDir, \"package.json\"));\n}\n\nfunction readRootCatalogEntry(projectDir: string, packageName: string): string | undefined {\n const pkg = readRootPackageJson(projectDir) as {\n workspaces?: { catalog?: Record<string, string> };\n };\n return pkg.workspaces?.catalog?.[packageName];\n}\n\nfunction readCurrentPackageSpecifier(projectDir: string, packageName: string): string | undefined {\n const pkg = readRootPackageJson(projectDir);\n\n for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n const field = pkg[fieldName] as Record<string, string> | undefined;\n const value = field?.[packageName];\n if (!value) continue;\n\n if (value === \"catalog:\") {\n return (\n readRootCatalogEntry(projectDir, packageName) ??\n readInstalledVersion(projectDir, packageName)\n );\n }\n\n if (value.startsWith(\"workspace:\") || value.startsWith(\"file:\")) {\n return readInstalledVersion(projectDir, packageName);\n }\n\n return value;\n }\n\n return (\n readRootCatalogEntry(projectDir, packageName) ?? readInstalledVersion(projectDir, packageName)\n );\n}\n\nfunction setCatalogRefs(\n field: Record<string, string> | undefined,\n packageNames: ReadonlyArray<string>,\n): boolean {\n if (!field) return false;\n\n let modified = false;\n for (const packageName of packageNames) {\n if (setCatalogRef(field, packageName)) {\n modified = true;\n }\n }\n\n return modified;\n}\n\nfunction syncPackageObjectCatalogRefs(\n pkg: Record<string, unknown>,\n packageNames: ReadonlyArray<string>,\n): boolean {\n let modified = false;\n\n for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n const field = pkg[fieldName] as Record<string, string> | undefined;\n if (setCatalogRefs(field, packageNames)) {\n modified = true;\n }\n }\n\n return modified;\n}\n\nfunction findPackageFieldWithAnyDependency(\n pkg: Record<string, unknown>,\n packageNames: ReadonlyArray<string>,\n): Record<string, string> | undefined {\n for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n const field = pkg[fieldName] as Record<string, string> | undefined;\n if (!field) continue;\n if (packageNames.some((packageName) => typeof field[packageName] === \"string\")) {\n return field;\n }\n }\n\n return undefined;\n}\n\nfunction packageObjectNeedsAuthCoreCatalogRef(pkg: Record<string, unknown>): boolean {\n const targetField = findPackageFieldWithAnyDependency(pkg, AUTH_CORE_TRIGGER_PACKAGES);\n if (!targetField) return false;\n\n for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n const field = pkg[fieldName] as Record<string, string> | undefined;\n if (field?.[AUTH_CORE_PACKAGE]) return false;\n }\n\n return true;\n}\n\nfunction ensureAuthCoreCatalogRef(pkg: Record<string, unknown>): boolean {\n if (!packageObjectNeedsAuthCoreCatalogRef(pkg)) return false;\n\n const targetField = findPackageFieldWithAnyDependency(pkg, AUTH_CORE_TRIGGER_PACKAGES);\n if (!targetField) return false;\n\n targetField[AUTH_CORE_PACKAGE] = \"catalog:\";\n return true;\n}\n\nfunction packageObjectNeedsCatalogRefs(\n pkg: Record<string, unknown>,\n packageNames: ReadonlyArray<string>,\n): boolean {\n for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n const field = pkg[fieldName] as Record<string, string> | undefined;\n if (!field) continue;\n\n for (const packageName of packageNames) {\n const value = field[packageName];\n if (!value) continue;\n if (value !== \"catalog:\" && !value.startsWith(\"file:\")) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction packageFileNeedsCatalogRefs(\n filePath: string,\n packageNames: ReadonlyArray<string>,\n): boolean {\n return packageObjectNeedsCatalogRefs(\n readJsonFile<Record<string, unknown>>(filePath),\n packageNames,\n );\n}\n\nfunction updatePackageFileCatalogRefs(\n filePath: string,\n packageNames: ReadonlyArray<string>,\n): boolean {\n const pkg = readJsonFile<Record<string, unknown>>(filePath);\n const modified = syncPackageObjectCatalogRefs(pkg, packageNames);\n\n if (modified) {\n writeFileSync(filePath, `${JSON.stringify(pkg, null, 2)}\\n`);\n }\n\n return modified;\n}\n\nfunction updatePackageFileAuthCoreRef(filePath: string): boolean {\n const pkg = readJsonFile<Record<string, unknown>>(filePath);\n const modified = ensureAuthCoreCatalogRef(pkg);\n\n if (modified) {\n writeFileSync(filePath, `${JSON.stringify(pkg, null, 2)}\\n`);\n }\n\n return modified;\n}\n\nfunction syncRootCatalogWithParent(\n projectDir: string,\n parentCatalog: Record<string, string>,\n): boolean {\n const pkgPath = join(projectDir, \"package.json\");\n const pkg = readJsonFile<Record<string, unknown>>(pkgPath);\n let modified = syncPackageObjectCatalogRefs(pkg, Object.keys(parentCatalog));\n\n if (!pkg.workspaces || typeof pkg.workspaces !== \"object\") {\n pkg.workspaces = { packages: [], catalog: {} };\n modified = true;\n }\n\n const workspaces = pkg.workspaces as { packages?: string[]; catalog?: Record<string, string> };\n if (!workspaces.catalog || typeof workspaces.catalog !== \"object\") {\n workspaces.catalog = {};\n modified = true;\n }\n\n for (const [packageName, version] of Object.entries(parentCatalog)) {\n if (workspaces.catalog[packageName] !== version) {\n workspaces.catalog[packageName] = version;\n modified = true;\n }\n }\n\n if (modified) {\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`);\n }\n\n return modified;\n}\n\nasync function readExtendedRootSource(projectDir: string): Promise<ExtendedRootSource> {\n const configPath = join(projectDir, \"bos.config.json\");\n if (!existsSync(configPath)) {\n return { catalog: {}, extendsChain: [] };\n }\n\n const localConfig = JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n let extendsRef = getExtendsRef(localConfig);\n if (!extendsRef?.startsWith(\"bos://\")) {\n return {\n catalog: {},\n repository: typeof localConfig.repository === \"string\" ? localConfig.repository : undefined,\n extendsChain: [],\n };\n }\n\n const extendsChain: string[] = [];\n const visited = new Set<string>();\n let repository = typeof localConfig.repository === \"string\" ? localConfig.repository : undefined;\n let rootRef = extendsRef;\n\n while (extendsRef?.startsWith(\"bos://\")) {\n if (visited.has(extendsRef)) {\n throw new Error(`Circular extends detected while resolving upgrade source: ${extendsRef}`);\n }\n visited.add(extendsRef);\n extendsChain.push(extendsRef);\n\n const parsed = parseBosRef(extendsRef);\n if (!parsed) {\n break;\n }\n\n rootRef = extendsRef;\n\n let parentConfig: Record<string, unknown>;\n try {\n parentConfig = (await fetchParentConfig(parsed.account, parsed.gateway)) as Record<\n string,\n unknown\n >;\n } catch {\n break;\n }\n\n if (typeof parentConfig.repository === \"string\") {\n repository = parentConfig.repository;\n }\n\n const nextExtendsRef = getExtendsRef(parentConfig);\n if (!nextExtendsRef?.startsWith(\"bos://\")) {\n break;\n }\n\n extendsRef = nextExtendsRef;\n }\n\n const parsed = parseBosRef(rootRef);\n if (!parsed) {\n return { catalog: {}, repository, extendsChain };\n }\n\n const { sourceDir, cleanup } = await resolveSourceDir({\n extendsAccount: parsed.account,\n extendsGateway: parsed.gateway,\n });\n\n try {\n const sourcePkgPath = join(sourceDir, \"package.json\");\n if (!existsSync(sourcePkgPath)) {\n return { catalog: {}, repository, extendsChain };\n }\n\n const sourcePkg = JSON.parse(readFileSync(sourcePkgPath, \"utf-8\")) as {\n workspaces?: { catalog?: Record<string, string> };\n };\n return {\n catalog: { ...(sourcePkg.workspaces?.catalog ?? {}) },\n repository,\n extendsChain,\n };\n } finally {\n await cleanup();\n }\n}\n\nfunction getExtendsRef(config: Record<string, unknown>): string | undefined {\n if (typeof config.extends === \"string\") {\n return config.extends;\n }\n\n if (config.extends && typeof config.extends === \"object\") {\n return resolveExtendsRef(config.extends as Record<string, string>, \"production\");\n }\n\n return undefined;\n}\n\nfunction parseBosRef(ref: string): { account: string; gateway: string } | null {\n const match = ref.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n if (!match?.[1] || !match[2]) return null;\n return { account: match[1], gateway: match[2] };\n}\n\nfunction parseTargetedRef(ref: string): { configRef: string; targetPath?: string } {\n const hashIndex = ref.indexOf(\"#\");\n if (hashIndex === -1) {\n return { configRef: ref };\n }\n return {\n configRef: ref.slice(0, hashIndex),\n targetPath: ref.slice(hashIndex + 1) || undefined,\n };\n}\n\nfunction ensureTargetedRef(ref: string, targetPath: string): string {\n const parsed = parseTargetedRef(ref);\n if (parsed.targetPath) return ref;\n return `${parsed.configRef}#${targetPath}`;\n}\n\nfunction rewriteExtendsTarget(\n entry: Record<string, unknown> | undefined,\n targetPath: string,\n): boolean {\n if (!entry?.extends) return false;\n\n if (typeof entry.extends === \"string\") {\n const next = ensureTargetedRef(entry.extends, targetPath);\n if (next === entry.extends) return false;\n entry.extends = next;\n return true;\n }\n\n if (typeof entry.extends === \"object\") {\n let changed = false;\n for (const [key, value] of Object.entries(entry.extends as Record<string, unknown>)) {\n if (typeof value !== \"string\") continue;\n const next = ensureTargetedRef(value, targetPath);\n if (next !== value) {\n (entry.extends as Record<string, unknown>)[key] = next;\n changed = true;\n }\n }\n return changed;\n }\n\n return false;\n}\n\nfunction migrateRootConfigTargets(config: Record<string, unknown>): boolean {\n let changed = false;\n const app =\n config.app && typeof config.app === \"object\"\n ? (config.app as Record<string, unknown>)\n : undefined;\n\n if (app?.api && typeof app.api === \"object\") {\n changed = rewriteExtendsTarget(app.api as Record<string, unknown>, \"app.api\") || changed;\n }\n if (app?.auth && typeof app.auth === \"object\") {\n changed = rewriteExtendsTarget(app.auth as Record<string, unknown>, \"app.auth\") || changed;\n }\n\n if (config.plugins && typeof config.plugins === \"object\") {\n for (const [pluginKey, pluginValue] of Object.entries(\n config.plugins as Record<string, unknown>,\n )) {\n if (typeof pluginValue === \"string\") {\n const next = ensureTargetedRef(pluginValue, `plugins.${pluginKey}`);\n if (next !== pluginValue) {\n (config.plugins as Record<string, unknown>)[pluginKey] = next;\n changed = true;\n }\n continue;\n }\n if (!pluginValue || typeof pluginValue !== \"object\") continue;\n changed =\n rewriteExtendsTarget(pluginValue as Record<string, unknown>, `plugins.${pluginKey}`) ||\n changed;\n }\n }\n\n return changed;\n}\n\nfunction migratePluginProviderConfig(config: Record<string, unknown>, pluginKey: string): boolean {\n let changed = false;\n if (!config.plugins || typeof config.plugins !== \"object\") {\n return false;\n }\n\n const plugins = config.plugins as Record<string, unknown>;\n const entry = plugins[pluginKey];\n if (!entry || typeof entry !== \"object\") return false;\n\n const pluginEntry = entry as Record<string, unknown>;\n\n if (\"name\" in pluginEntry) {\n delete pluginEntry.name;\n changed = true;\n }\n\n if (typeof pluginEntry.development === \"string\" && pluginEntry.development.startsWith(\"local:\")) {\n if (\"extends\" in pluginEntry) {\n delete pluginEntry.extends;\n changed = true;\n }\n }\n\n changed = rewriteExtendsTarget(pluginEntry, `plugins.${pluginKey}`) || changed;\n\n return changed;\n}\n\nfunction mergePluginConfigIntoRoot(\n rootConfig: Record<string, unknown>,\n pluginKey: string,\n pluginConfig: Record<string, unknown>,\n): boolean {\n let changed = false;\n\n if (!rootConfig.plugins || typeof rootConfig.plugins !== \"object\") {\n rootConfig.plugins = {};\n changed = true;\n }\n const plugins = rootConfig.plugins as Record<string, unknown>;\n if (!plugins[pluginKey] || typeof plugins[pluginKey] !== \"object\") {\n plugins[pluginKey] = {};\n changed = true;\n }\n\n const entry = plugins[pluginKey] as Record<string, unknown>;\n\n const pluginData = extractPluginEntry(pluginConfig, pluginKey);\n\n const apiData = getApiEntry(pluginConfig);\n\n if (pluginData) {\n for (const key of [\n \"secrets\",\n \"variables\",\n \"routes\",\n \"sidebar\",\n \"production\",\n \"integrity\",\n \"proxy\",\n ] as const) {\n if (pluginData[key] !== undefined && entry[key] === undefined) {\n entry[key] = pluginData[key];\n changed = true;\n }\n }\n\n if (typeof pluginData.development === \"string\" && pluginData.development.startsWith(\"local:\")) {\n pluginData.development = `local:plugins/${pluginKey}`;\n }\n if (entry.development === undefined && pluginData.development !== undefined) {\n entry.development = pluginData.development;\n changed = true;\n }\n }\n\n if (apiData) {\n for (const key of [\n \"production\",\n \"integrity\",\n \"proxy\",\n \"variables\",\n \"secrets\",\n \"sidebar\",\n \"routes\",\n ] as const) {\n if (apiData[key] !== undefined && entry[key] === undefined) {\n entry[key] = apiData[key];\n changed = true;\n }\n }\n }\n\n if (\"extends\" in entry) {\n const extendsStr = typeof entry.extends === \"string\" ? entry.extends : undefined;\n if (!extendsStr || extendsStr.includes(`#plugins.${pluginKey}`)) {\n delete entry.extends;\n changed = true;\n }\n }\n\n if (\"name\" in entry) {\n delete entry.name;\n changed = true;\n }\n\n if (configHasTopLevelFields(pluginConfig, pluginKey)) {\n if (entry.routes === undefined && Array.isArray(pluginConfig.routes)) {\n entry.routes = pluginConfig.routes;\n changed = true;\n }\n if (entry.sidebar === undefined && Array.isArray(pluginConfig.sidebar)) {\n entry.sidebar = pluginConfig.sidebar;\n changed = true;\n }\n const api = getApiEntry(pluginConfig);\n if (api) {\n if (entry.routes === undefined && Array.isArray(api.routes)) {\n entry.routes = api.routes;\n changed = true;\n }\n if (entry.sidebar === undefined && Array.isArray(api.sidebar)) {\n entry.sidebar = api.sidebar;\n changed = true;\n }\n }\n }\n\n return changed;\n}\n\nfunction extractPluginEntry(\n pluginConfig: Record<string, unknown>,\n pluginKey: string,\n): Record<string, unknown> | null {\n if (\n pluginConfig.plugins &&\n typeof pluginConfig.plugins === \"object\" &&\n (pluginConfig.plugins as Record<string, unknown>)[pluginKey] &&\n typeof (pluginConfig.plugins as Record<string, unknown>)[pluginKey] === \"object\"\n ) {\n return (pluginConfig.plugins as Record<string, unknown>)[pluginKey] as Record<string, unknown>;\n }\n\n const fallback: Record<string, unknown> = {};\n if (pluginConfig.sidebar !== undefined) {\n fallback.sidebar = pluginConfig.sidebar;\n }\n if (pluginConfig.routes !== undefined) {\n fallback.routes = pluginConfig.routes;\n }\n if (Object.keys(fallback).length > 0) {\n return fallback;\n }\n\n return null;\n}\n\nfunction configHasTopLevelFields(\n pluginConfig: Record<string, unknown>,\n _pluginKey: string,\n): boolean {\n return (\n (pluginConfig.routes !== undefined && Array.isArray(pluginConfig.routes)) ||\n (pluginConfig.sidebar !== undefined && Array.isArray(pluginConfig.sidebar)) ||\n getApiEntry(pluginConfig) !== null\n );\n}\n\nfunction getApiEntry(pluginConfig: Record<string, unknown>): Record<string, unknown> | null {\n if (!pluginConfig.app || typeof pluginConfig.app !== \"object\") return null;\n const app = pluginConfig.app as Record<string, unknown>;\n if (!app.api || typeof app.api !== \"object\") return null;\n return app.api as Record<string, unknown>;\n}\n\nexport async function migrateBosConfigFiles(projectDir: string): Promise<string[]> {\n const migrated: string[] = [];\n const rootConfigPath = join(projectDir, \"bos.config.json\");\n\n if (existsSync(rootConfigPath)) {\n const rootConfig = JSON.parse(readFileSync(rootConfigPath, \"utf-8\")) as Record<string, unknown>;\n let rootChanged = migrateRootConfigTargets(rootConfig);\n\n const pluginConfigPaths = await glob(\"plugins/*/bos.config.json\", {\n cwd: projectDir,\n nodir: true,\n dot: false,\n absolute: false,\n });\n\n for (const relativePath of pluginConfigPaths) {\n const match = relativePath.match(/^plugins\\/([^/]+)\\/bos\\.config\\.json$/);\n const pluginKey = match?.[1];\n if (!pluginKey) continue;\n\n const filePath = join(projectDir, relativePath);\n try {\n const pluginConfig = JSON.parse(readFileSync(filePath, \"utf-8\")) as Record<string, unknown>;\n rootChanged = mergePluginConfigIntoRoot(rootConfig, pluginKey, pluginConfig) || rootChanged;\n } catch {}\n\n try {\n rmSync(filePath);\n migrated.push(relativePath);\n } catch {}\n }\n\n if (rootConfig.plugins && typeof rootConfig.plugins === \"object\") {\n for (const pluginKey of Object.keys(rootConfig.plugins as Record<string, unknown>)) {\n rootChanged = migratePluginProviderConfig(rootConfig, pluginKey) || rootChanged;\n }\n }\n\n if (rootChanged || migrated.length > 0) {\n await saveBosConfig(projectDir, rootConfig);\n if (!migrated.includes(\"bos.config.json\")) {\n migrated.push(\"bos.config.json\");\n }\n }\n }\n\n return migrated;\n}\n\nasync function loadParentPluginOptions(projectDir: string): Promise<{\n localConfig: Record<string, unknown>;\n parentPlugins: Record<string, unknown>;\n newPluginKeys: string[];\n} | null> {\n const configPath = join(projectDir, \"bos.config.json\");\n if (!existsSync(configPath)) {\n return null;\n }\n\n const localConfig = JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n const extendsRef = getExtendsRef(localConfig);\n if (!extendsRef?.startsWith(\"bos://\")) {\n return null;\n }\n\n const parsed = parseBosRef(extendsRef);\n if (!parsed) {\n return null;\n }\n\n let parentConfig: Record<string, unknown>;\n try {\n parentConfig = await fetchParentConfig(parsed.account, parsed.gateway);\n } catch {\n return null;\n }\n\n const parentPlugins =\n parentConfig.plugins && typeof parentConfig.plugins === \"object\"\n ? (parentConfig.plugins as Record<string, unknown>)\n : {};\n const localPlugins =\n localConfig.plugins && typeof localConfig.plugins === \"object\"\n ? (localConfig.plugins as Record<string, unknown>)\n : {};\n\n const newPluginKeys = Object.keys(parentPlugins).filter((key) => !(key in localPlugins));\n return { localConfig, parentPlugins, newPluginKeys };\n}\n\nasync function addSelectedParentPlugins(projectDir: string): Promise<string[]> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n return [];\n }\n\n const pluginOptions = await loadParentPluginOptions(projectDir);\n if (!pluginOptions || pluginOptions.newPluginKeys.length === 0) {\n return [];\n }\n\n const selectedValue = await p.multiselect({\n message: \"Select new plugins from parent:\",\n options: pluginOptions.newPluginKeys.map((key) => ({ value: key, label: key })),\n required: false,\n });\n\n if (p.isCancel(selectedValue)) {\n process.exit(0);\n }\n\n const selected = selectedValue as string[];\n if (selected.length === 0) {\n return [];\n }\n\n const localPlugins =\n pluginOptions.localConfig.plugins && typeof pluginOptions.localConfig.plugins === \"object\"\n ? (pluginOptions.localConfig.plugins as Record<string, unknown>)\n : {};\n const nextPlugins = { ...localPlugins };\n for (const key of selected) {\n const parentPlugin = pluginOptions.parentPlugins[key];\n if (parentPlugin && typeof parentPlugin === \"object\") {\n const nextPlugin = structuredClone(parentPlugin as Record<string, unknown>);\n rewriteExtendsTarget(nextPlugin, `plugins.${key}`);\n nextPlugins[key] = nextPlugin;\n } else if (typeof parentPlugin === \"string\") {\n nextPlugins[key] = ensureTargetedRef(parentPlugin, `plugins.${key}`);\n } else {\n nextPlugins[key] = parentPlugin;\n }\n }\n\n pluginOptions.localConfig.plugins = nextPlugins;\n await saveBosConfig(projectDir, pluginOptions.localConfig);\n\n return selected;\n}\n\nfunction readInstalledVersion(projectDir: string, packageName: string): string | undefined {\n return readInstalledFrameworkVersion(projectDir, packageName);\n}\n\nfunction setCatalogRef(field: Record<string, string> | undefined, packageName: string): boolean {\n if (!field || !(packageName in field)) return false;\n if (field[packageName] === \"catalog:\" || field[packageName].startsWith(\"file:\")) return false;\n field[packageName] = \"catalog:\";\n return true;\n}\n\nasync function findWorkspacePackageJsons(projectDir: string): Promise<string[]> {\n const rootPkgPath = join(projectDir, \"package.json\");\n if (!existsSync(rootPkgPath)) return [];\n\n const rootPkg = JSON.parse(readFileSync(rootPkgPath, \"utf-8\")) as Record<string, unknown>;\n const workspaceConfig = rootPkg.workspaces as { packages?: string[] } | string[] | undefined;\n\n const patterns: string[] = [];\n if (Array.isArray(workspaceConfig)) {\n patterns.push(...workspaceConfig);\n } else if (workspaceConfig?.packages && Array.isArray(workspaceConfig.packages)) {\n patterns.push(...workspaceConfig.packages);\n }\n\n if (patterns.length === 0) return [];\n\n const pkgPaths: string[] = [];\n for (const pattern of patterns) {\n const matches = await glob(pattern, { cwd: projectDir, dot: false, absolute: false });\n for (const match of matches) {\n const pkgPath = join(projectDir, match, \"package.json\");\n if (existsSync(pkgPath) && statSync(pkgPath).isFile()) {\n pkgPaths.push(pkgPath);\n }\n }\n }\n\n return [...new Set(pkgPaths)];\n}\n\nexport async function migrateChildRootPackageJson(projectDir: string): Promise<boolean> {\n const configPath = join(projectDir, \"bos.config.json\");\n const pkgPath = join(projectDir, \"package.json\");\n if (!existsSync(configPath) || !existsSync(pkgPath)) {\n return false;\n }\n\n const config = readJsonFile<Record<string, unknown>>(configPath);\n const extendsRef = getExtendsRef(config);\n if (!extendsRef?.startsWith(\"bos://\")) {\n return false;\n }\n\n const pkg = readJsonFile<Record<string, unknown>>(pkgPath);\n let changed = false;\n\n if (pkg.private !== true) {\n pkg.private = true;\n changed = true;\n }\n if (pkg.type !== \"module\") {\n pkg.type = \"module\";\n changed = true;\n }\n if (\"module\" in pkg) {\n delete pkg.module;\n changed = true;\n }\n\n const pluginPackageJsons = await glob(\"plugins/*/package.json\", {\n cwd: projectDir,\n nodir: true,\n dot: false,\n absolute: false,\n });\n const childScripts = buildChildRootScripts({\n ui: existsSync(join(projectDir, \"ui\", \"package.json\")),\n api: existsSync(join(projectDir, \"api\", \"package.json\")),\n host: existsSync(join(projectDir, \"host\", \"package.json\")),\n plugins: pluginPackageJsons.length > 0,\n });\n\n if (!pkg.scripts || typeof pkg.scripts !== \"object\") {\n pkg.scripts = {};\n changed = true;\n }\n const scripts = pkg.scripts as Record<string, string>;\n for (const [key, value] of Object.entries(childScripts)) {\n if (scripts[key] !== value) {\n scripts[key] = value;\n changed = true;\n }\n }\n for (const obsoleteScript of [\"sync-catalog\", \"init\"]) {\n if (obsoleteScript in scripts) {\n delete scripts[obsoleteScript];\n changed = true;\n }\n }\n\n const workspaces = pkg.workspaces;\n if (workspaces && typeof workspaces === \"object\") {\n const workspaceConfig = workspaces as { packages?: string[] };\n if (Array.isArray(workspaceConfig.packages)) {\n const nextPackages = workspaceConfig.packages.filter(\n (entry) => entry !== \"packages/everything-dev\" && entry !== \"packages/every-plugin\",\n );\n if (nextPackages.length !== workspaceConfig.packages.length) {\n workspaceConfig.packages = nextPackages;\n changed = true;\n }\n }\n }\n\n if (pkg.overrides && typeof pkg.overrides === \"object\") {\n const overrides = pkg.overrides as Record<string, string>;\n for (const packageName of FRAMEWORK_PACKAGES) {\n const value = overrides[packageName];\n if (typeof value === \"string\" && value.startsWith(\"file:packages/\")) {\n delete overrides[packageName];\n changed = true;\n }\n }\n if (Object.keys(overrides).length === 0) {\n delete pkg.overrides;\n changed = true;\n }\n }\n\n if (ensureAuthCoreCatalogRef(pkg)) {\n changed = true;\n }\n\n const workspacePackageJsons = await findWorkspacePackageJsons(projectDir);\n for (const workspacePkgPath of workspacePackageJsons) {\n if (updatePackageFileAuthCoreRef(workspacePkgPath)) {\n changed = true;\n }\n }\n\n if (changed) {\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`);\n }\n\n return changed;\n}\n\nfunction buildChangelogUrl(\n oldVersion: string | undefined,\n newVersion: string,\n repository: string | undefined,\n): string | undefined {\n const fromVersion = extractSemver(oldVersion);\n const toVersion = extractSemver(newVersion);\n if (!fromVersion || !toVersion || fromVersion === toVersion) return undefined;\n\n const repoUrl = repository;\n if (!repoUrl) return undefined;\n\n const githubMatch = repoUrl.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n if (!githubMatch) return undefined;\n\n const [, owner, repo] = githubMatch;\n return `https://github.com/${owner}/${repo}/compare/v${fromVersion}...v${toVersion}`;\n}\n\nasync function rewriteLegacyUiImports(projectDir: string): Promise<string[]> {\n const files = await glob(\"ui/src/**/*.{ts,tsx}\", {\n cwd: projectDir,\n nodir: true,\n dot: false,\n absolute: false,\n });\n const migrated: string[] = [];\n\n for (const file of files) {\n const filePath = join(projectDir, file);\n const original = readFileSync(filePath, \"utf-8\");\n let next = original;\n\n for (const [from, to] of LEGACY_UI_IMPORT_REWRITES) {\n next = next.replaceAll(from, to);\n }\n\n if (next !== original) {\n writeFileSync(filePath, next);\n migrated.push(file);\n }\n }\n\n return migrated;\n}\n\nexport async function upgradeTemplate(\n projectDir: string,\n options: UpgradeOptions,\n): Promise<UpgradeResult> {\n const timings: PhaseTiming[] = [];\n const pkgPath = join(projectDir, \"package.json\");\n if (!existsSync(pkgPath)) {\n return {\n status: \"error\",\n packages: [],\n timings,\n error: \"No package.json found in current directory\",\n };\n }\n\n const parentSource = await readExtendedRootSource(projectDir);\n const sourceRootCatalog = parentSource.catalog;\n const inheritedCatalogPackageNames = Object.keys(sourceRootCatalog);\n const currentRootCatalog = readRootPackageJson(projectDir) as {\n workspaces?: { catalog?: Record<string, string> };\n };\n const currentCatalogEntries = currentRootCatalog.workspaces?.catalog ?? {};\n const workspacePkgPaths = await findWorkspacePackageJsons(projectDir);\n const hasCatalogRefRewrites =\n inheritedCatalogPackageNames.length > 0 &&\n (packageObjectNeedsCatalogRefs(readRootPackageJson(projectDir), inheritedCatalogPackageNames) ||\n workspacePkgPaths.some((pkgPath) =>\n packageFileNeedsCatalogRefs(pkgPath, inheritedCatalogPackageNames),\n ));\n const hasAuthCoreRefRewrites =\n packageObjectNeedsAuthCoreCatalogRef(readRootPackageJson(projectDir)) ||\n workspacePkgPaths.some((pkgPath) =>\n packageObjectNeedsAuthCoreCatalogRef(readJsonFile<Record<string, unknown>>(pkgPath)),\n );\n\n const { packages, catalogVersionUpdates } = await timePhase(\n timings,\n \"check package versions\",\n async () => {\n const nextPackages: UpgradeResult[\"packages\"] = [];\n\n for (const name of FRAMEWORK_PACKAGES) {\n const current = readCurrentPackageSpecifier(projectDir, name);\n const target = sourceRootCatalog[name] ?? current ?? \"unknown\";\n\n nextPackages.push({ name, from: current, to: target });\n }\n\n const nextCatalogVersionUpdates: Array<{\n name: string;\n from: string | undefined;\n to: string;\n }> = [];\n for (const [name, targetVersion] of Object.entries(sourceRootCatalog)) {\n if (FRAMEWORK_PACKAGES.includes(name)) continue;\n\n const currentVersion = currentCatalogEntries[name];\n if (currentVersion === targetVersion) continue;\n nextCatalogVersionUpdates.push({ name, from: currentVersion, to: targetVersion });\n }\n\n return { packages: nextPackages, catalogVersionUpdates: nextCatalogVersionUpdates };\n },\n );\n\n const hasFrameworkUpdates = packages.some((p) => p.from !== p.to && p.from !== undefined);\n const hasCatalogUpdates = catalogVersionUpdates.length > 0;\n const hasUpdates =\n hasFrameworkUpdates || hasCatalogUpdates || hasCatalogRefRewrites || hasAuthCoreRefRewrites;\n\n if (options.dryRun) {\n let changelogUrl: string | undefined;\n const pluginOptions = options.noSync\n ? null\n : await timePhase(timings, \"discover parent plugins\", () =>\n loadParentPluginOptions(projectDir),\n );\n if (hasUpdates) {\n const mainPkg = packages.find((p) => p.name === \"everything-dev\");\n if (mainPkg?.from && mainPkg.from !== mainPkg.to) {\n changelogUrl = buildChangelogUrl(mainPkg.from, mainPkg.to, parentSource.repository);\n }\n }\n\n return {\n status: \"dry-run\",\n packages: [\n ...packages,\n ...catalogVersionUpdates.map((u) => ({ name: u.name, from: u.from, to: u.to })),\n ],\n availablePlugins: pluginOptions?.newPluginKeys,\n timings,\n changelogUrl,\n };\n }\n\n await timePhase(timings, \"apply package updates\", async () => {\n if (inheritedCatalogPackageNames.length > 0) {\n syncRootCatalogWithParent(projectDir, sourceRootCatalog);\n }\n\n if (inheritedCatalogPackageNames.length > 0) {\n for (const pkgPath of workspacePkgPaths) {\n updatePackageFileCatalogRefs(pkgPath, inheritedCatalogPackageNames);\n }\n }\n });\n\n const migratedBosConfigs = await timePhase(timings, \"migrate bos configs\", () =>\n migrateBosConfigFiles(projectDir),\n );\n const migratedRootPackageJson = await timePhase(timings, \"migrate root package\", () =>\n migrateChildRootPackageJson(projectDir),\n );\n\n let syncResult: UpgradeResult[\"sync\"];\n let addedPlugins: string[] = [];\n if (!options.noSync) {\n addedPlugins = await timePhase(timings, \"discover parent plugins\", async () => {\n if (options.dryRun) return [];\n return addSelectedParentPlugins(projectDir);\n });\n\n syncResult = await timePhase(timings, \"sync template\", () =>\n syncTemplate(projectDir, {\n dryRun: false,\n force: options.force,\n noInstall: true,\n }),\n );\n\n if (inheritedCatalogPackageNames.length > 0) {\n syncRootCatalogWithParent(projectDir, sourceRootCatalog);\n }\n }\n\n const sharedSync = await timePhase(timings, \"sync shared ui\", () =>\n syncAndGenerateSharedUi({\n configDir: projectDir,\n hostMode: \"local\",\n }),\n );\n\n if ((hasUpdates || addedPlugins.length > 0 || sharedSync.catalogChanged) && !options.noInstall) {\n await timePhase(timings, \"install dependencies\", () => runBunInstallForUpgrade(projectDir));\n await timePhase(timings, \"generate types\", () => runTypesGen(projectDir));\n }\n\n const migratedFiles = await timePhase(timings, \"clean obsolete files\", async () => {\n const nextMigratedFiles = [\n ...migratedBosConfigs,\n ...(migratedRootPackageJson ? [\"package.json\"] : []),\n ...(await rewriteLegacyUiImports(projectDir)),\n ];\n for (const file of OBSOLETE_FILES) {\n const filePath = join(projectDir, file);\n if (existsSync(filePath)) {\n rmSync(filePath);\n nextMigratedFiles.push(file);\n }\n }\n return nextMigratedFiles;\n });\n\n let changelogUrl: string | undefined;\n const mainPkg = packages.find((p) => p.name === \"everything-dev\");\n if (mainPkg?.from && mainPkg.from !== mainPkg.to) {\n changelogUrl = buildChangelogUrl(mainPkg.from, mainPkg.to, parentSource.repository);\n }\n\n return {\n status: \"upgraded\",\n packages: [\n ...packages,\n ...catalogVersionUpdates.map((u) => ({ name: u.name, from: u.from, to: u.to })),\n ],\n sync: syncResult,\n migrated: migratedFiles.length > 0 ? migratedFiles : undefined,\n selectedPlugins: addedPlugins.length > 0 ? addedPlugins : undefined,\n timings,\n changelogUrl,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAoBA,MAAM,qBAAqB,CAAC,kBAAkB,eAAe;AAC7D,MAAM,oBAAoB;AAC1B,MAAM,6BAA6B;CACjC;CACA;CACA;CACA;CACD;AACD,MAAM,4BAA4B;CAChC,CAAC,mBAAiB,iBAAe;CACjC,CAAC,iBAAiB,eAAe;CACjC,CAAC,iCAA+B,iBAAe;CAC/C,CAAC,+BAA+B,eAAe;CAC/C,CAAC,6BAA2B,iBAAe;CAC3C,CAAC,2BAA2B,eAAe;CAC5C;AACD,MAAM,iBAAiB;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAQD,SAAS,cAAc,OAA0C;AAC/D,KAAI,CAAC,MAAO,QAAO;AAEnB,QADc,MAAM,MAAM,oCACd,GAAG,MAAM;;AAGvB,SAAS,aAAgB,UAAqB;AAC5C,QAAO,KAAK,MAAM,aAAa,UAAU,QAAQ,CAAC;;AAGpD,SAAS,oBAAoB,YAA6C;AACxE,QAAO,aAAsC,KAAK,YAAY,eAAe,CAAC;;AAGhF,SAAS,qBAAqB,YAAoB,aAAyC;AAIzF,QAHY,oBAAoB,WAGtB,CAAC,YAAY,UAAU;;AAGnC,SAAS,4BAA4B,YAAoB,aAAyC;CAChG,MAAM,MAAM,oBAAoB,WAAW;AAE3C,MAAK,MAAM,aAAa;EAAC;EAAgB;EAAmB;EAAmB,EAAW;EAExF,MAAM,QADQ,IAAI,aACI;AACtB,MAAI,CAAC,MAAO;AAEZ,MAAI,UAAU,WACZ,QACE,qBAAqB,YAAY,YAAY,IAC7C,qBAAqB,YAAY,YAAY;AAIjD,MAAI,MAAM,WAAW,aAAa,IAAI,MAAM,WAAW,QAAQ,CAC7D,QAAO,qBAAqB,YAAY,YAAY;AAGtD,SAAO;;AAGT,QACE,qBAAqB,YAAY,YAAY,IAAI,qBAAqB,YAAY,YAAY;;AAIlG,SAAS,eACP,OACA,cACS;AACT,KAAI,CAAC,MAAO,QAAO;CAEnB,IAAI,WAAW;AACf,MAAK,MAAM,eAAe,aACxB,KAAI,cAAc,OAAO,YAAY,CACnC,YAAW;AAIf,QAAO;;AAGT,SAAS,6BACP,KACA,cACS;CACT,IAAI,WAAW;AAEf,MAAK,MAAM,aAAa;EAAC;EAAgB;EAAmB;EAAmB,EAAW;EACxF,MAAM,QAAQ,IAAI;AAClB,MAAI,eAAe,OAAO,aAAa,CACrC,YAAW;;AAIf,QAAO;;AAGT,SAAS,kCACP,KACA,cACoC;AACpC,MAAK,MAAM,aAAa;EAAC;EAAgB;EAAmB;EAAmB,EAAW;EACxF,MAAM,QAAQ,IAAI;AAClB,MAAI,CAAC,MAAO;AACZ,MAAI,aAAa,MAAM,gBAAgB,OAAO,MAAM,iBAAiB,SAAS,CAC5E,QAAO;;;AAOb,SAAS,qCAAqC,KAAuC;AAEnF,KAAI,CADgB,kCAAkC,KAAK,2BAC3C,CAAE,QAAO;AAEzB,MAAK,MAAM,aAAa;EAAC;EAAgB;EAAmB;EAAmB,CAE7E,KADc,IAAI,aACN,mBAAoB,QAAO;AAGzC,QAAO;;AAGT,SAAS,yBAAyB,KAAuC;AACvE,KAAI,CAAC,qCAAqC,IAAI,CAAE,QAAO;CAEvD,MAAM,cAAc,kCAAkC,KAAK,2BAA2B;AACtF,KAAI,CAAC,YAAa,QAAO;AAEzB,aAAY,qBAAqB;AACjC,QAAO;;AAGT,SAAS,8BACP,KACA,cACS;AACT,MAAK,MAAM,aAAa;EAAC;EAAgB;EAAmB;EAAmB,EAAW;EACxF,MAAM,QAAQ,IAAI;AAClB,MAAI,CAAC,MAAO;AAEZ,OAAK,MAAM,eAAe,cAAc;GACtC,MAAM,QAAQ,MAAM;AACpB,OAAI,CAAC,MAAO;AACZ,OAAI,UAAU,cAAc,CAAC,MAAM,WAAW,QAAQ,CACpD,QAAO;;;AAKb,QAAO;;AAGT,SAAS,4BACP,UACA,cACS;AACT,QAAO,8BACL,aAAsC,SAAS,EAC/C,aACD;;AAGH,SAAS,6BACP,UACA,cACS;CACT,MAAM,MAAM,aAAsC,SAAS;CAC3D,MAAM,WAAW,6BAA6B,KAAK,aAAa;AAEhE,KAAI,SACF,eAAc,UAAU,GAAG,KAAK,UAAU,KAAK,MAAM,EAAE,CAAC,IAAI;AAG9D,QAAO;;AAGT,SAAS,6BAA6B,UAA2B;CAC/D,MAAM,MAAM,aAAsC,SAAS;CAC3D,MAAM,WAAW,yBAAyB,IAAI;AAE9C,KAAI,SACF,eAAc,UAAU,GAAG,KAAK,UAAU,KAAK,MAAM,EAAE,CAAC,IAAI;AAG9D,QAAO;;AAGT,SAAS,0BACP,YACA,eACS;CACT,MAAM,UAAU,KAAK,YAAY,eAAe;CAChD,MAAM,MAAM,aAAsC,QAAQ;CAC1D,IAAI,WAAW,6BAA6B,KAAK,OAAO,KAAK,cAAc,CAAC;AAE5E,KAAI,CAAC,IAAI,cAAc,OAAO,IAAI,eAAe,UAAU;AACzD,MAAI,aAAa;GAAE,UAAU,EAAE;GAAE,SAAS,EAAE;GAAE;AAC9C,aAAW;;CAGb,MAAM,aAAa,IAAI;AACvB,KAAI,CAAC,WAAW,WAAW,OAAO,WAAW,YAAY,UAAU;AACjE,aAAW,UAAU,EAAE;AACvB,aAAW;;AAGb,MAAK,MAAM,CAAC,aAAa,YAAY,OAAO,QAAQ,cAAc,CAChE,KAAI,WAAW,QAAQ,iBAAiB,SAAS;AAC/C,aAAW,QAAQ,eAAe;AAClC,aAAW;;AAIf,KAAI,SACF,eAAc,SAAS,GAAG,KAAK,UAAU,KAAK,MAAM,EAAE,CAAC,IAAI;AAG7D,QAAO;;AAGT,eAAe,uBAAuB,YAAiD;CACrF,MAAM,aAAa,KAAK,YAAY,kBAAkB;AACtD,KAAI,CAAC,WAAW,WAAW,CACzB,QAAO;EAAE,SAAS,EAAE;EAAE,cAAc,EAAE;EAAE;CAG1C,MAAM,cAAc,KAAK,MAAM,aAAa,YAAY,QAAQ,CAAC;CACjE,IAAI,aAAa,cAAc,YAAY;AAC3C,KAAI,CAAC,YAAY,WAAW,SAAS,CACnC,QAAO;EACL,SAAS,EAAE;EACX,YAAY,OAAO,YAAY,eAAe,WAAW,YAAY,aAAa;EAClF,cAAc,EAAE;EACjB;CAGH,MAAM,eAAyB,EAAE;CACjC,MAAM,0BAAU,IAAI,KAAa;CACjC,IAAI,aAAa,OAAO,YAAY,eAAe,WAAW,YAAY,aAAa;CACvF,IAAI,UAAU;AAEd,QAAO,YAAY,WAAW,SAAS,EAAE;AACvC,MAAI,QAAQ,IAAI,WAAW,CACzB,OAAM,IAAI,MAAM,6DAA6D,aAAa;AAE5F,UAAQ,IAAI,WAAW;AACvB,eAAa,KAAK,WAAW;EAE7B,MAAM,SAAS,YAAY,WAAW;AACtC,MAAI,CAAC,OACH;AAGF,YAAU;EAEV,IAAI;AACJ,MAAI;AACF,kBAAgB,MAAM,kBAAkB,OAAO,SAAS,OAAO,QAAQ;UAIjE;AACN;;AAGF,MAAI,OAAO,aAAa,eAAe,SACrC,cAAa,aAAa;EAG5B,MAAM,iBAAiB,cAAc,aAAa;AAClD,MAAI,CAAC,gBAAgB,WAAW,SAAS,CACvC;AAGF,eAAa;;CAGf,MAAM,SAAS,YAAY,QAAQ;AACnC,KAAI,CAAC,OACH,QAAO;EAAE,SAAS,EAAE;EAAE;EAAY;EAAc;CAGlD,MAAM,EAAE,WAAW,YAAY,MAAM,iBAAiB;EACpD,gBAAgB,OAAO;EACvB,gBAAgB,OAAO;EACxB,CAAC;AAEF,KAAI;EACF,MAAM,gBAAgB,KAAK,WAAW,eAAe;AACrD,MAAI,CAAC,WAAW,cAAc,CAC5B,QAAO;GAAE,SAAS,EAAE;GAAE;GAAY;GAAc;AAMlD,SAAO;GACL,SAAS,EAAE,GAJK,KAAK,MAAM,aAAa,eAAe,QAAQ,CAIvC,CAAC,YAAY,WAAW,EAAE,EAAG;GACrD;GACA;GACD;WACO;AACR,QAAM,SAAS;;;AAInB,SAAS,cAAc,QAAqD;AAC1E,KAAI,OAAO,OAAO,YAAY,SAC5B,QAAO,OAAO;AAGhB,KAAI,OAAO,WAAW,OAAO,OAAO,YAAY,SAC9C,QAAO,kBAAkB,OAAO,SAAmC,aAAa;;AAMpF,SAAS,YAAY,KAA0D;CAC7E,MAAM,QAAQ,IAAI,MAAM,0BAA0B;AAClD,KAAI,CAAC,QAAQ,MAAM,CAAC,MAAM,GAAI,QAAO;AACrC,QAAO;EAAE,SAAS,MAAM;EAAI,SAAS,MAAM;EAAI;;AAGjD,SAAS,iBAAiB,KAAyD;CACjF,MAAM,YAAY,IAAI,QAAQ,IAAI;AAClC,KAAI,cAAc,GAChB,QAAO,EAAE,WAAW,KAAK;AAE3B,QAAO;EACL,WAAW,IAAI,MAAM,GAAG,UAAU;EAClC,YAAY,IAAI,MAAM,YAAY,EAAE,IAAI;EACzC;;AAGH,SAAS,kBAAkB,KAAa,YAA4B;CAClE,MAAM,SAAS,iBAAiB,IAAI;AACpC,KAAI,OAAO,WAAY,QAAO;AAC9B,QAAO,GAAG,OAAO,UAAU,GAAG;;AAGhC,SAAS,qBACP,OACA,YACS;AACT,KAAI,CAAC,OAAO,QAAS,QAAO;AAE5B,KAAI,OAAO,MAAM,YAAY,UAAU;EACrC,MAAM,OAAO,kBAAkB,MAAM,SAAS,WAAW;AACzD,MAAI,SAAS,MAAM,QAAS,QAAO;AACnC,QAAM,UAAU;AAChB,SAAO;;AAGT,KAAI,OAAO,MAAM,YAAY,UAAU;EACrC,IAAI,UAAU;AACd,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,QAAmC,EAAE;AACnF,OAAI,OAAO,UAAU,SAAU;GAC/B,MAAM,OAAO,kBAAkB,OAAO,WAAW;AACjD,OAAI,SAAS,OAAO;AAClB,IAAC,MAAM,QAAoC,OAAO;AAClD,cAAU;;;AAGd,SAAO;;AAGT,QAAO;;AAGT,SAAS,yBAAyB,QAA0C;CAC1E,IAAI,UAAU;CACd,MAAM,MACJ,OAAO,OAAO,OAAO,OAAO,QAAQ,WAC/B,OAAO,MACR;AAEN,KAAI,KAAK,OAAO,OAAO,IAAI,QAAQ,SACjC,WAAU,qBAAqB,IAAI,KAAgC,UAAU,IAAI;AAEnF,KAAI,KAAK,QAAQ,OAAO,IAAI,SAAS,SACnC,WAAU,qBAAqB,IAAI,MAAiC,WAAW,IAAI;AAGrF,KAAI,OAAO,WAAW,OAAO,OAAO,YAAY,SAC9C,MAAK,MAAM,CAAC,WAAW,gBAAgB,OAAO,QAC5C,OAAO,QACR,EAAE;AACD,MAAI,OAAO,gBAAgB,UAAU;GACnC,MAAM,OAAO,kBAAkB,aAAa,WAAW,YAAY;AACnE,OAAI,SAAS,aAAa;AACxB,IAAC,OAAO,QAAoC,aAAa;AACzD,cAAU;;AAEZ;;AAEF,MAAI,CAAC,eAAe,OAAO,gBAAgB,SAAU;AACrD,YACE,qBAAqB,aAAwC,WAAW,YAAY,IACpF;;AAIN,QAAO;;AAGT,SAAS,4BAA4B,QAAiC,WAA4B;CAChG,IAAI,UAAU;AACd,KAAI,CAAC,OAAO,WAAW,OAAO,OAAO,YAAY,SAC/C,QAAO;CAIT,MAAM,QADU,OAAO,QACD;AACtB,KAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;CAEhD,MAAM,cAAc;AAEpB,KAAI,UAAU,aAAa;AACzB,SAAO,YAAY;AACnB,YAAU;;AAGZ,KAAI,OAAO,YAAY,gBAAgB,YAAY,YAAY,YAAY,WAAW,SAAS,EAC7F;MAAI,aAAa,aAAa;AAC5B,UAAO,YAAY;AACnB,aAAU;;;AAId,WAAU,qBAAqB,aAAa,WAAW,YAAY,IAAI;AAEvE,QAAO;;AAGT,SAAS,0BACP,YACA,WACA,cACS;CACT,IAAI,UAAU;AAEd,KAAI,CAAC,WAAW,WAAW,OAAO,WAAW,YAAY,UAAU;AACjE,aAAW,UAAU,EAAE;AACvB,YAAU;;CAEZ,MAAM,UAAU,WAAW;AAC3B,KAAI,CAAC,QAAQ,cAAc,OAAO,QAAQ,eAAe,UAAU;AACjE,UAAQ,aAAa,EAAE;AACvB,YAAU;;CAGZ,MAAM,QAAQ,QAAQ;CAEtB,MAAM,aAAa,mBAAmB,cAAc,UAAU;CAE9D,MAAM,UAAU,YAAY,aAAa;AAEzC,KAAI,YAAY;AACd,OAAK,MAAM,OAAO;GAChB;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CACC,KAAI,WAAW,SAAS,UAAa,MAAM,SAAS,QAAW;AAC7D,SAAM,OAAO,WAAW;AACxB,aAAU;;AAId,MAAI,OAAO,WAAW,gBAAgB,YAAY,WAAW,YAAY,WAAW,SAAS,CAC3F,YAAW,cAAc,iBAAiB;AAE5C,MAAI,MAAM,gBAAgB,UAAa,WAAW,gBAAgB,QAAW;AAC3E,SAAM,cAAc,WAAW;AAC/B,aAAU;;;AAId,KAAI,SACF;OAAK,MAAM,OAAO;GAChB;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CACC,KAAI,QAAQ,SAAS,UAAa,MAAM,SAAS,QAAW;AAC1D,SAAM,OAAO,QAAQ;AACrB,aAAU;;;AAKhB,KAAI,aAAa,OAAO;EACtB,MAAM,aAAa,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU;AACvE,MAAI,CAAC,cAAc,WAAW,SAAS,YAAY,YAAY,EAAE;AAC/D,UAAO,MAAM;AACb,aAAU;;;AAId,KAAI,UAAU,OAAO;AACnB,SAAO,MAAM;AACb,YAAU;;AAGZ,KAAI,wBAAwB,cAAc,UAAU,EAAE;AACpD,MAAI,MAAM,WAAW,UAAa,MAAM,QAAQ,aAAa,OAAO,EAAE;AACpE,SAAM,SAAS,aAAa;AAC5B,aAAU;;AAEZ,MAAI,MAAM,YAAY,UAAa,MAAM,QAAQ,aAAa,QAAQ,EAAE;AACtE,SAAM,UAAU,aAAa;AAC7B,aAAU;;EAEZ,MAAM,MAAM,YAAY,aAAa;AACrC,MAAI,KAAK;AACP,OAAI,MAAM,WAAW,UAAa,MAAM,QAAQ,IAAI,OAAO,EAAE;AAC3D,UAAM,SAAS,IAAI;AACnB,cAAU;;AAEZ,OAAI,MAAM,YAAY,UAAa,MAAM,QAAQ,IAAI,QAAQ,EAAE;AAC7D,UAAM,UAAU,IAAI;AACpB,cAAU;;;;AAKhB,QAAO;;AAGT,SAAS,mBACP,cACA,WACgC;AAChC,KACE,aAAa,WACb,OAAO,aAAa,YAAY,YAC/B,aAAa,QAAoC,cAClD,OAAQ,aAAa,QAAoC,eAAe,SAExE,QAAQ,aAAa,QAAoC;CAG3D,MAAM,WAAoC,EAAE;AAC5C,KAAI,aAAa,YAAY,OAC3B,UAAS,UAAU,aAAa;AAElC,KAAI,aAAa,WAAW,OAC1B,UAAS,SAAS,aAAa;AAEjC,KAAI,OAAO,KAAK,SAAS,CAAC,SAAS,EACjC,QAAO;AAGT,QAAO;;AAGT,SAAS,wBACP,cACA,YACS;AACT,QACG,aAAa,WAAW,UAAa,MAAM,QAAQ,aAAa,OAAO,IACvE,aAAa,YAAY,UAAa,MAAM,QAAQ,aAAa,QAAQ,IAC1E,YAAY,aAAa,KAAK;;AAIlC,SAAS,YAAY,cAAuE;AAC1F,KAAI,CAAC,aAAa,OAAO,OAAO,aAAa,QAAQ,SAAU,QAAO;CACtE,MAAM,MAAM,aAAa;AACzB,KAAI,CAAC,IAAI,OAAO,OAAO,IAAI,QAAQ,SAAU,QAAO;AACpD,QAAO,IAAI;;AAGb,eAAsB,sBAAsB,YAAuC;CACjF,MAAM,WAAqB,EAAE;CAC7B,MAAM,iBAAiB,KAAK,YAAY,kBAAkB;AAE1D,KAAI,WAAW,eAAe,EAAE;EAC9B,MAAM,aAAa,KAAK,MAAM,aAAa,gBAAgB,QAAQ,CAAC;EACpE,IAAI,cAAc,yBAAyB,WAAW;EAEtD,MAAM,oBAAoB,MAAM,KAAK,6BAA6B;GAChE,KAAK;GACL,OAAO;GACP,KAAK;GACL,UAAU;GACX,CAAC;AAEF,OAAK,MAAM,gBAAgB,mBAAmB;GAE5C,MAAM,YADQ,aAAa,MAAM,wCACV,GAAG;AAC1B,OAAI,CAAC,UAAW;GAEhB,MAAM,WAAW,KAAK,YAAY,aAAa;AAC/C,OAAI;AAEF,kBAAc,0BAA0B,YAAY,WAD/B,KAAK,MAAM,aAAa,UAAU,QAAQ,CACY,CAAC,IAAI;WAC1E;AAER,OAAI;AACF,WAAO,SAAS;AAChB,aAAS,KAAK,aAAa;WACrB;;AAGV,MAAI,WAAW,WAAW,OAAO,WAAW,YAAY,SACtD,MAAK,MAAM,aAAa,OAAO,KAAK,WAAW,QAAmC,CAChF,eAAc,4BAA4B,YAAY,UAAU,IAAI;AAIxE,MAAI,eAAe,SAAS,SAAS,GAAG;AACtC,SAAM,cAAc,YAAY,WAAW;AAC3C,OAAI,CAAC,SAAS,SAAS,kBAAkB,CACvC,UAAS,KAAK,kBAAkB;;;AAKtC,QAAO;;AAGT,eAAe,wBAAwB,YAI7B;CACR,MAAM,aAAa,KAAK,YAAY,kBAAkB;AACtD,KAAI,CAAC,WAAW,WAAW,CACzB,QAAO;CAGT,MAAM,cAAc,KAAK,MAAM,aAAa,YAAY,QAAQ,CAAC;CACjE,MAAM,aAAa,cAAc,YAAY;AAC7C,KAAI,CAAC,YAAY,WAAW,SAAS,CACnC,QAAO;CAGT,MAAM,SAAS,YAAY,WAAW;AACtC,KAAI,CAAC,OACH,QAAO;CAGT,IAAI;AACJ,KAAI;AACF,iBAAe,MAAM,kBAAkB,OAAO,SAAS,OAAO,QAAQ;SAChE;AACN,SAAO;;CAGT,MAAM,gBACJ,aAAa,WAAW,OAAO,aAAa,YAAY,WACnD,aAAa,UACd,EAAE;CACR,MAAM,eACJ,YAAY,WAAW,OAAO,YAAY,YAAY,WACjD,YAAY,UACb,EAAE;AAGR,QAAO;EAAE;EAAa;EAAe,eADf,OAAO,KAAK,cAAc,CAAC,QAAQ,QAAQ,EAAE,OAAO,cACxB;EAAE;;AAGtD,eAAe,yBAAyB,YAAuC;AAC7E,KAAI,CAAC,QAAQ,MAAM,SAAS,CAAC,QAAQ,OAAO,MAC1C,QAAO,EAAE;CAGX,MAAM,gBAAgB,MAAM,wBAAwB,WAAW;AAC/D,KAAI,CAAC,iBAAiB,cAAc,cAAc,WAAW,EAC3D,QAAO,EAAE;CAGX,MAAM,gBAAgB,MAAM,EAAE,YAAY;EACxC,SAAS;EACT,SAAS,cAAc,cAAc,KAAK,SAAS;GAAE,OAAO;GAAK,OAAO;GAAK,EAAE;EAC/E,UAAU;EACX,CAAC;AAEF,KAAI,EAAE,SAAS,cAAc,CAC3B,SAAQ,KAAK,EAAE;CAGjB,MAAM,WAAW;AACjB,KAAI,SAAS,WAAW,EACtB,QAAO,EAAE;CAOX,MAAM,cAAc,EAAE,GAHpB,cAAc,YAAY,WAAW,OAAO,cAAc,YAAY,YAAY,WAC7E,cAAc,YAAY,UAC3B,EAAE,EAC+B;AACvC,MAAK,MAAM,OAAO,UAAU;EAC1B,MAAM,eAAe,cAAc,cAAc;AACjD,MAAI,gBAAgB,OAAO,iBAAiB,UAAU;GACpD,MAAM,aAAa,gBAAgB,aAAwC;AAC3E,wBAAqB,YAAY,WAAW,MAAM;AAClD,eAAY,OAAO;aACV,OAAO,iBAAiB,SACjC,aAAY,OAAO,kBAAkB,cAAc,WAAW,MAAM;MAEpE,aAAY,OAAO;;AAIvB,eAAc,YAAY,UAAU;AACpC,OAAM,cAAc,YAAY,cAAc,YAAY;AAE1D,QAAO;;AAGT,SAAS,qBAAqB,YAAoB,aAAyC;AACzF,QAAO,8BAA8B,YAAY,YAAY;;AAG/D,SAAS,cAAc,OAA2C,aAA8B;AAC9F,KAAI,CAAC,SAAS,EAAE,eAAe,OAAQ,QAAO;AAC9C,KAAI,MAAM,iBAAiB,cAAc,MAAM,aAAa,WAAW,QAAQ,CAAE,QAAO;AACxF,OAAM,eAAe;AACrB,QAAO;;AAGT,eAAe,0BAA0B,YAAuC;CAC9E,MAAM,cAAc,KAAK,YAAY,eAAe;AACpD,KAAI,CAAC,WAAW,YAAY,CAAE,QAAO,EAAE;CAGvC,MAAM,kBADU,KAAK,MAAM,aAAa,aAAa,QAAQ,CAC9B,CAAC;CAEhC,MAAM,WAAqB,EAAE;AAC7B,KAAI,MAAM,QAAQ,gBAAgB,CAChC,UAAS,KAAK,GAAG,gBAAgB;UACxB,iBAAiB,YAAY,MAAM,QAAQ,gBAAgB,SAAS,CAC7E,UAAS,KAAK,GAAG,gBAAgB,SAAS;AAG5C,KAAI,SAAS,WAAW,EAAG,QAAO,EAAE;CAEpC,MAAM,WAAqB,EAAE;AAC7B,MAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,UAAU,MAAM,KAAK,SAAS;GAAE,KAAK;GAAY,KAAK;GAAO,UAAU;GAAO,CAAC;AACrF,OAAK,MAAM,SAAS,SAAS;GAC3B,MAAM,UAAU,KAAK,YAAY,OAAO,eAAe;AACvD,OAAI,WAAW,QAAQ,IAAI,SAAS,QAAQ,CAAC,QAAQ,CACnD,UAAS,KAAK,QAAQ;;;AAK5B,QAAO,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC;;AAG/B,eAAsB,4BAA4B,YAAsC;CACtF,MAAM,aAAa,KAAK,YAAY,kBAAkB;CACtD,MAAM,UAAU,KAAK,YAAY,eAAe;AAChD,KAAI,CAAC,WAAW,WAAW,IAAI,CAAC,WAAW,QAAQ,CACjD,QAAO;AAKT,KAAI,CADe,cADJ,aAAsC,WACd,CACxB,EAAE,WAAW,SAAS,CACnC,QAAO;CAGT,MAAM,MAAM,aAAsC,QAAQ;CAC1D,IAAI,UAAU;AAEd,KAAI,IAAI,YAAY,MAAM;AACxB,MAAI,UAAU;AACd,YAAU;;AAEZ,KAAI,IAAI,SAAS,UAAU;AACzB,MAAI,OAAO;AACX,YAAU;;AAEZ,KAAI,YAAY,KAAK;AACnB,SAAO,IAAI;AACX,YAAU;;CAGZ,MAAM,qBAAqB,MAAM,KAAK,0BAA0B;EAC9D,KAAK;EACL,OAAO;EACP,KAAK;EACL,UAAU;EACX,CAAC;CACF,MAAM,eAAe,sBAAsB;EACzC,IAAI,WAAW,KAAK,YAAY,MAAM,eAAe,CAAC;EACtD,KAAK,WAAW,KAAK,YAAY,OAAO,eAAe,CAAC;EACxD,MAAM,WAAW,KAAK,YAAY,QAAQ,eAAe,CAAC;EAC1D,SAAS,mBAAmB,SAAS;EACtC,CAAC;AAEF,KAAI,CAAC,IAAI,WAAW,OAAO,IAAI,YAAY,UAAU;AACnD,MAAI,UAAU,EAAE;AAChB,YAAU;;CAEZ,MAAM,UAAU,IAAI;AACpB,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,aAAa,CACrD,KAAI,QAAQ,SAAS,OAAO;AAC1B,UAAQ,OAAO;AACf,YAAU;;AAGd,MAAK,MAAM,kBAAkB,CAAC,gBAAgB,OAAO,CACnD,KAAI,kBAAkB,SAAS;AAC7B,SAAO,QAAQ;AACf,YAAU;;CAId,MAAM,aAAa,IAAI;AACvB,KAAI,cAAc,OAAO,eAAe,UAAU;EAChD,MAAM,kBAAkB;AACxB,MAAI,MAAM,QAAQ,gBAAgB,SAAS,EAAE;GAC3C,MAAM,eAAe,gBAAgB,SAAS,QAC3C,UAAU,UAAU,6BAA6B,UAAU,wBAC7D;AACD,OAAI,aAAa,WAAW,gBAAgB,SAAS,QAAQ;AAC3D,oBAAgB,WAAW;AAC3B,cAAU;;;;AAKhB,KAAI,IAAI,aAAa,OAAO,IAAI,cAAc,UAAU;EACtD,MAAM,YAAY,IAAI;AACtB,OAAK,MAAM,eAAe,oBAAoB;GAC5C,MAAM,QAAQ,UAAU;AACxB,OAAI,OAAO,UAAU,YAAY,MAAM,WAAW,iBAAiB,EAAE;AACnE,WAAO,UAAU;AACjB,cAAU;;;AAGd,MAAI,OAAO,KAAK,UAAU,CAAC,WAAW,GAAG;AACvC,UAAO,IAAI;AACX,aAAU;;;AAId,KAAI,yBAAyB,IAAI,CAC/B,WAAU;CAGZ,MAAM,wBAAwB,MAAM,0BAA0B,WAAW;AACzE,MAAK,MAAM,oBAAoB,sBAC7B,KAAI,6BAA6B,iBAAiB,CAChD,WAAU;AAId,KAAI,QACF,eAAc,SAAS,GAAG,KAAK,UAAU,KAAK,MAAM,EAAE,CAAC,IAAI;AAG7D,QAAO;;AAGT,SAAS,kBACP,YACA,YACA,YACoB;CACpB,MAAM,cAAc,cAAc,WAAW;CAC7C,MAAM,YAAY,cAAc,WAAW;AAC3C,KAAI,CAAC,eAAe,CAAC,aAAa,gBAAgB,UAAW,QAAO;CAEpE,MAAM,UAAU;AAChB,KAAI,CAAC,QAAS,QAAO;CAErB,MAAM,cAAc,QAAQ,MAAM,wDAAwD;AAC1F,KAAI,CAAC,YAAa,QAAO;CAEzB,MAAM,GAAG,OAAO,QAAQ;AACxB,QAAO,sBAAsB,MAAM,GAAG,KAAK,YAAY,YAAY,MAAM;;AAG3E,eAAe,uBAAuB,YAAuC;CAC3E,MAAM,QAAQ,MAAM,KAAK,wBAAwB;EAC/C,KAAK;EACL,OAAO;EACP,KAAK;EACL,UAAU;EACX,CAAC;CACF,MAAM,WAAqB,EAAE;AAE7B,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,WAAW,KAAK,YAAY,KAAK;EACvC,MAAM,WAAW,aAAa,UAAU,QAAQ;EAChD,IAAI,OAAO;AAEX,OAAK,MAAM,CAAC,MAAM,OAAO,0BACvB,QAAO,KAAK,WAAW,MAAM,GAAG;AAGlC,MAAI,SAAS,UAAU;AACrB,iBAAc,UAAU,KAAK;AAC7B,YAAS,KAAK,KAAK;;;AAIvB,QAAO;;AAGT,eAAsB,gBACpB,YACA,SACwB;CACxB,MAAM,UAAyB,EAAE;AAEjC,KAAI,CAAC,WADW,KAAK,YAAY,eACV,CAAC,CACtB,QAAO;EACL,QAAQ;EACR,UAAU,EAAE;EACZ;EACA,OAAO;EACR;CAGH,MAAM,eAAe,MAAM,uBAAuB,WAAW;CAC7D,MAAM,oBAAoB,aAAa;CACvC,MAAM,+BAA+B,OAAO,KAAK,kBAAkB;CAInE,MAAM,wBAHqB,oBAAoB,WAGC,CAAC,YAAY,WAAW,EAAE;CAC1E,MAAM,oBAAoB,MAAM,0BAA0B,WAAW;CACrE,MAAM,wBACJ,6BAA6B,SAAS,MACrC,8BAA8B,oBAAoB,WAAW,EAAE,6BAA6B,IAC3F,kBAAkB,MAAM,YACtB,4BAA4B,SAAS,6BAA6B,CACnE;CACL,MAAM,yBACJ,qCAAqC,oBAAoB,WAAW,CAAC,IACrE,kBAAkB,MAAM,YACtB,qCAAqC,aAAsC,QAAQ,CAAC,CACrF;CAEH,MAAM,EAAE,UAAU,0BAA0B,MAAM,UAChD,SACA,0BACA,YAAY;EACV,MAAM,eAA0C,EAAE;AAElD,OAAK,MAAM,QAAQ,oBAAoB;GACrC,MAAM,UAAU,4BAA4B,YAAY,KAAK;GAC7D,MAAM,SAAS,kBAAkB,SAAS,WAAW;AAErD,gBAAa,KAAK;IAAE;IAAM,MAAM;IAAS,IAAI;IAAQ,CAAC;;EAGxD,MAAM,4BAID,EAAE;AACP,OAAK,MAAM,CAAC,MAAM,kBAAkB,OAAO,QAAQ,kBAAkB,EAAE;AACrE,OAAI,mBAAmB,SAAS,KAAK,CAAE;GAEvC,MAAM,iBAAiB,sBAAsB;AAC7C,OAAI,mBAAmB,cAAe;AACtC,6BAA0B,KAAK;IAAE;IAAM,MAAM;IAAgB,IAAI;IAAe,CAAC;;AAGnF,SAAO;GAAE,UAAU;GAAc,uBAAuB;GAA2B;GAEtF;CAED,MAAM,sBAAsB,SAAS,MAAM,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,OAAU;CACzF,MAAM,oBAAoB,sBAAsB,SAAS;CACzD,MAAM,aACJ,uBAAuB,qBAAqB,yBAAyB;AAEvE,KAAI,QAAQ,QAAQ;EAClB,IAAI;EACJ,MAAM,gBAAgB,QAAQ,SAC1B,OACA,MAAM,UAAU,SAAS,iCACvB,wBAAwB,WAAW,CACpC;AACL,MAAI,YAAY;GACd,MAAM,UAAU,SAAS,MAAM,MAAM,EAAE,SAAS,iBAAiB;AACjE,OAAI,SAAS,QAAQ,QAAQ,SAAS,QAAQ,GAC5C,gBAAe,kBAAkB,QAAQ,MAAM,QAAQ,IAAI,aAAa,WAAW;;AAIvF,SAAO;GACL,QAAQ;GACR,UAAU,CACR,GAAG,UACH,GAAG,sBAAsB,KAAK,OAAO;IAAE,MAAM,EAAE;IAAM,MAAM,EAAE;IAAM,IAAI,EAAE;IAAI,EAAE,CAChF;GACD,kBAAkB,eAAe;GACjC;GACA;GACD;;AAGH,OAAM,UAAU,SAAS,yBAAyB,YAAY;AAC5D,MAAI,6BAA6B,SAAS,EACxC,2BAA0B,YAAY,kBAAkB;AAG1D,MAAI,6BAA6B,SAAS,EACxC,MAAK,MAAM,WAAW,kBACpB,8BAA6B,SAAS,6BAA6B;GAGvE;CAEF,MAAM,qBAAqB,MAAM,UAAU,SAAS,6BAClD,sBAAsB,WAAW,CAClC;CACD,MAAM,0BAA0B,MAAM,UAAU,SAAS,8BACvD,4BAA4B,WAAW,CACxC;CAED,IAAI;CACJ,IAAI,eAAyB,EAAE;AAC/B,KAAI,CAAC,QAAQ,QAAQ;AACnB,iBAAe,MAAM,UAAU,SAAS,2BAA2B,YAAY;AAC7E,OAAI,QAAQ,OAAQ,QAAO,EAAE;AAC7B,UAAO,yBAAyB,WAAW;IAC3C;AAEF,eAAa,MAAM,UAAU,SAAS,uBACpC,aAAa,YAAY;GACvB,QAAQ;GACR,OAAO,QAAQ;GACf,WAAW;GACZ,CAAC,CACH;AAED,MAAI,6BAA6B,SAAS,EACxC,2BAA0B,YAAY,kBAAkB;;CAI5D,MAAM,aAAa,MAAM,UAAU,SAAS,wBAC1C,wBAAwB;EACtB,WAAW;EACX,UAAU;EACX,CAAC,CACH;AAED,MAAK,cAAc,aAAa,SAAS,KAAK,WAAW,mBAAmB,CAAC,QAAQ,WAAW;AAC9F,QAAM,UAAU,SAAS,8BAA8B,wBAAwB,WAAW,CAAC;AAC3F,QAAM,UAAU,SAAS,wBAAwB,YAAY,WAAW,CAAC;;CAG3E,MAAM,gBAAgB,MAAM,UAAU,SAAS,wBAAwB,YAAY;EACjF,MAAM,oBAAoB;GACxB,GAAG;GACH,GAAI,0BAA0B,CAAC,eAAe,GAAG,EAAE;GACnD,GAAI,MAAM,uBAAuB,WAAW;GAC7C;AACD,OAAK,MAAM,QAAQ,gBAAgB;GACjC,MAAM,WAAW,KAAK,YAAY,KAAK;AACvC,OAAI,WAAW,SAAS,EAAE;AACxB,WAAO,SAAS;AAChB,sBAAkB,KAAK,KAAK;;;AAGhC,SAAO;GACP;CAEF,IAAI;CACJ,MAAM,UAAU,SAAS,MAAM,MAAM,EAAE,SAAS,iBAAiB;AACjE,KAAI,SAAS,QAAQ,QAAQ,SAAS,QAAQ,GAC5C,gBAAe,kBAAkB,QAAQ,MAAM,QAAQ,IAAI,aAAa,WAAW;AAGrF,QAAO;EACL,QAAQ;EACR,UAAU,CACR,GAAG,UACH,GAAG,sBAAsB,KAAK,OAAO;GAAE,MAAM,EAAE;GAAM,MAAM,EAAE;GAAM,IAAI,EAAE;GAAI,EAAE,CAChF;EACD,MAAM;EACN,UAAU,cAAc,SAAS,IAAI,gBAAgB;EACrD,iBAAiB,aAAa,SAAS,IAAI,eAAe;EAC1D;EACA;EACD"}
1
+ {"version":3,"file":"upgrade.mjs","names":[],"sources":["../../src/cli/upgrade.ts"],"sourcesContent":["import { existsSync, readFileSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport { glob } from \"glob\";\nimport { loadResolvedConfig } from \"../config\";\nimport type { PhaseTiming, UpgradeOptions, UpgradeResult } from \"../contract\";\nimport { resolveExtendsRef } from \"../merge\";\nimport { syncAndGenerateSharedUi } from \"../shared\";\nimport { saveBosConfig } from \"../utils/save-config\";\nimport { readInstalledFrameworkVersion } from \"./framework-version\";\nimport {\n buildChildRootScripts,\n fetchParentConfig,\n resolveCatalogChainSource,\n runBunInstallForUpgrade,\n runTypesGen,\n} from \"./init\";\nimport { syncTemplate } from \"./sync\";\nimport { timePhase } from \"./timing\";\n\nconst FRAMEWORK_PACKAGES = [\"everything-dev\", \"every-plugin\"];\nconst AUTH_CORE_PACKAGE = \"@better-auth/core\";\nconst AUTH_CORE_TRIGGER_PACKAGES = [\n \"better-auth\",\n \"better-near-auth\",\n \"@better-auth/api-key\",\n \"@better-auth/passkey\",\n] as const;\nconst LEGACY_UI_IMPORT_REWRITES = [\n ['from \"@/auth\"', 'from \"@/app\"'],\n [\"from '@/auth'\", \"from '@/app'\"],\n ['from \"@/lib/use-api-client\"', 'from \"@/app\"'],\n [\"from '@/lib/use-api-client'\", \"from '@/app'\"],\n ['from \"@/lib/api-client\"', 'from \"@/app\"'],\n [\"from '@/lib/api-client'\", \"from '@/app'\"],\n] as const;\nconst OBSOLETE_FILES = [\n \"ui/src/auth.ts\",\n \"ui/src/auth-types.gen.ts\",\n \"ui/src/lib/api-client.ts\",\n \"ui/src/lib/use-api-client.ts\",\n \"ui/src/api-contract.ts\",\n \"ui/src/api-contract.gen.ts\",\n \"ui/src/lib/auth-client.ts\",\n \"ui/src/lib/session.ts\",\n \"ui/scripts/generate-metadata.ts\",\n \".github/dependabot.yml\",\n \".github/templates/dependabot.yml\",\n \".github/renovate.json\",\n \".github/workflows/packages-release.yml\",\n \".github/workflows/release.yml\",\n \".github/workflows/release-sync.yml\",\n \".github/workflows/staging.yml\",\n \"packages/everything-dev/cli.js\",\n \".templatekeep\",\n \".templatesync-exclude\",\n];\n\ninterface ExtendedRootSource {\n catalog: Record<string, string>;\n repository?: string;\n extendsChain: string[];\n}\n\nfunction extractSemver(value: string | undefined): string | null {\n if (!value) return null;\n const match = value.match(/\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?/);\n return match?.[0] ?? null;\n}\n\nfunction readJsonFile<T>(filePath: string): T {\n return JSON.parse(readFileSync(filePath, \"utf-8\")) as T;\n}\n\nfunction readRootPackageJson(projectDir: string): Record<string, unknown> {\n return readJsonFile<Record<string, unknown>>(join(projectDir, \"package.json\"));\n}\n\nfunction readRootCatalogEntry(projectDir: string, packageName: string): string | undefined {\n const pkg = readRootPackageJson(projectDir) as {\n workspaces?: { catalog?: Record<string, string> };\n };\n return pkg.workspaces?.catalog?.[packageName];\n}\n\nfunction readCurrentPackageSpecifier(projectDir: string, packageName: string): string | undefined {\n const pkg = readRootPackageJson(projectDir);\n\n for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n const field = pkg[fieldName] as Record<string, string> | undefined;\n const value = field?.[packageName];\n if (!value) continue;\n\n if (value === \"catalog:\") {\n return (\n readRootCatalogEntry(projectDir, packageName) ??\n readInstalledVersion(projectDir, packageName)\n );\n }\n\n if (value.startsWith(\"workspace:\") || value.startsWith(\"file:\")) {\n return readInstalledVersion(projectDir, packageName);\n }\n\n return value;\n }\n\n return (\n readRootCatalogEntry(projectDir, packageName) ?? readInstalledVersion(projectDir, packageName)\n );\n}\n\nfunction setCatalogRefs(\n field: Record<string, string> | undefined,\n packageNames: ReadonlyArray<string>,\n): boolean {\n if (!field) return false;\n\n let modified = false;\n for (const packageName of packageNames) {\n if (setCatalogRef(field, packageName)) {\n modified = true;\n }\n }\n\n return modified;\n}\n\nfunction syncPackageObjectCatalogRefs(\n pkg: Record<string, unknown>,\n packageNames: ReadonlyArray<string>,\n): boolean {\n let modified = false;\n\n for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n const field = pkg[fieldName] as Record<string, string> | undefined;\n if (setCatalogRefs(field, packageNames)) {\n modified = true;\n }\n }\n\n return modified;\n}\n\nfunction findPackageFieldWithAnyDependency(\n pkg: Record<string, unknown>,\n packageNames: ReadonlyArray<string>,\n): Record<string, string> | undefined {\n for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n const field = pkg[fieldName] as Record<string, string> | undefined;\n if (!field) continue;\n if (packageNames.some((packageName) => typeof field[packageName] === \"string\")) {\n return field;\n }\n }\n\n return undefined;\n}\n\nfunction packageObjectNeedsAuthCoreCatalogRef(pkg: Record<string, unknown>): boolean {\n const targetField = findPackageFieldWithAnyDependency(pkg, AUTH_CORE_TRIGGER_PACKAGES);\n if (!targetField) return false;\n\n for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n const field = pkg[fieldName] as Record<string, string> | undefined;\n if (field?.[AUTH_CORE_PACKAGE]) return false;\n }\n\n return true;\n}\n\nfunction ensureAuthCoreCatalogRef(pkg: Record<string, unknown>): boolean {\n if (!packageObjectNeedsAuthCoreCatalogRef(pkg)) return false;\n\n const targetField = findPackageFieldWithAnyDependency(pkg, AUTH_CORE_TRIGGER_PACKAGES);\n if (!targetField) return false;\n\n targetField[AUTH_CORE_PACKAGE] = \"catalog:\";\n return true;\n}\n\nfunction packageObjectNeedsCatalogRefs(\n pkg: Record<string, unknown>,\n packageNames: ReadonlyArray<string>,\n): boolean {\n for (const fieldName of [\"dependencies\", \"devDependencies\", \"peerDependencies\"] as const) {\n const field = pkg[fieldName] as Record<string, string> | undefined;\n if (!field) continue;\n\n for (const packageName of packageNames) {\n const value = field[packageName];\n if (!value) continue;\n if (value !== \"catalog:\" && !value.startsWith(\"file:\")) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction packageFileNeedsCatalogRefs(\n filePath: string,\n packageNames: ReadonlyArray<string>,\n): boolean {\n return packageObjectNeedsCatalogRefs(\n readJsonFile<Record<string, unknown>>(filePath),\n packageNames,\n );\n}\n\nfunction updatePackageFileCatalogRefs(\n filePath: string,\n packageNames: ReadonlyArray<string>,\n): boolean {\n const pkg = readJsonFile<Record<string, unknown>>(filePath);\n const modified = syncPackageObjectCatalogRefs(pkg, packageNames);\n\n if (modified) {\n writeFileSync(filePath, `${JSON.stringify(pkg, null, 2)}\\n`);\n }\n\n return modified;\n}\n\nfunction updatePackageFileAuthCoreRef(filePath: string): boolean {\n const pkg = readJsonFile<Record<string, unknown>>(filePath);\n const modified = ensureAuthCoreCatalogRef(pkg);\n\n if (modified) {\n writeFileSync(filePath, `${JSON.stringify(pkg, null, 2)}\\n`);\n }\n\n return modified;\n}\n\nfunction syncRootCatalogWithParent(\n projectDir: string,\n parentCatalog: Record<string, string>,\n): boolean {\n const pkgPath = join(projectDir, \"package.json\");\n const pkg = readJsonFile<Record<string, unknown>>(pkgPath);\n let modified = syncPackageObjectCatalogRefs(pkg, Object.keys(parentCatalog));\n\n if (!pkg.workspaces || typeof pkg.workspaces !== \"object\") {\n pkg.workspaces = { packages: [], catalog: {} };\n modified = true;\n }\n\n const workspaces = pkg.workspaces as { packages?: string[]; catalog?: Record<string, string> };\n if (!workspaces.catalog || typeof workspaces.catalog !== \"object\") {\n workspaces.catalog = {};\n modified = true;\n }\n\n for (const [packageName, version] of Object.entries(parentCatalog)) {\n if (workspaces.catalog[packageName] !== version) {\n workspaces.catalog[packageName] = version;\n modified = true;\n }\n }\n\n if (modified) {\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`);\n }\n\n return modified;\n}\n\nasync function readExtendedRootSource(projectDir: string): Promise<ExtendedRootSource> {\n const configPath = join(projectDir, \"bos.config.json\");\n if (!existsSync(configPath)) {\n return { catalog: {}, extendsChain: [] };\n }\n\n const localConfig = JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n let extendsRef = getExtendsRef(localConfig);\n if (!extendsRef?.startsWith(\"bos://\")) {\n return {\n catalog: {},\n repository: typeof localConfig.repository === \"string\" ? localConfig.repository : undefined,\n extendsChain: [],\n };\n }\n\n const extendsChain: string[] = [];\n const visited = new Set<string>();\n let repository = typeof localConfig.repository === \"string\" ? localConfig.repository : undefined;\n let rootRef = extendsRef;\n\n while (extendsRef?.startsWith(\"bos://\")) {\n if (visited.has(extendsRef)) {\n throw new Error(`Circular extends detected while resolving upgrade source: ${extendsRef}`);\n }\n visited.add(extendsRef);\n extendsChain.push(extendsRef);\n\n const parsed = parseBosRef(extendsRef);\n if (!parsed) {\n break;\n }\n\n rootRef = extendsRef;\n\n let parentConfig: Record<string, unknown>;\n try {\n parentConfig = (await fetchParentConfig(parsed.account, parsed.gateway)) as Record<\n string,\n unknown\n >;\n } catch {\n break;\n }\n\n if (typeof parentConfig.repository === \"string\") {\n repository = parentConfig.repository;\n }\n\n const nextExtendsRef = getExtendsRef(parentConfig);\n if (!nextExtendsRef?.startsWith(\"bos://\")) {\n break;\n }\n\n extendsRef = nextExtendsRef;\n }\n\n const parsed = parseBosRef(rootRef);\n if (!parsed) {\n return { catalog: {}, repository, extendsChain };\n }\n\n const source = await resolveCatalogChainSource({\n extendsAccount: parsed.account,\n extendsGateway: parsed.gateway,\n });\n\n return {\n catalog: source.catalog,\n repository: source.repository ?? repository,\n extendsChain: source.extendsChain.length > 0 ? source.extendsChain : extendsChain,\n };\n}\n\nfunction getExtendsRef(config: Record<string, unknown>): string | undefined {\n if (typeof config.extends === \"string\") {\n return config.extends;\n }\n\n if (config.extends && typeof config.extends === \"object\") {\n return resolveExtendsRef(config.extends as Record<string, string>, \"production\");\n }\n\n return undefined;\n}\n\nfunction parseBosRef(ref: string): { account: string; gateway: string } | null {\n const match = ref.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n if (!match?.[1] || !match[2]) return null;\n return { account: match[1], gateway: match[2] };\n}\n\nfunction parseTargetedRef(ref: string): { configRef: string; targetPath?: string } {\n const hashIndex = ref.indexOf(\"#\");\n if (hashIndex === -1) {\n return { configRef: ref };\n }\n return {\n configRef: ref.slice(0, hashIndex),\n targetPath: ref.slice(hashIndex + 1) || undefined,\n };\n}\n\nfunction ensureTargetedRef(ref: string, targetPath: string): string {\n const parsed = parseTargetedRef(ref);\n if (parsed.targetPath) return ref;\n return `${parsed.configRef}#${targetPath}`;\n}\n\nfunction rewriteExtendsTarget(\n entry: Record<string, unknown> | undefined,\n targetPath: string,\n): boolean {\n if (!entry?.extends) return false;\n\n if (typeof entry.extends === \"string\") {\n const next = ensureTargetedRef(entry.extends, targetPath);\n if (next === entry.extends) return false;\n entry.extends = next;\n return true;\n }\n\n if (typeof entry.extends === \"object\") {\n let changed = false;\n for (const [key, value] of Object.entries(entry.extends as Record<string, unknown>)) {\n if (typeof value !== \"string\") continue;\n const next = ensureTargetedRef(value, targetPath);\n if (next !== value) {\n (entry.extends as Record<string, unknown>)[key] = next;\n changed = true;\n }\n }\n return changed;\n }\n\n return false;\n}\n\nfunction migrateRootConfigTargets(config: Record<string, unknown>): boolean {\n let changed = false;\n const app =\n config.app && typeof config.app === \"object\"\n ? (config.app as Record<string, unknown>)\n : undefined;\n\n if (app?.api && typeof app.api === \"object\") {\n changed = rewriteExtendsTarget(app.api as Record<string, unknown>, \"app.api\") || changed;\n }\n if (app?.auth && typeof app.auth === \"object\") {\n changed = rewriteExtendsTarget(app.auth as Record<string, unknown>, \"app.auth\") || changed;\n }\n\n if (config.plugins && typeof config.plugins === \"object\") {\n for (const [pluginKey, pluginValue] of Object.entries(\n config.plugins as Record<string, unknown>,\n )) {\n if (typeof pluginValue === \"string\") {\n const next = ensureTargetedRef(pluginValue, `plugins.${pluginKey}`);\n if (next !== pluginValue) {\n (config.plugins as Record<string, unknown>)[pluginKey] = next;\n changed = true;\n }\n continue;\n }\n if (!pluginValue || typeof pluginValue !== \"object\") continue;\n changed =\n rewriteExtendsTarget(pluginValue as Record<string, unknown>, `plugins.${pluginKey}`) ||\n changed;\n }\n }\n\n return changed;\n}\n\nfunction migratePluginProviderConfig(config: Record<string, unknown>, pluginKey: string): boolean {\n let changed = false;\n if (!config.plugins || typeof config.plugins !== \"object\") {\n return false;\n }\n\n const plugins = config.plugins as Record<string, unknown>;\n const entry = plugins[pluginKey];\n if (!entry || typeof entry !== \"object\") return false;\n\n const pluginEntry = entry as Record<string, unknown>;\n\n if (\"name\" in pluginEntry) {\n delete pluginEntry.name;\n changed = true;\n }\n\n if (typeof pluginEntry.development === \"string\" && pluginEntry.development.startsWith(\"local:\")) {\n if (\"extends\" in pluginEntry) {\n delete pluginEntry.extends;\n changed = true;\n }\n }\n\n changed = rewriteExtendsTarget(pluginEntry, `plugins.${pluginKey}`) || changed;\n\n return changed;\n}\n\nfunction mergePluginConfigIntoRoot(\n rootConfig: Record<string, unknown>,\n pluginKey: string,\n pluginConfig: Record<string, unknown>,\n): boolean {\n let changed = false;\n\n if (!rootConfig.plugins || typeof rootConfig.plugins !== \"object\") {\n rootConfig.plugins = {};\n changed = true;\n }\n const plugins = rootConfig.plugins as Record<string, unknown>;\n if (!plugins[pluginKey] || typeof plugins[pluginKey] !== \"object\") {\n plugins[pluginKey] = {};\n changed = true;\n }\n\n const entry = plugins[pluginKey] as Record<string, unknown>;\n\n const pluginData = extractPluginEntry(pluginConfig, pluginKey);\n\n const apiData = getApiEntry(pluginConfig);\n\n if (pluginData) {\n for (const key of [\n \"secrets\",\n \"variables\",\n \"routes\",\n \"sidebar\",\n \"production\",\n \"integrity\",\n \"proxy\",\n ] as const) {\n if (pluginData[key] !== undefined && entry[key] === undefined) {\n entry[key] = pluginData[key];\n changed = true;\n }\n }\n\n if (typeof pluginData.development === \"string\" && pluginData.development.startsWith(\"local:\")) {\n pluginData.development = `local:plugins/${pluginKey}`;\n }\n if (entry.development === undefined && pluginData.development !== undefined) {\n entry.development = pluginData.development;\n changed = true;\n }\n }\n\n if (apiData) {\n for (const key of [\n \"production\",\n \"integrity\",\n \"proxy\",\n \"variables\",\n \"secrets\",\n \"sidebar\",\n \"routes\",\n ] as const) {\n if (apiData[key] !== undefined && entry[key] === undefined) {\n entry[key] = apiData[key];\n changed = true;\n }\n }\n }\n\n if (\"extends\" in entry) {\n const extendsStr = typeof entry.extends === \"string\" ? entry.extends : undefined;\n if (!extendsStr || extendsStr.includes(`#plugins.${pluginKey}`)) {\n delete entry.extends;\n changed = true;\n }\n }\n\n if (\"name\" in entry) {\n delete entry.name;\n changed = true;\n }\n\n if (configHasTopLevelFields(pluginConfig, pluginKey)) {\n if (entry.routes === undefined && Array.isArray(pluginConfig.routes)) {\n entry.routes = pluginConfig.routes;\n changed = true;\n }\n if (entry.sidebar === undefined && Array.isArray(pluginConfig.sidebar)) {\n entry.sidebar = pluginConfig.sidebar;\n changed = true;\n }\n const api = getApiEntry(pluginConfig);\n if (api) {\n if (entry.routes === undefined && Array.isArray(api.routes)) {\n entry.routes = api.routes;\n changed = true;\n }\n if (entry.sidebar === undefined && Array.isArray(api.sidebar)) {\n entry.sidebar = api.sidebar;\n changed = true;\n }\n }\n }\n\n return changed;\n}\n\nfunction extractPluginEntry(\n pluginConfig: Record<string, unknown>,\n pluginKey: string,\n): Record<string, unknown> | null {\n if (\n pluginConfig.plugins &&\n typeof pluginConfig.plugins === \"object\" &&\n (pluginConfig.plugins as Record<string, unknown>)[pluginKey] &&\n typeof (pluginConfig.plugins as Record<string, unknown>)[pluginKey] === \"object\"\n ) {\n return (pluginConfig.plugins as Record<string, unknown>)[pluginKey] as Record<string, unknown>;\n }\n\n const fallback: Record<string, unknown> = {};\n if (pluginConfig.sidebar !== undefined) {\n fallback.sidebar = pluginConfig.sidebar;\n }\n if (pluginConfig.routes !== undefined) {\n fallback.routes = pluginConfig.routes;\n }\n if (Object.keys(fallback).length > 0) {\n return fallback;\n }\n\n return null;\n}\n\nfunction configHasTopLevelFields(\n pluginConfig: Record<string, unknown>,\n _pluginKey: string,\n): boolean {\n return (\n (pluginConfig.routes !== undefined && Array.isArray(pluginConfig.routes)) ||\n (pluginConfig.sidebar !== undefined && Array.isArray(pluginConfig.sidebar)) ||\n getApiEntry(pluginConfig) !== null\n );\n}\n\nfunction getApiEntry(pluginConfig: Record<string, unknown>): Record<string, unknown> | null {\n if (!pluginConfig.app || typeof pluginConfig.app !== \"object\") return null;\n const app = pluginConfig.app as Record<string, unknown>;\n if (!app.api || typeof app.api !== \"object\") return null;\n return app.api as Record<string, unknown>;\n}\n\nexport async function migrateBosConfigFiles(projectDir: string): Promise<string[]> {\n const migrated: string[] = [];\n const rootConfigPath = join(projectDir, \"bos.config.json\");\n\n if (existsSync(rootConfigPath)) {\n const rootConfig = JSON.parse(readFileSync(rootConfigPath, \"utf-8\")) as Record<string, unknown>;\n let rootChanged = migrateRootConfigTargets(rootConfig);\n\n const pluginConfigPaths = await glob(\"plugins/*/bos.config.json\", {\n cwd: projectDir,\n nodir: true,\n dot: false,\n absolute: false,\n });\n\n for (const relativePath of pluginConfigPaths) {\n const match = relativePath.match(/^plugins\\/([^/]+)\\/bos\\.config\\.json$/);\n const pluginKey = match?.[1];\n if (!pluginKey) continue;\n\n const filePath = join(projectDir, relativePath);\n try {\n const pluginConfig = JSON.parse(readFileSync(filePath, \"utf-8\")) as Record<string, unknown>;\n rootChanged = mergePluginConfigIntoRoot(rootConfig, pluginKey, pluginConfig) || rootChanged;\n } catch {}\n\n try {\n rmSync(filePath);\n migrated.push(relativePath);\n } catch {}\n }\n\n if (rootConfig.plugins && typeof rootConfig.plugins === \"object\") {\n for (const pluginKey of Object.keys(rootConfig.plugins as Record<string, unknown>)) {\n rootChanged = migratePluginProviderConfig(rootConfig, pluginKey) || rootChanged;\n }\n }\n\n if (rootChanged || migrated.length > 0) {\n await saveBosConfig(projectDir, rootConfig);\n if (!migrated.includes(\"bos.config.json\")) {\n migrated.push(\"bos.config.json\");\n }\n }\n }\n\n return migrated;\n}\n\nasync function loadParentPluginOptions(projectDir: string): Promise<{\n localConfig: Record<string, unknown>;\n parentPlugins: Record<string, unknown>;\n newPluginKeys: string[];\n} | null> {\n const configPath = join(projectDir, \"bos.config.json\");\n if (!existsSync(configPath)) {\n return null;\n }\n\n const localConfig = JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n const extendsRef = getExtendsRef(localConfig);\n if (!extendsRef?.startsWith(\"bos://\")) {\n return null;\n }\n\n const parsed = parseBosRef(extendsRef);\n if (!parsed) {\n return null;\n }\n\n let parentConfig: Record<string, unknown>;\n try {\n parentConfig = await fetchParentConfig(parsed.account, parsed.gateway);\n } catch {\n return null;\n }\n\n const parentPlugins =\n parentConfig.plugins && typeof parentConfig.plugins === \"object\"\n ? (parentConfig.plugins as Record<string, unknown>)\n : {};\n const localPlugins =\n localConfig.plugins && typeof localConfig.plugins === \"object\"\n ? (localConfig.plugins as Record<string, unknown>)\n : {};\n\n const newPluginKeys = Object.keys(parentPlugins).filter((key) => !(key in localPlugins));\n return { localConfig, parentPlugins, newPluginKeys };\n}\n\nasync function addSelectedParentPlugins(projectDir: string): Promise<string[]> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n return [];\n }\n\n const pluginOptions = await loadParentPluginOptions(projectDir);\n if (!pluginOptions || pluginOptions.newPluginKeys.length === 0) {\n return [];\n }\n\n const selectedValue = await p.multiselect({\n message: \"Select new plugins from parent:\",\n options: pluginOptions.newPluginKeys.map((key) => ({ value: key, label: key })),\n required: false,\n });\n\n if (p.isCancel(selectedValue)) {\n process.exit(0);\n }\n\n const selected = selectedValue as string[];\n if (selected.length === 0) {\n return [];\n }\n\n const localPlugins =\n pluginOptions.localConfig.plugins && typeof pluginOptions.localConfig.plugins === \"object\"\n ? (pluginOptions.localConfig.plugins as Record<string, unknown>)\n : {};\n const nextPlugins = { ...localPlugins };\n for (const key of selected) {\n const parentPlugin = pluginOptions.parentPlugins[key];\n if (parentPlugin && typeof parentPlugin === \"object\") {\n const nextPlugin = structuredClone(parentPlugin as Record<string, unknown>);\n rewriteExtendsTarget(nextPlugin, `plugins.${key}`);\n nextPlugins[key] = nextPlugin;\n } else if (typeof parentPlugin === \"string\") {\n nextPlugins[key] = ensureTargetedRef(parentPlugin, `plugins.${key}`);\n } else {\n nextPlugins[key] = parentPlugin;\n }\n }\n\n pluginOptions.localConfig.plugins = nextPlugins;\n await saveBosConfig(projectDir, pluginOptions.localConfig);\n\n return selected;\n}\n\nfunction readInstalledVersion(projectDir: string, packageName: string): string | undefined {\n return readInstalledFrameworkVersion(projectDir, packageName);\n}\n\nfunction setCatalogRef(field: Record<string, string> | undefined, packageName: string): boolean {\n if (!field || !(packageName in field)) return false;\n if (field[packageName] === \"catalog:\" || field[packageName].startsWith(\"file:\")) return false;\n field[packageName] = \"catalog:\";\n return true;\n}\n\nasync function findWorkspacePackageJsons(projectDir: string): Promise<string[]> {\n const rootPkgPath = join(projectDir, \"package.json\");\n if (!existsSync(rootPkgPath)) return [];\n\n const rootPkg = JSON.parse(readFileSync(rootPkgPath, \"utf-8\")) as Record<string, unknown>;\n const workspaceConfig = rootPkg.workspaces as { packages?: string[] } | string[] | undefined;\n\n const patterns: string[] = [];\n if (Array.isArray(workspaceConfig)) {\n patterns.push(...workspaceConfig);\n } else if (workspaceConfig?.packages && Array.isArray(workspaceConfig.packages)) {\n patterns.push(...workspaceConfig.packages);\n }\n\n if (patterns.length === 0) return [];\n\n const pkgPaths: string[] = [];\n for (const pattern of patterns) {\n const matches = await glob(pattern, { cwd: projectDir, dot: false, absolute: false });\n for (const match of matches) {\n const pkgPath = join(projectDir, match, \"package.json\");\n if (existsSync(pkgPath) && statSync(pkgPath).isFile()) {\n pkgPaths.push(pkgPath);\n }\n }\n }\n\n return [...new Set(pkgPaths)];\n}\n\nexport async function migrateChildRootPackageJson(projectDir: string): Promise<boolean> {\n const configPath = join(projectDir, \"bos.config.json\");\n const pkgPath = join(projectDir, \"package.json\");\n if (!existsSync(configPath) || !existsSync(pkgPath)) {\n return false;\n }\n\n const config = readJsonFile<Record<string, unknown>>(configPath);\n const extendsRef = getExtendsRef(config);\n if (!extendsRef?.startsWith(\"bos://\")) {\n return false;\n }\n\n const pkg = readJsonFile<Record<string, unknown>>(pkgPath);\n let changed = false;\n\n if (pkg.private !== true) {\n pkg.private = true;\n changed = true;\n }\n if (pkg.type !== \"module\") {\n pkg.type = \"module\";\n changed = true;\n }\n if (\"module\" in pkg) {\n delete pkg.module;\n changed = true;\n }\n\n const pluginPackageJsons = await glob(\"plugins/*/package.json\", {\n cwd: projectDir,\n nodir: true,\n dot: false,\n absolute: false,\n });\n const childScripts = buildChildRootScripts({\n ui: existsSync(join(projectDir, \"ui\", \"package.json\")),\n api: existsSync(join(projectDir, \"api\", \"package.json\")),\n host: existsSync(join(projectDir, \"host\", \"package.json\")),\n plugins: pluginPackageJsons.length > 0,\n });\n\n if (!pkg.scripts || typeof pkg.scripts !== \"object\") {\n pkg.scripts = {};\n changed = true;\n }\n const scripts = pkg.scripts as Record<string, string>;\n for (const [key, value] of Object.entries(childScripts)) {\n if (scripts[key] !== value) {\n scripts[key] = value;\n changed = true;\n }\n }\n for (const obsoleteScript of [\"sync-catalog\", \"init\"]) {\n if (obsoleteScript in scripts) {\n delete scripts[obsoleteScript];\n changed = true;\n }\n }\n\n const workspaces = pkg.workspaces;\n if (workspaces && typeof workspaces === \"object\") {\n const workspaceConfig = workspaces as { packages?: string[] };\n if (Array.isArray(workspaceConfig.packages)) {\n const nextPackages = workspaceConfig.packages.filter(\n (entry) => entry !== \"packages/everything-dev\" && entry !== \"packages/every-plugin\",\n );\n if (nextPackages.length !== workspaceConfig.packages.length) {\n workspaceConfig.packages = nextPackages;\n changed = true;\n }\n }\n }\n\n if (pkg.overrides && typeof pkg.overrides === \"object\") {\n const overrides = pkg.overrides as Record<string, string>;\n for (const packageName of FRAMEWORK_PACKAGES) {\n const value = overrides[packageName];\n if (typeof value === \"string\" && value.startsWith(\"file:packages/\")) {\n delete overrides[packageName];\n changed = true;\n }\n }\n if (Object.keys(overrides).length === 0) {\n delete pkg.overrides;\n changed = true;\n }\n }\n\n if (ensureAuthCoreCatalogRef(pkg)) {\n changed = true;\n }\n\n const workspacePackageJsons = await findWorkspacePackageJsons(projectDir);\n for (const workspacePkgPath of workspacePackageJsons) {\n if (updatePackageFileAuthCoreRef(workspacePkgPath)) {\n changed = true;\n }\n }\n\n if (changed) {\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`);\n }\n\n return changed;\n}\n\nfunction buildChangelogUrl(\n oldVersion: string | undefined,\n newVersion: string,\n repository: string | undefined,\n): string | undefined {\n const fromVersion = extractSemver(oldVersion);\n const toVersion = extractSemver(newVersion);\n if (!fromVersion || !toVersion || fromVersion === toVersion) return undefined;\n\n const repoUrl = repository;\n if (!repoUrl) return undefined;\n\n const githubMatch = repoUrl.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n if (!githubMatch) return undefined;\n\n const [, owner, repo] = githubMatch;\n return `https://github.com/${owner}/${repo}/compare/v${fromVersion}...v${toVersion}`;\n}\n\nasync function rewriteLegacyUiImports(projectDir: string): Promise<string[]> {\n const files = await glob(\"ui/src/**/*.{ts,tsx}\", {\n cwd: projectDir,\n nodir: true,\n dot: false,\n absolute: false,\n });\n const migrated: string[] = [];\n\n for (const file of files) {\n const filePath = join(projectDir, file);\n const original = readFileSync(filePath, \"utf-8\");\n let next = original;\n\n for (const [from, to] of LEGACY_UI_IMPORT_REWRITES) {\n next = next.replaceAll(from, to);\n }\n\n if (next !== original) {\n writeFileSync(filePath, next);\n migrated.push(file);\n }\n }\n\n return migrated;\n}\n\nexport async function upgradeTemplate(\n projectDir: string,\n options: UpgradeOptions,\n): Promise<UpgradeResult> {\n const timings: PhaseTiming[] = [];\n const pkgPath = join(projectDir, \"package.json\");\n if (!existsSync(pkgPath)) {\n return {\n status: \"error\",\n packages: [],\n timings,\n error: \"No package.json found in current directory\",\n };\n }\n\n const parentSource = await readExtendedRootSource(projectDir);\n const sourceRootCatalog = parentSource.catalog;\n const inheritedCatalogPackageNames = Object.keys(sourceRootCatalog);\n const currentRootCatalog = readRootPackageJson(projectDir) as {\n workspaces?: { catalog?: Record<string, string> };\n };\n const currentCatalogEntries = currentRootCatalog.workspaces?.catalog ?? {};\n const workspacePkgPaths = await findWorkspacePackageJsons(projectDir);\n const hasCatalogRefRewrites =\n inheritedCatalogPackageNames.length > 0 &&\n (packageObjectNeedsCatalogRefs(readRootPackageJson(projectDir), inheritedCatalogPackageNames) ||\n workspacePkgPaths.some((pkgPath) =>\n packageFileNeedsCatalogRefs(pkgPath, inheritedCatalogPackageNames),\n ));\n const hasAuthCoreRefRewrites =\n packageObjectNeedsAuthCoreCatalogRef(readRootPackageJson(projectDir)) ||\n workspacePkgPaths.some((pkgPath) =>\n packageObjectNeedsAuthCoreCatalogRef(readJsonFile<Record<string, unknown>>(pkgPath)),\n );\n\n const { packages, catalogVersionUpdates } = await timePhase(\n timings,\n \"check package versions\",\n async () => {\n const nextPackages: UpgradeResult[\"packages\"] = [];\n\n for (const name of FRAMEWORK_PACKAGES) {\n const current = readCurrentPackageSpecifier(projectDir, name);\n const target = sourceRootCatalog[name] ?? current ?? \"unknown\";\n\n nextPackages.push({ name, from: current, to: target });\n }\n\n const nextCatalogVersionUpdates: Array<{\n name: string;\n from: string | undefined;\n to: string;\n }> = [];\n for (const [name, targetVersion] of Object.entries(sourceRootCatalog)) {\n if (FRAMEWORK_PACKAGES.includes(name)) continue;\n\n const currentVersion = currentCatalogEntries[name];\n if (currentVersion === targetVersion) continue;\n nextCatalogVersionUpdates.push({ name, from: currentVersion, to: targetVersion });\n }\n\n return { packages: nextPackages, catalogVersionUpdates: nextCatalogVersionUpdates };\n },\n );\n\n const hasFrameworkUpdates = packages.some((p) => p.from !== p.to && p.from !== undefined);\n const hasCatalogUpdates = catalogVersionUpdates.length > 0;\n const hasUpdates =\n hasFrameworkUpdates || hasCatalogUpdates || hasCatalogRefRewrites || hasAuthCoreRefRewrites;\n\n if (options.dryRun) {\n let changelogUrl: string | undefined;\n const pluginOptions = options.noSync\n ? null\n : await timePhase(timings, \"discover parent plugins\", () =>\n loadParentPluginOptions(projectDir),\n );\n if (hasUpdates) {\n const mainPkg = packages.find((p) => p.name === \"everything-dev\");\n if (mainPkg?.from && mainPkg.from !== mainPkg.to) {\n changelogUrl = buildChangelogUrl(mainPkg.from, mainPkg.to, parentSource.repository);\n }\n }\n\n return {\n status: \"dry-run\",\n packages: [\n ...packages,\n ...catalogVersionUpdates.map((u) => ({ name: u.name, from: u.from, to: u.to })),\n ],\n availablePlugins: pluginOptions?.newPluginKeys,\n timings,\n changelogUrl,\n };\n }\n\n await timePhase(timings, \"apply package updates\", async () => {\n if (inheritedCatalogPackageNames.length > 0) {\n syncRootCatalogWithParent(projectDir, sourceRootCatalog);\n }\n\n if (inheritedCatalogPackageNames.length > 0) {\n for (const pkgPath of workspacePkgPaths) {\n updatePackageFileCatalogRefs(pkgPath, inheritedCatalogPackageNames);\n }\n }\n });\n\n const migratedBosConfigs = await timePhase(timings, \"migrate bos configs\", () =>\n migrateBosConfigFiles(projectDir),\n );\n const migratedRootPackageJson = await timePhase(timings, \"migrate root package\", () =>\n migrateChildRootPackageJson(projectDir),\n );\n\n let syncResult: UpgradeResult[\"sync\"];\n let addedPlugins: string[] = [];\n if (!options.noSync) {\n addedPlugins = await timePhase(timings, \"discover parent plugins\", async () => {\n if (options.dryRun) return [];\n return addSelectedParentPlugins(projectDir);\n });\n\n syncResult = await timePhase(timings, \"sync template\", () =>\n syncTemplate(projectDir, {\n dryRun: false,\n noInstall: true,\n }),\n );\n\n if (inheritedCatalogPackageNames.length > 0) {\n syncRootCatalogWithParent(projectDir, sourceRootCatalog);\n }\n }\n\n const sharedSync = await timePhase(timings, \"sync shared ui\", async () => {\n const configResult = await loadResolvedConfig({ cwd: projectDir });\n if (!configResult) {\n throw new Error(\"No bos.config.json found in current directory\");\n }\n\n return syncAndGenerateSharedUi({\n configDir: projectDir,\n hostMode: \"local\",\n bosConfig: configResult.config,\n });\n });\n\n if ((hasUpdates || addedPlugins.length > 0 || sharedSync.catalogChanged) && !options.noInstall) {\n await timePhase(timings, \"install dependencies\", () => runBunInstallForUpgrade(projectDir));\n await timePhase(timings, \"generate types\", () => runTypesGen(projectDir));\n }\n\n const migratedFiles = await timePhase(timings, \"clean obsolete files\", async () => {\n const nextMigratedFiles = [\n ...migratedBosConfigs,\n ...(migratedRootPackageJson ? [\"package.json\"] : []),\n ...(await rewriteLegacyUiImports(projectDir)),\n ];\n for (const file of OBSOLETE_FILES) {\n const filePath = join(projectDir, file);\n if (existsSync(filePath)) {\n rmSync(filePath);\n nextMigratedFiles.push(file);\n }\n }\n return nextMigratedFiles;\n });\n\n let changelogUrl: string | undefined;\n const mainPkg = packages.find((p) => p.name === \"everything-dev\");\n if (mainPkg?.from && mainPkg.from !== mainPkg.to) {\n changelogUrl = buildChangelogUrl(mainPkg.from, mainPkg.to, parentSource.repository);\n }\n\n return {\n status: \"upgraded\",\n packages: [\n ...packages,\n ...catalogVersionUpdates.map((u) => ({ name: u.name, from: u.from, to: u.to })),\n ],\n sync: syncResult,\n migrated: migratedFiles.length > 0 ? migratedFiles : undefined,\n selectedPlugins: addedPlugins.length > 0 ? addedPlugins : undefined,\n timings,\n changelogUrl,\n };\n}\n"],"mappings":"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"}
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 * as p from \"@clack/prompts\";\nimport { findCommandDescriptor } from \"./cli/catalog\";\nimport { printHelp } from \"./cli/help\";\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 === \"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 from 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 (local):\")}`);\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 } catch (error) {\n console.error(`[CLI] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n}\n\nmain().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 * as p from \"@clack/prompts\";\nimport { findCommandDescriptor } from \"./cli/catalog\";\nimport { printHelp } from \"./cli/help\";\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 === \"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 from 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 (local):\")}`);\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 } catch (error) {\n console.error(`[CLI] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n}\n\nmain().catch((error) => {\n console.error(\"[CLI] Fatal error:\", error);\n process.exit(1);\n});\n"],"mappings":"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"}