@microbuild/cli 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  A CLI for adding Microbuild components to your project.
4
4
 
5
+ [![npm version](https://img.shields.io/npm/v/@microbuild/cli)](https://www.npmjs.com/package/@microbuild/cli)
6
+
5
7
  ## Usage
6
8
 
7
9
  Use the `init` command to set up a new project and the `add` command to add components.
@@ -138,7 +138,7 @@ async function init(options) {
138
138
  lint: "next lint"
139
139
  },
140
140
  dependencies: {
141
- "next": "^15.0.0",
141
+ "next": "^16.1.6",
142
142
  "react": "^19.0.0",
143
143
  "react-dom": "^19.0.0",
144
144
  "@mantine/core": "^8.0.0",
@@ -148,7 +148,7 @@ async function init(options) {
148
148
  "tailwind-merge": "^2.0.0"
149
149
  },
150
150
  devDependencies: {
151
- "@types/node": "^20",
151
+ "@types/node": "^22",
152
152
  "@types/react": "^19",
153
153
  "@types/react-dom": "^19",
154
154
  "typescript": "^5"
@@ -359,4 +359,4 @@ export {
359
359
  loadConfig,
360
360
  saveConfig
361
361
  };
362
- //# sourceMappingURL=chunk-6YA3DSAE.js.map
362
+ //# sourceMappingURL=chunk-IW632G56.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/resolver.ts","../src/commands/init.ts"],"sourcesContent":["/**\n * Remote/Local Source Resolver\n *\n * Abstracts file fetching so the CLI works in two modes:\n *\n * 1. **Remote mode** (default when installed via npm / npx)\n * Fetches registry.json and component source files from the GitHub raw CDN.\n *\n * 2. **Local mode** (when running from the monorepo checkout)\n * Reads files directly from the `packages/` directory on disk.\n *\n * The mode is determined automatically:\n * - If `PACKAGES_ROOT/registry.json` exists on disk → local mode\n * - Otherwise → remote mode (uses REGISTRY_BASE_URL)\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// ─── Configuration ───────────────────────────────────────────────\n\n/**\n * Base URL for fetching files remotely.\n * Points to the raw GitHub content of the `main` branch.\n *\n * Override at runtime with the `MICROBUILD_REGISTRY_URL` env var.\n *\n * ⚠️ REPLACE the placeholder below with your actual GitHub org/repo.\n */\nconst DEFAULT_REGISTRY_URL =\n 'https://raw.githubusercontent.com/microbuild-ui/ui/main/packages';\n\n/**\n * Runtime-configurable registry URL.\n */\nexport const REGISTRY_BASE_URL =\n process.env.MICROBUILD_REGISTRY_URL ?? DEFAULT_REGISTRY_URL;\n\n// Local packages root (only valid when running from monorepo)\n// From dist/index.js → packages/cli/dist → needs ../../ to reach packages/\nconst LOCAL_PACKAGES_ROOT = path.resolve(__dirname, '../..');\n\n/**\n * Detect whether we are running locally inside the monorepo.\n */\nfunction isLocalMode(): boolean {\n return fs.existsSync(path.join(LOCAL_PACKAGES_ROOT, 'registry.json'));\n}\n\n// ─── Public API ──────────────────────────────────────────────────\n\nexport interface Registry {\n version: string;\n name: string;\n lib: Record<string, LibModule>;\n components: ComponentEntry[];\n categories: Array<{ name: string; title: string; description: string }>;\n dependencies?: Record<string, string[]>;\n aliases?: Record<string, string>;\n meta?: Record<string, unknown>;\n}\n\nexport interface FileMapping {\n source: string;\n target: string;\n}\n\nexport interface LibModule {\n name: string;\n description: string;\n files?: FileMapping[];\n path?: string;\n target?: string;\n internalDependencies?: string[];\n}\n\nexport interface ComponentEntry {\n name: string;\n title: string;\n description: string;\n category: string;\n files: FileMapping[];\n dependencies: string[];\n internalDependencies: string[];\n registryDependencies?: string[];\n}\n\n// In-memory cache so we fetch registry.json at most once per CLI invocation\nlet _registryCache: Registry | null = null;\n\n/**\n * Load registry.json (local or remote).\n */\nexport async function getRegistry(): Promise<Registry> {\n if (_registryCache) return _registryCache;\n\n if (isLocalMode()) {\n const registryPath = path.join(LOCAL_PACKAGES_ROOT, 'registry.json');\n _registryCache = await fs.readJSON(registryPath) as Registry;\n } else {\n const url = `${REGISTRY_BASE_URL}/registry.json`;\n _registryCache = await fetchJSON<Registry>(url);\n }\n\n return _registryCache;\n}\n\n/**\n * Read a source file referenced in registry.json.\n *\n * @param source – the `source` field from a FileMapping, e.g. `\"types/src/core.ts\"`\n * @returns the file content as a UTF-8 string\n */\nexport async function resolveSourceFile(source: string): Promise<string> {\n if (isLocalMode()) {\n const fullPath = path.join(LOCAL_PACKAGES_ROOT, source);\n if (!fs.existsSync(fullPath)) {\n throw new Error(`Source file not found on disk: ${fullPath}`);\n }\n return fs.readFile(fullPath, 'utf-8');\n }\n\n // Remote mode\n const url = `${REGISTRY_BASE_URL}/${source}`;\n return fetchText(url);\n}\n\n/**\n * Check whether a source file exists.\n * In remote mode we optimistically return `true` (the registry is the manifest).\n */\nexport async function sourceFileExists(source: string): Promise<boolean> {\n if (isLocalMode()) {\n return fs.existsSync(path.join(LOCAL_PACKAGES_ROOT, source));\n }\n // In remote mode, trust the registry – the file should exist.\n return true;\n}\n\n/**\n * Resolve a template file (used by `init` command).\n * Templates are bundled inside the CLI package under `dist/templates/`.\n * When running locally they live in `packages/cli/templates/`.\n */\nexport function getTemplatesRoot(): string {\n // When built, templates are copied into dist/templates by tsup copy plugin\n const builtTemplates = path.resolve(__dirname, 'templates');\n if (fs.existsSync(builtTemplates)) return builtTemplates;\n\n // Fallback: running locally from source\n const localTemplates = path.resolve(__dirname, '../templates');\n if (fs.existsSync(localTemplates)) return localTemplates;\n\n throw new Error(\n 'Templates directory not found. Ensure the CLI is built correctly.'\n );\n}\n\n/**\n * Return the local PACKAGES_ROOT (only meaningful in local mode).\n * Falls back gracefully so remote-mode callers don't break.\n */\nexport function getLocalPackagesRoot(): string {\n return LOCAL_PACKAGES_ROOT;\n}\n\n// ─── HTTP helpers ────────────────────────────────────────────────\n\nasync function fetchText(url: string): Promise<string> {\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(\n `Failed to fetch ${url}: ${res.status} ${res.statusText}`\n );\n }\n return res.text();\n}\n\nasync function fetchJSON<T>(url: string): Promise<T> {\n const text = await fetchText(url);\n return JSON.parse(text) as T;\n}\n","import fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport prompts from 'prompts';\nimport { getTemplatesRoot } from '../resolver.js';\n\n/**\n * Component version info for tracking updates\n */\nexport interface ComponentVersion {\n /** Registry version when installed */\n version: string;\n /** Installation timestamp */\n installedAt: string;\n /** Source package (e.g., @microbuild/ui-interfaces) */\n source: string;\n}\n\n/**\n * Microbuild Configuration File\n * \n * Copy & Own Model:\n * - Components are copied to your project as source files\n * - No runtime dependency on @microbuild/* packages\n * - Full customization - you own the code\n * - Works offline after installation\n */\nexport interface Config {\n $schema?: string;\n /** Distribution model - always 'copy-own' */\n model: 'copy-own';\n /** Use TypeScript (.tsx) or JavaScript (.jsx) */\n tsx: boolean;\n /** Use 'src' directory structure */\n srcDir: boolean;\n /** Path aliases for generated files */\n aliases: {\n /** Where UI components are copied (e.g., @/components/ui) */\n components: string;\n /** Where lib files are copied (e.g., @/lib/microbuild) */\n lib: string;\n };\n /** Installed lib modules */\n installedLib: string[];\n /** Installed components */\n installedComponents: string[];\n /** Component version tracking for update detection */\n componentVersions?: Record<string, ComponentVersion>;\n /** Registry version at last install */\n registryVersion?: string;\n}\n\nconst DEFAULT_CONFIG: Config = {\n $schema: 'https://microbuild.dev/schema.json',\n model: 'copy-own',\n tsx: true,\n srcDir: true,\n aliases: {\n components: '@/components/ui',\n lib: '@/lib/microbuild',\n },\n installedLib: [],\n installedComponents: [],\n componentVersions: {},\n registryVersion: '1.0.0',\n};\n\nconst TEMPLATES_ROOT = getTemplatesRoot();\n\nasync function copyTemplateFile(sourceRelativePath: string, targetPath: string, cwd: string) {\n const sourcePath = path.join(TEMPLATES_ROOT, sourceRelativePath);\n\n if (!fs.existsSync(sourcePath) || fs.existsSync(targetPath)) {\n return;\n }\n\n await fs.ensureDir(path.dirname(targetPath));\n await fs.copy(sourcePath, targetPath);\n console.log(chalk.green(`✓ Created ${path.relative(cwd, targetPath)}`));\n}\n\nexport async function init(options: { yes?: boolean; cwd: string }) {\n const { cwd, yes } = options;\n\n console.log(chalk.bold('\\n🚀 Welcome to Microbuild!\\n'));\n console.log(chalk.dim('Copy & Own Model - Components become part of your codebase.\\n'));\n\n // Check if already initialized\n const configPath = path.join(cwd, 'microbuild.json');\n if (fs.existsSync(configPath) && !yes) {\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: 'microbuild.json already exists. Overwrite?',\n initial: false,\n });\n\n if (!overwrite) {\n console.log(chalk.yellow('\\n✓ Keeping existing configuration\\n'));\n return;\n }\n }\n\n // Detect project type\n const packageJsonPath = path.join(cwd, 'package.json');\n let projectType = 'unknown';\n let hasSrcDir = fs.existsSync(path.join(cwd, 'src'));\n\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = await fs.readJSON(packageJsonPath);\n if (packageJson.dependencies?.['next']) {\n projectType = 'next';\n // Next.js App Router often uses 'app' instead of 'src'\n if (fs.existsSync(path.join(cwd, 'app')) && !hasSrcDir) {\n hasSrcDir = false;\n }\n } else if (packageJson.dependencies?.['vite']) {\n projectType = 'vite';\n } else if (packageJson.dependencies?.['react']) {\n projectType = 'react';\n }\n } else {\n // Create a minimal package.json for empty projects\n console.log(chalk.yellow('⚠ No package.json found. Creating minimal Next.js project...\\n'));\n \n const projectName = path.basename(cwd);\n const minimalPackageJson = {\n name: projectName,\n version: '0.1.0',\n private: true,\n scripts: {\n dev: 'next dev --turbopack',\n build: 'next build',\n start: 'next start',\n lint: 'next lint'\n },\n dependencies: {\n 'next': '^15.0.0',\n 'react': '^19.0.0',\n 'react-dom': '^19.0.0',\n '@mantine/core': '^8.0.0',\n '@mantine/hooks': '^8.0.0',\n '@tabler/icons-react': '^3.0.0',\n 'clsx': '^2.0.0',\n 'tailwind-merge': '^2.0.0'\n },\n devDependencies: {\n '@types/node': '^20',\n '@types/react': '^19',\n '@types/react-dom': '^19',\n 'typescript': '^5'\n }\n };\n \n await fs.writeJSON(packageJsonPath, minimalPackageJson, { spaces: 2 });\n projectType = 'next';\n hasSrcDir = false; // New projects use App Router without src/\n console.log(chalk.green('✓ Created package.json\\n'));\n }\n\n console.log(chalk.dim(`Detected: ${projectType} project${hasSrcDir ? ' with src directory' : ''}\\n`));\n\n let config = { ...DEFAULT_CONFIG };\n config.srcDir = hasSrcDir;\n\n if (!yes) {\n // Prompt for configuration\n const answers = await prompts([\n {\n type: 'confirm',\n name: 'srcDir',\n message: 'Use src directory?',\n initial: hasSrcDir,\n },\n {\n type: 'text',\n name: 'componentsPath',\n message: 'Where should components be installed?',\n initial: '@/components/ui',\n },\n {\n type: 'text',\n name: 'libPath',\n message: 'Where should lib files (types, services, hooks) be installed?',\n initial: '@/lib/microbuild',\n },\n {\n type: 'confirm',\n name: 'tsx',\n message: 'Use TypeScript?',\n initial: true,\n },\n ]);\n\n config.srcDir = answers.srcDir ?? hasSrcDir;\n config.aliases.components = answers.componentsPath || '@/components/ui';\n config.aliases.lib = answers.libPath || '@/lib/microbuild';\n config.tsx = answers.tsx ?? true;\n }\n\n const spinner = ora('Setting up Copy & Own structure...').start();\n\n try {\n // Write config\n await fs.writeJSON(configPath, config, { spaces: 2 });\n spinner.succeed('Created microbuild.json');\n\n // Create directory structure\n // Components directory\n const componentsDir = resolveAlias(config.aliases.components, cwd, config.srcDir);\n await fs.ensureDir(componentsDir);\n console.log(chalk.green(`✓ Created ${path.relative(cwd, componentsDir)}`));\n\n // Lib directory structure\n const libDir = resolveAlias(config.aliases.lib, cwd, config.srcDir);\n await fs.ensureDir(libDir);\n await fs.ensureDir(path.join(libDir, 'types'));\n await fs.ensureDir(path.join(libDir, 'services'));\n await fs.ensureDir(path.join(libDir, 'hooks'));\n console.log(chalk.green(`✓ Created ${path.relative(cwd, libDir)}`));\n console.log(chalk.dim(' └── types/'));\n console.log(chalk.dim(' └── services/'));\n console.log(chalk.dim(' └── hooks/'));\n\n // Create tsconfig.json if missing (required for path aliases)\n const tsconfigPath = path.join(cwd, 'tsconfig.json');\n if (!fs.existsSync(tsconfigPath) && config.tsx) {\n const tsconfig = {\n compilerOptions: {\n target: 'ES2017',\n lib: ['dom', 'dom.iterable', 'esnext'],\n allowJs: true,\n skipLibCheck: true,\n strict: true,\n noEmit: true,\n esModuleInterop: true,\n module: 'esnext',\n moduleResolution: 'bundler',\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: 'preserve',\n incremental: true,\n plugins: [{ name: 'next' }],\n paths: {\n '@/*': [config.srcDir ? './src/*' : './*']\n },\n baseUrl: '.'\n },\n include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],\n exclude: ['node_modules']\n };\n await fs.writeJSON(tsconfigPath, tsconfig, { spaces: 2 });\n console.log(chalk.green(`✓ Created tsconfig.json with @/ path alias`));\n }\n\n // Create next-env.d.ts if missing (for Next.js TypeScript support)\n const nextEnvPath = path.join(cwd, 'next-env.d.ts');\n if (!fs.existsSync(nextEnvPath) && projectType === 'next') {\n const nextEnvContent = `/// <reference types=\"next\" />\n/// <reference types=\"next/image-types/global\" />\n\n// NOTE: This file should not be edited\n// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.\n`;\n await fs.writeFile(nextEnvPath, nextEnvContent);\n console.log(chalk.green(`✓ Created next-env.d.ts`));\n }\n\n // Create a basic Next.js app skeleton with design system files\n if (projectType === 'next') {\n const srcRoot = config.srcDir ? path.join(cwd, 'src') : cwd;\n const appDir = path.join(srcRoot, 'app');\n const libRoot = path.join(srcRoot, 'lib');\n const componentsRoot = path.join(srcRoot, 'components');\n\n await fs.ensureDir(appDir);\n await fs.ensureDir(libRoot);\n await fs.ensureDir(componentsRoot);\n\n await copyTemplateFile('app/design-tokens.css', path.join(appDir, 'design-tokens.css'), cwd);\n await copyTemplateFile('app/globals.css', path.join(appDir, 'globals.css'), cwd);\n await copyTemplateFile('app/layout.tsx', path.join(appDir, 'layout.tsx'), cwd);\n await copyTemplateFile('app/page.tsx', path.join(appDir, 'page.tsx'), cwd);\n await copyTemplateFile('lib/theme.ts', path.join(libRoot, 'theme.ts'), cwd);\n await copyTemplateFile(\n 'components/ColorSchemeToggle.tsx',\n path.join(componentsRoot, 'ColorSchemeToggle.tsx'),\n cwd\n );\n }\n\n // Check for required dependencies\n console.log(chalk.bold('\\n📦 Checking dependencies...\\n'));\n\n // Core dependencies always needed\n const coreDeps = [\n '@mantine/core',\n '@mantine/hooks',\n 'react',\n 'react-dom',\n ];\n\n // Optional dependencies for specific features (installed on-demand when components need them)\n // @mantine/dates - DateTime component\n // @mantine/notifications - CollectionForm notifications\n // @mantine/dropzone - Upload component\n // @tabler/icons-react - Icon components\n // dayjs - DateTime component\n\n // Utility dependencies (for utils.ts)\n const utilityDeps = ['clsx', 'tailwind-merge'];\n\n const missingDeps: string[] = [];\n const missingUtilDeps: string[] = [];\n\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = await fs.readJSON(packageJsonPath);\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n for (const dep of coreDeps) {\n if (!allDeps[dep]) {\n missingDeps.push(dep);\n }\n }\n\n for (const dep of utilityDeps) {\n if (!allDeps[dep]) {\n missingUtilDeps.push(dep);\n }\n }\n }\n\n if (missingDeps.length > 0) {\n console.log(chalk.yellow('⚠ Missing core dependencies:'));\n missingDeps.forEach(dep => console.log(chalk.dim(` - ${dep}`)));\n console.log(chalk.dim('\\nInstall with:'));\n console.log(chalk.cyan(` pnpm add ${missingDeps.join(' ')}\\n`));\n } else {\n console.log(chalk.green('✓ Core dependencies installed\\n'));\n }\n\n if (missingUtilDeps.length > 0) {\n console.log(chalk.dim('Optional utility dependencies for cn() helper:'));\n console.log(chalk.cyan(` pnpm add ${missingUtilDeps.join(' ')}\\n`));\n }\n\n // Print benefits\n console.log(chalk.bold.blue('📋 Copy & Own Benefits:\\n'));\n console.log(' ✅ No external package dependencies for component code');\n console.log(' ✅ Full customization - components are your application code');\n console.log(' ✅ No breaking changes from upstream updates');\n console.log(' ✅ Bundle only what you use - tree-shaking friendly');\n console.log(' ✅ Works offline after installation');\n\n // Success message\n console.log(chalk.bold.green('\\n✨ Setup complete!\\n'));\n console.log('Next steps:');\n console.log(chalk.cyan(' 1. Add components: ') + chalk.dim('npx microbuild add input select-dropdown'));\n console.log(chalk.cyan(' 2. List components: ') + chalk.dim('npx microbuild list'));\n console.log(chalk.cyan(' 3. Add all basics: ') + chalk.dim('npx microbuild add --category input'));\n console.log(chalk.dim('\\nComponents will be copied with all dependencies inlined.\\n'));\n\n } catch (error) {\n spinner.fail('Failed to initialize');\n console.error(chalk.red(error));\n process.exit(1);\n }\n}\n\n/**\n * Resolve path alias to absolute path\n * Handles @/ aliases and accounts for srcDir configuration\n */\nexport function resolveAlias(alias: string, cwd: string, srcDir: boolean = true): string {\n if (alias.startsWith('@/')) {\n const relativePath = alias.slice(2);\n if (srcDir) {\n return path.join(cwd, 'src', relativePath);\n }\n return path.join(cwd, relativePath);\n }\n return path.join(cwd, alias);\n}\n\n/**\n * Load and validate the microbuild.json config\n */\nexport async function loadConfig(cwd: string): Promise<Config | null> {\n const configPath = path.join(cwd, 'microbuild.json');\n if (!fs.existsSync(configPath)) {\n return null;\n }\n return await fs.readJSON(configPath) as Config;\n}\n\n/**\n * Save the microbuild.json config\n */\nexport async function saveConfig(cwd: string, config: Config): Promise<void> {\n const configPath = path.join(cwd, 'microbuild.json');\n await fs.writeJSON(configPath, config, { spaces: 2 });\n}\n"],"mappings":";AAgBA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAE9B,IAAM,aAAa,cAAc,YAAY,GAAG;AAChD,IAAM,YAAY,KAAK,QAAQ,UAAU;AAYzC,IAAM,uBACJ;AAKK,IAAM,oBACX,QAAQ,IAAI,2BAA2B;AAIzC,IAAM,sBAAsB,KAAK,QAAQ,WAAW,OAAO;AAK3D,SAAS,cAAuB;AAC9B,SAAO,GAAG,WAAW,KAAK,KAAK,qBAAqB,eAAe,CAAC;AACtE;AAyCA,IAAI,iBAAkC;AAKtC,eAAsB,cAAiC;AACrD,MAAI,eAAgB,QAAO;AAE3B,MAAI,YAAY,GAAG;AACjB,UAAM,eAAe,KAAK,KAAK,qBAAqB,eAAe;AACnE,qBAAiB,MAAM,GAAG,SAAS,YAAY;AAAA,EACjD,OAAO;AACL,UAAM,MAAM,GAAG,iBAAiB;AAChC,qBAAiB,MAAM,UAAoB,GAAG;AAAA,EAChD;AAEA,SAAO;AACT;AAQA,eAAsB,kBAAkB,QAAiC;AACvE,MAAI,YAAY,GAAG;AACjB,UAAM,WAAW,KAAK,KAAK,qBAAqB,MAAM;AACtD,QAAI,CAAC,GAAG,WAAW,QAAQ,GAAG;AAC5B,YAAM,IAAI,MAAM,kCAAkC,QAAQ,EAAE;AAAA,IAC9D;AACA,WAAO,GAAG,SAAS,UAAU,OAAO;AAAA,EACtC;AAGA,QAAM,MAAM,GAAG,iBAAiB,IAAI,MAAM;AAC1C,SAAO,UAAU,GAAG;AACtB;AAMA,eAAsB,iBAAiB,QAAkC;AACvE,MAAI,YAAY,GAAG;AACjB,WAAO,GAAG,WAAW,KAAK,KAAK,qBAAqB,MAAM,CAAC;AAAA,EAC7D;AAEA,SAAO;AACT;AAOO,SAAS,mBAA2B;AAEzC,QAAM,iBAAiB,KAAK,QAAQ,WAAW,WAAW;AAC1D,MAAI,GAAG,WAAW,cAAc,EAAG,QAAO;AAG1C,QAAM,iBAAiB,KAAK,QAAQ,WAAW,cAAc;AAC7D,MAAI,GAAG,WAAW,cAAc,EAAG,QAAO;AAE1C,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;AAYA,eAAe,UAAU,KAA8B;AACrD,QAAM,MAAM,MAAM,MAAM,GAAG;AAC3B,MAAI,CAAC,IAAI,IAAI;AACX,UAAM,IAAI;AAAA,MACR,mBAAmB,GAAG,KAAK,IAAI,MAAM,IAAI,IAAI,UAAU;AAAA,IACzD;AAAA,EACF;AACA,SAAO,IAAI,KAAK;AAClB;AAEA,eAAe,UAAa,KAAyB;AACnD,QAAM,OAAO,MAAM,UAAU,GAAG;AAChC,SAAO,KAAK,MAAM,IAAI;AACxB;;;ACzLA,OAAOA,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAO,WAAW;AAClB,OAAO,SAAS;AAChB,OAAO,aAAa;AAiDpB,IAAM,iBAAyB;AAAA,EAC7B,SAAS;AAAA,EACT,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,SAAS;AAAA,IACP,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAAA,EACA,cAAc,CAAC;AAAA,EACf,qBAAqB,CAAC;AAAA,EACtB,mBAAmB,CAAC;AAAA,EACpB,iBAAiB;AACnB;AAEA,IAAM,iBAAiB,iBAAiB;AAExC,eAAe,iBAAiB,oBAA4B,YAAoB,KAAa;AAC3F,QAAM,aAAaC,MAAK,KAAK,gBAAgB,kBAAkB;AAE/D,MAAI,CAACC,IAAG,WAAW,UAAU,KAAKA,IAAG,WAAW,UAAU,GAAG;AAC3D;AAAA,EACF;AAEA,QAAMA,IAAG,UAAUD,MAAK,QAAQ,UAAU,CAAC;AAC3C,QAAMC,IAAG,KAAK,YAAY,UAAU;AACpC,UAAQ,IAAI,MAAM,MAAM,kBAAaD,MAAK,SAAS,KAAK,UAAU,CAAC,EAAE,CAAC;AACxE;AAEA,eAAsB,KAAK,SAAyC;AAClE,QAAM,EAAE,KAAK,IAAI,IAAI;AAErB,UAAQ,IAAI,MAAM,KAAK,sCAA+B,CAAC;AACvD,UAAQ,IAAI,MAAM,IAAI,+DAA+D,CAAC;AAGtF,QAAM,aAAaA,MAAK,KAAK,KAAK,iBAAiB;AACnD,MAAIC,IAAG,WAAW,UAAU,KAAK,CAAC,KAAK;AACrC,UAAM,EAAE,UAAU,IAAI,MAAM,QAAQ;AAAA,MAClC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX,CAAC;AAED,QAAI,CAAC,WAAW;AACd,cAAQ,IAAI,MAAM,OAAO,2CAAsC,CAAC;AAChE;AAAA,IACF;AAAA,EACF;AAGA,QAAM,kBAAkBD,MAAK,KAAK,KAAK,cAAc;AACrD,MAAI,cAAc;AAClB,MAAI,YAAYC,IAAG,WAAWD,MAAK,KAAK,KAAK,KAAK,CAAC;AAEnD,MAAIC,IAAG,WAAW,eAAe,GAAG;AAClC,UAAM,cAAc,MAAMA,IAAG,SAAS,eAAe;AACrD,QAAI,YAAY,eAAe,MAAM,GAAG;AACtC,oBAAc;AAEd,UAAIA,IAAG,WAAWD,MAAK,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW;AACtD,oBAAY;AAAA,MACd;AAAA,IACF,WAAW,YAAY,eAAe,MAAM,GAAG;AAC7C,oBAAc;AAAA,IAChB,WAAW,YAAY,eAAe,OAAO,GAAG;AAC9C,oBAAc;AAAA,IAChB;AAAA,EACF,OAAO;AAEL,YAAQ,IAAI,MAAM,OAAO,qEAAgE,CAAC;AAE1F,UAAM,cAAcA,MAAK,SAAS,GAAG;AACrC,UAAM,qBAAqB;AAAA,MACzB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,QACP,KAAK;AAAA,QACL,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,cAAc;AAAA,QACZ,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,aAAa;AAAA,QACb,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,QAClB,uBAAuB;AAAA,QACvB,QAAQ;AAAA,QACR,kBAAkB;AAAA,MACpB;AAAA,MACA,iBAAiB;AAAA,QACf,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,QACpB,cAAc;AAAA,MAChB;AAAA,IACF;AAEA,UAAMC,IAAG,UAAU,iBAAiB,oBAAoB,EAAE,QAAQ,EAAE,CAAC;AACrE,kBAAc;AACd,gBAAY;AACZ,YAAQ,IAAI,MAAM,MAAM,+BAA0B,CAAC;AAAA,EACrD;AAEA,UAAQ,IAAI,MAAM,IAAI,aAAa,WAAW,WAAW,YAAY,wBAAwB,EAAE;AAAA,CAAI,CAAC;AAEpG,MAAI,SAAS,EAAE,GAAG,eAAe;AACjC,SAAO,SAAS;AAEhB,MAAI,CAAC,KAAK;AAER,UAAM,UAAU,MAAM,QAAQ;AAAA,MAC5B;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AAED,WAAO,SAAS,QAAQ,UAAU;AAClC,WAAO,QAAQ,aAAa,QAAQ,kBAAkB;AACtD,WAAO,QAAQ,MAAM,QAAQ,WAAW;AACxC,WAAO,MAAM,QAAQ,OAAO;AAAA,EAC9B;AAEA,QAAM,UAAU,IAAI,oCAAoC,EAAE,MAAM;AAEhE,MAAI;AAEF,UAAMA,IAAG,UAAU,YAAY,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACpD,YAAQ,QAAQ,yBAAyB;AAIzC,UAAM,gBAAgB,aAAa,OAAO,QAAQ,YAAY,KAAK,OAAO,MAAM;AAChF,UAAMA,IAAG,UAAU,aAAa;AAChC,YAAQ,IAAI,MAAM,MAAM,kBAAaD,MAAK,SAAS,KAAK,aAAa,CAAC,EAAE,CAAC;AAGzE,UAAM,SAAS,aAAa,OAAO,QAAQ,KAAK,KAAK,OAAO,MAAM;AAClE,UAAMC,IAAG,UAAU,MAAM;AACzB,UAAMA,IAAG,UAAUD,MAAK,KAAK,QAAQ,OAAO,CAAC;AAC7C,UAAMC,IAAG,UAAUD,MAAK,KAAK,QAAQ,UAAU,CAAC;AAChD,UAAMC,IAAG,UAAUD,MAAK,KAAK,QAAQ,OAAO,CAAC;AAC7C,YAAQ,IAAI,MAAM,MAAM,kBAAaA,MAAK,SAAS,KAAK,MAAM,CAAC,EAAE,CAAC;AAClE,YAAQ,IAAI,MAAM,IAAI,6BAAc,CAAC;AACrC,YAAQ,IAAI,MAAM,IAAI,gCAAiB,CAAC;AACxC,YAAQ,IAAI,MAAM,IAAI,6BAAc,CAAC;AAGrC,UAAM,eAAeA,MAAK,KAAK,KAAK,eAAe;AACnD,QAAI,CAACC,IAAG,WAAW,YAAY,KAAK,OAAO,KAAK;AAC9C,YAAM,WAAW;AAAA,QACf,iBAAiB;AAAA,UACf,QAAQ;AAAA,UACR,KAAK,CAAC,OAAO,gBAAgB,QAAQ;AAAA,UACrC,SAAS;AAAA,UACT,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,QAAQ;AAAA,UACR,kBAAkB;AAAA,UAClB,mBAAmB;AAAA,UACnB,iBAAiB;AAAA,UACjB,KAAK;AAAA,UACL,aAAa;AAAA,UACb,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;AAAA,UAC1B,OAAO;AAAA,YACL,OAAO,CAAC,OAAO,SAAS,YAAY,KAAK;AAAA,UAC3C;AAAA,UACA,SAAS;AAAA,QACX;AAAA,QACA,SAAS,CAAC,iBAAiB,WAAW,YAAY,qBAAqB;AAAA,QACvE,SAAS,CAAC,cAAc;AAAA,MAC1B;AACA,YAAMA,IAAG,UAAU,cAAc,UAAU,EAAE,QAAQ,EAAE,CAAC;AACxD,cAAQ,IAAI,MAAM,MAAM,iDAA4C,CAAC;AAAA,IACvE;AAGA,UAAM,cAAcD,MAAK,KAAK,KAAK,eAAe;AAClD,QAAI,CAACC,IAAG,WAAW,WAAW,KAAK,gBAAgB,QAAQ;AACzD,YAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAMvB,YAAMA,IAAG,UAAU,aAAa,cAAc;AAC9C,cAAQ,IAAI,MAAM,MAAM,8BAAyB,CAAC;AAAA,IACpD;AAGA,QAAI,gBAAgB,QAAQ;AAC1B,YAAM,UAAU,OAAO,SAASD,MAAK,KAAK,KAAK,KAAK,IAAI;AACxD,YAAM,SAASA,MAAK,KAAK,SAAS,KAAK;AACvC,YAAM,UAAUA,MAAK,KAAK,SAAS,KAAK;AACxC,YAAM,iBAAiBA,MAAK,KAAK,SAAS,YAAY;AAEtD,YAAMC,IAAG,UAAU,MAAM;AACzB,YAAMA,IAAG,UAAU,OAAO;AAC1B,YAAMA,IAAG,UAAU,cAAc;AAEjC,YAAM,iBAAiB,yBAAyBD,MAAK,KAAK,QAAQ,mBAAmB,GAAG,GAAG;AAC3F,YAAM,iBAAiB,mBAAmBA,MAAK,KAAK,QAAQ,aAAa,GAAG,GAAG;AAC/E,YAAM,iBAAiB,kBAAkBA,MAAK,KAAK,QAAQ,YAAY,GAAG,GAAG;AAC7E,YAAM,iBAAiB,gBAAgBA,MAAK,KAAK,QAAQ,UAAU,GAAG,GAAG;AACzE,YAAM,iBAAiB,gBAAgBA,MAAK,KAAK,SAAS,UAAU,GAAG,GAAG;AAC1E,YAAM;AAAA,QACJ;AAAA,QACAA,MAAK,KAAK,gBAAgB,uBAAuB;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AAGA,YAAQ,IAAI,MAAM,KAAK,wCAAiC,CAAC;AAGzD,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAUA,UAAM,cAAc,CAAC,QAAQ,gBAAgB;AAE7C,UAAM,cAAwB,CAAC;AAC/B,UAAM,kBAA4B,CAAC;AAEnC,QAAIC,IAAG,WAAW,eAAe,GAAG;AAClC,YAAM,cAAc,MAAMA,IAAG,SAAS,eAAe;AACrD,YAAM,UAAU;AAAA,QACd,GAAG,YAAY;AAAA,QACf,GAAG,YAAY;AAAA,MACjB;AAEA,iBAAW,OAAO,UAAU;AAC1B,YAAI,CAAC,QAAQ,GAAG,GAAG;AACjB,sBAAY,KAAK,GAAG;AAAA,QACtB;AAAA,MACF;AAEA,iBAAW,OAAO,aAAa;AAC7B,YAAI,CAAC,QAAQ,GAAG,GAAG;AACjB,0BAAgB,KAAK,GAAG;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,QAAI,YAAY,SAAS,GAAG;AAC1B,cAAQ,IAAI,MAAM,OAAO,mCAA8B,CAAC;AACxD,kBAAY,QAAQ,SAAO,QAAQ,IAAI,MAAM,IAAI,OAAO,GAAG,EAAE,CAAC,CAAC;AAC/D,cAAQ,IAAI,MAAM,IAAI,iBAAiB,CAAC;AACxC,cAAQ,IAAI,MAAM,KAAK,cAAc,YAAY,KAAK,GAAG,CAAC;AAAA,CAAI,CAAC;AAAA,IACjE,OAAO;AACL,cAAQ,IAAI,MAAM,MAAM,sCAAiC,CAAC;AAAA,IAC5D;AAEA,QAAI,gBAAgB,SAAS,GAAG;AAC9B,cAAQ,IAAI,MAAM,IAAI,gDAAgD,CAAC;AACvE,cAAQ,IAAI,MAAM,KAAK,cAAc,gBAAgB,KAAK,GAAG,CAAC;AAAA,CAAI,CAAC;AAAA,IACrE;AAGA,YAAQ,IAAI,MAAM,KAAK,KAAK,kCAA2B,CAAC;AACxD,YAAQ,IAAI,8DAAyD;AACrE,YAAQ,IAAI,oEAA+D;AAC3E,YAAQ,IAAI,oDAA+C;AAC3D,YAAQ,IAAI,2DAAsD;AAClE,YAAQ,IAAI,2CAAsC;AAGlD,YAAQ,IAAI,MAAM,KAAK,MAAM,4BAAuB,CAAC;AACrD,YAAQ,IAAI,aAAa;AACzB,YAAQ,IAAI,MAAM,KAAK,uBAAuB,IAAI,MAAM,IAAI,0CAA0C,CAAC;AACvG,YAAQ,IAAI,MAAM,KAAK,wBAAwB,IAAI,MAAM,IAAI,qBAAqB,CAAC;AACnF,YAAQ,IAAI,MAAM,KAAK,uBAAuB,IAAI,MAAM,IAAI,qCAAqC,CAAC;AAClG,YAAQ,IAAI,MAAM,IAAI,8DAA8D,CAAC;AAAA,EAEvF,SAAS,OAAO;AACd,YAAQ,KAAK,sBAAsB;AACnC,YAAQ,MAAM,MAAM,IAAI,KAAK,CAAC;AAC9B,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAMO,SAAS,aAAa,OAAe,KAAa,SAAkB,MAAc;AACvF,MAAI,MAAM,WAAW,IAAI,GAAG;AAC1B,UAAM,eAAe,MAAM,MAAM,CAAC;AAClC,QAAI,QAAQ;AACV,aAAOD,MAAK,KAAK,KAAK,OAAO,YAAY;AAAA,IAC3C;AACA,WAAOA,MAAK,KAAK,KAAK,YAAY;AAAA,EACpC;AACA,SAAOA,MAAK,KAAK,KAAK,KAAK;AAC7B;AAKA,eAAsB,WAAW,KAAqC;AACpE,QAAM,aAAaA,MAAK,KAAK,KAAK,iBAAiB;AACnD,MAAI,CAACC,IAAG,WAAW,UAAU,GAAG;AAC9B,WAAO;AAAA,EACT;AACA,SAAO,MAAMA,IAAG,SAAS,UAAU;AACrC;AAKA,eAAsB,WAAW,KAAa,QAA+B;AAC3E,QAAM,aAAaD,MAAK,KAAK,KAAK,iBAAiB;AACnD,QAAMC,IAAG,UAAU,YAAY,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACtD;","names":["fs","path","path","fs"]}
1
+ {"version":3,"sources":["../src/resolver.ts","../src/commands/init.ts"],"sourcesContent":["/**\n * Remote/Local Source Resolver\n *\n * Abstracts file fetching so the CLI works in two modes:\n *\n * 1. **Remote mode** (default when installed via npm / npx)\n * Fetches registry.json and component source files from the GitHub raw CDN.\n *\n * 2. **Local mode** (when running from the monorepo checkout)\n * Reads files directly from the `packages/` directory on disk.\n *\n * The mode is determined automatically:\n * - If `PACKAGES_ROOT/registry.json` exists on disk → local mode\n * - Otherwise → remote mode (uses REGISTRY_BASE_URL)\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// ─── Configuration ───────────────────────────────────────────────\n\n/**\n * Base URL for fetching files remotely.\n * Points to the raw GitHub content of the `main` branch.\n *\n * Override at runtime with the `MICROBUILD_REGISTRY_URL` env var.\n *\n * ⚠️ REPLACE the placeholder below with your actual GitHub org/repo.\n */\nconst DEFAULT_REGISTRY_URL =\n 'https://raw.githubusercontent.com/microbuild-ui/ui/main/packages';\n\n/**\n * Runtime-configurable registry URL.\n */\nexport const REGISTRY_BASE_URL =\n process.env.MICROBUILD_REGISTRY_URL ?? DEFAULT_REGISTRY_URL;\n\n// Local packages root (only valid when running from monorepo)\n// From dist/index.js → packages/cli/dist → needs ../../ to reach packages/\nconst LOCAL_PACKAGES_ROOT = path.resolve(__dirname, '../..');\n\n/**\n * Detect whether we are running locally inside the monorepo.\n */\nfunction isLocalMode(): boolean {\n return fs.existsSync(path.join(LOCAL_PACKAGES_ROOT, 'registry.json'));\n}\n\n// ─── Public API ──────────────────────────────────────────────────\n\nexport interface Registry {\n version: string;\n name: string;\n lib: Record<string, LibModule>;\n components: ComponentEntry[];\n categories: Array<{ name: string; title: string; description: string }>;\n dependencies?: Record<string, string[]>;\n aliases?: Record<string, string>;\n meta?: Record<string, unknown>;\n}\n\nexport interface FileMapping {\n source: string;\n target: string;\n}\n\nexport interface LibModule {\n name: string;\n description: string;\n files?: FileMapping[];\n path?: string;\n target?: string;\n internalDependencies?: string[];\n}\n\nexport interface ComponentEntry {\n name: string;\n title: string;\n description: string;\n category: string;\n files: FileMapping[];\n dependencies: string[];\n internalDependencies: string[];\n registryDependencies?: string[];\n}\n\n// In-memory cache so we fetch registry.json at most once per CLI invocation\nlet _registryCache: Registry | null = null;\n\n/**\n * Load registry.json (local or remote).\n */\nexport async function getRegistry(): Promise<Registry> {\n if (_registryCache) return _registryCache;\n\n if (isLocalMode()) {\n const registryPath = path.join(LOCAL_PACKAGES_ROOT, 'registry.json');\n _registryCache = await fs.readJSON(registryPath) as Registry;\n } else {\n const url = `${REGISTRY_BASE_URL}/registry.json`;\n _registryCache = await fetchJSON<Registry>(url);\n }\n\n return _registryCache;\n}\n\n/**\n * Read a source file referenced in registry.json.\n *\n * @param source – the `source` field from a FileMapping, e.g. `\"types/src/core.ts\"`\n * @returns the file content as a UTF-8 string\n */\nexport async function resolveSourceFile(source: string): Promise<string> {\n if (isLocalMode()) {\n const fullPath = path.join(LOCAL_PACKAGES_ROOT, source);\n if (!fs.existsSync(fullPath)) {\n throw new Error(`Source file not found on disk: ${fullPath}`);\n }\n return fs.readFile(fullPath, 'utf-8');\n }\n\n // Remote mode\n const url = `${REGISTRY_BASE_URL}/${source}`;\n return fetchText(url);\n}\n\n/**\n * Check whether a source file exists.\n * In remote mode we optimistically return `true` (the registry is the manifest).\n */\nexport async function sourceFileExists(source: string): Promise<boolean> {\n if (isLocalMode()) {\n return fs.existsSync(path.join(LOCAL_PACKAGES_ROOT, source));\n }\n // In remote mode, trust the registry – the file should exist.\n return true;\n}\n\n/**\n * Resolve a template file (used by `init` command).\n * Templates are bundled inside the CLI package under `dist/templates/`.\n * When running locally they live in `packages/cli/templates/`.\n */\nexport function getTemplatesRoot(): string {\n // When built, templates are copied into dist/templates by tsup copy plugin\n const builtTemplates = path.resolve(__dirname, 'templates');\n if (fs.existsSync(builtTemplates)) return builtTemplates;\n\n // Fallback: running locally from source\n const localTemplates = path.resolve(__dirname, '../templates');\n if (fs.existsSync(localTemplates)) return localTemplates;\n\n throw new Error(\n 'Templates directory not found. Ensure the CLI is built correctly.'\n );\n}\n\n/**\n * Return the local PACKAGES_ROOT (only meaningful in local mode).\n * Falls back gracefully so remote-mode callers don't break.\n */\nexport function getLocalPackagesRoot(): string {\n return LOCAL_PACKAGES_ROOT;\n}\n\n// ─── HTTP helpers ────────────────────────────────────────────────\n\nasync function fetchText(url: string): Promise<string> {\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(\n `Failed to fetch ${url}: ${res.status} ${res.statusText}`\n );\n }\n return res.text();\n}\n\nasync function fetchJSON<T>(url: string): Promise<T> {\n const text = await fetchText(url);\n return JSON.parse(text) as T;\n}\n","import fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport prompts from 'prompts';\nimport { getTemplatesRoot } from '../resolver.js';\n\n/**\n * Component version info for tracking updates\n */\nexport interface ComponentVersion {\n /** Registry version when installed */\n version: string;\n /** Installation timestamp */\n installedAt: string;\n /** Source package (e.g., @microbuild/ui-interfaces) */\n source: string;\n}\n\n/**\n * Microbuild Configuration File\n * \n * Copy & Own Model:\n * - Components are copied to your project as source files\n * - No runtime dependency on @microbuild/* packages\n * - Full customization - you own the code\n * - Works offline after installation\n */\nexport interface Config {\n $schema?: string;\n /** Distribution model - always 'copy-own' */\n model: 'copy-own';\n /** Use TypeScript (.tsx) or JavaScript (.jsx) */\n tsx: boolean;\n /** Use 'src' directory structure */\n srcDir: boolean;\n /** Path aliases for generated files */\n aliases: {\n /** Where UI components are copied (e.g., @/components/ui) */\n components: string;\n /** Where lib files are copied (e.g., @/lib/microbuild) */\n lib: string;\n };\n /** Installed lib modules */\n installedLib: string[];\n /** Installed components */\n installedComponents: string[];\n /** Component version tracking for update detection */\n componentVersions?: Record<string, ComponentVersion>;\n /** Registry version at last install */\n registryVersion?: string;\n}\n\nconst DEFAULT_CONFIG: Config = {\n $schema: 'https://microbuild.dev/schema.json',\n model: 'copy-own',\n tsx: true,\n srcDir: true,\n aliases: {\n components: '@/components/ui',\n lib: '@/lib/microbuild',\n },\n installedLib: [],\n installedComponents: [],\n componentVersions: {},\n registryVersion: '1.0.0',\n};\n\nconst TEMPLATES_ROOT = getTemplatesRoot();\n\nasync function copyTemplateFile(sourceRelativePath: string, targetPath: string, cwd: string) {\n const sourcePath = path.join(TEMPLATES_ROOT, sourceRelativePath);\n\n if (!fs.existsSync(sourcePath) || fs.existsSync(targetPath)) {\n return;\n }\n\n await fs.ensureDir(path.dirname(targetPath));\n await fs.copy(sourcePath, targetPath);\n console.log(chalk.green(`✓ Created ${path.relative(cwd, targetPath)}`));\n}\n\nexport async function init(options: { yes?: boolean; cwd: string }) {\n const { cwd, yes } = options;\n\n console.log(chalk.bold('\\n🚀 Welcome to Microbuild!\\n'));\n console.log(chalk.dim('Copy & Own Model - Components become part of your codebase.\\n'));\n\n // Check if already initialized\n const configPath = path.join(cwd, 'microbuild.json');\n if (fs.existsSync(configPath) && !yes) {\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: 'microbuild.json already exists. Overwrite?',\n initial: false,\n });\n\n if (!overwrite) {\n console.log(chalk.yellow('\\n✓ Keeping existing configuration\\n'));\n return;\n }\n }\n\n // Detect project type\n const packageJsonPath = path.join(cwd, 'package.json');\n let projectType = 'unknown';\n let hasSrcDir = fs.existsSync(path.join(cwd, 'src'));\n\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = await fs.readJSON(packageJsonPath);\n if (packageJson.dependencies?.['next']) {\n projectType = 'next';\n // Next.js App Router often uses 'app' instead of 'src'\n if (fs.existsSync(path.join(cwd, 'app')) && !hasSrcDir) {\n hasSrcDir = false;\n }\n } else if (packageJson.dependencies?.['vite']) {\n projectType = 'vite';\n } else if (packageJson.dependencies?.['react']) {\n projectType = 'react';\n }\n } else {\n // Create a minimal package.json for empty projects\n console.log(chalk.yellow('⚠ No package.json found. Creating minimal Next.js project...\\n'));\n \n const projectName = path.basename(cwd);\n const minimalPackageJson = {\n name: projectName,\n version: '0.1.0',\n private: true,\n scripts: {\n dev: 'next dev --turbopack',\n build: 'next build',\n start: 'next start',\n lint: 'next lint'\n },\n dependencies: {\n 'next': '^16.1.6',\n 'react': '^19.0.0',\n 'react-dom': '^19.0.0',\n '@mantine/core': '^8.0.0',\n '@mantine/hooks': '^8.0.0',\n '@tabler/icons-react': '^3.0.0',\n 'clsx': '^2.0.0',\n 'tailwind-merge': '^2.0.0'\n },\n devDependencies: {\n '@types/node': '^22',\n '@types/react': '^19',\n '@types/react-dom': '^19',\n 'typescript': '^5'\n }\n };\n \n await fs.writeJSON(packageJsonPath, minimalPackageJson, { spaces: 2 });\n projectType = 'next';\n hasSrcDir = false; // New projects use App Router without src/\n console.log(chalk.green('✓ Created package.json\\n'));\n }\n\n console.log(chalk.dim(`Detected: ${projectType} project${hasSrcDir ? ' with src directory' : ''}\\n`));\n\n let config = { ...DEFAULT_CONFIG };\n config.srcDir = hasSrcDir;\n\n if (!yes) {\n // Prompt for configuration\n const answers = await prompts([\n {\n type: 'confirm',\n name: 'srcDir',\n message: 'Use src directory?',\n initial: hasSrcDir,\n },\n {\n type: 'text',\n name: 'componentsPath',\n message: 'Where should components be installed?',\n initial: '@/components/ui',\n },\n {\n type: 'text',\n name: 'libPath',\n message: 'Where should lib files (types, services, hooks) be installed?',\n initial: '@/lib/microbuild',\n },\n {\n type: 'confirm',\n name: 'tsx',\n message: 'Use TypeScript?',\n initial: true,\n },\n ]);\n\n config.srcDir = answers.srcDir ?? hasSrcDir;\n config.aliases.components = answers.componentsPath || '@/components/ui';\n config.aliases.lib = answers.libPath || '@/lib/microbuild';\n config.tsx = answers.tsx ?? true;\n }\n\n const spinner = ora('Setting up Copy & Own structure...').start();\n\n try {\n // Write config\n await fs.writeJSON(configPath, config, { spaces: 2 });\n spinner.succeed('Created microbuild.json');\n\n // Create directory structure\n // Components directory\n const componentsDir = resolveAlias(config.aliases.components, cwd, config.srcDir);\n await fs.ensureDir(componentsDir);\n console.log(chalk.green(`✓ Created ${path.relative(cwd, componentsDir)}`));\n\n // Lib directory structure\n const libDir = resolveAlias(config.aliases.lib, cwd, config.srcDir);\n await fs.ensureDir(libDir);\n await fs.ensureDir(path.join(libDir, 'types'));\n await fs.ensureDir(path.join(libDir, 'services'));\n await fs.ensureDir(path.join(libDir, 'hooks'));\n console.log(chalk.green(`✓ Created ${path.relative(cwd, libDir)}`));\n console.log(chalk.dim(' └── types/'));\n console.log(chalk.dim(' └── services/'));\n console.log(chalk.dim(' └── hooks/'));\n\n // Create tsconfig.json if missing (required for path aliases)\n const tsconfigPath = path.join(cwd, 'tsconfig.json');\n if (!fs.existsSync(tsconfigPath) && config.tsx) {\n const tsconfig = {\n compilerOptions: {\n target: 'ES2017',\n lib: ['dom', 'dom.iterable', 'esnext'],\n allowJs: true,\n skipLibCheck: true,\n strict: true,\n noEmit: true,\n esModuleInterop: true,\n module: 'esnext',\n moduleResolution: 'bundler',\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: 'preserve',\n incremental: true,\n plugins: [{ name: 'next' }],\n paths: {\n '@/*': [config.srcDir ? './src/*' : './*']\n },\n baseUrl: '.'\n },\n include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],\n exclude: ['node_modules']\n };\n await fs.writeJSON(tsconfigPath, tsconfig, { spaces: 2 });\n console.log(chalk.green(`✓ Created tsconfig.json with @/ path alias`));\n }\n\n // Create next-env.d.ts if missing (for Next.js TypeScript support)\n const nextEnvPath = path.join(cwd, 'next-env.d.ts');\n if (!fs.existsSync(nextEnvPath) && projectType === 'next') {\n const nextEnvContent = `/// <reference types=\"next\" />\n/// <reference types=\"next/image-types/global\" />\n\n// NOTE: This file should not be edited\n// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.\n`;\n await fs.writeFile(nextEnvPath, nextEnvContent);\n console.log(chalk.green(`✓ Created next-env.d.ts`));\n }\n\n // Create a basic Next.js app skeleton with design system files\n if (projectType === 'next') {\n const srcRoot = config.srcDir ? path.join(cwd, 'src') : cwd;\n const appDir = path.join(srcRoot, 'app');\n const libRoot = path.join(srcRoot, 'lib');\n const componentsRoot = path.join(srcRoot, 'components');\n\n await fs.ensureDir(appDir);\n await fs.ensureDir(libRoot);\n await fs.ensureDir(componentsRoot);\n\n await copyTemplateFile('app/design-tokens.css', path.join(appDir, 'design-tokens.css'), cwd);\n await copyTemplateFile('app/globals.css', path.join(appDir, 'globals.css'), cwd);\n await copyTemplateFile('app/layout.tsx', path.join(appDir, 'layout.tsx'), cwd);\n await copyTemplateFile('app/page.tsx', path.join(appDir, 'page.tsx'), cwd);\n await copyTemplateFile('lib/theme.ts', path.join(libRoot, 'theme.ts'), cwd);\n await copyTemplateFile(\n 'components/ColorSchemeToggle.tsx',\n path.join(componentsRoot, 'ColorSchemeToggle.tsx'),\n cwd\n );\n }\n\n // Check for required dependencies\n console.log(chalk.bold('\\n📦 Checking dependencies...\\n'));\n\n // Core dependencies always needed\n const coreDeps = [\n '@mantine/core',\n '@mantine/hooks',\n 'react',\n 'react-dom',\n ];\n\n // Optional dependencies for specific features (installed on-demand when components need them)\n // @mantine/dates - DateTime component\n // @mantine/notifications - CollectionForm notifications\n // @mantine/dropzone - Upload component\n // @tabler/icons-react - Icon components\n // dayjs - DateTime component\n\n // Utility dependencies (for utils.ts)\n const utilityDeps = ['clsx', 'tailwind-merge'];\n\n const missingDeps: string[] = [];\n const missingUtilDeps: string[] = [];\n\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = await fs.readJSON(packageJsonPath);\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n for (const dep of coreDeps) {\n if (!allDeps[dep]) {\n missingDeps.push(dep);\n }\n }\n\n for (const dep of utilityDeps) {\n if (!allDeps[dep]) {\n missingUtilDeps.push(dep);\n }\n }\n }\n\n if (missingDeps.length > 0) {\n console.log(chalk.yellow('⚠ Missing core dependencies:'));\n missingDeps.forEach(dep => console.log(chalk.dim(` - ${dep}`)));\n console.log(chalk.dim('\\nInstall with:'));\n console.log(chalk.cyan(` pnpm add ${missingDeps.join(' ')}\\n`));\n } else {\n console.log(chalk.green('✓ Core dependencies installed\\n'));\n }\n\n if (missingUtilDeps.length > 0) {\n console.log(chalk.dim('Optional utility dependencies for cn() helper:'));\n console.log(chalk.cyan(` pnpm add ${missingUtilDeps.join(' ')}\\n`));\n }\n\n // Print benefits\n console.log(chalk.bold.blue('📋 Copy & Own Benefits:\\n'));\n console.log(' ✅ No external package dependencies for component code');\n console.log(' ✅ Full customization - components are your application code');\n console.log(' ✅ No breaking changes from upstream updates');\n console.log(' ✅ Bundle only what you use - tree-shaking friendly');\n console.log(' ✅ Works offline after installation');\n\n // Success message\n console.log(chalk.bold.green('\\n✨ Setup complete!\\n'));\n console.log('Next steps:');\n console.log(chalk.cyan(' 1. Add components: ') + chalk.dim('npx microbuild add input select-dropdown'));\n console.log(chalk.cyan(' 2. List components: ') + chalk.dim('npx microbuild list'));\n console.log(chalk.cyan(' 3. Add all basics: ') + chalk.dim('npx microbuild add --category input'));\n console.log(chalk.dim('\\nComponents will be copied with all dependencies inlined.\\n'));\n\n } catch (error) {\n spinner.fail('Failed to initialize');\n console.error(chalk.red(error));\n process.exit(1);\n }\n}\n\n/**\n * Resolve path alias to absolute path\n * Handles @/ aliases and accounts for srcDir configuration\n */\nexport function resolveAlias(alias: string, cwd: string, srcDir: boolean = true): string {\n if (alias.startsWith('@/')) {\n const relativePath = alias.slice(2);\n if (srcDir) {\n return path.join(cwd, 'src', relativePath);\n }\n return path.join(cwd, relativePath);\n }\n return path.join(cwd, alias);\n}\n\n/**\n * Load and validate the microbuild.json config\n */\nexport async function loadConfig(cwd: string): Promise<Config | null> {\n const configPath = path.join(cwd, 'microbuild.json');\n if (!fs.existsSync(configPath)) {\n return null;\n }\n return await fs.readJSON(configPath) as Config;\n}\n\n/**\n * Save the microbuild.json config\n */\nexport async function saveConfig(cwd: string, config: Config): Promise<void> {\n const configPath = path.join(cwd, 'microbuild.json');\n await fs.writeJSON(configPath, config, { spaces: 2 });\n}\n"],"mappings":";AAgBA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAE9B,IAAM,aAAa,cAAc,YAAY,GAAG;AAChD,IAAM,YAAY,KAAK,QAAQ,UAAU;AAYzC,IAAM,uBACJ;AAKK,IAAM,oBACX,QAAQ,IAAI,2BAA2B;AAIzC,IAAM,sBAAsB,KAAK,QAAQ,WAAW,OAAO;AAK3D,SAAS,cAAuB;AAC9B,SAAO,GAAG,WAAW,KAAK,KAAK,qBAAqB,eAAe,CAAC;AACtE;AAyCA,IAAI,iBAAkC;AAKtC,eAAsB,cAAiC;AACrD,MAAI,eAAgB,QAAO;AAE3B,MAAI,YAAY,GAAG;AACjB,UAAM,eAAe,KAAK,KAAK,qBAAqB,eAAe;AACnE,qBAAiB,MAAM,GAAG,SAAS,YAAY;AAAA,EACjD,OAAO;AACL,UAAM,MAAM,GAAG,iBAAiB;AAChC,qBAAiB,MAAM,UAAoB,GAAG;AAAA,EAChD;AAEA,SAAO;AACT;AAQA,eAAsB,kBAAkB,QAAiC;AACvE,MAAI,YAAY,GAAG;AACjB,UAAM,WAAW,KAAK,KAAK,qBAAqB,MAAM;AACtD,QAAI,CAAC,GAAG,WAAW,QAAQ,GAAG;AAC5B,YAAM,IAAI,MAAM,kCAAkC,QAAQ,EAAE;AAAA,IAC9D;AACA,WAAO,GAAG,SAAS,UAAU,OAAO;AAAA,EACtC;AAGA,QAAM,MAAM,GAAG,iBAAiB,IAAI,MAAM;AAC1C,SAAO,UAAU,GAAG;AACtB;AAMA,eAAsB,iBAAiB,QAAkC;AACvE,MAAI,YAAY,GAAG;AACjB,WAAO,GAAG,WAAW,KAAK,KAAK,qBAAqB,MAAM,CAAC;AAAA,EAC7D;AAEA,SAAO;AACT;AAOO,SAAS,mBAA2B;AAEzC,QAAM,iBAAiB,KAAK,QAAQ,WAAW,WAAW;AAC1D,MAAI,GAAG,WAAW,cAAc,EAAG,QAAO;AAG1C,QAAM,iBAAiB,KAAK,QAAQ,WAAW,cAAc;AAC7D,MAAI,GAAG,WAAW,cAAc,EAAG,QAAO;AAE1C,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;AAYA,eAAe,UAAU,KAA8B;AACrD,QAAM,MAAM,MAAM,MAAM,GAAG;AAC3B,MAAI,CAAC,IAAI,IAAI;AACX,UAAM,IAAI;AAAA,MACR,mBAAmB,GAAG,KAAK,IAAI,MAAM,IAAI,IAAI,UAAU;AAAA,IACzD;AAAA,EACF;AACA,SAAO,IAAI,KAAK;AAClB;AAEA,eAAe,UAAa,KAAyB;AACnD,QAAM,OAAO,MAAM,UAAU,GAAG;AAChC,SAAO,KAAK,MAAM,IAAI;AACxB;;;ACzLA,OAAOA,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAO,WAAW;AAClB,OAAO,SAAS;AAChB,OAAO,aAAa;AAiDpB,IAAM,iBAAyB;AAAA,EAC7B,SAAS;AAAA,EACT,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,SAAS;AAAA,IACP,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAAA,EACA,cAAc,CAAC;AAAA,EACf,qBAAqB,CAAC;AAAA,EACtB,mBAAmB,CAAC;AAAA,EACpB,iBAAiB;AACnB;AAEA,IAAM,iBAAiB,iBAAiB;AAExC,eAAe,iBAAiB,oBAA4B,YAAoB,KAAa;AAC3F,QAAM,aAAaC,MAAK,KAAK,gBAAgB,kBAAkB;AAE/D,MAAI,CAACC,IAAG,WAAW,UAAU,KAAKA,IAAG,WAAW,UAAU,GAAG;AAC3D;AAAA,EACF;AAEA,QAAMA,IAAG,UAAUD,MAAK,QAAQ,UAAU,CAAC;AAC3C,QAAMC,IAAG,KAAK,YAAY,UAAU;AACpC,UAAQ,IAAI,MAAM,MAAM,kBAAaD,MAAK,SAAS,KAAK,UAAU,CAAC,EAAE,CAAC;AACxE;AAEA,eAAsB,KAAK,SAAyC;AAClE,QAAM,EAAE,KAAK,IAAI,IAAI;AAErB,UAAQ,IAAI,MAAM,KAAK,sCAA+B,CAAC;AACvD,UAAQ,IAAI,MAAM,IAAI,+DAA+D,CAAC;AAGtF,QAAM,aAAaA,MAAK,KAAK,KAAK,iBAAiB;AACnD,MAAIC,IAAG,WAAW,UAAU,KAAK,CAAC,KAAK;AACrC,UAAM,EAAE,UAAU,IAAI,MAAM,QAAQ;AAAA,MAClC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX,CAAC;AAED,QAAI,CAAC,WAAW;AACd,cAAQ,IAAI,MAAM,OAAO,2CAAsC,CAAC;AAChE;AAAA,IACF;AAAA,EACF;AAGA,QAAM,kBAAkBD,MAAK,KAAK,KAAK,cAAc;AACrD,MAAI,cAAc;AAClB,MAAI,YAAYC,IAAG,WAAWD,MAAK,KAAK,KAAK,KAAK,CAAC;AAEnD,MAAIC,IAAG,WAAW,eAAe,GAAG;AAClC,UAAM,cAAc,MAAMA,IAAG,SAAS,eAAe;AACrD,QAAI,YAAY,eAAe,MAAM,GAAG;AACtC,oBAAc;AAEd,UAAIA,IAAG,WAAWD,MAAK,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW;AACtD,oBAAY;AAAA,MACd;AAAA,IACF,WAAW,YAAY,eAAe,MAAM,GAAG;AAC7C,oBAAc;AAAA,IAChB,WAAW,YAAY,eAAe,OAAO,GAAG;AAC9C,oBAAc;AAAA,IAChB;AAAA,EACF,OAAO;AAEL,YAAQ,IAAI,MAAM,OAAO,qEAAgE,CAAC;AAE1F,UAAM,cAAcA,MAAK,SAAS,GAAG;AACrC,UAAM,qBAAqB;AAAA,MACzB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,QACP,KAAK;AAAA,QACL,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,cAAc;AAAA,QACZ,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,aAAa;AAAA,QACb,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,QAClB,uBAAuB;AAAA,QACvB,QAAQ;AAAA,QACR,kBAAkB;AAAA,MACpB;AAAA,MACA,iBAAiB;AAAA,QACf,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,QACpB,cAAc;AAAA,MAChB;AAAA,IACF;AAEA,UAAMC,IAAG,UAAU,iBAAiB,oBAAoB,EAAE,QAAQ,EAAE,CAAC;AACrE,kBAAc;AACd,gBAAY;AACZ,YAAQ,IAAI,MAAM,MAAM,+BAA0B,CAAC;AAAA,EACrD;AAEA,UAAQ,IAAI,MAAM,IAAI,aAAa,WAAW,WAAW,YAAY,wBAAwB,EAAE;AAAA,CAAI,CAAC;AAEpG,MAAI,SAAS,EAAE,GAAG,eAAe;AACjC,SAAO,SAAS;AAEhB,MAAI,CAAC,KAAK;AAER,UAAM,UAAU,MAAM,QAAQ;AAAA,MAC5B;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AAED,WAAO,SAAS,QAAQ,UAAU;AAClC,WAAO,QAAQ,aAAa,QAAQ,kBAAkB;AACtD,WAAO,QAAQ,MAAM,QAAQ,WAAW;AACxC,WAAO,MAAM,QAAQ,OAAO;AAAA,EAC9B;AAEA,QAAM,UAAU,IAAI,oCAAoC,EAAE,MAAM;AAEhE,MAAI;AAEF,UAAMA,IAAG,UAAU,YAAY,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACpD,YAAQ,QAAQ,yBAAyB;AAIzC,UAAM,gBAAgB,aAAa,OAAO,QAAQ,YAAY,KAAK,OAAO,MAAM;AAChF,UAAMA,IAAG,UAAU,aAAa;AAChC,YAAQ,IAAI,MAAM,MAAM,kBAAaD,MAAK,SAAS,KAAK,aAAa,CAAC,EAAE,CAAC;AAGzE,UAAM,SAAS,aAAa,OAAO,QAAQ,KAAK,KAAK,OAAO,MAAM;AAClE,UAAMC,IAAG,UAAU,MAAM;AACzB,UAAMA,IAAG,UAAUD,MAAK,KAAK,QAAQ,OAAO,CAAC;AAC7C,UAAMC,IAAG,UAAUD,MAAK,KAAK,QAAQ,UAAU,CAAC;AAChD,UAAMC,IAAG,UAAUD,MAAK,KAAK,QAAQ,OAAO,CAAC;AAC7C,YAAQ,IAAI,MAAM,MAAM,kBAAaA,MAAK,SAAS,KAAK,MAAM,CAAC,EAAE,CAAC;AAClE,YAAQ,IAAI,MAAM,IAAI,6BAAc,CAAC;AACrC,YAAQ,IAAI,MAAM,IAAI,gCAAiB,CAAC;AACxC,YAAQ,IAAI,MAAM,IAAI,6BAAc,CAAC;AAGrC,UAAM,eAAeA,MAAK,KAAK,KAAK,eAAe;AACnD,QAAI,CAACC,IAAG,WAAW,YAAY,KAAK,OAAO,KAAK;AAC9C,YAAM,WAAW;AAAA,QACf,iBAAiB;AAAA,UACf,QAAQ;AAAA,UACR,KAAK,CAAC,OAAO,gBAAgB,QAAQ;AAAA,UACrC,SAAS;AAAA,UACT,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,QAAQ;AAAA,UACR,kBAAkB;AAAA,UAClB,mBAAmB;AAAA,UACnB,iBAAiB;AAAA,UACjB,KAAK;AAAA,UACL,aAAa;AAAA,UACb,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;AAAA,UAC1B,OAAO;AAAA,YACL,OAAO,CAAC,OAAO,SAAS,YAAY,KAAK;AAAA,UAC3C;AAAA,UACA,SAAS;AAAA,QACX;AAAA,QACA,SAAS,CAAC,iBAAiB,WAAW,YAAY,qBAAqB;AAAA,QACvE,SAAS,CAAC,cAAc;AAAA,MAC1B;AACA,YAAMA,IAAG,UAAU,cAAc,UAAU,EAAE,QAAQ,EAAE,CAAC;AACxD,cAAQ,IAAI,MAAM,MAAM,iDAA4C,CAAC;AAAA,IACvE;AAGA,UAAM,cAAcD,MAAK,KAAK,KAAK,eAAe;AAClD,QAAI,CAACC,IAAG,WAAW,WAAW,KAAK,gBAAgB,QAAQ;AACzD,YAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAMvB,YAAMA,IAAG,UAAU,aAAa,cAAc;AAC9C,cAAQ,IAAI,MAAM,MAAM,8BAAyB,CAAC;AAAA,IACpD;AAGA,QAAI,gBAAgB,QAAQ;AAC1B,YAAM,UAAU,OAAO,SAASD,MAAK,KAAK,KAAK,KAAK,IAAI;AACxD,YAAM,SAASA,MAAK,KAAK,SAAS,KAAK;AACvC,YAAM,UAAUA,MAAK,KAAK,SAAS,KAAK;AACxC,YAAM,iBAAiBA,MAAK,KAAK,SAAS,YAAY;AAEtD,YAAMC,IAAG,UAAU,MAAM;AACzB,YAAMA,IAAG,UAAU,OAAO;AAC1B,YAAMA,IAAG,UAAU,cAAc;AAEjC,YAAM,iBAAiB,yBAAyBD,MAAK,KAAK,QAAQ,mBAAmB,GAAG,GAAG;AAC3F,YAAM,iBAAiB,mBAAmBA,MAAK,KAAK,QAAQ,aAAa,GAAG,GAAG;AAC/E,YAAM,iBAAiB,kBAAkBA,MAAK,KAAK,QAAQ,YAAY,GAAG,GAAG;AAC7E,YAAM,iBAAiB,gBAAgBA,MAAK,KAAK,QAAQ,UAAU,GAAG,GAAG;AACzE,YAAM,iBAAiB,gBAAgBA,MAAK,KAAK,SAAS,UAAU,GAAG,GAAG;AAC1E,YAAM;AAAA,QACJ;AAAA,QACAA,MAAK,KAAK,gBAAgB,uBAAuB;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AAGA,YAAQ,IAAI,MAAM,KAAK,wCAAiC,CAAC;AAGzD,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAUA,UAAM,cAAc,CAAC,QAAQ,gBAAgB;AAE7C,UAAM,cAAwB,CAAC;AAC/B,UAAM,kBAA4B,CAAC;AAEnC,QAAIC,IAAG,WAAW,eAAe,GAAG;AAClC,YAAM,cAAc,MAAMA,IAAG,SAAS,eAAe;AACrD,YAAM,UAAU;AAAA,QACd,GAAG,YAAY;AAAA,QACf,GAAG,YAAY;AAAA,MACjB;AAEA,iBAAW,OAAO,UAAU;AAC1B,YAAI,CAAC,QAAQ,GAAG,GAAG;AACjB,sBAAY,KAAK,GAAG;AAAA,QACtB;AAAA,MACF;AAEA,iBAAW,OAAO,aAAa;AAC7B,YAAI,CAAC,QAAQ,GAAG,GAAG;AACjB,0BAAgB,KAAK,GAAG;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,QAAI,YAAY,SAAS,GAAG;AAC1B,cAAQ,IAAI,MAAM,OAAO,mCAA8B,CAAC;AACxD,kBAAY,QAAQ,SAAO,QAAQ,IAAI,MAAM,IAAI,OAAO,GAAG,EAAE,CAAC,CAAC;AAC/D,cAAQ,IAAI,MAAM,IAAI,iBAAiB,CAAC;AACxC,cAAQ,IAAI,MAAM,KAAK,cAAc,YAAY,KAAK,GAAG,CAAC;AAAA,CAAI,CAAC;AAAA,IACjE,OAAO;AACL,cAAQ,IAAI,MAAM,MAAM,sCAAiC,CAAC;AAAA,IAC5D;AAEA,QAAI,gBAAgB,SAAS,GAAG;AAC9B,cAAQ,IAAI,MAAM,IAAI,gDAAgD,CAAC;AACvE,cAAQ,IAAI,MAAM,KAAK,cAAc,gBAAgB,KAAK,GAAG,CAAC;AAAA,CAAI,CAAC;AAAA,IACrE;AAGA,YAAQ,IAAI,MAAM,KAAK,KAAK,kCAA2B,CAAC;AACxD,YAAQ,IAAI,8DAAyD;AACrE,YAAQ,IAAI,oEAA+D;AAC3E,YAAQ,IAAI,oDAA+C;AAC3D,YAAQ,IAAI,2DAAsD;AAClE,YAAQ,IAAI,2CAAsC;AAGlD,YAAQ,IAAI,MAAM,KAAK,MAAM,4BAAuB,CAAC;AACrD,YAAQ,IAAI,aAAa;AACzB,YAAQ,IAAI,MAAM,KAAK,uBAAuB,IAAI,MAAM,IAAI,0CAA0C,CAAC;AACvG,YAAQ,IAAI,MAAM,KAAK,wBAAwB,IAAI,MAAM,IAAI,qBAAqB,CAAC;AACnF,YAAQ,IAAI,MAAM,KAAK,uBAAuB,IAAI,MAAM,IAAI,qCAAqC,CAAC;AAClG,YAAQ,IAAI,MAAM,IAAI,8DAA8D,CAAC;AAAA,EAEvF,SAAS,OAAO;AACd,YAAQ,KAAK,sBAAsB;AACnC,YAAQ,MAAM,MAAM,IAAI,KAAK,CAAC;AAC9B,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAMO,SAAS,aAAa,OAAe,KAAa,SAAkB,MAAc;AACvF,MAAI,MAAM,WAAW,IAAI,GAAG;AAC1B,UAAM,eAAe,MAAM,MAAM,CAAC;AAClC,QAAI,QAAQ;AACV,aAAOD,MAAK,KAAK,KAAK,OAAO,YAAY;AAAA,IAC3C;AACA,WAAOA,MAAK,KAAK,KAAK,YAAY;AAAA,EACpC;AACA,SAAOA,MAAK,KAAK,KAAK,KAAK;AAC7B;AAKA,eAAsB,WAAW,KAAqC;AACpE,QAAM,aAAaA,MAAK,KAAK,KAAK,iBAAiB;AACnD,MAAI,CAACC,IAAG,WAAW,UAAU,GAAG;AAC9B,WAAO;AAAA,EACT;AACA,SAAO,MAAMA,IAAG,SAAS,UAAU;AACrC;AAKA,eAAsB,WAAW,KAAa,QAA+B;AAC3E,QAAM,aAAaD,MAAK,KAAK,KAAK,iBAAiB;AACnD,QAAMC,IAAG,UAAU,YAAY,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACtD;","names":["fs","path","path","fs"]}
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  resolveSourceFile,
7
7
  saveConfig,
8
8
  sourceFileExists
9
- } from "./chunk-6YA3DSAE.js";
9
+ } from "./chunk-IW632G56.js";
10
10
 
11
11
  // src/index.ts
12
12
  import { Command } from "commander";
@@ -2272,7 +2272,7 @@ program.command("bootstrap").description("Full project setup: init + add --all +
2272
2272
  });
2273
2273
  program.command("fix").description("Automatically fix common issues (untransformed imports, broken paths, SSR exports)").option("-n, --dry-run", "Preview fixes without modifying files").option("-y, --yes", "Skip confirmation prompts").option("--cwd <path>", "Project directory", process.cwd()).action(fix);
2274
2274
  program.command("outdated").description("Check for component updates (compares installed versions to registry)").option("--json", "Output as JSON").option("--cwd <path>", "Project directory", process.cwd()).action(async (options) => {
2275
- const { outdated } = await import("./outdated-TV5ERBNC.js");
2275
+ const { outdated } = await import("./outdated-7AGUFNHG.js");
2276
2276
  await outdated(options);
2277
2277
  });
2278
2278
  program.parse();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/commands/add.ts","../src/commands/transformer.ts","../src/commands/validate.ts","../src/commands/list.ts","../src/commands/diff.ts","../src/commands/status.ts","../src/commands/info.ts","../src/commands/tree.ts","../src/commands/fix.ts","../src/commands/bootstrap.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * Microbuild CLI\n * \n * Copy & Own CLI tool for adding Microbuild components to your project.\n * \n * Benefits:\n * ✅ No dependency on external packages for component code\n * ✅ Full customization - components become part of your codebase\n * ✅ No breaking changes from upstream updates\n * ✅ Bundle only what you use - tree-shaking friendly\n * ✅ Works offline after installation\n */\n\nimport { Command } from 'commander';\nimport { init } from './commands/init.js';\nimport { add } from './commands/add.js';\nimport { list } from './commands/list.js';\nimport { diff } from './commands/diff.js';\nimport { status } from './commands/status.js';\nimport { info } from './commands/info.js';\nimport { tree } from './commands/tree.js';\nimport { validate } from './commands/validate.js';\nimport { fix } from './commands/fix.js';\nimport { bootstrap } from './commands/bootstrap.js';\n\nconst program = new Command();\n\nprogram\n .name('microbuild')\n .description('Copy & Own CLI - Add Microbuild components to your project')\n .version('1.0.0');\n\nprogram\n .command('init')\n .description('Initialize Microbuild in your project (creates microbuild.json)')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('-c, --cwd <path>', 'Project directory', process.cwd())\n .action(init);\n\nprogram\n .command('add')\n .description('Copy components to your project (with transformed imports)')\n .argument('[components...]', 'Component names to add')\n .option('-a, --all', 'Add all components')\n .option('--with-api', 'Also add API routes and Supabase auth templates')\n .option('--category <name>', 'Add all components from a category')\n .option('-o, --overwrite', 'Overwrite existing components')\n .option('-n, --dry-run', 'Preview changes without modifying files')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(add);\n\nprogram\n .command('list')\n .description('List all available components')\n .option('--category <name>', 'Filter by category')\n .option('--json', 'Output as JSON')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(list);\n\nprogram\n .command('diff')\n .description('Preview changes before adding a component')\n .argument('<component>', 'Component name')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(diff);\n\nprogram\n .command('status')\n .description('Show installed Microbuild components and their origins')\n .option('--json', 'Output as JSON')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(status);\n\nprogram\n .command('info')\n .description('Show detailed information about a component (sources, dependencies, interface)')\n .argument('<component>', 'Component name')\n .option('--json', 'Output as JSON')\n .action(info);\n\nprogram\n .command('tree')\n .description('Display dependency tree for a component')\n .argument('<component>', 'Component name')\n .option('--json', 'Output as JSON')\n .option('-d, --depth <number>', 'Max depth to display', '2')\n .action((component, options) => tree(component, { ...options, depth: parseInt(options.depth) }));\n\nprogram\n .command('validate')\n .description('Validate Microbuild installation (check imports, missing files, SSR issues)')\n .option('--json', 'Output as JSON')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(async (options) => { await validate(options); });\n\nprogram\n .command('bootstrap')\n .description('Full project setup: init + add --all + install deps + validate (single command for AI agents)')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .option('--skip-deps', 'Skip npm dependency installation')\n .option('--skip-validate', 'Skip post-install validation')\n .action(async (options) => {\n await bootstrap({\n cwd: options.cwd,\n skipDeps: options.skipDeps,\n skipValidate: options.skipValidate,\n });\n });\n\nprogram\n .command('fix')\n .description('Automatically fix common issues (untransformed imports, broken paths, SSR exports)')\n .option('-n, --dry-run', 'Preview fixes without modifying files')\n .option('-y, --yes', 'Skip confirmation prompts')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(fix);\n\nprogram\n .command('outdated')\n .description('Check for component updates (compares installed versions to registry)')\n .option('--json', 'Output as JSON')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(async (options) => {\n const { outdated } = await import('./commands/outdated.js');\n await outdated(options);\n });\n\nprogram.parse();\n","/**\n * Microbuild CLI - Add Command\n * \n * Copy & Own Model:\n * - Copies component source files to your project\n * - Transforms @microbuild/* imports to local paths\n * - Auto-copies required lib modules (types, services, hooks)\n * - No runtime dependency on external packages\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport ora, { type Ora } from 'ora';\nimport prompts from 'prompts';\nimport { type Config, loadConfig, saveConfig } from './init.js';\nimport { \n transformImports, \n transformRelativeImports,\n transformVFormImports,\n addOriginHeader\n} from './transformer.js';\nimport { validate } from './validate.js';\nimport {\n getRegistry as fetchRegistry,\n resolveSourceFile,\n sourceFileExists,\n type Registry,\n type FileMapping,\n type LibModule,\n type ComponentEntry,\n} from '../resolver.js';\n\n/**\n * Load registry (local or remote via resolver)\n */\nasync function getRegistry(): Promise<Registry> {\n try {\n return await fetchRegistry();\n } catch (err: any) {\n console.error(chalk.red('Failed to load registry:', err.message));\n process.exit(1);\n }\n}\n\n/**\n * Common component aliases for better discovery\n */\nconst COMPONENT_ALIASES: Record<string, string> = {\n 'form': 'vform',\n 'dynamicform': 'vform',\n 'v-form': 'vform',\n 'select': 'select-dropdown',\n 'dropdown': 'select-dropdown',\n 'checkbox': 'boolean',\n 'switch': 'toggle',\n 'date': 'datetime',\n 'time': 'datetime',\n 'datepicker': 'datetime',\n 'text': 'input',\n 'textinput': 'input',\n 'textfield': 'input',\n 'image': 'file-image',\n 'imageupload': 'file-image',\n 'wysiwyg': 'rich-text-html',\n 'richtext': 'rich-text-html',\n 'markdown': 'rich-text-markdown',\n 'md': 'rich-text-markdown',\n 'm2m': 'list-m2m',\n 'm2o': 'list-m2o',\n 'o2m': 'list-o2m',\n 'm2a': 'list-m2a',\n 'manytomany': 'list-m2m',\n 'manytoone': 'list-m2o',\n 'onetomany': 'list-o2m',\n 'manytoany': 'list-m2a',\n 'relation': 'list-m2o',\n 'multiselect': 'select-multiple-dropdown',\n 'checkboxes': 'select-multiple-checkbox',\n 'radio': 'select-radio',\n 'icon': 'select-icon',\n 'colorpicker': 'color',\n 'fileupload': 'file',\n 'code': 'input-code',\n 'blockeditor': 'input-block-editor',\n 'editor': 'input-block-editor',\n};\n\n/**\n * Find component with smart matching and suggestions\n */\nfunction findComponentWithSuggestions(name: string, registry: Registry): ComponentEntry | null {\n const normalized = name.toLowerCase().replace(/-/g, '');\n \n // Direct match by name\n const directMatch = registry.components.find(\n c => c.name.toLowerCase() === name.toLowerCase()\n );\n if (directMatch) return directMatch;\n \n // Match by title\n const titleMatch = registry.components.find(\n c => c.title.toLowerCase() === name.toLowerCase()\n );\n if (titleMatch) return titleMatch;\n \n // Fuzzy match (remove dashes)\n const fuzzyMatch = registry.components.find(\n c => c.name.toLowerCase().replace(/-/g, '') === normalized ||\n c.title.toLowerCase().replace(/-/g, '') === normalized\n );\n if (fuzzyMatch) return fuzzyMatch;\n \n // Check aliases\n const aliasedName = COMPONENT_ALIASES[normalized];\n if (aliasedName) {\n const aliasMatch = registry.components.find(c => c.name === aliasedName);\n if (aliasMatch) {\n console.log(chalk.yellow(`\\n💡 \"${name}\" matched alias → using \"${aliasMatch.name}\"\\n`));\n return aliasMatch;\n }\n }\n \n // No match found - provide helpful suggestions\n console.log(chalk.red(`\\n✗ Component not found: ${name}\\n`));\n \n // Find similar components\n const suggestions = registry.components\n .map(c => ({\n component: c,\n score: calculateSimilarity(normalized, c.name.replace(/-/g, '')) +\n calculateSimilarity(normalized, c.title.toLowerCase().replace(/-/g, '')) +\n (c.description.toLowerCase().includes(name.toLowerCase()) ? 0.3 : 0)\n }))\n .filter(s => s.score > 0.2)\n .sort((a, b) => b.score - a.score)\n .slice(0, 5);\n \n if (suggestions.length > 0) {\n console.log(chalk.yellow('Did you mean one of these?\\n'));\n suggestions.forEach(s => {\n console.log(` ${chalk.green(s.component.name.padEnd(28))} ${chalk.dim(s.component.description)}`);\n });\n console.log();\n }\n \n // Show category hint\n const categoryHint = registry.categories.find(cat => \n name.toLowerCase().includes(cat.name.toLowerCase())\n );\n if (categoryHint) {\n console.log(chalk.dim(`Try: microbuild add --category ${categoryHint.name}\\n`));\n }\n \n console.log(chalk.dim('Commands to help you find components:'));\n console.log(chalk.dim(' microbuild list List all components'));\n console.log(chalk.dim(' microbuild list --category Filter by category'));\n console.log(chalk.dim(' microbuild info <name> Get component details\\n'));\n \n return null;\n}\n\n/**\n * Simple similarity score (0-1)\n */\nfunction calculateSimilarity(a: string, b: string): number {\n if (a === b) return 1;\n if (a.includes(b) || b.includes(a)) return 0.7;\n \n // Count matching characters\n let matches = 0;\n const shorter = a.length < b.length ? a : b;\n const longer = a.length < b.length ? b : a;\n \n for (let i = 0; i < shorter.length; i++) {\n if (longer.includes(shorter[i])) matches++;\n }\n \n return matches / longer.length;\n}\n\n/**\n * Copy and transform a lib module (types, services, or hooks)\n */\nasync function copyLibModule(\n moduleName: string,\n registry: Registry,\n config: Config,\n cwd: string,\n spinner: Ora\n): Promise<boolean> {\n const libModule = registry.lib[moduleName];\n if (!libModule) {\n spinner.warn(`Lib module not found: ${moduleName}`);\n return false;\n }\n\n // Check if already installed\n if (config.installedLib.includes(moduleName)) {\n return true;\n }\n\n // First, install dependencies\n if (libModule.internalDependencies) {\n for (const dep of libModule.internalDependencies) {\n if (!config.installedLib.includes(dep)) {\n await copyLibModule(dep, registry, config, cwd, spinner);\n }\n }\n }\n\n // Handle single file module (like utils)\n if (libModule.path && libModule.target) {\n const targetPath = path.join(\n config.srcDir ? path.join(cwd, 'src') : cwd,\n libModule.target\n );\n\n if (await sourceFileExists(libModule.path)) {\n let content = await resolveSourceFile(libModule.path);\n content = transformImports(content, config);\n content = addOriginHeader(content, moduleName, '@microbuild/lib', registry.version);\n await fs.ensureDir(path.dirname(targetPath));\n await fs.writeFile(targetPath, content);\n }\n }\n\n // Handle multi-file module\n if (libModule.files) {\n for (const file of libModule.files) {\n const targetPath = path.join(\n config.srcDir ? path.join(cwd, 'src') : cwd,\n file.target\n );\n\n if (await sourceFileExists(file.source)) {\n let content = await resolveSourceFile(file.source);\n content = transformImports(content, config);\n // Extract filename for origin tracking\n const fileName = path.basename(file.source, path.extname(file.source));\n content = addOriginHeader(content, `${moduleName}/${fileName}`, '@microbuild/lib', registry.version);\n await fs.ensureDir(path.dirname(targetPath));\n await fs.writeFile(targetPath, content);\n } else {\n spinner.warn(`Source file not found: ${file.source}`);\n }\n }\n }\n\n config.installedLib.push(moduleName);\n spinner.succeed(`Installed lib: ${moduleName}`);\n return true;\n}\n\n/**\n * Dry run info for component preview\n */\ninterface DryRunInfo {\n component: string;\n files: { source: string; target: string }[];\n dependencies: string[];\n libDependencies: string[];\n}\n\n/**\n * Copy and transform a component\n */\nasync function copyComponent(\n component: ComponentEntry,\n registry: Registry,\n config: Config,\n cwd: string,\n overwrite: boolean,\n spinner: Ora,\n installing = new Set<string>(), // Track components being installed to prevent circular deps\n dryRun = false, // Preview mode - don't write files\n dryRunInfo?: DryRunInfo[] // Collect dry run info\n): Promise<boolean> {\n // Check for circular dependency\n if (installing.has(component.name)) {\n return true; // Already being installed in this call stack\n }\n \n // Check if already installed\n if (config.installedComponents.includes(component.name) && !overwrite && !dryRun) {\n // In non-interactive/batch mode (--all, bootstrap), silently skip already-installed components\n if (installing.has('__nonInteractive__')) {\n return true;\n }\n const { shouldOverwrite } = await prompts({\n type: 'confirm',\n name: 'shouldOverwrite',\n message: `${component.title} already installed. Overwrite?`,\n initial: false,\n });\n\n if (!shouldOverwrite) {\n spinner.info(`Skipped ${component.title}`);\n return false;\n }\n }\n\n // Mark as being installed to prevent circular deps\n installing.add(component.name);\n\n // Collect dry run info\n const info: DryRunInfo = {\n component: component.name,\n files: component.files.map(f => ({ source: f.source, target: f.target })),\n dependencies: component.dependencies,\n libDependencies: component.internalDependencies,\n };\n\n // Install internal dependencies first (types, services, hooks)\n for (const dep of component.internalDependencies) {\n if (!config.installedLib.includes(dep)) {\n spinner.text = `Installing dependency: ${dep}...`;\n if (!dryRun) {\n await copyLibModule(dep, registry, config, cwd, spinner);\n }\n }\n }\n\n // Install registry dependencies (other components)\n if (component.registryDependencies) {\n for (const depName of component.registryDependencies) {\n if (!config.installedComponents.includes(depName) && !installing.has(depName)) {\n const depComponent = registry.components.find(c => c.name === depName);\n if (depComponent) {\n spinner.text = `Installing component dependency: ${depComponent.title}...`;\n await copyComponent(depComponent, registry, config, cwd, overwrite, spinner, installing, dryRun, dryRunInfo);\n }\n }\n }\n }\n\n // In dry run mode, just collect info and return\n if (dryRun) {\n if (dryRunInfo) {\n dryRunInfo.push(info);\n }\n spinner.info(`Would add ${component.title}`);\n return true;\n }\n\n // Copy component files\n for (const file of component.files) {\n const targetPath = path.join(\n config.srcDir ? path.join(cwd, 'src') : cwd,\n file.target\n );\n\n if (!(await sourceFileExists(file.source))) {\n spinner.warn(`Source not found: ${file.source}`);\n continue;\n }\n\n // Read and transform\n let content = await resolveSourceFile(file.source);\n content = transformImports(content, config, file.target);\n \n // Transform relative imports for flattened folder structure\n content = transformRelativeImports(content, file.source, file.target, config.aliases.components);\n \n // Apply VForm-specific transformations for files in vform folder\n if (component.name === 'vform' || file.target.includes('/vform/')) {\n content = transformVFormImports(content, file.source, file.target);\n }\n \n // Add origin header for maintainability\n content = addOriginHeader(content, component.name, '@microbuild/ui-interfaces', registry.version);\n\n // Ensure directory exists\n await fs.ensureDir(path.dirname(targetPath));\n \n // Write transformed file\n const ext = config.tsx ? '.tsx' : '.jsx';\n const finalPath = targetPath.replace(/\\.tsx?$/, ext);\n await fs.writeFile(finalPath, content);\n }\n\n // Track installation with version info\n if (!config.installedComponents.includes(component.name)) {\n config.installedComponents.push(component.name);\n }\n \n // Track component version\n if (!config.componentVersions) {\n config.componentVersions = {};\n }\n config.componentVersions[component.name] = {\n version: registry.version,\n installedAt: new Date().toISOString(),\n source: '@microbuild/ui-interfaces',\n };\n\n spinner.succeed(`Added ${component.title}`);\n return true;\n}\n\n/**\n * Generate components/ui/index.ts with exports for all installed components\n * This allows import { ComponentA, ComponentB } from '@/components/ui'\n * \n * Also detects duplicate named exports across files and warns the user.\n */\nasync function generateComponentsIndex(\n config: Config,\n cwd: string,\n registry: Registry,\n spinner: Ora\n): Promise<void> {\n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n const indexPath = path.join(componentsDir, 'index.ts');\n \n spinner.text = 'Generating components/ui/index.ts...';\n \n // Build export lines for each installed component\n const exportLines: string[] = [\n '/**',\n ' * Microbuild UI Components Index',\n ' * ',\n ' * Auto-generated by Microbuild CLI.',\n ' * Re-run \"microbuild add\" to update after adding new components.',\n ' */',\n '',\n ];\n \n // Use Set to track unique export paths and prevent duplicates\n const exportedPaths = new Set<string>();\n \n // Track named exports across files to detect duplicates\n const namedExportMap = new Map<string, string[]>(); // exportName -> [files]\n \n // Sort components alphabetically for consistent output\n const sortedComponents = [...config.installedComponents].sort();\n \n // Components with known SSR issues that should use wrappers\n const ssrUnsafeComponents: Record<string, string> = {\n 'input-block-editor': 'input-block-editor-wrapper',\n };\n \n // Track skipped components due to SSR wrappers\n const skippedForWrapper: string[] = [];\n \n for (const componentName of sortedComponents) {\n const component = registry.components.find(c => c.name === componentName);\n if (!component) continue;\n \n // Determine the export path based on component structure\n const mainFile = component.files[0];\n if (!mainFile) continue;\n \n const targetPath = mainFile.target;\n let exportPath: string;\n \n // Check if component is in a subfolder (e.g., vform/VForm.tsx) or flat (e.g., input.tsx)\n if (targetPath.includes('/vform/')) {\n // VForm is in a subfolder - export from index\n exportPath = './vform';\n } else {\n // Flat structure - export from kebab-case file\n const fileName = path.basename(targetPath, path.extname(targetPath));\n \n // Check for SSR wrapper replacements\n if (ssrUnsafeComponents[fileName]) {\n const wrapperPath = path.join(componentsDir, `${ssrUnsafeComponents[fileName]}.tsx`);\n if (fs.existsSync(wrapperPath)) {\n exportPath = `./${ssrUnsafeComponents[fileName]}`;\n skippedForWrapper.push(fileName);\n } else {\n exportPath = `./${fileName}`;\n }\n } else {\n exportPath = `./${fileName}`;\n }\n }\n \n // Only add if not already exported (prevents duplicates)\n if (!exportedPaths.has(exportPath)) {\n exportedPaths.add(exportPath);\n exportLines.push(`export * from '${exportPath}';`);\n \n // Check for named exports in the file\n const filePath = path.join(componentsDir, exportPath.slice(2) + '.tsx');\n if (fs.existsSync(filePath)) {\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const namedExportPattern = /export\\s+(?:const|function|class)\\s+(\\w+)/g;\n let match;\n while ((match = namedExportPattern.exec(content)) !== null) {\n const exportName = match[1];\n if (!namedExportMap.has(exportName)) {\n namedExportMap.set(exportName, []);\n }\n namedExportMap.get(exportName)!.push(exportPath);\n }\n } catch {\n // Ignore read errors\n }\n }\n }\n }\n \n // Write the index file\n await fs.writeFile(indexPath, exportLines.join('\\n') + '\\n');\n \n // Warn about duplicate named exports\n const duplicates = Array.from(namedExportMap.entries())\n .filter(([_, files]) => files.length > 1);\n \n if (duplicates.length > 0) {\n spinner.warn('Generated components/ui/index.ts (with duplicate warnings)');\n console.log(chalk.yellow('\\n⚠ Duplicate export names detected:'));\n for (const [exportName, files] of duplicates) {\n console.log(chalk.dim(` \"${exportName}\" exported from: ${files.join(', ')}`));\n }\n console.log(chalk.dim(' Consider using named imports or renaming exports.\\n'));\n } else {\n spinner.info('Generated components/ui/index.ts');\n }\n \n if (skippedForWrapper.length > 0) {\n console.log(chalk.dim(` ℹ Using SSR-safe wrappers for: ${skippedForWrapper.join(', ')}`));\n }\n}\n\n/**\n * Main add command\n */\nexport async function add(\n components: string[],\n options: {\n all?: boolean;\n withApi?: boolean;\n category?: string;\n overwrite?: boolean;\n dryRun?: boolean;\n nonInteractive?: boolean;\n cwd: string;\n }\n) {\n const { cwd, all, withApi, category, overwrite = false, dryRun = false, nonInteractive = false } = options;\n\n // Dry run mode header\n if (dryRun) {\n console.log(chalk.yellow('\\n🔍 Dry Run Mode - No files will be modified\\n'));\n }\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n console.log(chalk.red('\\n✗ microbuild.json not found. Run \"npx microbuild init\" first.\\n'));\n process.exit(1);\n }\n\n // Initialize componentVersions if not present\n if (!config.componentVersions) {\n config.componentVersions = {};\n }\n\n const registry = await getRegistry();\n\n // If --with-api flag is set, add api-routes and supabase-auth lib modules\n if (withApi || all) {\n console.log(chalk.bold('\\n🔌 Installing API routes and Supabase auth...\\n'));\n const spinner = ora('Processing lib modules...').start();\n \n // Install supabase-auth first (dependency of api-routes)\n if (registry.lib['supabase-auth'] && !config.installedLib.includes('supabase-auth')) {\n await copyLibModule('supabase-auth', registry, config, cwd, spinner);\n }\n \n // Install api-routes\n if (registry.lib['api-routes'] && !config.installedLib.includes('api-routes')) {\n await copyLibModule('api-routes', registry, config, cwd, spinner);\n }\n \n spinner.succeed('API routes and auth installed!');\n await saveConfig(cwd, config);\n }\n\n // Determine which components to add\n let componentsToAdd: ComponentEntry[] = [];\n\n if (all) {\n componentsToAdd = registry.components;\n } else if (category) {\n componentsToAdd = registry.components.filter(c => c.category === category);\n if (componentsToAdd.length === 0) {\n console.log(chalk.red(`\\n✗ No components found in category: ${category}\\n`));\n const categories = registry.categories.map(c => c.name).join(', ');\n console.log(chalk.dim(`Available categories: ${categories}\\n`));\n process.exit(1);\n }\n } else if (components.length > 0) {\n for (const name of components) {\n const component = findComponentWithSuggestions(name, registry);\n if (!component) {\n process.exit(1);\n }\n componentsToAdd.push(component);\n }\n } else {\n // Interactive selection\n const choices = registry.categories.map(cat => ({\n title: chalk.bold(cat.title),\n value: cat.name,\n description: cat.description,\n }));\n\n const { selectedCategory } = await prompts({\n type: 'select',\n name: 'selectedCategory',\n message: 'Select a category',\n choices,\n });\n\n if (!selectedCategory) {\n console.log(chalk.yellow('\\n✓ No category selected\\n'));\n return;\n }\n\n const categoryComponents = registry.components.filter(\n c => c.category === selectedCategory\n );\n\n const { selected } = await prompts({\n type: 'multiselect',\n name: 'selected',\n message: 'Select components to add',\n choices: categoryComponents.map(c => ({\n title: `${c.title} - ${c.description}`,\n value: c.name,\n selected: false,\n })),\n hint: '- Space to select. Return to submit',\n });\n\n componentsToAdd = registry.components.filter(c => selected?.includes(c.name));\n }\n\n if (componentsToAdd.length === 0) {\n console.log(chalk.yellow('\\n✓ No components selected\\n'));\n return;\n }\n\n // Dry run mode - show what would be installed\n if (dryRun) {\n console.log(chalk.bold(`\\n🔍 Dry Run: Would add ${componentsToAdd.length} component(s)\\n`));\n \n const dryRunInfo: DryRunInfo[] = [];\n const spinner = ora('Analyzing...').start();\n \n for (const component of componentsToAdd) {\n spinner.text = `Analyzing ${component.title}...`;\n await copyComponent(component, registry, config, cwd, overwrite, spinner, new Set(), true, dryRunInfo);\n }\n \n spinner.stop();\n \n // Display dry run summary\n console.log(chalk.bold('\\n📋 Files that would be created:\\n'));\n \n for (const info of dryRunInfo) {\n console.log(chalk.cyan(` ${info.component}:`));\n for (const file of info.files) {\n console.log(chalk.dim(` → ${file.target}`));\n }\n }\n \n // Show dependencies\n const allDryRunDeps = new Set<string>();\n dryRunInfo.forEach(info => info.dependencies.forEach(dep => allDryRunDeps.add(dep)));\n \n if (allDryRunDeps.size > 0) {\n console.log(chalk.bold('\\n📦 External dependencies needed:\\n'));\n Array.from(allDryRunDeps).forEach(dep => console.log(chalk.dim(` ${dep}`)));\n }\n \n console.log(chalk.dim('\\n Run without --dry-run to install components.\\n'));\n return;\n }\n\n console.log(chalk.bold(`\\n📦 Adding ${componentsToAdd.length} component(s)...\\n`));\n\n const spinner = ora('Processing...').start();\n const allDeps = new Set<string>();\n\n try {\n // Share a single installing Set across all components to prevent duplicate processing\n const sharedInstalling = new Set<string>();\n // Signal non-interactive mode so already-installed components are silently skipped\n if (nonInteractive || all) {\n sharedInstalling.add('__nonInteractive__');\n }\n\n for (const component of componentsToAdd) {\n spinner.text = `Adding ${component.title}...`;\n await copyComponent(component, registry, config, cwd, overwrite, spinner, sharedInstalling, false);\n \n // Collect external dependencies\n component.dependencies.forEach(dep => allDeps.add(dep));\n }\n\n // Update registry version\n config.registryVersion = registry.version;\n\n // Save updated config\n await saveConfig(cwd, config);\n\n // Generate components/ui/index.ts with all exports\n await generateComponentsIndex(config, cwd, registry, spinner);\n\n spinner.succeed('All components added!');\n\n // Run post-install validation to catch any issues (skip in non-interactive mode — bootstrap runs its own)\n if (!nonInteractive) {\n console.log(chalk.bold('\\n🔍 Running post-install validation...\\n'));\n try {\n await validate({ cwd, json: false });\n } catch {\n // Validation errors are already printed, continue with summary\n }\n }\n\n // Check for missing external dependencies\n console.log(chalk.bold('\\n📦 External dependencies...\\n'));\n\n const packageJsonPath = path.join(cwd, 'package.json');\n let missingDeps: string[] = [];\n\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = await fs.readJSON(packageJsonPath);\n const installed = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n missingDeps = Array.from(allDeps).filter(dep => !installed[dep]);\n } else {\n missingDeps = Array.from(allDeps);\n }\n\n if (missingDeps.length > 0) {\n console.log(chalk.yellow('⚠ Missing dependencies:'));\n missingDeps.forEach(dep => console.log(chalk.dim(` - ${dep}`)));\n \n // In non-interactive mode (bootstrap), auto-install without prompting\n let autoInstall = nonInteractive;\n if (!nonInteractive) {\n const answer = await prompts({\n type: 'confirm',\n name: 'autoInstall',\n message: 'Install missing dependencies automatically?',\n initial: true,\n });\n autoInstall = answer.autoInstall;\n }\n \n if (autoInstall) {\n const installSpinner = ora('Installing dependencies...').start();\n try {\n // Detect package manager\n const hasYarnLock = fs.existsSync(path.join(cwd, 'yarn.lock'));\n const hasPnpmLock = fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'));\n const hasBunLock = fs.existsSync(path.join(cwd, 'bun.lockb'));\n \n let installCmd: string;\n if (hasPnpmLock) {\n installCmd = `pnpm add ${missingDeps.join(' ')}`;\n } else if (hasYarnLock) {\n installCmd = `yarn add ${missingDeps.join(' ')}`;\n } else if (hasBunLock) {\n installCmd = `bun add ${missingDeps.join(' ')}`;\n } else {\n installCmd = `npm install ${missingDeps.join(' ')}`;\n }\n \n const { execSync } = await import('child_process');\n execSync(installCmd, { cwd, stdio: 'pipe' });\n installSpinner.succeed('Dependencies installed!');\n } catch (error) {\n installSpinner.fail('Failed to install dependencies');\n console.log(chalk.dim('\\nInstall manually with:'));\n console.log(chalk.cyan(` pnpm add ${missingDeps.join(' ')}\\n`));\n }\n } else {\n console.log(chalk.dim('\\nInstall manually with:'));\n console.log(chalk.cyan(` pnpm add ${missingDeps.join(' ')}\\n`));\n }\n } else {\n console.log(chalk.green('✓ All external dependencies installed\\n'));\n }\n\n // Summary\n console.log(chalk.bold.blue('📋 Summary:\\n'));\n console.log(chalk.dim('Components installed:'));\n config.installedComponents.forEach(name => {\n console.log(chalk.green(` ✓ ${name}`));\n });\n \n if (config.installedLib.length > 0) {\n console.log(chalk.dim('\\nLib modules installed:'));\n config.installedLib.forEach(name => {\n console.log(chalk.green(` ✓ ${name}`));\n });\n }\n\n console.log(chalk.bold.green('\\n✨ Done!\\n'));\n console.log(chalk.dim('Components are now part of your codebase. Customize freely!'));\n console.log(chalk.dim(`Location: ${config.aliases.components}\\n`));\n\n } catch (error) {\n spinner.fail('Failed to add components');\n console.error(chalk.red(error));\n process.exit(1);\n }\n}\n","/**\n * Import Transformer\n * \n * Transforms @microbuild/* imports to local path aliases.\n * This is the core of the Copy & Own model - making copied files self-contained.\n */\n\nimport type { Config } from './init.js';\n\n/**\n * Import replacement mapping\n */\ninterface ImportMapping {\n from: RegExp;\n to: string;\n}\n\n/**\n * Get import mappings based on config\n */\nexport function getImportMappings(config: Config): ImportMapping[] {\n const libAlias = config.aliases.lib;\n const componentsAlias = config.aliases.components;\n\n return [\n // Types\n {\n from: /from ['\"]@microbuild\\/types['\"]/g,\n to: `from '${libAlias}/types'`,\n },\n {\n from: /from ['\"]@microbuild\\/types\\/([^'\"]+)['\"]/g,\n to: `from '${libAlias}/types/$1'`,\n },\n // Services\n {\n from: /from ['\"]@microbuild\\/services['\"]/g,\n to: `from '${libAlias}/services'`,\n },\n {\n from: /from ['\"]@microbuild\\/services\\/([^'\"]+)['\"]/g,\n to: `from '${libAlias}/services/$1'`,\n },\n // Hooks\n {\n from: /from ['\"]@microbuild\\/hooks['\"]/g,\n to: `from '${libAlias}/hooks'`,\n },\n {\n from: /from ['\"]@microbuild\\/hooks\\/([^'\"]+)['\"]/g,\n to: `from '${libAlias}/hooks/$1'`,\n },\n // UI Interfaces (component to component imports)\n {\n from: /from ['\"]@microbuild\\/ui-interfaces['\"]/g,\n to: `from '${componentsAlias}'`,\n },\n {\n from: /from ['\"]@microbuild\\/ui-interfaces\\/([^'\"]+)['\"]/g,\n to: `from '${componentsAlias}/$1'`,\n },\n // UI Collections (component to component imports)\n {\n from: /from ['\"]@microbuild\\/ui-collections['\"]/g,\n to: `from '${componentsAlias}'`,\n },\n {\n from: /from ['\"]@microbuild\\/ui-collections\\/([^'\"]+)['\"]/g,\n to: `from '${componentsAlias}/$1'`,\n },\n // Utils\n {\n from: /from ['\"]@microbuild\\/utils['\"]/g,\n to: `from '${libAlias}/utils'`,\n },\n {\n from: /from ['\"]@microbuild\\/utils\\/([^'\"]+)['\"]/g,\n to: `from '${libAlias}/utils/$1'`,\n },\n // UI Form (VForm and related components)\n {\n from: /from ['\"]@microbuild\\/ui-form['\"]/g,\n to: `from '${componentsAlias}/vform'`,\n },\n {\n from: /from ['\"]@microbuild\\/ui-form\\/([^'\"]+)['\"]/g,\n to: `from '${componentsAlias}/vform/$1'`,\n },\n // Import type statements\n {\n from: /import type \\{([^}]+)\\} from ['\"]@microbuild\\/types['\"]/g,\n to: `import type {$1} from '${libAlias}/types'`,\n },\n {\n from: /import type \\{([^}]+)\\} from ['\"]@microbuild\\/hooks['\"]/g,\n to: `import type {$1} from '${libAlias}/hooks'`,\n },\n {\n from: /import type \\{([^}]+)\\} from ['\"]@microbuild\\/services['\"]/g,\n to: `import type {$1} from '${libAlias}/services'`,\n },\n // Import type for utils\n {\n from: /import type \\{([^}]+)\\} from ['\"]@microbuild\\/utils['\"]/g,\n to: `import type {$1} from '${libAlias}/utils'`,\n },\n // Import type for ui-form\n {\n from: /import type \\{([^}]+)\\} from ['\"]@microbuild\\/ui-form['\"]/g,\n to: `import type {$1} from '${componentsAlias}/vform'`,\n },\n // Dynamic imports - import('@microbuild/services') etc.\n {\n from: /import\\s*\\(\\s*['\"]@microbuild\\/services['\"]\\s*\\)/g,\n to: `import('${libAlias}/services')`,\n },\n {\n from: /import\\s*\\(\\s*['\"]@microbuild\\/hooks['\"]\\s*\\)/g,\n to: `import('${libAlias}/hooks')`,\n },\n {\n from: /import\\s*\\(\\s*['\"]@microbuild\\/types['\"]\\s*\\)/g,\n to: `import('${libAlias}/types')`,\n },\n {\n from: /import\\s*\\(\\s*['\"]@microbuild\\/utils['\"]\\s*\\)/g,\n to: `import('${libAlias}/utils')`,\n },\n ];\n}\n\n/**\n * Transform a file's content by replacing @microbuild/* imports with local paths\n * Also normalizes import paths to use consistent kebab-case file names\n * \n * @param content - File content to transform\n * @param config - Microbuild config\n * @param targetPath - Optional target path for context-aware transformations\n */\nexport function transformImports(content: string, config: Config, targetPath?: string): string {\n const mappings = getImportMappings(config);\n let result = content;\n\n for (const mapping of mappings) {\n result = result.replace(mapping.from, mapping.to);\n }\n\n // Normalize any PascalCase import paths to kebab-case (skips VForm folder)\n result = normalizeImportPaths(result, targetPath);\n\n return result;\n}\n\n/**\n * Transform internal component imports\n * e.g., import { CollectionList } from '@microbuild/ui-collections' \n * -> import { CollectionList } from '@/components/ui/collection-list'\n */\nexport function transformComponentImports(\n content: string,\n _componentName: string,\n config: Config\n): string {\n const componentsAlias = config.aliases.components;\n \n // Handle default exports that reference other components\n const componentImportPattern = new RegExp(\n `from ['\"]\\\\.\\\\.?\\\\/([^'\"]+)['\"\"]`,\n 'g'\n );\n \n return content.replace(componentImportPattern, (match, importPath) => {\n // If it's a relative import to another component file, transform it\n if (importPath.startsWith('..')) {\n // Extract component folder name and convert to kebab-case\n const parts = importPath.split('/');\n const componentFolder = parts[parts.length - 1] || parts[parts.length - 2];\n const kebabName = toKebabCase(componentFolder);\n return `from '${componentsAlias}/${kebabName}'`;\n }\n return match;\n });\n}\n\n/**\n * Convert PascalCase or camelCase to kebab-case\n */\nexport function toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/**\n * Convert kebab-case to PascalCase\n */\nexport function toPascalCase(str: string): string {\n return str\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n\n/**\n * Normalize import paths to use consistent kebab-case file names\n * Fixes issues where imports use PascalCase but files are kebab-case\n * \n * EXCEPTION: VForm folder preserves PascalCase imports because its files\n * are copied with original casing (VForm.tsx, FormField.tsx, etc.)\n * \n * Examples:\n * ./InputBlockEditor → ./input-block-editor\n * ./FileImage → ./file-image\n * ../Upload/Upload → ./upload\n * dynamic import('./InputBlockEditor') → import('./input-block-editor')\n * \n * Files marked with @microbuild-preserve-casing are not normalized.\n */\nexport function normalizeImportPaths(content: string, targetPath?: string): string {\n // Skip normalization for files that preserve casing\n if (content.includes('@microbuild-preserve-casing')) {\n return content;\n }\n \n // Skip normalization for VForm folder files (they use PascalCase filenames)\n if (targetPath && (\n targetPath.includes('/vform/') || \n targetPath.includes('/ui-form/') ||\n targetPath.includes('VForm') ||\n targetPath.includes('FormField')\n )) {\n return content;\n }\n \n // Pattern matches relative imports with PascalCase filenames\n // e.g., from './InputBlockEditor' or from '../Upload/Upload'\n const pascalCaseImportPattern = /from\\s+['\"](\\.\\.\\/?|\\.\\/)([A-Z][a-zA-Z0-9]*(?:\\/[A-Z][a-zA-Z0-9]*)?)['\"]/g;\n \n let result = content.replace(pascalCaseImportPattern, (_match, prefix, importPath) => {\n // Extract the last component (filename) from the path\n const parts = importPath.split('/');\n const fileName = parts[parts.length - 1];\n \n // Convert to kebab-case\n const kebabFileName = toKebabCase(fileName);\n \n // If it was a nested path like '../Upload/Upload', flatten to './upload'\n if (prefix === '../' && parts.length >= 1) {\n return `from './${kebabFileName}'`;\n }\n \n // Otherwise, just convert the filename\n return `from '${prefix}${kebabFileName}'`;\n });\n \n // Handle dynamic imports: import('./InputBlockEditor') → import('./input-block-editor')\n // This pattern matches: import('./ComponentName') or import(\"./ComponentName\")\n const dynamicImportPattern = /import\\s*\\(\\s*['\"](\\.\\/)([A-Z][a-zA-Z0-9]*)['\"]\\s*\\)/g;\n \n result = result.replace(dynamicImportPattern, (_match, prefix, componentName) => {\n const kebabName = toKebabCase(componentName);\n return `import('${prefix}${kebabName}')`;\n });\n \n return result;\n}\n\n/**\n * Check if content has @microbuild/* imports\n */\nexport function hasMicrobuildImports(content: string): boolean {\n return /@microbuild\\/(types|services|hooks|utils|ui-interfaces|ui-collections|ui-form)/.test(content);\n}\n\n/**\n * Known relative import mappings for ui-interfaces components\n * Maps source folder imports to target file imports when flattening structure\n */\nconst RELATIVE_IMPORT_MAPPINGS: Record<string, string> = {\n // file-image/FileImage.tsx imports from ../upload → ./upload\n '../upload': './upload',\n // file/File.tsx imports from ../upload → ./upload\n // files/Files.tsx imports from ../upload → ./upload\n // list-o2m imports from ../upload → ./upload\n};\n\n/**\n * Known relative import mappings for VForm components (nested folder structure)\n * VForm keeps its folder structure, so imports like '../types' need to stay as '../types'\n * but imports from './types' when in the same folder should remain './types'\n */\nconst VFORM_IMPORT_MAPPINGS: Record<string, Record<string, string>> = {\n // Files in vform/components/ folder\n 'components': {\n '../types': '../types',\n './types': '../types',\n },\n // Files in vform/utils/ folder \n 'utils': {\n '../types': '../types',\n './types': '../types',\n },\n // Files in vform/ root folder\n 'root': {\n './types': './types',\n },\n};\n\n/**\n * Transform VForm-specific relative imports based on source file location\n */\nexport function transformVFormImports(\n content: string,\n sourceFile: string,\n _targetFile: string\n): string {\n let result = content;\n \n // Determine which subfolder this file is in\n let folder = 'root';\n if (sourceFile.includes('/components/')) {\n folder = 'components';\n } else if (sourceFile.includes('/utils/')) {\n folder = 'utils';\n }\n \n const mappings = VFORM_IMPORT_MAPPINGS[folder] || {};\n \n for (const [from, to] of Object.entries(mappings)) {\n const importPattern = new RegExp(\n `(from\\\\s+['\"])${from.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}(['\"])`,\n 'g'\n );\n result = result.replace(importPattern, `$1${to}$2`);\n }\n \n return result;\n}\n\n/**\n * Transform relative imports when flattening component folder structure\n * e.g., file-image/FileImage.tsx has `from '../upload'` \n * which becomes `from './upload'` when copied to components/ui/file-image.tsx\n */\nexport function transformRelativeImports(\n content: string, \n _sourceFile: string,\n _targetFile: string,\n _componentsAlias: string\n): string {\n let result = content;\n \n // Apply known mappings\n for (const [from, to] of Object.entries(RELATIVE_IMPORT_MAPPINGS)) {\n // Match import statements with this relative path\n const importPattern = new RegExp(\n `(from\\\\s+['\"])${from.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}(['\"])`,\n 'g'\n );\n result = result.replace(importPattern, `$1${to}$2`);\n }\n \n // Transform sibling component imports (../component-name → ./component-name)\n // This handles cases like: import { Upload } from '../upload' → import { Upload } from './upload'\n const siblingImportPattern = /from\\s+['\"](\\.\\.\\/([a-z][-a-z0-9]*)(?:\\/[A-Z][a-zA-Z]*)?)['\"]/g;\n result = result.replace(siblingImportPattern, (_match, _fullPath, componentFolder) => {\n // Convert to kebab-case and use relative import\n const kebabName = toKebabCase(componentFolder);\n return `from './${kebabName}'`;\n });\n\n return result;\n}\n\n/**\n * Extract which @microbuild/* packages are imported\n */\nexport function extractMicrobuildDependencies(content: string): string[] {\n const deps: Set<string> = new Set();\n \n const patterns = [\n /@microbuild\\/types/g,\n /@microbuild\\/services/g,\n /@microbuild\\/hooks/g,\n /@microbuild\\/ui-interfaces/g,\n /@microbuild\\/ui-collections/g,\n ];\n\n for (const pattern of patterns) {\n if (pattern.test(content)) {\n const match = pattern.source.match(/@microbuild\\/([^/]+)/);\n if (match) {\n // Map package names to lib names\n const libName = match[1].replace('ui-', '');\n if (['types', 'services', 'hooks'].includes(libName)) {\n deps.add(libName);\n }\n }\n }\n }\n\n return Array.from(deps);\n}\n\n/**\n * Add \"use client\" directive if not present (for Next.js App Router)\n */\nexport function ensureUseClient(content: string): string {\n const trimmed = content.trim();\n if (trimmed.startsWith('\"use client\"') || trimmed.startsWith(\"'use client'\")) {\n return content;\n }\n return `\"use client\";\\n\\n${content}`;\n}\n\n/**\n * Remove \"use client\" directive if present\n */\nexport function removeUseClient(content: string): string {\n return content\n .replace(/^[\"']use client[\"'];\\s*\\n*/m, '')\n .trim();\n}\n\n/**\n * Generate origin header comment for copied files\n */\nexport function generateOriginHeader(\n componentName: string,\n sourcePackage: string,\n version: string = '1.0.0'\n): string {\n const timestamp = new Date().toISOString().split('T')[0];\n return `/**\n * @microbuild-origin ${sourcePackage}/${componentName}\n * @microbuild-version ${version}\n * @microbuild-date ${timestamp}\n * \n * This file was copied from Microbuild UI Packages.\n * To update, run: npx @microbuild/cli add ${componentName} --overwrite\n * \n * Docs: https://microbuild.dev/components/${componentName}\n */\n\n`;\n}\n\n/**\n * Add origin header to file content\n */\nexport function addOriginHeader(\n content: string,\n componentName: string,\n sourcePackage: string,\n version: string = '1.0.0'\n): string {\n const header = generateOriginHeader(componentName, sourcePackage, version);\n \n // If file has \"use client\", insert header after it\n const useClientMatch = content.match(/^([\"']use client[\"'];?\\s*\\n)/);\n if (useClientMatch) {\n return useClientMatch[1] + header + content.slice(useClientMatch[0].length);\n }\n \n return header + content;\n}\n\n/**\n * Check if file has microbuild origin header\n */\nexport function hasMicrobuildOrigin(content: string): boolean {\n return content.includes('@microbuild-origin');\n}\n\n/**\n * Extract origin info from file\n */\nexport function extractOriginInfo(content: string): {\n origin?: string;\n version?: string;\n date?: string;\n} | null {\n const originMatch = content.match(/@microbuild-origin\\s+([^\\n*]+)/);\n const versionMatch = content.match(/@microbuild-version\\s+([^\\n*]+)/);\n const dateMatch = content.match(/@microbuild-date\\s+([^\\n*]+)/);\n \n if (!originMatch) return null;\n \n return {\n origin: originMatch[1].trim(),\n version: versionMatch?.[1].trim(),\n date: dateMatch?.[1].trim(),\n };\n}\n","/**\n * Microbuild CLI - Validate Command\n * \n * Validates the Microbuild installation in a project:\n * - Checks for untransformed @microbuild/* imports\n * - Checks for broken relative imports (file not found)\n * - Verifies all component files exist\n * - Checks for missing CSS files\n * - Validates required lib modules are present\n * - Checks for React 19 / Next.js 16 compatibility issues\n * - Runs TypeScript type checking on component files\n * - Suggests fixes for common issues\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport fg from 'fast-glob';\nimport { execSync } from 'child_process';\nimport { type Config, loadConfig } from './init.js';\n\ninterface ValidationResult {\n valid: boolean;\n errors: ValidationError[];\n warnings: ValidationWarning[];\n suggestions: string[];\n}\n\ninterface ValidationError {\n file: string;\n line?: number;\n message: string;\n code: string;\n}\n\ninterface ValidationWarning {\n file: string;\n line?: number;\n message: string;\n code: string;\n}\n\n/**\n * Check for untransformed @microbuild/* imports\n */\nasync function checkUntransformedImports(\n cwd: string,\n config: Config\n): Promise<ValidationError[]> {\n const errors: ValidationError[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const patterns = [\n path.join(srcDir, 'components/**/*.{ts,tsx,js,jsx}'),\n path.join(srcDir, 'lib/microbuild/**/*.{ts,tsx,js,jsx}'),\n ];\n \n for (const pattern of patterns) {\n const files = await fg(pattern, { ignore: ['**/node_modules/**'] });\n \n for (const file of files) {\n const content = await fs.readFile(file, 'utf-8');\n const lines = content.split('\\n');\n \n lines.forEach((line, index) => {\n // Check for @microbuild/* imports (not in comments)\n if (\n (line.includes(\"from '@microbuild/\") || line.includes('from \"@microbuild/')) && \n !line.trim().startsWith('//') &&\n !line.trim().startsWith('*')\n ) {\n errors.push({\n file: path.relative(cwd, file),\n line: index + 1,\n message: `Untransformed import: ${line.trim()}`,\n code: 'UNTRANSFORMED_IMPORT',\n });\n }\n });\n }\n }\n \n return errors;\n}\n\n/**\n * Check for missing CSS files that components might need\n */\nasync function checkMissingCssFiles(\n cwd: string,\n config: Config\n): Promise<ValidationWarning[]> {\n const warnings: ValidationWarning[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n \n // Components that require CSS files\n const cssRequirements: Record<string, string> = {\n 'input-block-editor.tsx': 'InputBlockEditor.css',\n 'rich-text-html.tsx': 'RichTextHTML.css',\n 'rich-text-markdown.tsx': 'RichTextMarkdown.css',\n };\n \n for (const [component, cssFile] of Object.entries(cssRequirements)) {\n const componentPath = path.join(componentsDir, component);\n const cssPath = path.join(componentsDir, cssFile);\n \n if (fs.existsSync(componentPath) && !fs.existsSync(cssPath)) {\n warnings.push({\n file: cssFile,\n message: `Missing CSS file for ${component}`,\n code: 'MISSING_CSS',\n });\n }\n }\n \n return warnings;\n}\n\n/**\n * Check for missing lib modules\n */\nasync function checkLibModules(\n cwd: string,\n config: Config\n): Promise<ValidationError[]> {\n const errors: ValidationError[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const libDir = path.join(srcDir, 'lib/microbuild');\n \n // Required lib modules based on installed components\n const requiredModules: Record<string, string[]> = {\n types: ['types/index.ts', 'types/core.ts'],\n services: ['services/index.ts', 'services/api-request.ts'],\n hooks: ['hooks/index.ts'],\n utils: ['utils.ts', 'field-interface-mapper.ts'],\n };\n \n for (const [module, files] of Object.entries(requiredModules)) {\n if (config.installedLib.includes(module)) {\n for (const file of files) {\n const filePath = path.join(libDir, file);\n if (!fs.existsSync(filePath)) {\n errors.push({\n file: `lib/microbuild/${file}`,\n message: `Missing required file for ${module} module`,\n code: 'MISSING_LIB_FILE',\n });\n }\n }\n }\n }\n \n // Check for interface-registry.ts if define-interface.ts exists\n const defineInterfacePath = path.join(libDir, 'define-interface.ts');\n const interfaceRegistryPath = path.join(libDir, 'interface-registry.ts');\n \n if (fs.existsSync(defineInterfacePath) && !fs.existsSync(interfaceRegistryPath)) {\n errors.push({\n file: 'lib/microbuild/interface-registry.ts',\n message: 'Missing interface-registry.ts (required by define-interface.ts)',\n code: 'MISSING_INTERFACE_REGISTRY',\n });\n }\n \n return errors;\n}\n\n/**\n * Check for SSR-unsafe component usage\n */\nasync function checkSsrIssues(\n cwd: string,\n config: Config\n): Promise<ValidationWarning[]> {\n const warnings: ValidationWarning[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n \n // Check if InputBlockEditor is exported without SSR protection\n const indexPath = path.join(componentsDir, 'index.ts');\n \n if (fs.existsSync(indexPath)) {\n const content = await fs.readFile(indexPath, 'utf-8');\n \n // Check for direct InputBlockEditor export without wrapper\n if (\n content.includes('InputBlockEditor') && \n !content.includes('input-block-editor-wrapper') &&\n content.includes(\"from './input-block-editor'\")\n ) {\n warnings.push({\n file: 'components/ui/index.ts',\n message: 'InputBlockEditor exported directly may cause SSR errors. Use input-block-editor-wrapper instead.',\n code: 'SSR_UNSAFE_EXPORT',\n });\n }\n }\n \n return warnings;\n}\n\n/**\n * Check for missing API routes\n */\nasync function checkApiRoutes(cwd: string): Promise<ValidationWarning[]> {\n const warnings: ValidationWarning[] = [];\n \n // Check for srcDir vs non-srcDir project structure\n const srcDir = fs.existsSync(path.join(cwd, 'src/app')) \n ? path.join(cwd, 'src') \n : cwd;\n const appDir = path.join(srcDir, 'app');\n const apiDir = path.join(appDir, 'api');\n \n // Required API routes for DaaS integration\n const requiredRoutes = [\n { path: 'fields/[collection]/route.ts', description: 'Fetch collection field schemas' },\n { path: 'items/[collection]/route.ts', description: 'List/Create items' },\n { path: 'items/[collection]/[id]/route.ts', description: 'Get/Update/Delete item' },\n ];\n \n // Optional but recommended routes\n const recommendedRoutes = [\n { path: 'relations/route.ts', description: 'Relation definitions (for M2M/M2O/O2M)' },\n { path: 'files/route.ts', description: 'File operations (for file components)' },\n ];\n \n if (!fs.existsSync(apiDir)) {\n warnings.push({\n file: 'app/api/',\n message: 'Missing API directory. Forms require API routes to fetch data from DaaS.',\n code: 'MISSING_API_DIR',\n });\n return warnings;\n }\n \n for (const route of requiredRoutes) {\n const routePath = path.join(apiDir, route.path);\n if (!fs.existsSync(routePath)) {\n warnings.push({\n file: `app/api/${route.path}`,\n message: `Missing required API route: ${route.description}`,\n code: 'MISSING_API_ROUTE',\n });\n }\n }\n \n for (const route of recommendedRoutes) {\n const routePath = path.join(apiDir, route.path);\n if (!fs.existsSync(routePath)) {\n warnings.push({\n file: `app/api/${route.path}`,\n message: `Missing recommended API route: ${route.description}`,\n code: 'MISSING_OPTIONAL_API_ROUTE',\n });\n }\n }\n \n // Check for auth-headers helper\n const authHeadersPath = path.join(srcDir, 'lib/api/auth-headers.ts');\n if (!fs.existsSync(authHeadersPath)) {\n warnings.push({\n file: 'lib/api/auth-headers.ts',\n message: 'Missing auth-headers helper. API routes need this to forward auth tokens.',\n code: 'MISSING_AUTH_HELPER',\n });\n }\n \n return warnings;\n}\n\n/**\n * Check for broken relative imports (file not found)\n */\nasync function checkBrokenRelativeImports(\n cwd: string,\n config: Config\n): Promise<ValidationError[]> {\n const errors: ValidationError[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const patterns = [\n path.join(srcDir, 'components/**/*.{ts,tsx,js,jsx}'),\n path.join(srcDir, 'lib/microbuild/**/*.{ts,tsx,js,jsx}'),\n ];\n \n // Regex to extract relative imports\n const relativeImportPattern = /from\\s+['\"](\\.\\.?\\/[^'\"]+)['\"]/g;\n \n for (const pattern of patterns) {\n const files = await fg(pattern, { ignore: ['**/node_modules/**'] });\n \n for (const file of files) {\n const content = await fs.readFile(file, 'utf-8');\n const lines = content.split('\\n');\n const fileDir = path.dirname(file);\n \n lines.forEach((line, index) => {\n // Skip comments\n if (line.trim().startsWith('//') || line.trim().startsWith('*')) {\n return;\n }\n \n let match;\n relativeImportPattern.lastIndex = 0;\n while ((match = relativeImportPattern.exec(line)) !== null) {\n const importPath = match[1];\n \n // Try to resolve the import\n const possibleExtensions = ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.tsx', '/index.js', '/index.jsx', ''];\n const absolutePath = path.resolve(fileDir, importPath);\n \n const exists = possibleExtensions.some(ext => \n fs.existsSync(absolutePath + ext)\n );\n \n if (!exists) {\n errors.push({\n file: path.relative(cwd, file),\n line: index + 1,\n message: `Cannot find module '${importPath}'`,\n code: 'BROKEN_IMPORT',\n });\n }\n }\n });\n }\n }\n \n return errors;\n}\n\n/**\n * Check for React 19 / Next.js 16 compatibility issues\n */\nasync function checkReact19Compatibility(\n cwd: string,\n config: Config\n): Promise<ValidationWarning[]> {\n const warnings: ValidationWarning[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n \n // Check for component={Link} patterns in Server Components\n const appDir = path.join(srcDir, 'app');\n if (!fs.existsSync(appDir)) {\n return warnings;\n }\n \n const serverComponentPattern = path.join(appDir, '**/page.tsx');\n const files = await fg(serverComponentPattern, { ignore: ['**/node_modules/**'] });\n \n // Pattern for component prop passing (React 19 breaking change)\n const componentPropPattern = /component=\\{[A-Z][a-zA-Z]*\\}/;\n \n for (const file of files) {\n const content = await fs.readFile(file, 'utf-8');\n \n // Skip if file has \"use client\" directive\n if (content.includes('\"use client\"') || content.includes(\"'use client'\")) {\n continue;\n }\n \n const lines = content.split('\\n');\n lines.forEach((line, index) => {\n if (componentPropPattern.test(line)) {\n warnings.push({\n file: path.relative(cwd, file),\n line: index + 1,\n message: 'Passing component as prop in Server Component may cause React 19 errors. Add \"use client\" or use wrapper pattern.',\n code: 'REACT19_COMPONENT_PROP',\n });\n }\n });\n }\n \n return warnings;\n}\n\n/**\n * Check for duplicate exports in index.ts\n */\nasync function checkDuplicateExports(\n cwd: string,\n config: Config\n): Promise<ValidationWarning[]> {\n const warnings: ValidationWarning[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const indexPath = path.join(srcDir, 'components/ui/index.ts');\n \n if (!fs.existsSync(indexPath)) {\n return warnings;\n }\n \n const content = await fs.readFile(indexPath, 'utf-8');\n const exportPattern = /export \\* from ['\"]\\.\\/([^'\"]+)['\"]/g;\n const exports = new Map<string, number>();\n \n let match;\n let lineNum = 0;\n const lines = content.split('\\n');\n \n for (const line of lines) {\n lineNum++;\n exportPattern.lastIndex = 0;\n while ((match = exportPattern.exec(line)) !== null) {\n const exportPath = match[1];\n if (exports.has(exportPath)) {\n warnings.push({\n file: 'components/ui/index.ts',\n line: lineNum,\n message: `Duplicate export from './${exportPath}' (first at line ${exports.get(exportPath)})`,\n code: 'DUPLICATE_EXPORT',\n });\n } else {\n exports.set(exportPath, lineNum);\n }\n }\n }\n \n // Check for conflicting named exports across files\n const componentsDir = path.join(srcDir, 'components/ui');\n const namedExports = new Map<string, { file: string; line: number }>();\n \n for (const [exportFile] of exports) {\n const filePath = path.join(componentsDir, exportFile + '.tsx');\n if (!fs.existsSync(filePath)) continue;\n \n const fileContent = await fs.readFile(filePath, 'utf-8');\n const namedExportPattern = /export\\s+(?:const|function|class|type|interface|enum)\\s+(\\w+)/g;\n \n let namedMatch;\n while ((namedMatch = namedExportPattern.exec(fileContent)) !== null) {\n const exportName = namedMatch[1];\n \n if (namedExports.has(exportName)) {\n const firstExport = namedExports.get(exportName)!;\n warnings.push({\n file: `components/ui/${exportFile}.tsx`,\n message: `Conflicting export '${exportName}' also exported from '${firstExport.file}'. This will cause 'export *' conflicts in index.ts`,\n code: 'CONFLICTING_NAMED_EXPORT',\n });\n } else {\n namedExports.set(exportName, { file: exportFile, line: 0 });\n }\n }\n }\n \n return warnings;\n}\n\n/**\n * Run TypeScript type checking on component files\n */\nasync function checkTypeScriptErrors(\n cwd: string,\n config: Config\n): Promise<ValidationError[]> {\n const errors: ValidationError[] = [];\n \n // Check if tsconfig.json exists\n const tsconfigPath = path.join(cwd, 'tsconfig.json');\n if (!fs.existsSync(tsconfigPath)) {\n return errors; // Skip if no tsconfig\n }\n \n // Check if TypeScript is available\n try {\n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n \n if (!fs.existsSync(componentsDir)) {\n return errors;\n }\n \n // Run tsc with --noEmit on specific files\n const result = execSync(\n `npx tsc --noEmit --skipLibCheck --pretty false 2>&1 || true`,\n { cwd, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 }\n );\n \n // Parse TypeScript output\n // Format: filename(line,col): error TS####: message\n const tsErrorPattern = /^(.+?)\\((\\d+),(\\d+)\\):\\s+(error|warning)\\s+(TS\\d+):\\s+(.+)$/gm;\n let match;\n \n while ((match = tsErrorPattern.exec(result)) !== null) {\n const [, file, line, , severity, tsCode, message] = match;\n const relativePath = path.relative(cwd, file);\n \n // Only include errors from components/ui or lib/microbuild\n if (relativePath.includes('components/ui') || relativePath.includes('lib/microbuild')) {\n if (severity === 'error') {\n errors.push({\n file: relativePath,\n line: parseInt(line, 10),\n message: `${tsCode}: ${message}`,\n code: 'TYPESCRIPT_ERROR',\n });\n }\n }\n }\n } catch {\n // TypeScript not available or other error - skip silently\n }\n \n return errors;\n}\n\n/**\n * Generate suggestions based on errors and warnings\n */\nfunction generateSuggestions(\n errors: ValidationError[],\n warnings: ValidationWarning[]\n): string[] {\n const suggestions: string[] = [];\n \n // TypeScript errors\n const tsErrorCount = errors.filter(e => e.code === 'TYPESCRIPT_ERROR').length;\n if (tsErrorCount > 0) {\n suggestions.push(\n `Fix ${tsErrorCount} TypeScript error(s) in component files`\n );\n }\n \n // Untransformed imports\n const untransformedCount = errors.filter(e => e.code === 'UNTRANSFORMED_IMPORT').length;\n if (untransformedCount > 0) {\n suggestions.push(\n `Fix ${untransformedCount} untransformed import(s) by running: pnpm cli add --all --overwrite --cwd .`\n );\n }\n \n // Broken imports\n const brokenImportCount = errors.filter(e => e.code === 'BROKEN_IMPORT').length;\n if (brokenImportCount > 0) {\n suggestions.push(\n `Fix ${brokenImportCount} broken import(s) by checking file paths or reinstalling components`\n );\n }\n \n // Missing lib files\n const missingLibCount = errors.filter(e => e.code === 'MISSING_LIB_FILE').length;\n if (missingLibCount > 0) {\n suggestions.push(\n `Reinstall lib modules with: pnpm cli add vform --overwrite --cwd .`\n );\n }\n \n // Missing interface registry\n if (errors.some(e => e.code === 'MISSING_INTERFACE_REGISTRY')) {\n suggestions.push(\n `Add missing interface-registry.ts by reinstalling utils module`\n );\n }\n \n // Missing CSS files\n const missingCssCount = warnings.filter(w => w.code === 'MISSING_CSS').length;\n if (missingCssCount > 0) {\n suggestions.push(\n `Copy missing CSS files from microbuild-ui-packages/packages/ui-interfaces/src/`\n );\n }\n \n // SSR issues\n if (warnings.some(w => w.code === 'SSR_UNSAFE_EXPORT')) {\n suggestions.push(\n `Update components/ui/index.ts to export InputBlockEditor from './input-block-editor-wrapper'`\n );\n }\n \n // Missing API routes\n const missingRouteCount = warnings.filter(w => w.code === 'MISSING_API_ROUTE').length;\n const missingApiDir = warnings.some(w => w.code === 'MISSING_API_DIR');\n const missingAuthHelper = warnings.some(w => w.code === 'MISSING_AUTH_HELPER');\n \n if (missingApiDir || missingRouteCount > 0 || missingAuthHelper) {\n suggestions.push(\n `Install API routes and auth helpers: pnpm cli add api-routes --cwd .`\n );\n }\n \n // React 19 compatibility\n const react19Count = warnings.filter(w => w.code === 'REACT19_COMPONENT_PROP').length;\n if (react19Count > 0) {\n suggestions.push(\n `Fix ${react19Count} React 19 compatibility issue(s): wrap component with \"use client\" or use Link directly`\n );\n }\n \n // Duplicate exports\n const duplicateCount = warnings.filter(w => w.code === 'DUPLICATE_EXPORT').length;\n if (duplicateCount > 0) {\n suggestions.push(\n `Remove ${duplicateCount} duplicate export(s) from components/ui/index.ts`\n );\n }\n \n return suggestions;\n}\n\n/**\n * Main validate command\n */\nexport async function validate(options: {\n cwd: string;\n json?: boolean;\n noExit?: boolean;\n}): Promise<ValidationResult | undefined> {\n const { cwd, json = false, noExit = false } = options;\n \n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n if (json) {\n console.log(JSON.stringify({\n valid: false,\n errors: [{ file: 'microbuild.json', message: 'Not found', code: 'NO_CONFIG' }],\n warnings: [],\n suggestions: ['Run \"npx microbuild init\" first'],\n }));\n } else {\n console.log(chalk.red('\\n✗ microbuild.json not found. Run \"npx microbuild init\" first.\\n'));\n }\n if (noExit) {\n return { valid: false, errors: [{ file: 'microbuild.json', message: 'Not found', code: 'NO_CONFIG' }], warnings: [], suggestions: ['Run \"npx microbuild init\" first'] };\n }\n process.exit(1);\n }\n \n const spinner = json ? null : ora('Validating Microbuild installation...').start();\n \n try {\n // Run all checks (TypeScript check is separate as it's slower)\n const [\n untransformedErrors,\n brokenImportErrors,\n missingCssWarnings,\n libModuleErrors,\n ssrWarnings,\n apiRouteWarnings,\n react19Warnings,\n duplicateExportWarnings,\n ] = await Promise.all([\n checkUntransformedImports(cwd, config),\n checkBrokenRelativeImports(cwd, config),\n checkMissingCssFiles(cwd, config),\n checkLibModules(cwd, config),\n checkSsrIssues(cwd, config),\n checkApiRoutes(cwd),\n checkReact19Compatibility(cwd, config),\n checkDuplicateExports(cwd, config),\n ]);\n \n // Run TypeScript check (slower, run separately)\n if (spinner) {\n spinner.text = 'Running TypeScript check...';\n }\n const tsErrors = await checkTypeScriptErrors(cwd, config);\n \n const errors = [...untransformedErrors, ...brokenImportErrors, ...libModuleErrors, ...tsErrors];\n const warnings = [...missingCssWarnings, ...ssrWarnings, ...apiRouteWarnings, ...react19Warnings, ...duplicateExportWarnings];\n const suggestions = generateSuggestions(errors, warnings);\n \n const result: ValidationResult = {\n valid: errors.length === 0,\n errors,\n warnings,\n suggestions,\n };\n \n if (noExit) {\n return result;\n }\n\n if (json) {\n console.log(JSON.stringify(result, null, 2));\n return result;\n }\n \n // Display results\n if (errors.length === 0 && warnings.length === 0) {\n spinner?.succeed(chalk.green('Microbuild installation is valid! ✓'));\n console.log(chalk.dim(`\\n ${config.installedComponents.length} components installed`));\n console.log(chalk.dim(` ${config.installedLib.length} lib modules installed\\n`));\n return result;\n }\n \n spinner?.stop();\n \n // Show errors\n if (errors.length > 0) {\n console.log(chalk.red(`\\n✗ Found ${errors.length} error(s):\\n`));\n errors.forEach(error => {\n const location = error.line ? `:${error.line}` : '';\n console.log(chalk.red(` ✗ ${error.file}${location}`));\n console.log(chalk.dim(` ${error.message}`));\n });\n }\n \n // Show warnings\n if (warnings.length > 0) {\n console.log(chalk.yellow(`\\n⚠ Found ${warnings.length} warning(s):\\n`));\n warnings.forEach(warning => {\n console.log(chalk.yellow(` ⚠ ${warning.file}`));\n console.log(chalk.dim(` ${warning.message}`));\n });\n }\n \n // Show suggestions\n if (suggestions.length > 0) {\n console.log(chalk.cyan('\\n💡 Suggestions:\\n'));\n suggestions.forEach((suggestion, i) => {\n console.log(chalk.cyan(` ${i + 1}. ${suggestion}`));\n });\n }\n \n console.log();\n \n if (errors.length > 0) {\n process.exit(1);\n }\n\n return result;\n } catch (error) {\n spinner?.fail('Validation failed');\n console.error(error);\n process.exit(1);\n }\n}\n","import chalk from 'chalk';\nimport { loadConfig } from './init.js';\nimport {\n getRegistry as fetchRegistry,\n type Registry,\n type ComponentEntry,\n} from '../resolver.js';\n\n// Load registry (local or remote via resolver)\nasync function getRegistry(): Promise<Registry> {\n try {\n return await fetchRegistry();\n } catch (err: any) {\n console.error(chalk.red('Failed to load registry:', err.message));\n process.exit(1);\n }\n}\n\nexport async function list(options: { category?: string; json?: boolean; cwd?: string }) {\n const { category, json, cwd = process.cwd() } = options;\n\n const registry = await getRegistry();\n const config = await loadConfig(cwd);\n \n let components = category\n ? registry.components.filter(c => c.category === category)\n : registry.components;\n\n if (json) {\n console.log(JSON.stringify(components, null, 2));\n return;\n }\n\n console.log(chalk.bold('\\n📦 Microbuild Components (Copy & Own)\\n'));\n console.log(chalk.dim('Components are copied to your project as source files.\\n'));\n\n // Group by category\n const byCategory = components.reduce((acc, c) => {\n if (!acc[c.category]) acc[c.category] = [];\n acc[c.category].push(c);\n return acc;\n }, {} as Record<string, ComponentEntry[]>);\n\n // Get category titles\n const categoryTitles = registry.categories.reduce((acc, cat) => {\n acc[cat.name] = cat.title;\n return acc;\n }, {} as Record<string, string>);\n\n for (const [cat, items] of Object.entries(byCategory)) {\n const catTitle = categoryTitles[cat] || cat.toUpperCase();\n console.log(chalk.bold.cyan(`\\n${catTitle}`));\n \n items.forEach(item => {\n const installed = config?.installedComponents.includes(item.name);\n const status = installed ? chalk.green('✓') : ' ';\n const name = item.name.padEnd(28);\n \n console.log(\n ` ${status} ${chalk.green(name)} ${chalk.dim(item.description)}`\n );\n \n // Show what lib modules are required\n if (item.internalDependencies.length > 0) {\n console.log(\n ` ${chalk.dim('requires:')} ${chalk.yellow(item.internalDependencies.join(', '))}`\n );\n }\n });\n }\n\n // Show categories summary\n console.log(chalk.bold('\\n📂 Categories'));\n registry.categories.forEach(cat => {\n const count = registry.components.filter(c => c.category === cat.name).length;\n console.log(` ${chalk.cyan(cat.name.padEnd(15))} ${count} components - ${chalk.dim(cat.description)}`);\n });\n\n // Show installed status\n if (config) {\n console.log(chalk.bold('\\n📋 Installed'));\n console.log(` Components: ${chalk.green(config.installedComponents.length)}`);\n console.log(` Lib modules: ${chalk.green(config.installedLib.length)} ${chalk.dim(`(${config.installedLib.join(', ') || 'none'})`)}`);\n }\n\n console.log(chalk.bold('\\n💡 Usage'));\n console.log(chalk.dim(' npx microbuild add input'));\n console.log(chalk.dim(' npx microbuild add input select-dropdown datetime'));\n console.log(chalk.dim(' npx microbuild add --category selection'));\n console.log(chalk.dim(' npx microbuild add --all\\n'));\n}\n","import fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { loadConfig, resolveAlias } from './init.js';\nimport { transformImports } from './transformer.js';\nimport {\n getRegistry as fetchRegistry,\n resolveSourceFile,\n sourceFileExists,\n type Registry,\n type FileMapping,\n type ComponentEntry,\n} from '../resolver.js';\n\nasync function getRegistry(): Promise<Registry> {\n try {\n return await fetchRegistry();\n } catch (err: any) {\n console.error(chalk.red('Failed to load registry:', err.message));\n process.exit(1);\n }\n}\n\nexport async function diff(component: string, options: { cwd: string }) {\n const { cwd } = options;\n\n console.log(chalk.bold(`\\n📋 Preview: ${component}\\n`));\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n console.log(chalk.red('✗ microbuild.json not found. Run \"npx microbuild init\" first.\\n'));\n process.exit(1);\n }\n\n // Find component\n const registry = await getRegistry();\n const comp = registry.components.find(\n c => c.name.toLowerCase() === component.toLowerCase() ||\n c.title.toLowerCase() === component.toLowerCase()\n );\n\n if (!comp) {\n console.log(chalk.red(`✗ Component not found: ${component}\\n`));\n console.log(chalk.dim('Run \"npx microbuild list\" to see available components.\\n'));\n process.exit(1);\n }\n\n console.log(chalk.bold.cyan(`${comp.title}`));\n console.log(chalk.dim(comp.description));\n console.log();\n\n // Show files that will be created\n console.log(chalk.bold('Files to be created:'));\n for (const file of comp.files) {\n const targetPath = path.join(\n config.srcDir ? path.join(cwd, 'src') : cwd,\n file.target\n );\n const relativePath = path.relative(cwd, targetPath);\n const exists = fs.existsSync(targetPath);\n \n if (exists) {\n console.log(chalk.yellow(` ⚠ ${relativePath} (exists, will be overwritten)`));\n } else {\n console.log(chalk.green(` + ${relativePath}`));\n }\n }\n\n // Show lib dependencies that will be copied\n if (comp.internalDependencies.length > 0) {\n console.log();\n console.log(chalk.bold('Lib modules required:'));\n for (const dep of comp.internalDependencies) {\n const installed = config.installedLib.includes(dep);\n if (installed) {\n console.log(chalk.dim(` ✓ ${dep} (already installed)`));\n } else {\n console.log(chalk.cyan(` → ${dep}`));\n \n // Show files in this lib module\n const libModule = registry.lib[dep];\n if (libModule?.files) {\n for (const file of libModule.files) {\n console.log(chalk.dim(` + ${file.target}`));\n }\n }\n }\n }\n }\n\n // Show external dependencies\n if (comp.dependencies.length > 0) {\n console.log();\n console.log(chalk.bold('External dependencies:'));\n \n const packageJsonPath = path.join(cwd, 'package.json');\n let installed: Record<string, string> = {};\n \n if (fs.existsSync(packageJsonPath)) {\n const pkg = await fs.readJSON(packageJsonPath);\n installed = { ...pkg.dependencies, ...pkg.devDependencies };\n }\n \n for (const dep of comp.dependencies) {\n if (installed[dep]) {\n console.log(chalk.dim(` ✓ ${dep} (v${installed[dep]})`));\n } else {\n console.log(chalk.yellow(` ⚠ ${dep} (not installed)`));\n }\n }\n }\n\n // Show sample transformed code\n console.log();\n console.log(chalk.bold('Import transformation preview:'));\n \n const sampleSource = comp.files[0]?.source;\n if (sampleSource) {\n try {\n const content = await resolveSourceFile(sampleSource);\n const lines = content.split('\\n').slice(0, 15);\n \n console.log(chalk.dim('\\nOriginal imports:'));\n lines.filter(l => l.startsWith('import')).forEach(line => {\n if (line.includes('@microbuild/')) {\n console.log(chalk.red(` ${line}`));\n }\n });\n \n const transformed = transformImports(content, config);\n const transformedLines = transformed.split('\\n').slice(0, 15);\n \n console.log(chalk.dim('\\nTransformed imports:'));\n transformedLines.filter(l => l.startsWith('import')).forEach(line => {\n if (line.includes(config.aliases.lib) || line.includes(config.aliases.components)) {\n console.log(chalk.green(` ${line}`));\n }\n });\n } catch {\n console.log(chalk.dim('\\n (source preview not available in remote mode)'));\n }\n }\n\n console.log();\n console.log(chalk.dim('Run the following to add this component:'));\n console.log(chalk.cyan(` npx microbuild add ${comp.name}\\n`));\n}\n","/**\n * Microbuild CLI - Status Command\n * \n * Scans project for microbuild-installed files and shows:\n * - Which components are installed\n * - Their versions and install dates\n * - Whether they've been modified\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { loadConfig, resolveAlias } from './init.js';\nimport { extractOriginInfo, hasMicrobuildOrigin } from './transformer.js';\n\ninterface InstalledFile {\n path: string;\n origin: string;\n version: string;\n date: string;\n modified: boolean;\n}\n\n/**\n * Recursively find all files with microbuild origin headers\n */\nasync function findMicrobuildFiles(dir: string): Promise<InstalledFile[]> {\n const files: InstalledFile[] = [];\n \n if (!fs.existsSync(dir)) {\n return files;\n }\n\n const entries = await fs.readdir(dir, { withFileTypes: true });\n \n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n \n if (entry.isDirectory()) {\n // Skip node_modules and hidden directories\n if (entry.name !== 'node_modules' && !entry.name.startsWith('.')) {\n const subFiles = await findMicrobuildFiles(fullPath);\n files.push(...subFiles);\n }\n } else if (entry.isFile() && /\\.(tsx?|jsx?)$/.test(entry.name)) {\n const content = await fs.readFile(fullPath, 'utf-8');\n \n if (hasMicrobuildOrigin(content)) {\n const info = extractOriginInfo(content);\n if (info && info.origin) {\n files.push({\n path: fullPath,\n origin: info.origin,\n version: info.version || 'unknown',\n date: info.date || 'unknown',\n modified: false, // TODO: Compare with registry hash\n });\n }\n }\n }\n }\n \n return files;\n}\n\n/**\n * Group files by component/lib\n */\nfunction groupByOrigin(files: InstalledFile[]): Map<string, InstalledFile[]> {\n const groups = new Map<string, InstalledFile[]>();\n \n for (const file of files) {\n const [pkg, component] = file.origin.split('/').slice(0, 2);\n const key = `${pkg}/${component || 'root'}`;\n \n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(file);\n }\n \n return groups;\n}\n\n/**\n * Main status command\n */\nexport async function status(options: { cwd: string; json?: boolean }) {\n const { cwd, json = false } = options;\n\n const config = await loadConfig(cwd);\n if (!config) {\n console.log(chalk.red('\\n✗ microbuild.json not found.\\n'));\n console.log('This project may not be initialized with Microbuild.');\n console.log('Run \"npx @microbuild/cli init\" to initialize.\\n');\n return;\n }\n\n // Scan for installed files\n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const files = await findMicrobuildFiles(srcDir);\n\n if (json) {\n console.log(JSON.stringify({\n config: {\n installedLib: config.installedLib,\n installedComponents: config.installedComponents,\n },\n files: files.map(f => ({\n ...f,\n path: path.relative(cwd, f.path),\n })),\n }, null, 2));\n return;\n }\n\n // Pretty print\n console.log('\\n' + chalk.bold('📦 Microbuild Status\\n'));\n \n console.log(chalk.gray('Config file: ') + 'microbuild.json');\n console.log(chalk.gray('Lib modules: ') + (config.installedLib.join(', ') || 'none'));\n console.log(chalk.gray('Components: ') + (config.installedComponents.join(', ') || 'none'));\n \n if (files.length === 0) {\n console.log('\\n' + chalk.yellow('No files with @microbuild-origin headers found.'));\n console.log(chalk.gray('This may mean components were installed before origin tracking was added.'));\n return;\n }\n\n const groups = groupByOrigin(files);\n \n console.log('\\n' + chalk.bold('Installed Files:\\n'));\n \n for (const [origin, groupFiles] of groups) {\n console.log(chalk.cyan(` ${origin}`));\n for (const file of groupFiles) {\n const relativePath = path.relative(cwd, file.path);\n console.log(chalk.gray(` └─ ${relativePath}`));\n console.log(chalk.gray(` v${file.version} (${file.date})`));\n }\n console.log();\n }\n\n console.log(chalk.gray(`\\nTotal: ${files.length} files from Microbuild\\n`));\n}\n","/**\n * Microbuild CLI - Info Command\n * \n * Show detailed information about a specific component including:\n * - Source files and locations\n * - Dependencies (npm, internal, and registry)\n * - Interface metadata\n */\n\nimport chalk from 'chalk';\nimport {\n getRegistry as fetchRegistry,\n type Registry,\n type FileMapping,\n type LibModule,\n type ComponentEntry,\n} from '../resolver.js';\n\ninterface InterfaceMetadata {\n id: string;\n name: string;\n icon: string;\n types: string[];\n localTypes: string[];\n group: string;\n order: number;\n supported: boolean;\n recommended?: boolean;\n hasOptions: boolean;\n}\n\n// Extend ComponentEntry with interface metadata\ninterface ComponentEntryWithInterface extends ComponentEntry {\n interface?: InterfaceMetadata;\n}\n\n// Load registry (local or remote via resolver)\nasync function getRegistry(): Promise<Registry> {\n try {\n return await fetchRegistry();\n } catch (err: any) {\n console.error(chalk.red('Failed to load registry:', err.message));\n process.exit(1);\n }\n}\n\n/**\n * Find a component by name (case-insensitive, supports aliases)\n */\nfunction findComponent(name: string, registry: Registry): ComponentEntry | undefined {\n const normalized = name.toLowerCase().replace(/-/g, '');\n \n // Direct match\n const direct = registry.components.find(\n c => c.name.toLowerCase() === name.toLowerCase() ||\n c.title.toLowerCase() === name.toLowerCase()\n );\n if (direct) return direct;\n \n // Fuzzy match (remove dashes)\n const fuzzy = registry.components.find(\n c => c.name.toLowerCase().replace(/-/g, '') === normalized ||\n c.title.toLowerCase().replace(/-/g, '') === normalized\n );\n if (fuzzy) return fuzzy;\n \n // Common aliases\n const aliases: Record<string, string> = {\n 'form': 'vform',\n 'dynamicform': 'vform',\n 'select': 'select-dropdown',\n 'dropdown': 'select-dropdown',\n 'checkbox': 'boolean',\n 'switch': 'toggle',\n 'date': 'datetime',\n 'time': 'datetime',\n 'text': 'input',\n 'textinput': 'input',\n 'image': 'file-image',\n 'wysiwyg': 'rich-text-html',\n 'markdown': 'rich-text-markdown',\n 'm2m': 'list-m2m',\n 'm2o': 'list-m2o',\n 'o2m': 'list-o2m',\n 'm2a': 'list-m2a',\n 'manytomany': 'list-m2m',\n 'manytoone': 'list-m2o',\n 'onetomany': 'list-o2m',\n 'manytoany': 'list-m2a',\n };\n \n const aliased = aliases[normalized];\n if (aliased) {\n return registry.components.find(c => c.name === aliased);\n }\n \n return undefined;\n}\n\n/**\n * Calculate total dependencies recursively\n */\nfunction calculateTotalDependencies(\n component: ComponentEntry, \n registry: Registry, \n visited = new Set<string>()\n): { components: string[], libs: string[], npm: string[] } {\n if (visited.has(component.name)) {\n return { components: [], libs: [], npm: [] };\n }\n visited.add(component.name);\n \n const result = {\n components: [component.name],\n libs: [...component.internalDependencies],\n npm: [...component.dependencies],\n };\n \n // Add registry dependencies recursively\n if (component.registryDependencies) {\n for (const depName of component.registryDependencies) {\n const dep = registry.components.find(c => c.name === depName);\n if (dep) {\n const subDeps = calculateTotalDependencies(dep, registry, visited);\n result.components.push(...subDeps.components);\n result.libs.push(...subDeps.libs);\n result.npm.push(...subDeps.npm);\n }\n }\n }\n \n // Deduplicate\n return {\n components: [...new Set(result.components)],\n libs: [...new Set(result.libs)],\n npm: [...new Set(result.npm)],\n };\n}\n\nexport async function info(componentName: string, options: { json?: boolean }) {\n const { json } = options;\n \n const registry = await getRegistry();\n const component = findComponent(componentName, registry);\n \n if (!component) {\n console.log(chalk.red(`\\n✗ Component not found: ${componentName}\\n`));\n \n // Suggest similar components\n const suggestions = registry.components\n .filter(c => \n c.name.includes(componentName.toLowerCase()) ||\n c.title.toLowerCase().includes(componentName.toLowerCase()) ||\n c.description.toLowerCase().includes(componentName.toLowerCase())\n )\n .slice(0, 5);\n \n if (suggestions.length > 0) {\n console.log(chalk.yellow('Did you mean one of these?\\n'));\n suggestions.forEach(s => {\n console.log(` ${chalk.green(s.name.padEnd(25))} ${chalk.dim(s.description)}`);\n });\n console.log();\n }\n \n console.log(chalk.dim('Run \"microbuild list\" to see all available components.\\n'));\n process.exit(1);\n }\n \n const totals = calculateTotalDependencies(component, registry);\n const category = registry.categories.find(c => c.name === component.category);\n \n if (json) {\n console.log(JSON.stringify({\n ...component,\n categoryTitle: category?.title,\n totalDependencies: totals,\n }, null, 2));\n return;\n }\n \n // Display component info\n console.log(chalk.bold.blue(`\\n📦 ${component.title}`));\n console.log(chalk.dim(` ${component.name} • ${category?.title || component.category}\\n`));\n console.log(`${component.description}\\n`);\n \n // Source files\n console.log(chalk.bold('📁 Source Files'));\n component.files.forEach(file => {\n console.log(` ${chalk.green(file.source)}`);\n console.log(` ${chalk.dim('→')} ${chalk.cyan(file.target)}`);\n });\n \n // Direct dependencies\n if (component.dependencies.length > 0) {\n console.log(chalk.bold('\\n📦 NPM Dependencies'));\n console.log(` ${chalk.yellow(component.dependencies.join(', '))}`);\n }\n \n if (component.internalDependencies.length > 0) {\n console.log(chalk.bold('\\n🔧 Lib Modules'));\n component.internalDependencies.forEach(lib => {\n const libModule = registry.lib[lib];\n console.log(` ${chalk.magenta(lib)} ${chalk.dim(`- ${libModule?.description || ''}`)}`);\n });\n }\n \n if (component.registryDependencies && component.registryDependencies.length > 0) {\n console.log(chalk.bold('\\n🔗 Component Dependencies'));\n console.log(` ${chalk.cyan(component.registryDependencies.length)} components will be installed:`);\n const chunks = [];\n for (let i = 0; i < component.registryDependencies.length; i += 6) {\n chunks.push(component.registryDependencies.slice(i, i + 6).join(', '));\n }\n chunks.forEach(chunk => console.log(` ${chalk.dim(chunk)}`));\n }\n \n // Interface metadata\n if (component.interface) {\n console.log(chalk.bold('\\n🎨 Interface Metadata'));\n console.log(` ID: ${chalk.green(component.interface.id)}`);\n console.log(` Icon: ${chalk.cyan(component.interface.icon)}`);\n console.log(` Field Types: ${chalk.yellow(component.interface.types.join(', '))}`);\n if (component.interface.recommended) {\n console.log(` ${chalk.green('★')} Recommended interface for its field types`);\n }\n }\n \n // Total impact\n console.log(chalk.bold('\\n📊 Installation Summary'));\n console.log(` Components: ${chalk.green(totals.components.length)}`);\n console.log(` Lib modules: ${chalk.green(totals.libs.length)} ${chalk.dim(`(${totals.libs.join(', ') || 'none'})`)}`);\n console.log(` NPM packages: ${chalk.yellow(totals.npm.length)}`);\n \n // Usage\n console.log(chalk.bold('\\n💡 Usage'));\n console.log(chalk.dim(` microbuild add ${component.name}`));\n console.log(chalk.dim(` microbuild tree ${component.name}\\n`));\n}\n","/**\n * Microbuild CLI - Tree Command\n * \n * Display dependency tree for a component showing:\n * - Lib module dependencies (types, services, hooks, utils)\n * - Registry dependencies (other components)\n * - NPM package dependencies\n */\n\nimport chalk from 'chalk';\nimport {\n getRegistry as fetchRegistry,\n type Registry,\n type FileMapping,\n type LibModule,\n type ComponentEntry,\n} from '../resolver.js';\n\n// Load registry (local or remote via resolver)\nasync function getRegistry(): Promise<Registry> {\n try {\n return await fetchRegistry();\n } catch (err: any) {\n console.error(chalk.red('Failed to load registry:', err.message));\n process.exit(1);\n }\n}\n\n/**\n * Find a component by name (case-insensitive)\n */\nfunction findComponent(name: string, registry: Registry): ComponentEntry | undefined {\n return registry.components.find(\n c => c.name.toLowerCase() === name.toLowerCase() ||\n c.title.toLowerCase() === name.toLowerCase()\n );\n}\n\ninterface TreeNode {\n name: string;\n type: 'component' | 'lib' | 'npm';\n description?: string;\n children: TreeNode[];\n}\n\n/**\n * Build dependency tree for a component\n */\nfunction buildTree(\n component: ComponentEntry, \n registry: Registry, \n visited = new Set<string>(),\n depth = 0,\n maxDepth = 3\n): TreeNode {\n const node: TreeNode = {\n name: component.name,\n type: 'component',\n description: component.description,\n children: [],\n };\n \n if (visited.has(component.name) || depth >= maxDepth) {\n return node;\n }\n visited.add(component.name);\n \n // Add lib module dependencies\n for (const libName of component.internalDependencies) {\n const libModule = registry.lib[libName];\n const libNode: TreeNode = {\n name: libName,\n type: 'lib',\n description: libModule?.description,\n children: [],\n };\n \n // Add lib's own dependencies\n if (libModule?.internalDependencies) {\n for (const subLib of libModule.internalDependencies) {\n if (!visited.has(`lib:${subLib}`)) {\n visited.add(`lib:${subLib}`);\n const subLibModule = registry.lib[subLib];\n libNode.children.push({\n name: subLib,\n type: 'lib',\n description: subLibModule?.description,\n children: [],\n });\n }\n }\n }\n \n node.children.push(libNode);\n }\n \n // Add registry dependencies (other components)\n if (component.registryDependencies) {\n for (const depName of component.registryDependencies) {\n const dep = findComponent(depName, registry);\n if (dep) {\n node.children.push(buildTree(dep, registry, visited, depth + 1, maxDepth));\n }\n }\n }\n \n // Add npm dependencies\n for (const npmDep of component.dependencies) {\n node.children.push({\n name: npmDep,\n type: 'npm',\n children: [],\n });\n }\n \n return node;\n}\n\n/**\n * Render tree to console\n */\nfunction renderTree(node: TreeNode, prefix = '', isLast = true, isRoot = true): void {\n const connector = isRoot ? '' : (isLast ? '└── ' : '├── ');\n const childPrefix = isRoot ? '' : (isLast ? ' ' : '│ ');\n \n let icon = '';\n let color = chalk.white;\n \n switch (node.type) {\n case 'component':\n icon = '📦';\n color = chalk.green;\n break;\n case 'lib':\n icon = '🔧';\n color = chalk.magenta;\n break;\n case 'npm':\n icon = '📚';\n color = chalk.yellow;\n break;\n }\n \n console.log(\n prefix + \n connector + \n icon + ' ' + \n color(node.name) + \n (node.description && isRoot ? chalk.dim(` - ${node.description}`) : '')\n );\n \n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const isChildLast = i === node.children.length - 1;\n renderTree(child, prefix + childPrefix, isChildLast, false);\n }\n}\n\n/**\n * Flatten tree to get unique dependencies\n */\nfunction flattenTree(node: TreeNode): { components: string[], libs: string[], npm: string[] } {\n const result = {\n components: new Set<string>(),\n libs: new Set<string>(),\n npm: new Set<string>(),\n };\n \n function traverse(n: TreeNode) {\n switch (n.type) {\n case 'component':\n result.components.add(n.name);\n break;\n case 'lib':\n result.libs.add(n.name);\n break;\n case 'npm':\n result.npm.add(n.name);\n break;\n }\n n.children.forEach(traverse);\n }\n \n traverse(node);\n \n return {\n components: Array.from(result.components),\n libs: Array.from(result.libs),\n npm: Array.from(result.npm),\n };\n}\n\nexport async function tree(componentName: string, options: { json?: boolean; depth?: number }) {\n const { json, depth = 2 } = options;\n \n const registry = await getRegistry();\n const component = findComponent(componentName, registry);\n \n if (!component) {\n console.log(chalk.red(`\\n✗ Component not found: ${componentName}\\n`));\n \n // Suggest similar components\n const suggestions = registry.components\n .filter(c => \n c.name.includes(componentName.toLowerCase()) ||\n c.title.toLowerCase().includes(componentName.toLowerCase())\n )\n .slice(0, 5);\n \n if (suggestions.length > 0) {\n console.log(chalk.yellow('Did you mean one of these?\\n'));\n suggestions.forEach(s => {\n console.log(` ${chalk.green(s.name.padEnd(25))} ${chalk.dim(s.description)}`);\n });\n console.log();\n }\n \n console.log(chalk.dim('Run \"microbuild list\" to see all available components.\\n'));\n process.exit(1);\n }\n \n const treeData = buildTree(component, registry, new Set(), 0, depth);\n const flattened = flattenTree(treeData);\n \n if (json) {\n console.log(JSON.stringify({\n tree: treeData,\n summary: flattened,\n }, null, 2));\n return;\n }\n \n console.log(chalk.bold.blue(`\\n🌳 Dependency Tree: ${component.title}\\n`));\n \n renderTree(treeData);\n \n // Summary\n console.log(chalk.bold('\\n📊 Summary'));\n console.log(` ${chalk.green('📦 Components:')} ${flattened.components.length}`);\n console.log(` ${chalk.magenta('🔧 Lib modules:')} ${flattened.libs.length} ${chalk.dim(`(${flattened.libs.join(', ') || 'none'})`)}`);\n console.log(` ${chalk.yellow('📚 NPM packages:')} ${flattened.npm.length}`);\n \n if (flattened.npm.length > 0) {\n console.log(chalk.bold('\\n📦 Install NPM Dependencies'));\n console.log(chalk.dim(` pnpm add ${flattened.npm.join(' ')}\\n`));\n }\n \n console.log(chalk.bold('💡 Add this component'));\n console.log(chalk.dim(` microbuild add ${component.name}\\n`));\n}\n","/**\n * Microbuild CLI - Fix Command\n * \n * Automatically applies fixes for common issues detected by validate.\n * Fixes include:\n * - Untransformed @microbuild/* imports\n * - Broken relative imports\n * - Missing CSS files\n * - SSR-unsafe exports\n * - Duplicate exports\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport fg from 'fast-glob';\nimport prompts from 'prompts';\nimport { type Config, loadConfig } from './init.js';\nimport { transformImports, toKebabCase } from './transformer.js';\n\ninterface FixResult {\n fixed: number;\n skipped: number;\n errors: string[];\n}\n\n/**\n * Fix untransformed @microbuild/* imports\n */\nasync function fixUntransformedImports(\n cwd: string,\n config: Config,\n dryRun: boolean\n): Promise<FixResult> {\n const result: FixResult = { fixed: 0, skipped: 0, errors: [] };\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const patterns = [\n path.join(srcDir, 'components/**/*.{ts,tsx,js,jsx}'),\n path.join(srcDir, 'lib/microbuild/**/*.{ts,tsx,js,jsx}'),\n ];\n \n for (const pattern of patterns) {\n const files = await fg(pattern, { ignore: ['**/node_modules/**'] });\n \n for (const file of files) {\n const content = await fs.readFile(file, 'utf-8');\n \n // Check if file has @microbuild/* imports\n if (content.includes(\"from '@microbuild/\") || content.includes('from \"@microbuild/')) {\n const transformed = transformImports(content, config);\n \n if (transformed !== content) {\n if (dryRun) {\n console.log(chalk.dim(` Would fix: ${path.relative(cwd, file)}`));\n } else {\n await fs.writeFile(file, transformed);\n }\n result.fixed++;\n }\n }\n }\n }\n \n return result;\n}\n\n/**\n * Fix SSR-unsafe exports in components/ui/index.ts\n */\nasync function fixSsrUnsafeExports(\n cwd: string,\n config: Config,\n dryRun: boolean\n): Promise<FixResult> {\n const result: FixResult = { fixed: 0, skipped: 0, errors: [] };\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const indexPath = path.join(srcDir, 'components/ui/index.ts');\n \n if (!fs.existsSync(indexPath)) {\n return result;\n }\n \n let content = await fs.readFile(indexPath, 'utf-8');\n let modified = false;\n \n // Check for direct InputBlockEditor export\n if (\n content.includes(\"from './input-block-editor'\") &&\n !content.includes(\"from './input-block-editor-wrapper'\")\n ) {\n // Check if wrapper exists\n const wrapperPath = path.join(srcDir, 'components/ui/input-block-editor-wrapper.tsx');\n if (fs.existsSync(wrapperPath)) {\n content = content.replace(\n /export \\* from ['\"]\\.\\/input-block-editor['\"]/g,\n \"export * from './input-block-editor-wrapper'\"\n );\n modified = true;\n result.fixed++;\n }\n }\n \n if (modified && !dryRun) {\n await fs.writeFile(indexPath, content);\n } else if (modified && dryRun) {\n console.log(chalk.dim(` Would fix SSR exports in: components/ui/index.ts`));\n }\n \n return result;\n}\n\n/**\n * Fix duplicate exports by using explicit named exports\n */\nasync function fixDuplicateExports(\n cwd: string,\n config: Config,\n dryRun: boolean\n): Promise<FixResult> {\n const result: FixResult = { fixed: 0, skipped: 0, errors: [] };\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const indexPath = path.join(srcDir, 'components/ui/index.ts');\n \n if (!fs.existsSync(indexPath)) {\n return result;\n }\n \n const content = await fs.readFile(indexPath, 'utf-8');\n const componentsDir = path.join(srcDir, 'components/ui');\n \n // Build a map of all named exports across files\n const exportPattern = /export \\* from ['\"]\\.\\/([^'\"]+)['\"]/g;\n const namedExports = new Map<string, { files: string[]; count: number }>();\n const namedExportPattern = /export\\s+(?:const|function|class|type|interface|enum)\\s+(\\w+)/g;\n \n let match;\n while ((match = exportPattern.exec(content)) !== null) {\n const exportFile = match[1];\n const filePath = path.join(componentsDir, exportFile + '.tsx');\n \n if (!fs.existsSync(filePath)) continue;\n \n const fileContent = await fs.readFile(filePath, 'utf-8');\n let namedMatch;\n \n while ((namedMatch = namedExportPattern.exec(fileContent)) !== null) {\n const exportName = namedMatch[1];\n \n if (!namedExports.has(exportName)) {\n namedExports.set(exportName, { files: [exportFile], count: 1 });\n } else {\n const existing = namedExports.get(exportName)!;\n existing.files.push(exportFile);\n existing.count++;\n }\n }\n }\n \n // Find conflicts\n const conflicts = Array.from(namedExports.entries())\n .filter(([_, info]) => info.count > 1);\n \n if (conflicts.length > 0 && !dryRun) {\n console.log(chalk.yellow(`\\n⚠ Found ${conflicts.length} conflicting export(s):`));\n conflicts.forEach(([name, info]) => {\n console.log(chalk.dim(` ${name}: exported from ${info.files.join(', ')}`));\n });\n console.log(chalk.dim('\\nTo fix, manually update components/ui/index.ts to use explicit named exports.'));\n console.log(chalk.dim('Example: export { ComponentA } from \"./file-a\";'));\n result.skipped = conflicts.length;\n } else if (conflicts.length > 0 && dryRun) {\n console.log(chalk.dim(` Would report ${conflicts.length} conflicting exports`));\n }\n \n return result;\n}\n\n/**\n * Fix broken relative imports by normalizing paths\n */\nasync function fixBrokenImports(\n cwd: string,\n config: Config,\n dryRun: boolean\n): Promise<FixResult> {\n const result: FixResult = { fixed: 0, skipped: 0, errors: [] };\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n \n const files = await fg(path.join(componentsDir, '**/*.{ts,tsx}'), {\n ignore: ['**/node_modules/**']\n });\n \n for (const file of files) {\n const content = await fs.readFile(file, 'utf-8');\n const fileDir = path.dirname(file);\n let modified = false;\n let newContent = content;\n \n // Find relative imports\n const relativeImportPattern = /from\\s+['\"](\\.\\.?\\/[^'\"]+)['\"]/g;\n let match;\n \n while ((match = relativeImportPattern.exec(content)) !== null) {\n const importPath = match[1];\n const absolutePath = path.resolve(fileDir, importPath);\n \n // Check if file exists with various extensions\n const extensions = ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.tsx', ''];\n const exists = extensions.some(ext => fs.existsSync(absolutePath + ext));\n \n if (!exists) {\n // Try to find the correct path by checking kebab-case\n const baseName = path.basename(importPath);\n const kebabName = toKebabCase(baseName);\n const dirName = path.dirname(importPath);\n const newImportPath = dirName === '.' ? `./${kebabName}` : `${dirName}/${kebabName}`;\n const newAbsolutePath = path.resolve(fileDir, newImportPath);\n \n const newExists = extensions.some(ext => fs.existsSync(newAbsolutePath + ext));\n \n if (newExists) {\n newContent = newContent.replace(\n new RegExp(`from\\\\s+['\"]${importPath.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}['\"]`),\n `from '${newImportPath}'`\n );\n modified = true;\n result.fixed++;\n }\n }\n }\n \n if (modified && !dryRun) {\n await fs.writeFile(file, newContent);\n } else if (modified && dryRun) {\n console.log(chalk.dim(` Would fix imports in: ${path.relative(cwd, file)}`));\n }\n }\n \n return result;\n}\n\n/**\n * Copy missing CSS files from source\n */\nasync function fixMissingCss(\n cwd: string,\n config: Config,\n dryRun: boolean\n): Promise<FixResult> {\n const result: FixResult = { fixed: 0, skipped: 0, errors: [] };\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n \n // CSS requirements mapping\n const cssRequirements: Record<string, { component: string; cssFile: string }> = {\n 'input-block-editor.tsx': {\n component: 'input-block-editor',\n cssFile: 'InputBlockEditor.css'\n },\n 'rich-text-html.tsx': {\n component: 'rich-text-html',\n cssFile: 'RichTextHTML.css'\n },\n 'rich-text-markdown.tsx': {\n component: 'rich-text-markdown', \n cssFile: 'RichTextMarkdown.css'\n },\n };\n \n for (const [componentFile, info] of Object.entries(cssRequirements)) {\n const componentPath = path.join(componentsDir, componentFile);\n const cssPath = path.join(componentsDir, info.cssFile);\n \n if (fs.existsSync(componentPath) && !fs.existsSync(cssPath)) {\n if (dryRun) {\n console.log(chalk.dim(` Would copy missing CSS: ${info.cssFile}`));\n result.fixed++;\n } else {\n // Note: In real implementation, you'd copy from source registry\n console.log(chalk.yellow(` Missing CSS: ${info.cssFile}`));\n console.log(chalk.dim(` Reinstall component: npx microbuild add ${info.component} --overwrite`));\n result.skipped++;\n }\n }\n }\n \n return result;\n}\n\n/**\n * Main fix command\n */\nexport async function fix(options: {\n cwd: string;\n dryRun?: boolean;\n yes?: boolean;\n}) {\n const { cwd, dryRun = false, yes = false } = options;\n \n console.log(chalk.bold('\\n🔧 Microbuild Fix\\n'));\n \n if (dryRun) {\n console.log(chalk.yellow('Dry run mode - no changes will be made\\n'));\n }\n \n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n console.log(chalk.red('✗ microbuild.json not found. Run \"npx microbuild init\" first.\\n'));\n process.exit(1);\n }\n \n // Confirm before fixing (unless --yes or --dry-run)\n if (!yes && !dryRun) {\n const { confirm } = await prompts({\n type: 'confirm',\n name: 'confirm',\n message: 'This will modify files in your project. Continue?',\n initial: true,\n });\n \n if (!confirm) {\n console.log(chalk.yellow('\\n✓ Cancelled\\n'));\n return;\n }\n }\n \n const spinner = ora('Scanning for issues...').start();\n \n try {\n // Run all fixes\n spinner.text = 'Fixing untransformed imports...';\n const importResult = await fixUntransformedImports(cwd, config, dryRun);\n \n spinner.text = 'Fixing broken relative imports...';\n const brokenResult = await fixBrokenImports(cwd, config, dryRun);\n \n spinner.text = 'Fixing SSR-unsafe exports...';\n const ssrResult = await fixSsrUnsafeExports(cwd, config, dryRun);\n \n spinner.text = 'Checking duplicate exports...';\n const duplicateResult = await fixDuplicateExports(cwd, config, dryRun);\n \n spinner.text = 'Checking missing CSS files...';\n const cssResult = await fixMissingCss(cwd, config, dryRun);\n \n spinner.stop();\n \n // Calculate totals\n const totalFixed = importResult.fixed + brokenResult.fixed + ssrResult.fixed + cssResult.fixed;\n const totalSkipped = importResult.skipped + brokenResult.skipped + ssrResult.skipped + \n duplicateResult.skipped + cssResult.skipped;\n \n // Summary\n console.log(chalk.bold('\\n📋 Fix Summary:\\n'));\n \n if (importResult.fixed > 0) {\n console.log(chalk.green(` ✓ Fixed ${importResult.fixed} untransformed import(s)`));\n }\n if (brokenResult.fixed > 0) {\n console.log(chalk.green(` ✓ Fixed ${brokenResult.fixed} broken import(s)`));\n }\n if (ssrResult.fixed > 0) {\n console.log(chalk.green(` ✓ Fixed ${ssrResult.fixed} SSR-unsafe export(s)`));\n }\n if (cssResult.fixed > 0) {\n console.log(chalk.green(` ✓ Fixed ${cssResult.fixed} missing CSS file(s)`));\n }\n \n if (totalSkipped > 0) {\n console.log(chalk.yellow(`\\n ⚠ Skipped ${totalSkipped} issue(s) requiring manual fix`));\n }\n \n if (totalFixed === 0 && totalSkipped === 0) {\n console.log(chalk.green(' ✓ No issues found!\\n'));\n } else if (dryRun) {\n console.log(chalk.dim('\\n Run without --dry-run to apply fixes\\n'));\n } else {\n console.log(chalk.green('\\n✨ Fixes applied!\\n'));\n console.log(chalk.dim('Run \"npx microbuild validate\" to verify.\\n'));\n }\n \n } catch (error) {\n spinner.fail('Fix failed');\n console.error(chalk.red(error));\n process.exit(1);\n }\n}\n","/**\n * Microbuild CLI - Bootstrap Command\n * \n * Single atomic command that combines:\n * 1. init (create microbuild.json, package.json, Next.js skeleton)\n * 2. add --all (copy all components)\n * 3. npm dependency installation\n * 4. post-install validation\n * \n * Designed for AI agents and CI/CD where the entire setup must complete\n * in a single terminal invocation without hanging.\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { init } from './init.js';\nimport { add } from './add.js';\nimport { validate } from './validate.js';\n\n/**\n * Main bootstrap command\n * \n * Usage:\n * pnpm cli bootstrap --cwd /path/to/project\n * pnpm cli bootstrap --skip-deps --cwd /path/to/project\n */\nexport async function bootstrap(options: {\n cwd: string;\n skipDeps?: boolean;\n skipValidate?: boolean;\n}) {\n const { cwd, skipDeps = false, skipValidate = false } = options;\n const startTime = Date.now();\n\n console.log(chalk.bold.blue('\\n🚀 Microbuild Bootstrap - Full Project Setup\\n'));\n console.log(chalk.dim(`Target: ${cwd}\\n`));\n\n // ── Step 1: Init ───────────────────────────────────────────────\n console.log(chalk.bold('━'.repeat(60)));\n console.log(chalk.bold('Step 1/3: Initializing project...\\n'));\n\n try {\n await init({ yes: true, cwd });\n } catch (error) {\n console.error(chalk.red('\\n✗ Init failed:'), error);\n process.exit(1);\n }\n\n // ── Step 2: Add all components ─────────────────────────────────\n console.log(chalk.bold('\\n' + '━'.repeat(60)));\n console.log(chalk.bold('Step 2/3: Adding all components...\\n'));\n\n try {\n await add([], {\n all: true,\n withApi: true,\n cwd,\n nonInteractive: true,\n });\n } catch (error) {\n console.error(chalk.red('\\n✗ Component installation failed:'), error);\n process.exit(1);\n }\n\n // ── Step 3: Install npm dependencies ───────────────────────────\n // All dependencies (including TipTap, EditorJS, MapLibre, etc.) are now\n // pre-configured in package.json by the init step, so a single `pnpm install`\n // resolves everything. No more post-install surprise TS2307 errors.\n if (!skipDeps) {\n console.log(chalk.bold('\\n' + '━'.repeat(60)));\n console.log(chalk.bold('Step 3/3: Installing npm dependencies...\\n'));\n\n try {\n // Run pnpm install to resolve everything from package.json\n const { execSync } = await import('child_process');\n const hasPnpmLock = fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'));\n const hasYarnLock = fs.existsSync(path.join(cwd, 'yarn.lock'));\n const hasBunLock = fs.existsSync(path.join(cwd, 'bun.lockb'));\n\n let installCmd: string;\n if (hasPnpmLock || (!hasYarnLock && !hasBunLock)) {\n installCmd = 'pnpm install';\n } else if (hasYarnLock) {\n installCmd = 'yarn install';\n } else {\n installCmd = 'bun install';\n }\n\n console.log(chalk.dim(` Running: ${installCmd}\\n`));\n execSync(installCmd, { cwd, stdio: 'inherit' });\n console.log(chalk.green('\\n✓ Dependencies installed!'));\n } catch (error) {\n console.log(chalk.yellow('\\n⚠ Dependency installation had issues. Run \"pnpm install\" manually.'));\n }\n } else {\n console.log(chalk.dim('\\nSkipped dependency installation (--skip-deps)\\n'));\n }\n\n // ── Validation ─────────────────────────────────────────────────\n if (!skipValidate) {\n console.log(chalk.bold('\\n' + '━'.repeat(60)));\n console.log(chalk.bold('Validating installation...\\n'));\n\n try {\n const result = await validate({ cwd, json: false, noExit: true });\n \n if (result && !result.valid) {\n // Separate TS errors (non-fatal) from structural errors (fatal)\n const tsErrors = result.errors.filter((e: { code: string }) => e.code === 'TYPESCRIPT_ERROR');\n const structuralErrors = result.errors.filter((e: { code: string }) => e.code !== 'TYPESCRIPT_ERROR');\n \n if (tsErrors.length > 0) {\n console.log(chalk.yellow(`\\n⚠ ${tsErrors.length} TypeScript type error(s) detected in component files.`));\n console.log(chalk.yellow(' These may cause build failures. Run \"pnpm cli fix --cwd .\" to attempt auto-fix,'));\n console.log(chalk.yellow(' or ensure all component dependencies are installed.\\n'));\n }\n \n if (structuralErrors.length > 0) {\n console.log(chalk.red(`\\n✗ ${structuralErrors.length} structural error(s) found that need fixing.`));\n }\n }\n } catch {\n // Validation errors are printed inline, don't fail bootstrap\n console.log(chalk.yellow('\\n⚠ Validation encountered issues (see above). Bootstrap still completed.\\n'));\n }\n }\n\n // ── Summary ────────────────────────────────────────────────────\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\n\n console.log(chalk.bold('\\n' + '━'.repeat(60)));\n console.log(chalk.bold.green(`\\n✨ Bootstrap complete! (${elapsed}s)\\n`));\n console.log(chalk.dim('Your project is ready with:'));\n console.log(chalk.dim(' • microbuild.json configuration'));\n console.log(chalk.dim(' • 40+ UI components in components/ui/'));\n console.log(chalk.dim(' • Types, services, hooks in lib/microbuild/'));\n console.log(chalk.dim(' • API proxy routes in app/api/'));\n console.log(chalk.dim(' • Supabase auth utilities'));\n console.log(chalk.dim(' • Next.js skeleton (layout, page, config)'));\n\n console.log(chalk.bold('\\nNext steps:'));\n console.log(chalk.cyan(' 1. ') + chalk.dim('Configure .env.local with your DaaS URL'));\n console.log(chalk.cyan(' 2. ') + chalk.dim('pnpm dev'));\n console.log(chalk.cyan(' 3. ') + chalk.dim('Create pages that import from @/components/ui/\\n'));\n}\n"],"mappings":"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","names":["fs","path","chalk","ora","getRegistry","chalk","path","fs","info","spinner","ora","execSync","chalk","getRegistry","chalk","status","fs","path","chalk","getRegistry","chalk","path","fs","fs","path","chalk","fs","path","info","chalk","chalk","getRegistry","chalk","chalk","getRegistry","chalk","findComponent","fs","path","chalk","ora","fg","prompts","path","fg","fs","chalk","info","prompts","ora","fs","path","chalk","chalk","execSync","fs","path"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/add.ts","../src/commands/transformer.ts","../src/commands/validate.ts","../src/commands/list.ts","../src/commands/diff.ts","../src/commands/status.ts","../src/commands/info.ts","../src/commands/tree.ts","../src/commands/fix.ts","../src/commands/bootstrap.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * Microbuild CLI\n * \n * Copy & Own CLI tool for adding Microbuild components to your project.\n * \n * Benefits:\n * ✅ No dependency on external packages for component code\n * ✅ Full customization - components become part of your codebase\n * ✅ No breaking changes from upstream updates\n * ✅ Bundle only what you use - tree-shaking friendly\n * ✅ Works offline after installation\n */\n\nimport { Command } from 'commander';\nimport { init } from './commands/init.js';\nimport { add } from './commands/add.js';\nimport { list } from './commands/list.js';\nimport { diff } from './commands/diff.js';\nimport { status } from './commands/status.js';\nimport { info } from './commands/info.js';\nimport { tree } from './commands/tree.js';\nimport { validate } from './commands/validate.js';\nimport { fix } from './commands/fix.js';\nimport { bootstrap } from './commands/bootstrap.js';\n\nconst program = new Command();\n\nprogram\n .name('microbuild')\n .description('Copy & Own CLI - Add Microbuild components to your project')\n .version('1.0.0');\n\nprogram\n .command('init')\n .description('Initialize Microbuild in your project (creates microbuild.json)')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('-c, --cwd <path>', 'Project directory', process.cwd())\n .action(init);\n\nprogram\n .command('add')\n .description('Copy components to your project (with transformed imports)')\n .argument('[components...]', 'Component names to add')\n .option('-a, --all', 'Add all components')\n .option('--with-api', 'Also add API routes and Supabase auth templates')\n .option('--category <name>', 'Add all components from a category')\n .option('-o, --overwrite', 'Overwrite existing components')\n .option('-n, --dry-run', 'Preview changes without modifying files')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(add);\n\nprogram\n .command('list')\n .description('List all available components')\n .option('--category <name>', 'Filter by category')\n .option('--json', 'Output as JSON')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(list);\n\nprogram\n .command('diff')\n .description('Preview changes before adding a component')\n .argument('<component>', 'Component name')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(diff);\n\nprogram\n .command('status')\n .description('Show installed Microbuild components and their origins')\n .option('--json', 'Output as JSON')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(status);\n\nprogram\n .command('info')\n .description('Show detailed information about a component (sources, dependencies, interface)')\n .argument('<component>', 'Component name')\n .option('--json', 'Output as JSON')\n .action(info);\n\nprogram\n .command('tree')\n .description('Display dependency tree for a component')\n .argument('<component>', 'Component name')\n .option('--json', 'Output as JSON')\n .option('-d, --depth <number>', 'Max depth to display', '2')\n .action((component, options) => tree(component, { ...options, depth: parseInt(options.depth) }));\n\nprogram\n .command('validate')\n .description('Validate Microbuild installation (check imports, missing files, SSR issues)')\n .option('--json', 'Output as JSON')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(async (options) => { await validate(options); });\n\nprogram\n .command('bootstrap')\n .description('Full project setup: init + add --all + install deps + validate (single command for AI agents)')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .option('--skip-deps', 'Skip npm dependency installation')\n .option('--skip-validate', 'Skip post-install validation')\n .action(async (options) => {\n await bootstrap({\n cwd: options.cwd,\n skipDeps: options.skipDeps,\n skipValidate: options.skipValidate,\n });\n });\n\nprogram\n .command('fix')\n .description('Automatically fix common issues (untransformed imports, broken paths, SSR exports)')\n .option('-n, --dry-run', 'Preview fixes without modifying files')\n .option('-y, --yes', 'Skip confirmation prompts')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(fix);\n\nprogram\n .command('outdated')\n .description('Check for component updates (compares installed versions to registry)')\n .option('--json', 'Output as JSON')\n .option('--cwd <path>', 'Project directory', process.cwd())\n .action(async (options) => {\n const { outdated } = await import('./commands/outdated.js');\n await outdated(options);\n });\n\nprogram.parse();\n","/**\n * Microbuild CLI - Add Command\n * \n * Copy & Own Model:\n * - Copies component source files to your project\n * - Transforms @microbuild/* imports to local paths\n * - Auto-copies required lib modules (types, services, hooks)\n * - No runtime dependency on external packages\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport ora, { type Ora } from 'ora';\nimport prompts from 'prompts';\nimport { type Config, loadConfig, saveConfig } from './init.js';\nimport { \n transformImports, \n transformRelativeImports,\n transformVFormImports,\n addOriginHeader\n} from './transformer.js';\nimport { validate } from './validate.js';\nimport {\n getRegistry as fetchRegistry,\n resolveSourceFile,\n sourceFileExists,\n type Registry,\n type ComponentEntry,\n} from '../resolver.js';\n\n/**\n * Load registry (local or remote via resolver)\n */\nasync function getRegistry(): Promise<Registry> {\n try {\n return await fetchRegistry();\n } catch (err: any) {\n console.error(chalk.red('Failed to load registry:', err.message));\n process.exit(1);\n }\n}\n\n/**\n * Common component aliases for better discovery\n */\nconst COMPONENT_ALIASES: Record<string, string> = {\n 'form': 'vform',\n 'dynamicform': 'vform',\n 'v-form': 'vform',\n 'select': 'select-dropdown',\n 'dropdown': 'select-dropdown',\n 'checkbox': 'boolean',\n 'switch': 'toggle',\n 'date': 'datetime',\n 'time': 'datetime',\n 'datepicker': 'datetime',\n 'text': 'input',\n 'textinput': 'input',\n 'textfield': 'input',\n 'image': 'file-image',\n 'imageupload': 'file-image',\n 'wysiwyg': 'rich-text-html',\n 'richtext': 'rich-text-html',\n 'markdown': 'rich-text-markdown',\n 'md': 'rich-text-markdown',\n 'm2m': 'list-m2m',\n 'm2o': 'list-m2o',\n 'o2m': 'list-o2m',\n 'm2a': 'list-m2a',\n 'manytomany': 'list-m2m',\n 'manytoone': 'list-m2o',\n 'onetomany': 'list-o2m',\n 'manytoany': 'list-m2a',\n 'relation': 'list-m2o',\n 'multiselect': 'select-multiple-dropdown',\n 'checkboxes': 'select-multiple-checkbox',\n 'radio': 'select-radio',\n 'icon': 'select-icon',\n 'colorpicker': 'color',\n 'fileupload': 'file',\n 'code': 'input-code',\n 'blockeditor': 'input-block-editor',\n 'editor': 'input-block-editor',\n};\n\n/**\n * Find component with smart matching and suggestions\n */\nfunction findComponentWithSuggestions(name: string, registry: Registry): ComponentEntry | null {\n const normalized = name.toLowerCase().replace(/-/g, '');\n \n // Direct match by name\n const directMatch = registry.components.find(\n c => c.name.toLowerCase() === name.toLowerCase()\n );\n if (directMatch) return directMatch;\n \n // Match by title\n const titleMatch = registry.components.find(\n c => c.title.toLowerCase() === name.toLowerCase()\n );\n if (titleMatch) return titleMatch;\n \n // Fuzzy match (remove dashes)\n const fuzzyMatch = registry.components.find(\n c => c.name.toLowerCase().replace(/-/g, '') === normalized ||\n c.title.toLowerCase().replace(/-/g, '') === normalized\n );\n if (fuzzyMatch) return fuzzyMatch;\n \n // Check aliases\n const aliasedName = COMPONENT_ALIASES[normalized];\n if (aliasedName) {\n const aliasMatch = registry.components.find(c => c.name === aliasedName);\n if (aliasMatch) {\n console.log(chalk.yellow(`\\n💡 \"${name}\" matched alias → using \"${aliasMatch.name}\"\\n`));\n return aliasMatch;\n }\n }\n \n // No match found - provide helpful suggestions\n console.log(chalk.red(`\\n✗ Component not found: ${name}\\n`));\n \n // Find similar components\n const suggestions = registry.components\n .map(c => ({\n component: c,\n score: calculateSimilarity(normalized, c.name.replace(/-/g, '')) +\n calculateSimilarity(normalized, c.title.toLowerCase().replace(/-/g, '')) +\n (c.description.toLowerCase().includes(name.toLowerCase()) ? 0.3 : 0)\n }))\n .filter(s => s.score > 0.2)\n .sort((a, b) => b.score - a.score)\n .slice(0, 5);\n \n if (suggestions.length > 0) {\n console.log(chalk.yellow('Did you mean one of these?\\n'));\n suggestions.forEach(s => {\n console.log(` ${chalk.green(s.component.name.padEnd(28))} ${chalk.dim(s.component.description)}`);\n });\n console.log();\n }\n \n // Show category hint\n const categoryHint = registry.categories.find(cat => \n name.toLowerCase().includes(cat.name.toLowerCase())\n );\n if (categoryHint) {\n console.log(chalk.dim(`Try: microbuild add --category ${categoryHint.name}\\n`));\n }\n \n console.log(chalk.dim('Commands to help you find components:'));\n console.log(chalk.dim(' microbuild list List all components'));\n console.log(chalk.dim(' microbuild list --category Filter by category'));\n console.log(chalk.dim(' microbuild info <name> Get component details\\n'));\n \n return null;\n}\n\n/**\n * Simple similarity score (0-1)\n */\nfunction calculateSimilarity(a: string, b: string): number {\n if (a === b) return 1;\n if (a.includes(b) || b.includes(a)) return 0.7;\n \n // Count matching characters\n let matches = 0;\n const shorter = a.length < b.length ? a : b;\n const longer = a.length < b.length ? b : a;\n \n for (let i = 0; i < shorter.length; i++) {\n if (longer.includes(shorter[i])) matches++;\n }\n \n return matches / longer.length;\n}\n\n/**\n * Copy and transform a lib module (types, services, or hooks)\n */\nasync function copyLibModule(\n moduleName: string,\n registry: Registry,\n config: Config,\n cwd: string,\n spinner: Ora\n): Promise<boolean> {\n const libModule = registry.lib[moduleName];\n if (!libModule) {\n spinner.warn(`Lib module not found: ${moduleName}`);\n return false;\n }\n\n // Check if already installed\n if (config.installedLib.includes(moduleName)) {\n return true;\n }\n\n // First, install dependencies\n if (libModule.internalDependencies) {\n for (const dep of libModule.internalDependencies) {\n if (!config.installedLib.includes(dep)) {\n await copyLibModule(dep, registry, config, cwd, spinner);\n }\n }\n }\n\n // Handle single file module (like utils)\n if (libModule.path && libModule.target) {\n const targetPath = path.join(\n config.srcDir ? path.join(cwd, 'src') : cwd,\n libModule.target\n );\n\n if (await sourceFileExists(libModule.path)) {\n let content = await resolveSourceFile(libModule.path);\n content = transformImports(content, config);\n content = addOriginHeader(content, moduleName, '@microbuild/lib', registry.version);\n await fs.ensureDir(path.dirname(targetPath));\n await fs.writeFile(targetPath, content);\n }\n }\n\n // Handle multi-file module\n if (libModule.files) {\n for (const file of libModule.files) {\n const targetPath = path.join(\n config.srcDir ? path.join(cwd, 'src') : cwd,\n file.target\n );\n\n if (await sourceFileExists(file.source)) {\n let content = await resolveSourceFile(file.source);\n content = transformImports(content, config);\n // Extract filename for origin tracking\n const fileName = path.basename(file.source, path.extname(file.source));\n content = addOriginHeader(content, `${moduleName}/${fileName}`, '@microbuild/lib', registry.version);\n await fs.ensureDir(path.dirname(targetPath));\n await fs.writeFile(targetPath, content);\n } else {\n spinner.warn(`Source file not found: ${file.source}`);\n }\n }\n }\n\n config.installedLib.push(moduleName);\n spinner.succeed(`Installed lib: ${moduleName}`);\n return true;\n}\n\n/**\n * Dry run info for component preview\n */\ninterface DryRunInfo {\n component: string;\n files: { source: string; target: string }[];\n dependencies: string[];\n libDependencies: string[];\n}\n\n/**\n * Copy and transform a component\n */\nasync function copyComponent(\n component: ComponentEntry,\n registry: Registry,\n config: Config,\n cwd: string,\n overwrite: boolean,\n spinner: Ora,\n installing = new Set<string>(), // Track components being installed to prevent circular deps\n dryRun = false, // Preview mode - don't write files\n dryRunInfo?: DryRunInfo[] // Collect dry run info\n): Promise<boolean> {\n // Check for circular dependency\n if (installing.has(component.name)) {\n return true; // Already being installed in this call stack\n }\n \n // Check if already installed\n if (config.installedComponents.includes(component.name) && !overwrite && !dryRun) {\n // In non-interactive/batch mode (--all, bootstrap), silently skip already-installed components\n if (installing.has('__nonInteractive__')) {\n return true;\n }\n const { shouldOverwrite } = await prompts({\n type: 'confirm',\n name: 'shouldOverwrite',\n message: `${component.title} already installed. Overwrite?`,\n initial: false,\n });\n\n if (!shouldOverwrite) {\n spinner.info(`Skipped ${component.title}`);\n return false;\n }\n }\n\n // Mark as being installed to prevent circular deps\n installing.add(component.name);\n\n // Collect dry run info\n const info: DryRunInfo = {\n component: component.name,\n files: component.files.map(f => ({ source: f.source, target: f.target })),\n dependencies: component.dependencies,\n libDependencies: component.internalDependencies,\n };\n\n // Install internal dependencies first (types, services, hooks)\n for (const dep of component.internalDependencies) {\n if (!config.installedLib.includes(dep)) {\n spinner.text = `Installing dependency: ${dep}...`;\n if (!dryRun) {\n await copyLibModule(dep, registry, config, cwd, spinner);\n }\n }\n }\n\n // Install registry dependencies (other components)\n if (component.registryDependencies) {\n for (const depName of component.registryDependencies) {\n if (!config.installedComponents.includes(depName) && !installing.has(depName)) {\n const depComponent = registry.components.find(c => c.name === depName);\n if (depComponent) {\n spinner.text = `Installing component dependency: ${depComponent.title}...`;\n await copyComponent(depComponent, registry, config, cwd, overwrite, spinner, installing, dryRun, dryRunInfo);\n }\n }\n }\n }\n\n // In dry run mode, just collect info and return\n if (dryRun) {\n if (dryRunInfo) {\n dryRunInfo.push(info);\n }\n spinner.info(`Would add ${component.title}`);\n return true;\n }\n\n // Copy component files\n for (const file of component.files) {\n const targetPath = path.join(\n config.srcDir ? path.join(cwd, 'src') : cwd,\n file.target\n );\n\n if (!(await sourceFileExists(file.source))) {\n spinner.warn(`Source not found: ${file.source}`);\n continue;\n }\n\n // Read and transform\n let content = await resolveSourceFile(file.source);\n content = transformImports(content, config, file.target);\n \n // Transform relative imports for flattened folder structure\n content = transformRelativeImports(content, file.source, file.target, config.aliases.components);\n \n // Apply VForm-specific transformations for files in vform folder\n if (component.name === 'vform' || file.target.includes('/vform/')) {\n content = transformVFormImports(content, file.source, file.target);\n }\n \n // Add origin header for maintainability\n content = addOriginHeader(content, component.name, '@microbuild/ui-interfaces', registry.version);\n\n // Ensure directory exists\n await fs.ensureDir(path.dirname(targetPath));\n \n // Write transformed file\n const ext = config.tsx ? '.tsx' : '.jsx';\n const finalPath = targetPath.replace(/\\.tsx?$/, ext);\n await fs.writeFile(finalPath, content);\n }\n\n // Track installation with version info\n if (!config.installedComponents.includes(component.name)) {\n config.installedComponents.push(component.name);\n }\n \n // Track component version\n if (!config.componentVersions) {\n config.componentVersions = {};\n }\n config.componentVersions[component.name] = {\n version: registry.version,\n installedAt: new Date().toISOString(),\n source: '@microbuild/ui-interfaces',\n };\n\n spinner.succeed(`Added ${component.title}`);\n return true;\n}\n\n/**\n * Generate components/ui/index.ts with exports for all installed components\n * This allows import { ComponentA, ComponentB } from '@/components/ui'\n * \n * Also detects duplicate named exports across files and warns the user.\n */\nasync function generateComponentsIndex(\n config: Config,\n cwd: string,\n registry: Registry,\n spinner: Ora\n): Promise<void> {\n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n const indexPath = path.join(componentsDir, 'index.ts');\n \n spinner.text = 'Generating components/ui/index.ts...';\n \n // Build export lines for each installed component\n const exportLines: string[] = [\n '/**',\n ' * Microbuild UI Components Index',\n ' * ',\n ' * Auto-generated by Microbuild CLI.',\n ' * Re-run \"microbuild add\" to update after adding new components.',\n ' */',\n '',\n ];\n \n // Use Set to track unique export paths and prevent duplicates\n const exportedPaths = new Set<string>();\n \n // Track named exports across files to detect duplicates\n const namedExportMap = new Map<string, string[]>(); // exportName -> [files]\n \n // Sort components alphabetically for consistent output\n const sortedComponents = [...config.installedComponents].sort();\n \n // Components with known SSR issues that should use wrappers\n const ssrUnsafeComponents: Record<string, string> = {\n 'input-block-editor': 'input-block-editor-wrapper',\n };\n \n // Track skipped components due to SSR wrappers\n const skippedForWrapper: string[] = [];\n \n for (const componentName of sortedComponents) {\n const component = registry.components.find(c => c.name === componentName);\n if (!component) continue;\n \n // Determine the export path based on component structure\n const mainFile = component.files[0];\n if (!mainFile) continue;\n \n const targetPath = mainFile.target;\n let exportPath: string;\n \n // Check if component is in a subfolder (e.g., vform/VForm.tsx) or flat (e.g., input.tsx)\n if (targetPath.includes('/vform/')) {\n // VForm is in a subfolder - export from index\n exportPath = './vform';\n } else {\n // Flat structure - export from kebab-case file\n const fileName = path.basename(targetPath, path.extname(targetPath));\n \n // Check for SSR wrapper replacements\n if (ssrUnsafeComponents[fileName]) {\n const wrapperPath = path.join(componentsDir, `${ssrUnsafeComponents[fileName]}.tsx`);\n if (fs.existsSync(wrapperPath)) {\n exportPath = `./${ssrUnsafeComponents[fileName]}`;\n skippedForWrapper.push(fileName);\n } else {\n exportPath = `./${fileName}`;\n }\n } else {\n exportPath = `./${fileName}`;\n }\n }\n \n // Only add if not already exported (prevents duplicates)\n if (!exportedPaths.has(exportPath)) {\n exportedPaths.add(exportPath);\n exportLines.push(`export * from '${exportPath}';`);\n \n // Check for named exports in the file\n const filePath = path.join(componentsDir, exportPath.slice(2) + '.tsx');\n if (fs.existsSync(filePath)) {\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const namedExportPattern = /export\\s+(?:const|function|class)\\s+(\\w+)/g;\n let match;\n while ((match = namedExportPattern.exec(content)) !== null) {\n const exportName = match[1];\n if (!namedExportMap.has(exportName)) {\n namedExportMap.set(exportName, []);\n }\n namedExportMap.get(exportName)!.push(exportPath);\n }\n } catch {\n // Ignore read errors\n }\n }\n }\n }\n \n // Write the index file\n await fs.writeFile(indexPath, exportLines.join('\\n') + '\\n');\n \n // Warn about duplicate named exports\n const duplicates = Array.from(namedExportMap.entries())\n .filter(([_, files]) => files.length > 1);\n \n if (duplicates.length > 0) {\n spinner.warn('Generated components/ui/index.ts (with duplicate warnings)');\n console.log(chalk.yellow('\\n⚠ Duplicate export names detected:'));\n for (const [exportName, files] of duplicates) {\n console.log(chalk.dim(` \"${exportName}\" exported from: ${files.join(', ')}`));\n }\n console.log(chalk.dim(' Consider using named imports or renaming exports.\\n'));\n } else {\n spinner.info('Generated components/ui/index.ts');\n }\n \n if (skippedForWrapper.length > 0) {\n console.log(chalk.dim(` ℹ Using SSR-safe wrappers for: ${skippedForWrapper.join(', ')}`));\n }\n}\n\n/**\n * Main add command\n */\nexport async function add(\n components: string[],\n options: {\n all?: boolean;\n withApi?: boolean;\n category?: string;\n overwrite?: boolean;\n dryRun?: boolean;\n nonInteractive?: boolean;\n cwd: string;\n }\n) {\n const { cwd, all, withApi, category, overwrite = false, dryRun = false, nonInteractive = false } = options;\n\n // Dry run mode header\n if (dryRun) {\n console.log(chalk.yellow('\\n🔍 Dry Run Mode - No files will be modified\\n'));\n }\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n console.log(chalk.red('\\n✗ microbuild.json not found. Run \"npx microbuild init\" first.\\n'));\n process.exit(1);\n }\n\n // Initialize componentVersions if not present\n if (!config.componentVersions) {\n config.componentVersions = {};\n }\n\n const registry = await getRegistry();\n\n // If --with-api flag is set, add api-routes and supabase-auth lib modules\n if (withApi || all) {\n console.log(chalk.bold('\\n🔌 Installing API routes and Supabase auth...\\n'));\n const spinner = ora('Processing lib modules...').start();\n \n // Install supabase-auth first (dependency of api-routes)\n if (registry.lib['supabase-auth'] && !config.installedLib.includes('supabase-auth')) {\n await copyLibModule('supabase-auth', registry, config, cwd, spinner);\n }\n \n // Install api-routes\n if (registry.lib['api-routes'] && !config.installedLib.includes('api-routes')) {\n await copyLibModule('api-routes', registry, config, cwd, spinner);\n }\n \n spinner.succeed('API routes and auth installed!');\n await saveConfig(cwd, config);\n }\n\n // Determine which components to add\n let componentsToAdd: ComponentEntry[] = [];\n\n if (all) {\n componentsToAdd = registry.components;\n } else if (category) {\n componentsToAdd = registry.components.filter(c => c.category === category);\n if (componentsToAdd.length === 0) {\n console.log(chalk.red(`\\n✗ No components found in category: ${category}\\n`));\n const categories = registry.categories.map(c => c.name).join(', ');\n console.log(chalk.dim(`Available categories: ${categories}\\n`));\n process.exit(1);\n }\n } else if (components.length > 0) {\n for (const name of components) {\n const component = findComponentWithSuggestions(name, registry);\n if (!component) {\n process.exit(1);\n }\n componentsToAdd.push(component);\n }\n } else {\n // Interactive selection\n const choices = registry.categories.map(cat => ({\n title: chalk.bold(cat.title),\n value: cat.name,\n description: cat.description,\n }));\n\n const { selectedCategory } = await prompts({\n type: 'select',\n name: 'selectedCategory',\n message: 'Select a category',\n choices,\n });\n\n if (!selectedCategory) {\n console.log(chalk.yellow('\\n✓ No category selected\\n'));\n return;\n }\n\n const categoryComponents = registry.components.filter(\n c => c.category === selectedCategory\n );\n\n const { selected } = await prompts({\n type: 'multiselect',\n name: 'selected',\n message: 'Select components to add',\n choices: categoryComponents.map(c => ({\n title: `${c.title} - ${c.description}`,\n value: c.name,\n selected: false,\n })),\n hint: '- Space to select. Return to submit',\n });\n\n componentsToAdd = registry.components.filter(c => selected?.includes(c.name));\n }\n\n if (componentsToAdd.length === 0) {\n console.log(chalk.yellow('\\n✓ No components selected\\n'));\n return;\n }\n\n // Dry run mode - show what would be installed\n if (dryRun) {\n console.log(chalk.bold(`\\n🔍 Dry Run: Would add ${componentsToAdd.length} component(s)\\n`));\n \n const dryRunInfo: DryRunInfo[] = [];\n const spinner = ora('Analyzing...').start();\n \n for (const component of componentsToAdd) {\n spinner.text = `Analyzing ${component.title}...`;\n await copyComponent(component, registry, config, cwd, overwrite, spinner, new Set(), true, dryRunInfo);\n }\n \n spinner.stop();\n \n // Display dry run summary\n console.log(chalk.bold('\\n📋 Files that would be created:\\n'));\n \n for (const info of dryRunInfo) {\n console.log(chalk.cyan(` ${info.component}:`));\n for (const file of info.files) {\n console.log(chalk.dim(` → ${file.target}`));\n }\n }\n \n // Show dependencies\n const allDryRunDeps = new Set<string>();\n dryRunInfo.forEach(info => info.dependencies.forEach(dep => allDryRunDeps.add(dep)));\n \n if (allDryRunDeps.size > 0) {\n console.log(chalk.bold('\\n📦 External dependencies needed:\\n'));\n Array.from(allDryRunDeps).forEach(dep => console.log(chalk.dim(` ${dep}`)));\n }\n \n console.log(chalk.dim('\\n Run without --dry-run to install components.\\n'));\n return;\n }\n\n console.log(chalk.bold(`\\n📦 Adding ${componentsToAdd.length} component(s)...\\n`));\n\n const spinner = ora('Processing...').start();\n const allDeps = new Set<string>();\n\n try {\n // Share a single installing Set across all components to prevent duplicate processing\n const sharedInstalling = new Set<string>();\n // Signal non-interactive mode so already-installed components are silently skipped\n if (nonInteractive || all) {\n sharedInstalling.add('__nonInteractive__');\n }\n\n for (const component of componentsToAdd) {\n spinner.text = `Adding ${component.title}...`;\n await copyComponent(component, registry, config, cwd, overwrite, spinner, sharedInstalling, false);\n \n // Collect external dependencies\n component.dependencies.forEach(dep => allDeps.add(dep));\n }\n\n // Update registry version\n config.registryVersion = registry.version;\n\n // Save updated config\n await saveConfig(cwd, config);\n\n // Generate components/ui/index.ts with all exports\n await generateComponentsIndex(config, cwd, registry, spinner);\n\n spinner.succeed('All components added!');\n\n // Run post-install validation to catch any issues (skip in non-interactive mode — bootstrap runs its own)\n if (!nonInteractive) {\n console.log(chalk.bold('\\n🔍 Running post-install validation...\\n'));\n try {\n await validate({ cwd, json: false });\n } catch {\n // Validation errors are already printed, continue with summary\n }\n }\n\n // Check for missing external dependencies\n console.log(chalk.bold('\\n📦 External dependencies...\\n'));\n\n const packageJsonPath = path.join(cwd, 'package.json');\n let missingDeps: string[] = [];\n\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = await fs.readJSON(packageJsonPath);\n const installed = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n missingDeps = Array.from(allDeps).filter(dep => !installed[dep]);\n } else {\n missingDeps = Array.from(allDeps);\n }\n\n if (missingDeps.length > 0) {\n console.log(chalk.yellow('⚠ Missing dependencies:'));\n missingDeps.forEach(dep => console.log(chalk.dim(` - ${dep}`)));\n \n // In non-interactive mode (bootstrap), auto-install without prompting\n let autoInstall = nonInteractive;\n if (!nonInteractive) {\n const answer = await prompts({\n type: 'confirm',\n name: 'autoInstall',\n message: 'Install missing dependencies automatically?',\n initial: true,\n });\n autoInstall = answer.autoInstall;\n }\n \n if (autoInstall) {\n const installSpinner = ora('Installing dependencies...').start();\n try {\n // Detect package manager\n const hasYarnLock = fs.existsSync(path.join(cwd, 'yarn.lock'));\n const hasPnpmLock = fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'));\n const hasBunLock = fs.existsSync(path.join(cwd, 'bun.lockb'));\n \n let installCmd: string;\n if (hasPnpmLock) {\n installCmd = `pnpm add ${missingDeps.join(' ')}`;\n } else if (hasYarnLock) {\n installCmd = `yarn add ${missingDeps.join(' ')}`;\n } else if (hasBunLock) {\n installCmd = `bun add ${missingDeps.join(' ')}`;\n } else {\n installCmd = `npm install ${missingDeps.join(' ')}`;\n }\n \n const { execSync } = await import('child_process');\n execSync(installCmd, { cwd, stdio: 'pipe' });\n installSpinner.succeed('Dependencies installed!');\n } catch (error) {\n installSpinner.fail('Failed to install dependencies');\n console.log(chalk.dim('\\nInstall manually with:'));\n console.log(chalk.cyan(` pnpm add ${missingDeps.join(' ')}\\n`));\n }\n } else {\n console.log(chalk.dim('\\nInstall manually with:'));\n console.log(chalk.cyan(` pnpm add ${missingDeps.join(' ')}\\n`));\n }\n } else {\n console.log(chalk.green('✓ All external dependencies installed\\n'));\n }\n\n // Summary\n console.log(chalk.bold.blue('📋 Summary:\\n'));\n console.log(chalk.dim('Components installed:'));\n config.installedComponents.forEach(name => {\n console.log(chalk.green(` ✓ ${name}`));\n });\n \n if (config.installedLib.length > 0) {\n console.log(chalk.dim('\\nLib modules installed:'));\n config.installedLib.forEach(name => {\n console.log(chalk.green(` ✓ ${name}`));\n });\n }\n\n console.log(chalk.bold.green('\\n✨ Done!\\n'));\n console.log(chalk.dim('Components are now part of your codebase. Customize freely!'));\n console.log(chalk.dim(`Location: ${config.aliases.components}\\n`));\n\n } catch (error) {\n spinner.fail('Failed to add components');\n console.error(chalk.red(error));\n process.exit(1);\n }\n}\n","/**\n * Import Transformer\n * \n * Transforms @microbuild/* imports to local path aliases.\n * This is the core of the Copy & Own model - making copied files self-contained.\n */\n\nimport type { Config } from './init.js';\n\n/**\n * Import replacement mapping\n */\ninterface ImportMapping {\n from: RegExp;\n to: string;\n}\n\n/**\n * Get import mappings based on config\n */\nexport function getImportMappings(config: Config): ImportMapping[] {\n const libAlias = config.aliases.lib;\n const componentsAlias = config.aliases.components;\n\n return [\n // Types\n {\n from: /from ['\"]@microbuild\\/types['\"]/g,\n to: `from '${libAlias}/types'`,\n },\n {\n from: /from ['\"]@microbuild\\/types\\/([^'\"]+)['\"]/g,\n to: `from '${libAlias}/types/$1'`,\n },\n // Services\n {\n from: /from ['\"]@microbuild\\/services['\"]/g,\n to: `from '${libAlias}/services'`,\n },\n {\n from: /from ['\"]@microbuild\\/services\\/([^'\"]+)['\"]/g,\n to: `from '${libAlias}/services/$1'`,\n },\n // Hooks\n {\n from: /from ['\"]@microbuild\\/hooks['\"]/g,\n to: `from '${libAlias}/hooks'`,\n },\n {\n from: /from ['\"]@microbuild\\/hooks\\/([^'\"]+)['\"]/g,\n to: `from '${libAlias}/hooks/$1'`,\n },\n // UI Interfaces (component to component imports)\n {\n from: /from ['\"]@microbuild\\/ui-interfaces['\"]/g,\n to: `from '${componentsAlias}'`,\n },\n {\n from: /from ['\"]@microbuild\\/ui-interfaces\\/([^'\"]+)['\"]/g,\n to: `from '${componentsAlias}/$1'`,\n },\n // UI Collections (component to component imports)\n {\n from: /from ['\"]@microbuild\\/ui-collections['\"]/g,\n to: `from '${componentsAlias}'`,\n },\n {\n from: /from ['\"]@microbuild\\/ui-collections\\/([^'\"]+)['\"]/g,\n to: `from '${componentsAlias}/$1'`,\n },\n // Utils\n {\n from: /from ['\"]@microbuild\\/utils['\"]/g,\n to: `from '${libAlias}/utils'`,\n },\n {\n from: /from ['\"]@microbuild\\/utils\\/([^'\"]+)['\"]/g,\n to: `from '${libAlias}/utils/$1'`,\n },\n // UI Form (VForm and related components)\n {\n from: /from ['\"]@microbuild\\/ui-form['\"]/g,\n to: `from '${componentsAlias}/vform'`,\n },\n {\n from: /from ['\"]@microbuild\\/ui-form\\/([^'\"]+)['\"]/g,\n to: `from '${componentsAlias}/vform/$1'`,\n },\n // Import type statements\n {\n from: /import type \\{([^}]+)\\} from ['\"]@microbuild\\/types['\"]/g,\n to: `import type {$1} from '${libAlias}/types'`,\n },\n {\n from: /import type \\{([^}]+)\\} from ['\"]@microbuild\\/hooks['\"]/g,\n to: `import type {$1} from '${libAlias}/hooks'`,\n },\n {\n from: /import type \\{([^}]+)\\} from ['\"]@microbuild\\/services['\"]/g,\n to: `import type {$1} from '${libAlias}/services'`,\n },\n // Import type for utils\n {\n from: /import type \\{([^}]+)\\} from ['\"]@microbuild\\/utils['\"]/g,\n to: `import type {$1} from '${libAlias}/utils'`,\n },\n // Import type for ui-form\n {\n from: /import type \\{([^}]+)\\} from ['\"]@microbuild\\/ui-form['\"]/g,\n to: `import type {$1} from '${componentsAlias}/vform'`,\n },\n // Dynamic imports - import('@microbuild/services') etc.\n {\n from: /import\\s*\\(\\s*['\"]@microbuild\\/services['\"]\\s*\\)/g,\n to: `import('${libAlias}/services')`,\n },\n {\n from: /import\\s*\\(\\s*['\"]@microbuild\\/hooks['\"]\\s*\\)/g,\n to: `import('${libAlias}/hooks')`,\n },\n {\n from: /import\\s*\\(\\s*['\"]@microbuild\\/types['\"]\\s*\\)/g,\n to: `import('${libAlias}/types')`,\n },\n {\n from: /import\\s*\\(\\s*['\"]@microbuild\\/utils['\"]\\s*\\)/g,\n to: `import('${libAlias}/utils')`,\n },\n ];\n}\n\n/**\n * Transform a file's content by replacing @microbuild/* imports with local paths\n * Also normalizes import paths to use consistent kebab-case file names\n * \n * @param content - File content to transform\n * @param config - Microbuild config\n * @param targetPath - Optional target path for context-aware transformations\n */\nexport function transformImports(content: string, config: Config, targetPath?: string): string {\n const mappings = getImportMappings(config);\n let result = content;\n\n for (const mapping of mappings) {\n result = result.replace(mapping.from, mapping.to);\n }\n\n // Normalize any PascalCase import paths to kebab-case (skips VForm folder)\n result = normalizeImportPaths(result, targetPath);\n\n return result;\n}\n\n/**\n * Transform internal component imports\n * e.g., import { CollectionList } from '@microbuild/ui-collections' \n * -> import { CollectionList } from '@/components/ui/collection-list'\n */\nexport function transformComponentImports(\n content: string,\n _componentName: string,\n config: Config\n): string {\n const componentsAlias = config.aliases.components;\n \n // Handle default exports that reference other components\n const componentImportPattern = new RegExp(\n `from ['\"]\\\\.\\\\.?\\\\/([^'\"]+)['\"\"]`,\n 'g'\n );\n \n return content.replace(componentImportPattern, (match, importPath) => {\n // If it's a relative import to another component file, transform it\n if (importPath.startsWith('..')) {\n // Extract component folder name and convert to kebab-case\n const parts = importPath.split('/');\n const componentFolder = parts[parts.length - 1] || parts[parts.length - 2];\n const kebabName = toKebabCase(componentFolder);\n return `from '${componentsAlias}/${kebabName}'`;\n }\n return match;\n });\n}\n\n/**\n * Convert PascalCase or camelCase to kebab-case\n */\nexport function toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/**\n * Convert kebab-case to PascalCase\n */\nexport function toPascalCase(str: string): string {\n return str\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n\n/**\n * Normalize import paths to use consistent kebab-case file names\n * Fixes issues where imports use PascalCase but files are kebab-case\n * \n * EXCEPTION: VForm folder preserves PascalCase imports because its files\n * are copied with original casing (VForm.tsx, FormField.tsx, etc.)\n * \n * Examples:\n * ./InputBlockEditor → ./input-block-editor\n * ./FileImage → ./file-image\n * ../Upload/Upload → ./upload\n * dynamic import('./InputBlockEditor') → import('./input-block-editor')\n * \n * Files marked with @microbuild-preserve-casing are not normalized.\n */\nexport function normalizeImportPaths(content: string, targetPath?: string): string {\n // Skip normalization for files that preserve casing\n if (content.includes('@microbuild-preserve-casing')) {\n return content;\n }\n \n // Skip normalization for VForm folder files (they use PascalCase filenames)\n if (targetPath && (\n targetPath.includes('/vform/') || \n targetPath.includes('/ui-form/') ||\n targetPath.includes('VForm') ||\n targetPath.includes('FormField')\n )) {\n return content;\n }\n \n // Pattern matches relative imports with PascalCase filenames\n // e.g., from './InputBlockEditor' or from '../Upload/Upload'\n const pascalCaseImportPattern = /from\\s+['\"](\\.\\.\\/?|\\.\\/)([A-Z][a-zA-Z0-9]*(?:\\/[A-Z][a-zA-Z0-9]*)?)['\"]/g;\n \n let result = content.replace(pascalCaseImportPattern, (_match, prefix, importPath) => {\n // Extract the last component (filename) from the path\n const parts = importPath.split('/');\n const fileName = parts[parts.length - 1];\n \n // Convert to kebab-case\n const kebabFileName = toKebabCase(fileName);\n \n // If it was a nested path like '../Upload/Upload', flatten to './upload'\n if (prefix === '../' && parts.length >= 1) {\n return `from './${kebabFileName}'`;\n }\n \n // Otherwise, just convert the filename\n return `from '${prefix}${kebabFileName}'`;\n });\n \n // Handle dynamic imports: import('./InputBlockEditor') → import('./input-block-editor')\n // This pattern matches: import('./ComponentName') or import(\"./ComponentName\")\n const dynamicImportPattern = /import\\s*\\(\\s*['\"](\\.\\/)([A-Z][a-zA-Z0-9]*)['\"]\\s*\\)/g;\n \n result = result.replace(dynamicImportPattern, (_match, prefix, componentName) => {\n const kebabName = toKebabCase(componentName);\n return `import('${prefix}${kebabName}')`;\n });\n \n return result;\n}\n\n/**\n * Check if content has @microbuild/* imports\n */\nexport function hasMicrobuildImports(content: string): boolean {\n return /@microbuild\\/(types|services|hooks|utils|ui-interfaces|ui-collections|ui-form)/.test(content);\n}\n\n/**\n * Known relative import mappings for ui-interfaces components\n * Maps source folder imports to target file imports when flattening structure\n */\nconst RELATIVE_IMPORT_MAPPINGS: Record<string, string> = {\n // file-image/FileImage.tsx imports from ../upload → ./upload\n '../upload': './upload',\n // file/File.tsx imports from ../upload → ./upload\n // files/Files.tsx imports from ../upload → ./upload\n // list-o2m imports from ../upload → ./upload\n};\n\n/**\n * Known relative import mappings for VForm components (nested folder structure)\n * VForm keeps its folder structure, so imports like '../types' need to stay as '../types'\n * but imports from './types' when in the same folder should remain './types'\n */\nconst VFORM_IMPORT_MAPPINGS: Record<string, Record<string, string>> = {\n // Files in vform/components/ folder\n 'components': {\n '../types': '../types',\n './types': '../types',\n },\n // Files in vform/utils/ folder \n 'utils': {\n '../types': '../types',\n './types': '../types',\n },\n // Files in vform/ root folder\n 'root': {\n './types': './types',\n },\n};\n\n/**\n * Transform VForm-specific relative imports based on source file location\n */\nexport function transformVFormImports(\n content: string,\n sourceFile: string,\n _targetFile: string\n): string {\n let result = content;\n \n // Determine which subfolder this file is in\n let folder = 'root';\n if (sourceFile.includes('/components/')) {\n folder = 'components';\n } else if (sourceFile.includes('/utils/')) {\n folder = 'utils';\n }\n \n const mappings = VFORM_IMPORT_MAPPINGS[folder] || {};\n \n for (const [from, to] of Object.entries(mappings)) {\n const importPattern = new RegExp(\n `(from\\\\s+['\"])${from.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}(['\"])`,\n 'g'\n );\n result = result.replace(importPattern, `$1${to}$2`);\n }\n \n return result;\n}\n\n/**\n * Transform relative imports when flattening component folder structure\n * e.g., file-image/FileImage.tsx has `from '../upload'` \n * which becomes `from './upload'` when copied to components/ui/file-image.tsx\n */\nexport function transformRelativeImports(\n content: string, \n _sourceFile: string,\n _targetFile: string,\n _componentsAlias: string\n): string {\n let result = content;\n \n // Apply known mappings\n for (const [from, to] of Object.entries(RELATIVE_IMPORT_MAPPINGS)) {\n // Match import statements with this relative path\n const importPattern = new RegExp(\n `(from\\\\s+['\"])${from.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}(['\"])`,\n 'g'\n );\n result = result.replace(importPattern, `$1${to}$2`);\n }\n \n // Transform sibling component imports (../component-name → ./component-name)\n // This handles cases like: import { Upload } from '../upload' → import { Upload } from './upload'\n const siblingImportPattern = /from\\s+['\"](\\.\\.\\/([a-z][-a-z0-9]*)(?:\\/[A-Z][a-zA-Z]*)?)['\"]/g;\n result = result.replace(siblingImportPattern, (_match, _fullPath, componentFolder) => {\n // Convert to kebab-case and use relative import\n const kebabName = toKebabCase(componentFolder);\n return `from './${kebabName}'`;\n });\n\n return result;\n}\n\n/**\n * Extract which @microbuild/* packages are imported\n */\nexport function extractMicrobuildDependencies(content: string): string[] {\n const deps: Set<string> = new Set();\n \n const patterns = [\n /@microbuild\\/types/g,\n /@microbuild\\/services/g,\n /@microbuild\\/hooks/g,\n /@microbuild\\/ui-interfaces/g,\n /@microbuild\\/ui-collections/g,\n ];\n\n for (const pattern of patterns) {\n if (pattern.test(content)) {\n const match = pattern.source.match(/@microbuild\\/([^/]+)/);\n if (match) {\n // Map package names to lib names\n const libName = match[1].replace('ui-', '');\n if (['types', 'services', 'hooks'].includes(libName)) {\n deps.add(libName);\n }\n }\n }\n }\n\n return Array.from(deps);\n}\n\n/**\n * Add \"use client\" directive if not present (for Next.js App Router)\n */\nexport function ensureUseClient(content: string): string {\n const trimmed = content.trim();\n if (trimmed.startsWith('\"use client\"') || trimmed.startsWith(\"'use client'\")) {\n return content;\n }\n return `\"use client\";\\n\\n${content}`;\n}\n\n/**\n * Remove \"use client\" directive if present\n */\nexport function removeUseClient(content: string): string {\n return content\n .replace(/^[\"']use client[\"'];\\s*\\n*/m, '')\n .trim();\n}\n\n/**\n * Generate origin header comment for copied files\n */\nexport function generateOriginHeader(\n componentName: string,\n sourcePackage: string,\n version: string = '1.0.0'\n): string {\n const timestamp = new Date().toISOString().split('T')[0];\n return `/**\n * @microbuild-origin ${sourcePackage}/${componentName}\n * @microbuild-version ${version}\n * @microbuild-date ${timestamp}\n * \n * This file was copied from Microbuild UI Packages.\n * To update, run: npx @microbuild/cli add ${componentName} --overwrite\n * \n * Docs: https://microbuild.dev/components/${componentName}\n */\n\n`;\n}\n\n/**\n * Add origin header to file content\n */\nexport function addOriginHeader(\n content: string,\n componentName: string,\n sourcePackage: string,\n version: string = '1.0.0'\n): string {\n const header = generateOriginHeader(componentName, sourcePackage, version);\n \n // If file has \"use client\", insert header after it\n const useClientMatch = content.match(/^([\"']use client[\"'];?\\s*\\n)/);\n if (useClientMatch) {\n return useClientMatch[1] + header + content.slice(useClientMatch[0].length);\n }\n \n return header + content;\n}\n\n/**\n * Check if file has microbuild origin header\n */\nexport function hasMicrobuildOrigin(content: string): boolean {\n return content.includes('@microbuild-origin');\n}\n\n/**\n * Extract origin info from file\n */\nexport function extractOriginInfo(content: string): {\n origin?: string;\n version?: string;\n date?: string;\n} | null {\n const originMatch = content.match(/@microbuild-origin\\s+([^\\n*]+)/);\n const versionMatch = content.match(/@microbuild-version\\s+([^\\n*]+)/);\n const dateMatch = content.match(/@microbuild-date\\s+([^\\n*]+)/);\n \n if (!originMatch) return null;\n \n return {\n origin: originMatch[1].trim(),\n version: versionMatch?.[1].trim(),\n date: dateMatch?.[1].trim(),\n };\n}\n","/**\n * Microbuild CLI - Validate Command\n * \n * Validates the Microbuild installation in a project:\n * - Checks for untransformed @microbuild/* imports\n * - Checks for broken relative imports (file not found)\n * - Verifies all component files exist\n * - Checks for missing CSS files\n * - Validates required lib modules are present\n * - Checks for React 19 / Next.js 16 compatibility issues\n * - Runs TypeScript type checking on component files\n * - Suggests fixes for common issues\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport fg from 'fast-glob';\nimport { execSync } from 'child_process';\nimport { type Config, loadConfig } from './init.js';\n\ninterface ValidationResult {\n valid: boolean;\n errors: ValidationError[];\n warnings: ValidationWarning[];\n suggestions: string[];\n}\n\ninterface ValidationError {\n file: string;\n line?: number;\n message: string;\n code: string;\n}\n\ninterface ValidationWarning {\n file: string;\n line?: number;\n message: string;\n code: string;\n}\n\n/**\n * Check for untransformed @microbuild/* imports\n */\nasync function checkUntransformedImports(\n cwd: string,\n config: Config\n): Promise<ValidationError[]> {\n const errors: ValidationError[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const patterns = [\n path.join(srcDir, 'components/**/*.{ts,tsx,js,jsx}'),\n path.join(srcDir, 'lib/microbuild/**/*.{ts,tsx,js,jsx}'),\n ];\n \n for (const pattern of patterns) {\n const files = await fg(pattern, { ignore: ['**/node_modules/**'] });\n \n for (const file of files) {\n const content = await fs.readFile(file, 'utf-8');\n const lines = content.split('\\n');\n \n lines.forEach((line, index) => {\n // Check for @microbuild/* imports (not in comments)\n if (\n (line.includes(\"from '@microbuild/\") || line.includes('from \"@microbuild/')) && \n !line.trim().startsWith('//') &&\n !line.trim().startsWith('*')\n ) {\n errors.push({\n file: path.relative(cwd, file),\n line: index + 1,\n message: `Untransformed import: ${line.trim()}`,\n code: 'UNTRANSFORMED_IMPORT',\n });\n }\n });\n }\n }\n \n return errors;\n}\n\n/**\n * Check for missing CSS files that components might need\n */\nasync function checkMissingCssFiles(\n cwd: string,\n config: Config\n): Promise<ValidationWarning[]> {\n const warnings: ValidationWarning[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n \n // Components that require CSS files\n const cssRequirements: Record<string, string> = {\n 'input-block-editor.tsx': 'InputBlockEditor.css',\n 'rich-text-html.tsx': 'RichTextHTML.css',\n 'rich-text-markdown.tsx': 'RichTextMarkdown.css',\n };\n \n for (const [component, cssFile] of Object.entries(cssRequirements)) {\n const componentPath = path.join(componentsDir, component);\n const cssPath = path.join(componentsDir, cssFile);\n \n if (fs.existsSync(componentPath) && !fs.existsSync(cssPath)) {\n warnings.push({\n file: cssFile,\n message: `Missing CSS file for ${component}`,\n code: 'MISSING_CSS',\n });\n }\n }\n \n return warnings;\n}\n\n/**\n * Check for missing lib modules\n */\nasync function checkLibModules(\n cwd: string,\n config: Config\n): Promise<ValidationError[]> {\n const errors: ValidationError[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const libDir = path.join(srcDir, 'lib/microbuild');\n \n // Required lib modules based on installed components\n const requiredModules: Record<string, string[]> = {\n types: ['types/index.ts', 'types/core.ts'],\n services: ['services/index.ts', 'services/api-request.ts'],\n hooks: ['hooks/index.ts'],\n utils: ['utils.ts', 'field-interface-mapper.ts'],\n };\n \n for (const [module, files] of Object.entries(requiredModules)) {\n if (config.installedLib.includes(module)) {\n for (const file of files) {\n const filePath = path.join(libDir, file);\n if (!fs.existsSync(filePath)) {\n errors.push({\n file: `lib/microbuild/${file}`,\n message: `Missing required file for ${module} module`,\n code: 'MISSING_LIB_FILE',\n });\n }\n }\n }\n }\n \n // Check for interface-registry.ts if define-interface.ts exists\n const defineInterfacePath = path.join(libDir, 'define-interface.ts');\n const interfaceRegistryPath = path.join(libDir, 'interface-registry.ts');\n \n if (fs.existsSync(defineInterfacePath) && !fs.existsSync(interfaceRegistryPath)) {\n errors.push({\n file: 'lib/microbuild/interface-registry.ts',\n message: 'Missing interface-registry.ts (required by define-interface.ts)',\n code: 'MISSING_INTERFACE_REGISTRY',\n });\n }\n \n return errors;\n}\n\n/**\n * Check for SSR-unsafe component usage\n */\nasync function checkSsrIssues(\n cwd: string,\n config: Config\n): Promise<ValidationWarning[]> {\n const warnings: ValidationWarning[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n \n // Check if InputBlockEditor is exported without SSR protection\n const indexPath = path.join(componentsDir, 'index.ts');\n \n if (fs.existsSync(indexPath)) {\n const content = await fs.readFile(indexPath, 'utf-8');\n \n // Check for direct InputBlockEditor export without wrapper\n if (\n content.includes('InputBlockEditor') && \n !content.includes('input-block-editor-wrapper') &&\n content.includes(\"from './input-block-editor'\")\n ) {\n warnings.push({\n file: 'components/ui/index.ts',\n message: 'InputBlockEditor exported directly may cause SSR errors. Use input-block-editor-wrapper instead.',\n code: 'SSR_UNSAFE_EXPORT',\n });\n }\n }\n \n return warnings;\n}\n\n/**\n * Check for missing API routes\n */\nasync function checkApiRoutes(cwd: string): Promise<ValidationWarning[]> {\n const warnings: ValidationWarning[] = [];\n \n // Check for srcDir vs non-srcDir project structure\n const srcDir = fs.existsSync(path.join(cwd, 'src/app')) \n ? path.join(cwd, 'src') \n : cwd;\n const appDir = path.join(srcDir, 'app');\n const apiDir = path.join(appDir, 'api');\n \n // Required API routes for DaaS integration\n const requiredRoutes = [\n { path: 'fields/[collection]/route.ts', description: 'Fetch collection field schemas' },\n { path: 'items/[collection]/route.ts', description: 'List/Create items' },\n { path: 'items/[collection]/[id]/route.ts', description: 'Get/Update/Delete item' },\n ];\n \n // Optional but recommended routes\n const recommendedRoutes = [\n { path: 'relations/route.ts', description: 'Relation definitions (for M2M/M2O/O2M)' },\n { path: 'files/route.ts', description: 'File operations (for file components)' },\n ];\n \n if (!fs.existsSync(apiDir)) {\n warnings.push({\n file: 'app/api/',\n message: 'Missing API directory. Forms require API routes to fetch data from DaaS.',\n code: 'MISSING_API_DIR',\n });\n return warnings;\n }\n \n for (const route of requiredRoutes) {\n const routePath = path.join(apiDir, route.path);\n if (!fs.existsSync(routePath)) {\n warnings.push({\n file: `app/api/${route.path}`,\n message: `Missing required API route: ${route.description}`,\n code: 'MISSING_API_ROUTE',\n });\n }\n }\n \n for (const route of recommendedRoutes) {\n const routePath = path.join(apiDir, route.path);\n if (!fs.existsSync(routePath)) {\n warnings.push({\n file: `app/api/${route.path}`,\n message: `Missing recommended API route: ${route.description}`,\n code: 'MISSING_OPTIONAL_API_ROUTE',\n });\n }\n }\n \n // Check for auth-headers helper\n const authHeadersPath = path.join(srcDir, 'lib/api/auth-headers.ts');\n if (!fs.existsSync(authHeadersPath)) {\n warnings.push({\n file: 'lib/api/auth-headers.ts',\n message: 'Missing auth-headers helper. API routes need this to forward auth tokens.',\n code: 'MISSING_AUTH_HELPER',\n });\n }\n \n return warnings;\n}\n\n/**\n * Check for broken relative imports (file not found)\n */\nasync function checkBrokenRelativeImports(\n cwd: string,\n config: Config\n): Promise<ValidationError[]> {\n const errors: ValidationError[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const patterns = [\n path.join(srcDir, 'components/**/*.{ts,tsx,js,jsx}'),\n path.join(srcDir, 'lib/microbuild/**/*.{ts,tsx,js,jsx}'),\n ];\n \n // Regex to extract relative imports\n const relativeImportPattern = /from\\s+['\"](\\.\\.?\\/[^'\"]+)['\"]/g;\n \n for (const pattern of patterns) {\n const files = await fg(pattern, { ignore: ['**/node_modules/**'] });\n \n for (const file of files) {\n const content = await fs.readFile(file, 'utf-8');\n const lines = content.split('\\n');\n const fileDir = path.dirname(file);\n \n lines.forEach((line, index) => {\n // Skip comments\n if (line.trim().startsWith('//') || line.trim().startsWith('*')) {\n return;\n }\n \n let match;\n relativeImportPattern.lastIndex = 0;\n while ((match = relativeImportPattern.exec(line)) !== null) {\n const importPath = match[1];\n \n // Try to resolve the import\n const possibleExtensions = ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.tsx', '/index.js', '/index.jsx', ''];\n const absolutePath = path.resolve(fileDir, importPath);\n \n const exists = possibleExtensions.some(ext => \n fs.existsSync(absolutePath + ext)\n );\n \n if (!exists) {\n errors.push({\n file: path.relative(cwd, file),\n line: index + 1,\n message: `Cannot find module '${importPath}'`,\n code: 'BROKEN_IMPORT',\n });\n }\n }\n });\n }\n }\n \n return errors;\n}\n\n/**\n * Check for React 19 / Next.js 16 compatibility issues\n */\nasync function checkReact19Compatibility(\n cwd: string,\n config: Config\n): Promise<ValidationWarning[]> {\n const warnings: ValidationWarning[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n \n // Check for component={Link} patterns in Server Components\n const appDir = path.join(srcDir, 'app');\n if (!fs.existsSync(appDir)) {\n return warnings;\n }\n \n const serverComponentPattern = path.join(appDir, '**/page.tsx');\n const files = await fg(serverComponentPattern, { ignore: ['**/node_modules/**'] });\n \n // Pattern for component prop passing (React 19 breaking change)\n const componentPropPattern = /component=\\{[A-Z][a-zA-Z]*\\}/;\n \n for (const file of files) {\n const content = await fs.readFile(file, 'utf-8');\n \n // Skip if file has \"use client\" directive\n if (content.includes('\"use client\"') || content.includes(\"'use client'\")) {\n continue;\n }\n \n const lines = content.split('\\n');\n lines.forEach((line, index) => {\n if (componentPropPattern.test(line)) {\n warnings.push({\n file: path.relative(cwd, file),\n line: index + 1,\n message: 'Passing component as prop in Server Component may cause React 19 errors. Add \"use client\" or use wrapper pattern.',\n code: 'REACT19_COMPONENT_PROP',\n });\n }\n });\n }\n \n return warnings;\n}\n\n/**\n * Check for duplicate exports in index.ts\n */\nasync function checkDuplicateExports(\n cwd: string,\n config: Config\n): Promise<ValidationWarning[]> {\n const warnings: ValidationWarning[] = [];\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const indexPath = path.join(srcDir, 'components/ui/index.ts');\n \n if (!fs.existsSync(indexPath)) {\n return warnings;\n }\n \n const content = await fs.readFile(indexPath, 'utf-8');\n const exportPattern = /export \\* from ['\"]\\.\\/([^'\"]+)['\"]/g;\n const exports = new Map<string, number>();\n \n let match;\n let lineNum = 0;\n const lines = content.split('\\n');\n \n for (const line of lines) {\n lineNum++;\n exportPattern.lastIndex = 0;\n while ((match = exportPattern.exec(line)) !== null) {\n const exportPath = match[1];\n if (exports.has(exportPath)) {\n warnings.push({\n file: 'components/ui/index.ts',\n line: lineNum,\n message: `Duplicate export from './${exportPath}' (first at line ${exports.get(exportPath)})`,\n code: 'DUPLICATE_EXPORT',\n });\n } else {\n exports.set(exportPath, lineNum);\n }\n }\n }\n \n // Check for conflicting named exports across files\n const componentsDir = path.join(srcDir, 'components/ui');\n const namedExports = new Map<string, { file: string; line: number }>();\n \n for (const [exportFile] of exports) {\n const filePath = path.join(componentsDir, exportFile + '.tsx');\n if (!fs.existsSync(filePath)) continue;\n \n const fileContent = await fs.readFile(filePath, 'utf-8');\n const namedExportPattern = /export\\s+(?:const|function|class|type|interface|enum)\\s+(\\w+)/g;\n \n let namedMatch;\n while ((namedMatch = namedExportPattern.exec(fileContent)) !== null) {\n const exportName = namedMatch[1];\n \n if (namedExports.has(exportName)) {\n const firstExport = namedExports.get(exportName)!;\n warnings.push({\n file: `components/ui/${exportFile}.tsx`,\n message: `Conflicting export '${exportName}' also exported from '${firstExport.file}'. This will cause 'export *' conflicts in index.ts`,\n code: 'CONFLICTING_NAMED_EXPORT',\n });\n } else {\n namedExports.set(exportName, { file: exportFile, line: 0 });\n }\n }\n }\n \n return warnings;\n}\n\n/**\n * Run TypeScript type checking on component files\n */\nasync function checkTypeScriptErrors(\n cwd: string,\n config: Config\n): Promise<ValidationError[]> {\n const errors: ValidationError[] = [];\n \n // Check if tsconfig.json exists\n const tsconfigPath = path.join(cwd, 'tsconfig.json');\n if (!fs.existsSync(tsconfigPath)) {\n return errors; // Skip if no tsconfig\n }\n \n // Check if TypeScript is available\n try {\n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n \n if (!fs.existsSync(componentsDir)) {\n return errors;\n }\n \n // Run tsc with --noEmit on specific files\n const result = execSync(\n `npx tsc --noEmit --skipLibCheck --pretty false 2>&1 || true`,\n { cwd, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 }\n );\n \n // Parse TypeScript output\n // Format: filename(line,col): error TS####: message\n const tsErrorPattern = /^(.+?)\\((\\d+),(\\d+)\\):\\s+(error|warning)\\s+(TS\\d+):\\s+(.+)$/gm;\n let match;\n \n while ((match = tsErrorPattern.exec(result)) !== null) {\n const [, file, line, , severity, tsCode, message] = match;\n const relativePath = path.relative(cwd, file);\n \n // Only include errors from components/ui or lib/microbuild\n if (relativePath.includes('components/ui') || relativePath.includes('lib/microbuild')) {\n if (severity === 'error') {\n errors.push({\n file: relativePath,\n line: parseInt(line, 10),\n message: `${tsCode}: ${message}`,\n code: 'TYPESCRIPT_ERROR',\n });\n }\n }\n }\n } catch {\n // TypeScript not available or other error - skip silently\n }\n \n return errors;\n}\n\n/**\n * Generate suggestions based on errors and warnings\n */\nfunction generateSuggestions(\n errors: ValidationError[],\n warnings: ValidationWarning[]\n): string[] {\n const suggestions: string[] = [];\n \n // TypeScript errors\n const tsErrorCount = errors.filter(e => e.code === 'TYPESCRIPT_ERROR').length;\n if (tsErrorCount > 0) {\n suggestions.push(\n `Fix ${tsErrorCount} TypeScript error(s) in component files`\n );\n }\n \n // Untransformed imports\n const untransformedCount = errors.filter(e => e.code === 'UNTRANSFORMED_IMPORT').length;\n if (untransformedCount > 0) {\n suggestions.push(\n `Fix ${untransformedCount} untransformed import(s) by running: pnpm cli add --all --overwrite --cwd .`\n );\n }\n \n // Broken imports\n const brokenImportCount = errors.filter(e => e.code === 'BROKEN_IMPORT').length;\n if (brokenImportCount > 0) {\n suggestions.push(\n `Fix ${brokenImportCount} broken import(s) by checking file paths or reinstalling components`\n );\n }\n \n // Missing lib files\n const missingLibCount = errors.filter(e => e.code === 'MISSING_LIB_FILE').length;\n if (missingLibCount > 0) {\n suggestions.push(\n `Reinstall lib modules with: pnpm cli add vform --overwrite --cwd .`\n );\n }\n \n // Missing interface registry\n if (errors.some(e => e.code === 'MISSING_INTERFACE_REGISTRY')) {\n suggestions.push(\n `Add missing interface-registry.ts by reinstalling utils module`\n );\n }\n \n // Missing CSS files\n const missingCssCount = warnings.filter(w => w.code === 'MISSING_CSS').length;\n if (missingCssCount > 0) {\n suggestions.push(\n `Copy missing CSS files from microbuild-ui-packages/packages/ui-interfaces/src/`\n );\n }\n \n // SSR issues\n if (warnings.some(w => w.code === 'SSR_UNSAFE_EXPORT')) {\n suggestions.push(\n `Update components/ui/index.ts to export InputBlockEditor from './input-block-editor-wrapper'`\n );\n }\n \n // Missing API routes\n const missingRouteCount = warnings.filter(w => w.code === 'MISSING_API_ROUTE').length;\n const missingApiDir = warnings.some(w => w.code === 'MISSING_API_DIR');\n const missingAuthHelper = warnings.some(w => w.code === 'MISSING_AUTH_HELPER');\n \n if (missingApiDir || missingRouteCount > 0 || missingAuthHelper) {\n suggestions.push(\n `Install API routes and auth helpers: pnpm cli add api-routes --cwd .`\n );\n }\n \n // React 19 compatibility\n const react19Count = warnings.filter(w => w.code === 'REACT19_COMPONENT_PROP').length;\n if (react19Count > 0) {\n suggestions.push(\n `Fix ${react19Count} React 19 compatibility issue(s): wrap component with \"use client\" or use Link directly`\n );\n }\n \n // Duplicate exports\n const duplicateCount = warnings.filter(w => w.code === 'DUPLICATE_EXPORT').length;\n if (duplicateCount > 0) {\n suggestions.push(\n `Remove ${duplicateCount} duplicate export(s) from components/ui/index.ts`\n );\n }\n \n return suggestions;\n}\n\n/**\n * Main validate command\n */\nexport async function validate(options: {\n cwd: string;\n json?: boolean;\n noExit?: boolean;\n}): Promise<ValidationResult | undefined> {\n const { cwd, json = false, noExit = false } = options;\n \n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n if (json) {\n console.log(JSON.stringify({\n valid: false,\n errors: [{ file: 'microbuild.json', message: 'Not found', code: 'NO_CONFIG' }],\n warnings: [],\n suggestions: ['Run \"npx microbuild init\" first'],\n }));\n } else {\n console.log(chalk.red('\\n✗ microbuild.json not found. Run \"npx microbuild init\" first.\\n'));\n }\n if (noExit) {\n return { valid: false, errors: [{ file: 'microbuild.json', message: 'Not found', code: 'NO_CONFIG' }], warnings: [], suggestions: ['Run \"npx microbuild init\" first'] };\n }\n process.exit(1);\n }\n \n const spinner = json ? null : ora('Validating Microbuild installation...').start();\n \n try {\n // Run all checks (TypeScript check is separate as it's slower)\n const [\n untransformedErrors,\n brokenImportErrors,\n missingCssWarnings,\n libModuleErrors,\n ssrWarnings,\n apiRouteWarnings,\n react19Warnings,\n duplicateExportWarnings,\n ] = await Promise.all([\n checkUntransformedImports(cwd, config),\n checkBrokenRelativeImports(cwd, config),\n checkMissingCssFiles(cwd, config),\n checkLibModules(cwd, config),\n checkSsrIssues(cwd, config),\n checkApiRoutes(cwd),\n checkReact19Compatibility(cwd, config),\n checkDuplicateExports(cwd, config),\n ]);\n \n // Run TypeScript check (slower, run separately)\n if (spinner) {\n spinner.text = 'Running TypeScript check...';\n }\n const tsErrors = await checkTypeScriptErrors(cwd, config);\n \n const errors = [...untransformedErrors, ...brokenImportErrors, ...libModuleErrors, ...tsErrors];\n const warnings = [...missingCssWarnings, ...ssrWarnings, ...apiRouteWarnings, ...react19Warnings, ...duplicateExportWarnings];\n const suggestions = generateSuggestions(errors, warnings);\n \n const result: ValidationResult = {\n valid: errors.length === 0,\n errors,\n warnings,\n suggestions,\n };\n \n if (noExit) {\n return result;\n }\n\n if (json) {\n console.log(JSON.stringify(result, null, 2));\n return result;\n }\n \n // Display results\n if (errors.length === 0 && warnings.length === 0) {\n spinner?.succeed(chalk.green('Microbuild installation is valid! ✓'));\n console.log(chalk.dim(`\\n ${config.installedComponents.length} components installed`));\n console.log(chalk.dim(` ${config.installedLib.length} lib modules installed\\n`));\n return result;\n }\n \n spinner?.stop();\n \n // Show errors\n if (errors.length > 0) {\n console.log(chalk.red(`\\n✗ Found ${errors.length} error(s):\\n`));\n errors.forEach(error => {\n const location = error.line ? `:${error.line}` : '';\n console.log(chalk.red(` ✗ ${error.file}${location}`));\n console.log(chalk.dim(` ${error.message}`));\n });\n }\n \n // Show warnings\n if (warnings.length > 0) {\n console.log(chalk.yellow(`\\n⚠ Found ${warnings.length} warning(s):\\n`));\n warnings.forEach(warning => {\n console.log(chalk.yellow(` ⚠ ${warning.file}`));\n console.log(chalk.dim(` ${warning.message}`));\n });\n }\n \n // Show suggestions\n if (suggestions.length > 0) {\n console.log(chalk.cyan('\\n💡 Suggestions:\\n'));\n suggestions.forEach((suggestion, i) => {\n console.log(chalk.cyan(` ${i + 1}. ${suggestion}`));\n });\n }\n \n console.log();\n \n if (errors.length > 0) {\n process.exit(1);\n }\n\n return result;\n } catch (error) {\n spinner?.fail('Validation failed');\n console.error(error);\n process.exit(1);\n }\n}\n","import chalk from 'chalk';\nimport { loadConfig } from './init.js';\nimport {\n getRegistry as fetchRegistry,\n type Registry,\n type ComponentEntry,\n} from '../resolver.js';\n\n// Load registry (local or remote via resolver)\nasync function getRegistry(): Promise<Registry> {\n try {\n return await fetchRegistry();\n } catch (err: any) {\n console.error(chalk.red('Failed to load registry:', err.message));\n process.exit(1);\n }\n}\n\nexport async function list(options: { category?: string; json?: boolean; cwd?: string }) {\n const { category, json, cwd = process.cwd() } = options;\n\n const registry = await getRegistry();\n const config = await loadConfig(cwd);\n \n let components = category\n ? registry.components.filter(c => c.category === category)\n : registry.components;\n\n if (json) {\n console.log(JSON.stringify(components, null, 2));\n return;\n }\n\n console.log(chalk.bold('\\n📦 Microbuild Components (Copy & Own)\\n'));\n console.log(chalk.dim('Components are copied to your project as source files.\\n'));\n\n // Group by category\n const byCategory = components.reduce((acc, c) => {\n if (!acc[c.category]) acc[c.category] = [];\n acc[c.category].push(c);\n return acc;\n }, {} as Record<string, ComponentEntry[]>);\n\n // Get category titles\n const categoryTitles = registry.categories.reduce((acc, cat) => {\n acc[cat.name] = cat.title;\n return acc;\n }, {} as Record<string, string>);\n\n for (const [cat, items] of Object.entries(byCategory)) {\n const catTitle = categoryTitles[cat] || cat.toUpperCase();\n console.log(chalk.bold.cyan(`\\n${catTitle}`));\n \n items.forEach(item => {\n const installed = config?.installedComponents.includes(item.name);\n const status = installed ? chalk.green('✓') : ' ';\n const name = item.name.padEnd(28);\n \n console.log(\n ` ${status} ${chalk.green(name)} ${chalk.dim(item.description)}`\n );\n \n // Show what lib modules are required\n if (item.internalDependencies.length > 0) {\n console.log(\n ` ${chalk.dim('requires:')} ${chalk.yellow(item.internalDependencies.join(', '))}`\n );\n }\n });\n }\n\n // Show categories summary\n console.log(chalk.bold('\\n📂 Categories'));\n registry.categories.forEach(cat => {\n const count = registry.components.filter(c => c.category === cat.name).length;\n console.log(` ${chalk.cyan(cat.name.padEnd(15))} ${count} components - ${chalk.dim(cat.description)}`);\n });\n\n // Show installed status\n if (config) {\n console.log(chalk.bold('\\n📋 Installed'));\n console.log(` Components: ${chalk.green(config.installedComponents.length)}`);\n console.log(` Lib modules: ${chalk.green(config.installedLib.length)} ${chalk.dim(`(${config.installedLib.join(', ') || 'none'})`)}`);\n }\n\n console.log(chalk.bold('\\n💡 Usage'));\n console.log(chalk.dim(' npx microbuild add input'));\n console.log(chalk.dim(' npx microbuild add input select-dropdown datetime'));\n console.log(chalk.dim(' npx microbuild add --category selection'));\n console.log(chalk.dim(' npx microbuild add --all\\n'));\n}\n","import fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { loadConfig, resolveAlias } from './init.js';\nimport { transformImports } from './transformer.js';\nimport {\n getRegistry as fetchRegistry,\n resolveSourceFile,\n sourceFileExists,\n type Registry,\n type FileMapping,\n type ComponentEntry,\n} from '../resolver.js';\n\nasync function getRegistry(): Promise<Registry> {\n try {\n return await fetchRegistry();\n } catch (err: any) {\n console.error(chalk.red('Failed to load registry:', err.message));\n process.exit(1);\n }\n}\n\nexport async function diff(component: string, options: { cwd: string }) {\n const { cwd } = options;\n\n console.log(chalk.bold(`\\n📋 Preview: ${component}\\n`));\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n console.log(chalk.red('✗ microbuild.json not found. Run \"npx microbuild init\" first.\\n'));\n process.exit(1);\n }\n\n // Find component\n const registry = await getRegistry();\n const comp = registry.components.find(\n c => c.name.toLowerCase() === component.toLowerCase() ||\n c.title.toLowerCase() === component.toLowerCase()\n );\n\n if (!comp) {\n console.log(chalk.red(`✗ Component not found: ${component}\\n`));\n console.log(chalk.dim('Run \"npx microbuild list\" to see available components.\\n'));\n process.exit(1);\n }\n\n console.log(chalk.bold.cyan(`${comp.title}`));\n console.log(chalk.dim(comp.description));\n console.log();\n\n // Show files that will be created\n console.log(chalk.bold('Files to be created:'));\n for (const file of comp.files) {\n const targetPath = path.join(\n config.srcDir ? path.join(cwd, 'src') : cwd,\n file.target\n );\n const relativePath = path.relative(cwd, targetPath);\n const exists = fs.existsSync(targetPath);\n \n if (exists) {\n console.log(chalk.yellow(` ⚠ ${relativePath} (exists, will be overwritten)`));\n } else {\n console.log(chalk.green(` + ${relativePath}`));\n }\n }\n\n // Show lib dependencies that will be copied\n if (comp.internalDependencies.length > 0) {\n console.log();\n console.log(chalk.bold('Lib modules required:'));\n for (const dep of comp.internalDependencies) {\n const installed = config.installedLib.includes(dep);\n if (installed) {\n console.log(chalk.dim(` ✓ ${dep} (already installed)`));\n } else {\n console.log(chalk.cyan(` → ${dep}`));\n \n // Show files in this lib module\n const libModule = registry.lib[dep];\n if (libModule?.files) {\n for (const file of libModule.files) {\n console.log(chalk.dim(` + ${file.target}`));\n }\n }\n }\n }\n }\n\n // Show external dependencies\n if (comp.dependencies.length > 0) {\n console.log();\n console.log(chalk.bold('External dependencies:'));\n \n const packageJsonPath = path.join(cwd, 'package.json');\n let installed: Record<string, string> = {};\n \n if (fs.existsSync(packageJsonPath)) {\n const pkg = await fs.readJSON(packageJsonPath);\n installed = { ...pkg.dependencies, ...pkg.devDependencies };\n }\n \n for (const dep of comp.dependencies) {\n if (installed[dep]) {\n console.log(chalk.dim(` ✓ ${dep} (v${installed[dep]})`));\n } else {\n console.log(chalk.yellow(` ⚠ ${dep} (not installed)`));\n }\n }\n }\n\n // Show sample transformed code\n console.log();\n console.log(chalk.bold('Import transformation preview:'));\n \n const sampleSource = comp.files[0]?.source;\n if (sampleSource) {\n try {\n const content = await resolveSourceFile(sampleSource);\n const lines = content.split('\\n').slice(0, 15);\n \n console.log(chalk.dim('\\nOriginal imports:'));\n lines.filter(l => l.startsWith('import')).forEach(line => {\n if (line.includes('@microbuild/')) {\n console.log(chalk.red(` ${line}`));\n }\n });\n \n const transformed = transformImports(content, config);\n const transformedLines = transformed.split('\\n').slice(0, 15);\n \n console.log(chalk.dim('\\nTransformed imports:'));\n transformedLines.filter(l => l.startsWith('import')).forEach(line => {\n if (line.includes(config.aliases.lib) || line.includes(config.aliases.components)) {\n console.log(chalk.green(` ${line}`));\n }\n });\n } catch {\n console.log(chalk.dim('\\n (source preview not available in remote mode)'));\n }\n }\n\n console.log();\n console.log(chalk.dim('Run the following to add this component:'));\n console.log(chalk.cyan(` npx microbuild add ${comp.name}\\n`));\n}\n","/**\n * Microbuild CLI - Status Command\n * \n * Scans project for microbuild-installed files and shows:\n * - Which components are installed\n * - Their versions and install dates\n * - Whether they've been modified\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { loadConfig, resolveAlias } from './init.js';\nimport { extractOriginInfo, hasMicrobuildOrigin } from './transformer.js';\n\ninterface InstalledFile {\n path: string;\n origin: string;\n version: string;\n date: string;\n modified: boolean;\n}\n\n/**\n * Recursively find all files with microbuild origin headers\n */\nasync function findMicrobuildFiles(dir: string): Promise<InstalledFile[]> {\n const files: InstalledFile[] = [];\n \n if (!fs.existsSync(dir)) {\n return files;\n }\n\n const entries = await fs.readdir(dir, { withFileTypes: true });\n \n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n \n if (entry.isDirectory()) {\n // Skip node_modules and hidden directories\n if (entry.name !== 'node_modules' && !entry.name.startsWith('.')) {\n const subFiles = await findMicrobuildFiles(fullPath);\n files.push(...subFiles);\n }\n } else if (entry.isFile() && /\\.(tsx?|jsx?)$/.test(entry.name)) {\n const content = await fs.readFile(fullPath, 'utf-8');\n \n if (hasMicrobuildOrigin(content)) {\n const info = extractOriginInfo(content);\n if (info && info.origin) {\n files.push({\n path: fullPath,\n origin: info.origin,\n version: info.version || 'unknown',\n date: info.date || 'unknown',\n modified: false, // TODO: Compare with registry hash\n });\n }\n }\n }\n }\n \n return files;\n}\n\n/**\n * Group files by component/lib\n */\nfunction groupByOrigin(files: InstalledFile[]): Map<string, InstalledFile[]> {\n const groups = new Map<string, InstalledFile[]>();\n \n for (const file of files) {\n const [pkg, component] = file.origin.split('/').slice(0, 2);\n const key = `${pkg}/${component || 'root'}`;\n \n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(file);\n }\n \n return groups;\n}\n\n/**\n * Main status command\n */\nexport async function status(options: { cwd: string; json?: boolean }) {\n const { cwd, json = false } = options;\n\n const config = await loadConfig(cwd);\n if (!config) {\n console.log(chalk.red('\\n✗ microbuild.json not found.\\n'));\n console.log('This project may not be initialized with Microbuild.');\n console.log('Run \"npx @microbuild/cli init\" to initialize.\\n');\n return;\n }\n\n // Scan for installed files\n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const files = await findMicrobuildFiles(srcDir);\n\n if (json) {\n console.log(JSON.stringify({\n config: {\n installedLib: config.installedLib,\n installedComponents: config.installedComponents,\n },\n files: files.map(f => ({\n ...f,\n path: path.relative(cwd, f.path),\n })),\n }, null, 2));\n return;\n }\n\n // Pretty print\n console.log('\\n' + chalk.bold('📦 Microbuild Status\\n'));\n \n console.log(chalk.gray('Config file: ') + 'microbuild.json');\n console.log(chalk.gray('Lib modules: ') + (config.installedLib.join(', ') || 'none'));\n console.log(chalk.gray('Components: ') + (config.installedComponents.join(', ') || 'none'));\n \n if (files.length === 0) {\n console.log('\\n' + chalk.yellow('No files with @microbuild-origin headers found.'));\n console.log(chalk.gray('This may mean components were installed before origin tracking was added.'));\n return;\n }\n\n const groups = groupByOrigin(files);\n \n console.log('\\n' + chalk.bold('Installed Files:\\n'));\n \n for (const [origin, groupFiles] of groups) {\n console.log(chalk.cyan(` ${origin}`));\n for (const file of groupFiles) {\n const relativePath = path.relative(cwd, file.path);\n console.log(chalk.gray(` └─ ${relativePath}`));\n console.log(chalk.gray(` v${file.version} (${file.date})`));\n }\n console.log();\n }\n\n console.log(chalk.gray(`\\nTotal: ${files.length} files from Microbuild\\n`));\n}\n","/**\n * Microbuild CLI - Info Command\n * \n * Show detailed information about a specific component including:\n * - Source files and locations\n * - Dependencies (npm, internal, and registry)\n * - Interface metadata\n */\n\nimport chalk from 'chalk';\nimport {\n getRegistry as fetchRegistry,\n type Registry,\n type FileMapping,\n type LibModule,\n type ComponentEntry,\n} from '../resolver.js';\n\ninterface InterfaceMetadata {\n id: string;\n name: string;\n icon: string;\n types: string[];\n localTypes: string[];\n group: string;\n order: number;\n supported: boolean;\n recommended?: boolean;\n hasOptions: boolean;\n}\n\n// Extend ComponentEntry with interface metadata\ninterface ComponentEntryWithInterface extends ComponentEntry {\n interface?: InterfaceMetadata;\n}\n\n// Load registry (local or remote via resolver)\nasync function getRegistry(): Promise<Registry> {\n try {\n return await fetchRegistry();\n } catch (err: any) {\n console.error(chalk.red('Failed to load registry:', err.message));\n process.exit(1);\n }\n}\n\n/**\n * Find a component by name (case-insensitive, supports aliases)\n */\nfunction findComponent(name: string, registry: Registry): ComponentEntry | undefined {\n const normalized = name.toLowerCase().replace(/-/g, '');\n \n // Direct match\n const direct = registry.components.find(\n c => c.name.toLowerCase() === name.toLowerCase() ||\n c.title.toLowerCase() === name.toLowerCase()\n );\n if (direct) return direct;\n \n // Fuzzy match (remove dashes)\n const fuzzy = registry.components.find(\n c => c.name.toLowerCase().replace(/-/g, '') === normalized ||\n c.title.toLowerCase().replace(/-/g, '') === normalized\n );\n if (fuzzy) return fuzzy;\n \n // Common aliases\n const aliases: Record<string, string> = {\n 'form': 'vform',\n 'dynamicform': 'vform',\n 'select': 'select-dropdown',\n 'dropdown': 'select-dropdown',\n 'checkbox': 'boolean',\n 'switch': 'toggle',\n 'date': 'datetime',\n 'time': 'datetime',\n 'text': 'input',\n 'textinput': 'input',\n 'image': 'file-image',\n 'wysiwyg': 'rich-text-html',\n 'markdown': 'rich-text-markdown',\n 'm2m': 'list-m2m',\n 'm2o': 'list-m2o',\n 'o2m': 'list-o2m',\n 'm2a': 'list-m2a',\n 'manytomany': 'list-m2m',\n 'manytoone': 'list-m2o',\n 'onetomany': 'list-o2m',\n 'manytoany': 'list-m2a',\n };\n \n const aliased = aliases[normalized];\n if (aliased) {\n return registry.components.find(c => c.name === aliased);\n }\n \n return undefined;\n}\n\n/**\n * Calculate total dependencies recursively\n */\nfunction calculateTotalDependencies(\n component: ComponentEntry, \n registry: Registry, \n visited = new Set<string>()\n): { components: string[], libs: string[], npm: string[] } {\n if (visited.has(component.name)) {\n return { components: [], libs: [], npm: [] };\n }\n visited.add(component.name);\n \n const result = {\n components: [component.name],\n libs: [...component.internalDependencies],\n npm: [...component.dependencies],\n };\n \n // Add registry dependencies recursively\n if (component.registryDependencies) {\n for (const depName of component.registryDependencies) {\n const dep = registry.components.find(c => c.name === depName);\n if (dep) {\n const subDeps = calculateTotalDependencies(dep, registry, visited);\n result.components.push(...subDeps.components);\n result.libs.push(...subDeps.libs);\n result.npm.push(...subDeps.npm);\n }\n }\n }\n \n // Deduplicate\n return {\n components: [...new Set(result.components)],\n libs: [...new Set(result.libs)],\n npm: [...new Set(result.npm)],\n };\n}\n\nexport async function info(componentName: string, options: { json?: boolean }) {\n const { json } = options;\n \n const registry = await getRegistry();\n const component = findComponent(componentName, registry);\n \n if (!component) {\n console.log(chalk.red(`\\n✗ Component not found: ${componentName}\\n`));\n \n // Suggest similar components\n const suggestions = registry.components\n .filter(c => \n c.name.includes(componentName.toLowerCase()) ||\n c.title.toLowerCase().includes(componentName.toLowerCase()) ||\n c.description.toLowerCase().includes(componentName.toLowerCase())\n )\n .slice(0, 5);\n \n if (suggestions.length > 0) {\n console.log(chalk.yellow('Did you mean one of these?\\n'));\n suggestions.forEach(s => {\n console.log(` ${chalk.green(s.name.padEnd(25))} ${chalk.dim(s.description)}`);\n });\n console.log();\n }\n \n console.log(chalk.dim('Run \"microbuild list\" to see all available components.\\n'));\n process.exit(1);\n }\n \n const totals = calculateTotalDependencies(component, registry);\n const category = registry.categories.find(c => c.name === component.category);\n \n if (json) {\n console.log(JSON.stringify({\n ...component,\n categoryTitle: category?.title,\n totalDependencies: totals,\n }, null, 2));\n return;\n }\n \n // Display component info\n console.log(chalk.bold.blue(`\\n📦 ${component.title}`));\n console.log(chalk.dim(` ${component.name} • ${category?.title || component.category}\\n`));\n console.log(`${component.description}\\n`);\n \n // Source files\n console.log(chalk.bold('📁 Source Files'));\n component.files.forEach(file => {\n console.log(` ${chalk.green(file.source)}`);\n console.log(` ${chalk.dim('→')} ${chalk.cyan(file.target)}`);\n });\n \n // Direct dependencies\n if (component.dependencies.length > 0) {\n console.log(chalk.bold('\\n📦 NPM Dependencies'));\n console.log(` ${chalk.yellow(component.dependencies.join(', '))}`);\n }\n \n if (component.internalDependencies.length > 0) {\n console.log(chalk.bold('\\n🔧 Lib Modules'));\n component.internalDependencies.forEach(lib => {\n const libModule = registry.lib[lib];\n console.log(` ${chalk.magenta(lib)} ${chalk.dim(`- ${libModule?.description || ''}`)}`);\n });\n }\n \n if (component.registryDependencies && component.registryDependencies.length > 0) {\n console.log(chalk.bold('\\n🔗 Component Dependencies'));\n console.log(` ${chalk.cyan(component.registryDependencies.length)} components will be installed:`);\n const chunks = [];\n for (let i = 0; i < component.registryDependencies.length; i += 6) {\n chunks.push(component.registryDependencies.slice(i, i + 6).join(', '));\n }\n chunks.forEach(chunk => console.log(` ${chalk.dim(chunk)}`));\n }\n \n // Interface metadata\n if (component.interface) {\n console.log(chalk.bold('\\n🎨 Interface Metadata'));\n console.log(` ID: ${chalk.green(component.interface.id)}`);\n console.log(` Icon: ${chalk.cyan(component.interface.icon)}`);\n console.log(` Field Types: ${chalk.yellow(component.interface.types.join(', '))}`);\n if (component.interface.recommended) {\n console.log(` ${chalk.green('★')} Recommended interface for its field types`);\n }\n }\n \n // Total impact\n console.log(chalk.bold('\\n📊 Installation Summary'));\n console.log(` Components: ${chalk.green(totals.components.length)}`);\n console.log(` Lib modules: ${chalk.green(totals.libs.length)} ${chalk.dim(`(${totals.libs.join(', ') || 'none'})`)}`);\n console.log(` NPM packages: ${chalk.yellow(totals.npm.length)}`);\n \n // Usage\n console.log(chalk.bold('\\n💡 Usage'));\n console.log(chalk.dim(` microbuild add ${component.name}`));\n console.log(chalk.dim(` microbuild tree ${component.name}\\n`));\n}\n","/**\n * Microbuild CLI - Tree Command\n * \n * Display dependency tree for a component showing:\n * - Lib module dependencies (types, services, hooks, utils)\n * - Registry dependencies (other components)\n * - NPM package dependencies\n */\n\nimport chalk from 'chalk';\nimport {\n getRegistry as fetchRegistry,\n type Registry,\n type FileMapping,\n type LibModule,\n type ComponentEntry,\n} from '../resolver.js';\n\n// Load registry (local or remote via resolver)\nasync function getRegistry(): Promise<Registry> {\n try {\n return await fetchRegistry();\n } catch (err: any) {\n console.error(chalk.red('Failed to load registry:', err.message));\n process.exit(1);\n }\n}\n\n/**\n * Find a component by name (case-insensitive)\n */\nfunction findComponent(name: string, registry: Registry): ComponentEntry | undefined {\n return registry.components.find(\n c => c.name.toLowerCase() === name.toLowerCase() ||\n c.title.toLowerCase() === name.toLowerCase()\n );\n}\n\ninterface TreeNode {\n name: string;\n type: 'component' | 'lib' | 'npm';\n description?: string;\n children: TreeNode[];\n}\n\n/**\n * Build dependency tree for a component\n */\nfunction buildTree(\n component: ComponentEntry, \n registry: Registry, \n visited = new Set<string>(),\n depth = 0,\n maxDepth = 3\n): TreeNode {\n const node: TreeNode = {\n name: component.name,\n type: 'component',\n description: component.description,\n children: [],\n };\n \n if (visited.has(component.name) || depth >= maxDepth) {\n return node;\n }\n visited.add(component.name);\n \n // Add lib module dependencies\n for (const libName of component.internalDependencies) {\n const libModule = registry.lib[libName];\n const libNode: TreeNode = {\n name: libName,\n type: 'lib',\n description: libModule?.description,\n children: [],\n };\n \n // Add lib's own dependencies\n if (libModule?.internalDependencies) {\n for (const subLib of libModule.internalDependencies) {\n if (!visited.has(`lib:${subLib}`)) {\n visited.add(`lib:${subLib}`);\n const subLibModule = registry.lib[subLib];\n libNode.children.push({\n name: subLib,\n type: 'lib',\n description: subLibModule?.description,\n children: [],\n });\n }\n }\n }\n \n node.children.push(libNode);\n }\n \n // Add registry dependencies (other components)\n if (component.registryDependencies) {\n for (const depName of component.registryDependencies) {\n const dep = findComponent(depName, registry);\n if (dep) {\n node.children.push(buildTree(dep, registry, visited, depth + 1, maxDepth));\n }\n }\n }\n \n // Add npm dependencies\n for (const npmDep of component.dependencies) {\n node.children.push({\n name: npmDep,\n type: 'npm',\n children: [],\n });\n }\n \n return node;\n}\n\n/**\n * Render tree to console\n */\nfunction renderTree(node: TreeNode, prefix = '', isLast = true, isRoot = true): void {\n const connector = isRoot ? '' : (isLast ? '└── ' : '├── ');\n const childPrefix = isRoot ? '' : (isLast ? ' ' : '│ ');\n \n let icon = '';\n let color = chalk.white;\n \n switch (node.type) {\n case 'component':\n icon = '📦';\n color = chalk.green;\n break;\n case 'lib':\n icon = '🔧';\n color = chalk.magenta;\n break;\n case 'npm':\n icon = '📚';\n color = chalk.yellow;\n break;\n }\n \n console.log(\n prefix + \n connector + \n icon + ' ' + \n color(node.name) + \n (node.description && isRoot ? chalk.dim(` - ${node.description}`) : '')\n );\n \n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const isChildLast = i === node.children.length - 1;\n renderTree(child, prefix + childPrefix, isChildLast, false);\n }\n}\n\n/**\n * Flatten tree to get unique dependencies\n */\nfunction flattenTree(node: TreeNode): { components: string[], libs: string[], npm: string[] } {\n const result = {\n components: new Set<string>(),\n libs: new Set<string>(),\n npm: new Set<string>(),\n };\n \n function traverse(n: TreeNode) {\n switch (n.type) {\n case 'component':\n result.components.add(n.name);\n break;\n case 'lib':\n result.libs.add(n.name);\n break;\n case 'npm':\n result.npm.add(n.name);\n break;\n }\n n.children.forEach(traverse);\n }\n \n traverse(node);\n \n return {\n components: Array.from(result.components),\n libs: Array.from(result.libs),\n npm: Array.from(result.npm),\n };\n}\n\nexport async function tree(componentName: string, options: { json?: boolean; depth?: number }) {\n const { json, depth = 2 } = options;\n \n const registry = await getRegistry();\n const component = findComponent(componentName, registry);\n \n if (!component) {\n console.log(chalk.red(`\\n✗ Component not found: ${componentName}\\n`));\n \n // Suggest similar components\n const suggestions = registry.components\n .filter(c => \n c.name.includes(componentName.toLowerCase()) ||\n c.title.toLowerCase().includes(componentName.toLowerCase())\n )\n .slice(0, 5);\n \n if (suggestions.length > 0) {\n console.log(chalk.yellow('Did you mean one of these?\\n'));\n suggestions.forEach(s => {\n console.log(` ${chalk.green(s.name.padEnd(25))} ${chalk.dim(s.description)}`);\n });\n console.log();\n }\n \n console.log(chalk.dim('Run \"microbuild list\" to see all available components.\\n'));\n process.exit(1);\n }\n \n const treeData = buildTree(component, registry, new Set(), 0, depth);\n const flattened = flattenTree(treeData);\n \n if (json) {\n console.log(JSON.stringify({\n tree: treeData,\n summary: flattened,\n }, null, 2));\n return;\n }\n \n console.log(chalk.bold.blue(`\\n🌳 Dependency Tree: ${component.title}\\n`));\n \n renderTree(treeData);\n \n // Summary\n console.log(chalk.bold('\\n📊 Summary'));\n console.log(` ${chalk.green('📦 Components:')} ${flattened.components.length}`);\n console.log(` ${chalk.magenta('🔧 Lib modules:')} ${flattened.libs.length} ${chalk.dim(`(${flattened.libs.join(', ') || 'none'})`)}`);\n console.log(` ${chalk.yellow('📚 NPM packages:')} ${flattened.npm.length}`);\n \n if (flattened.npm.length > 0) {\n console.log(chalk.bold('\\n📦 Install NPM Dependencies'));\n console.log(chalk.dim(` pnpm add ${flattened.npm.join(' ')}\\n`));\n }\n \n console.log(chalk.bold('💡 Add this component'));\n console.log(chalk.dim(` microbuild add ${component.name}\\n`));\n}\n","/**\n * Microbuild CLI - Fix Command\n * \n * Automatically applies fixes for common issues detected by validate.\n * Fixes include:\n * - Untransformed @microbuild/* imports\n * - Broken relative imports\n * - Missing CSS files\n * - SSR-unsafe exports\n * - Duplicate exports\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport fg from 'fast-glob';\nimport prompts from 'prompts';\nimport { type Config, loadConfig } from './init.js';\nimport { transformImports, toKebabCase } from './transformer.js';\n\ninterface FixResult {\n fixed: number;\n skipped: number;\n errors: string[];\n}\n\n/**\n * Fix untransformed @microbuild/* imports\n */\nasync function fixUntransformedImports(\n cwd: string,\n config: Config,\n dryRun: boolean\n): Promise<FixResult> {\n const result: FixResult = { fixed: 0, skipped: 0, errors: [] };\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const patterns = [\n path.join(srcDir, 'components/**/*.{ts,tsx,js,jsx}'),\n path.join(srcDir, 'lib/microbuild/**/*.{ts,tsx,js,jsx}'),\n ];\n \n for (const pattern of patterns) {\n const files = await fg(pattern, { ignore: ['**/node_modules/**'] });\n \n for (const file of files) {\n const content = await fs.readFile(file, 'utf-8');\n \n // Check if file has @microbuild/* imports\n if (content.includes(\"from '@microbuild/\") || content.includes('from \"@microbuild/')) {\n const transformed = transformImports(content, config);\n \n if (transformed !== content) {\n if (dryRun) {\n console.log(chalk.dim(` Would fix: ${path.relative(cwd, file)}`));\n } else {\n await fs.writeFile(file, transformed);\n }\n result.fixed++;\n }\n }\n }\n }\n \n return result;\n}\n\n/**\n * Fix SSR-unsafe exports in components/ui/index.ts\n */\nasync function fixSsrUnsafeExports(\n cwd: string,\n config: Config,\n dryRun: boolean\n): Promise<FixResult> {\n const result: FixResult = { fixed: 0, skipped: 0, errors: [] };\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const indexPath = path.join(srcDir, 'components/ui/index.ts');\n \n if (!fs.existsSync(indexPath)) {\n return result;\n }\n \n let content = await fs.readFile(indexPath, 'utf-8');\n let modified = false;\n \n // Check for direct InputBlockEditor export\n if (\n content.includes(\"from './input-block-editor'\") &&\n !content.includes(\"from './input-block-editor-wrapper'\")\n ) {\n // Check if wrapper exists\n const wrapperPath = path.join(srcDir, 'components/ui/input-block-editor-wrapper.tsx');\n if (fs.existsSync(wrapperPath)) {\n content = content.replace(\n /export \\* from ['\"]\\.\\/input-block-editor['\"]/g,\n \"export * from './input-block-editor-wrapper'\"\n );\n modified = true;\n result.fixed++;\n }\n }\n \n if (modified && !dryRun) {\n await fs.writeFile(indexPath, content);\n } else if (modified && dryRun) {\n console.log(chalk.dim(` Would fix SSR exports in: components/ui/index.ts`));\n }\n \n return result;\n}\n\n/**\n * Fix duplicate exports by using explicit named exports\n */\nasync function fixDuplicateExports(\n cwd: string,\n config: Config,\n dryRun: boolean\n): Promise<FixResult> {\n const result: FixResult = { fixed: 0, skipped: 0, errors: [] };\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const indexPath = path.join(srcDir, 'components/ui/index.ts');\n \n if (!fs.existsSync(indexPath)) {\n return result;\n }\n \n const content = await fs.readFile(indexPath, 'utf-8');\n const componentsDir = path.join(srcDir, 'components/ui');\n \n // Build a map of all named exports across files\n const exportPattern = /export \\* from ['\"]\\.\\/([^'\"]+)['\"]/g;\n const namedExports = new Map<string, { files: string[]; count: number }>();\n const namedExportPattern = /export\\s+(?:const|function|class|type|interface|enum)\\s+(\\w+)/g;\n \n let match;\n while ((match = exportPattern.exec(content)) !== null) {\n const exportFile = match[1];\n const filePath = path.join(componentsDir, exportFile + '.tsx');\n \n if (!fs.existsSync(filePath)) continue;\n \n const fileContent = await fs.readFile(filePath, 'utf-8');\n let namedMatch;\n \n while ((namedMatch = namedExportPattern.exec(fileContent)) !== null) {\n const exportName = namedMatch[1];\n \n if (!namedExports.has(exportName)) {\n namedExports.set(exportName, { files: [exportFile], count: 1 });\n } else {\n const existing = namedExports.get(exportName)!;\n existing.files.push(exportFile);\n existing.count++;\n }\n }\n }\n \n // Find conflicts\n const conflicts = Array.from(namedExports.entries())\n .filter(([_, info]) => info.count > 1);\n \n if (conflicts.length > 0 && !dryRun) {\n console.log(chalk.yellow(`\\n⚠ Found ${conflicts.length} conflicting export(s):`));\n conflicts.forEach(([name, info]) => {\n console.log(chalk.dim(` ${name}: exported from ${info.files.join(', ')}`));\n });\n console.log(chalk.dim('\\nTo fix, manually update components/ui/index.ts to use explicit named exports.'));\n console.log(chalk.dim('Example: export { ComponentA } from \"./file-a\";'));\n result.skipped = conflicts.length;\n } else if (conflicts.length > 0 && dryRun) {\n console.log(chalk.dim(` Would report ${conflicts.length} conflicting exports`));\n }\n \n return result;\n}\n\n/**\n * Fix broken relative imports by normalizing paths\n */\nasync function fixBrokenImports(\n cwd: string,\n config: Config,\n dryRun: boolean\n): Promise<FixResult> {\n const result: FixResult = { fixed: 0, skipped: 0, errors: [] };\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n \n const files = await fg(path.join(componentsDir, '**/*.{ts,tsx}'), {\n ignore: ['**/node_modules/**']\n });\n \n for (const file of files) {\n const content = await fs.readFile(file, 'utf-8');\n const fileDir = path.dirname(file);\n let modified = false;\n let newContent = content;\n \n // Find relative imports\n const relativeImportPattern = /from\\s+['\"](\\.\\.?\\/[^'\"]+)['\"]/g;\n let match;\n \n while ((match = relativeImportPattern.exec(content)) !== null) {\n const importPath = match[1];\n const absolutePath = path.resolve(fileDir, importPath);\n \n // Check if file exists with various extensions\n const extensions = ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.tsx', ''];\n const exists = extensions.some(ext => fs.existsSync(absolutePath + ext));\n \n if (!exists) {\n // Try to find the correct path by checking kebab-case\n const baseName = path.basename(importPath);\n const kebabName = toKebabCase(baseName);\n const dirName = path.dirname(importPath);\n const newImportPath = dirName === '.' ? `./${kebabName}` : `${dirName}/${kebabName}`;\n const newAbsolutePath = path.resolve(fileDir, newImportPath);\n \n const newExists = extensions.some(ext => fs.existsSync(newAbsolutePath + ext));\n \n if (newExists) {\n newContent = newContent.replace(\n new RegExp(`from\\\\s+['\"]${importPath.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}['\"]`),\n `from '${newImportPath}'`\n );\n modified = true;\n result.fixed++;\n }\n }\n }\n \n if (modified && !dryRun) {\n await fs.writeFile(file, newContent);\n } else if (modified && dryRun) {\n console.log(chalk.dim(` Would fix imports in: ${path.relative(cwd, file)}`));\n }\n }\n \n return result;\n}\n\n/**\n * Copy missing CSS files from source\n */\nasync function fixMissingCss(\n cwd: string,\n config: Config,\n dryRun: boolean\n): Promise<FixResult> {\n const result: FixResult = { fixed: 0, skipped: 0, errors: [] };\n \n const srcDir = config.srcDir ? path.join(cwd, 'src') : cwd;\n const componentsDir = path.join(srcDir, 'components/ui');\n \n // CSS requirements mapping\n const cssRequirements: Record<string, { component: string; cssFile: string }> = {\n 'input-block-editor.tsx': {\n component: 'input-block-editor',\n cssFile: 'InputBlockEditor.css'\n },\n 'rich-text-html.tsx': {\n component: 'rich-text-html',\n cssFile: 'RichTextHTML.css'\n },\n 'rich-text-markdown.tsx': {\n component: 'rich-text-markdown', \n cssFile: 'RichTextMarkdown.css'\n },\n };\n \n for (const [componentFile, info] of Object.entries(cssRequirements)) {\n const componentPath = path.join(componentsDir, componentFile);\n const cssPath = path.join(componentsDir, info.cssFile);\n \n if (fs.existsSync(componentPath) && !fs.existsSync(cssPath)) {\n if (dryRun) {\n console.log(chalk.dim(` Would copy missing CSS: ${info.cssFile}`));\n result.fixed++;\n } else {\n // Note: In real implementation, you'd copy from source registry\n console.log(chalk.yellow(` Missing CSS: ${info.cssFile}`));\n console.log(chalk.dim(` Reinstall component: npx microbuild add ${info.component} --overwrite`));\n result.skipped++;\n }\n }\n }\n \n return result;\n}\n\n/**\n * Main fix command\n */\nexport async function fix(options: {\n cwd: string;\n dryRun?: boolean;\n yes?: boolean;\n}) {\n const { cwd, dryRun = false, yes = false } = options;\n \n console.log(chalk.bold('\\n🔧 Microbuild Fix\\n'));\n \n if (dryRun) {\n console.log(chalk.yellow('Dry run mode - no changes will be made\\n'));\n }\n \n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n console.log(chalk.red('✗ microbuild.json not found. Run \"npx microbuild init\" first.\\n'));\n process.exit(1);\n }\n \n // Confirm before fixing (unless --yes or --dry-run)\n if (!yes && !dryRun) {\n const { confirm } = await prompts({\n type: 'confirm',\n name: 'confirm',\n message: 'This will modify files in your project. Continue?',\n initial: true,\n });\n \n if (!confirm) {\n console.log(chalk.yellow('\\n✓ Cancelled\\n'));\n return;\n }\n }\n \n const spinner = ora('Scanning for issues...').start();\n \n try {\n // Run all fixes\n spinner.text = 'Fixing untransformed imports...';\n const importResult = await fixUntransformedImports(cwd, config, dryRun);\n \n spinner.text = 'Fixing broken relative imports...';\n const brokenResult = await fixBrokenImports(cwd, config, dryRun);\n \n spinner.text = 'Fixing SSR-unsafe exports...';\n const ssrResult = await fixSsrUnsafeExports(cwd, config, dryRun);\n \n spinner.text = 'Checking duplicate exports...';\n const duplicateResult = await fixDuplicateExports(cwd, config, dryRun);\n \n spinner.text = 'Checking missing CSS files...';\n const cssResult = await fixMissingCss(cwd, config, dryRun);\n \n spinner.stop();\n \n // Calculate totals\n const totalFixed = importResult.fixed + brokenResult.fixed + ssrResult.fixed + cssResult.fixed;\n const totalSkipped = importResult.skipped + brokenResult.skipped + ssrResult.skipped + \n duplicateResult.skipped + cssResult.skipped;\n \n // Summary\n console.log(chalk.bold('\\n📋 Fix Summary:\\n'));\n \n if (importResult.fixed > 0) {\n console.log(chalk.green(` ✓ Fixed ${importResult.fixed} untransformed import(s)`));\n }\n if (brokenResult.fixed > 0) {\n console.log(chalk.green(` ✓ Fixed ${brokenResult.fixed} broken import(s)`));\n }\n if (ssrResult.fixed > 0) {\n console.log(chalk.green(` ✓ Fixed ${ssrResult.fixed} SSR-unsafe export(s)`));\n }\n if (cssResult.fixed > 0) {\n console.log(chalk.green(` ✓ Fixed ${cssResult.fixed} missing CSS file(s)`));\n }\n \n if (totalSkipped > 0) {\n console.log(chalk.yellow(`\\n ⚠ Skipped ${totalSkipped} issue(s) requiring manual fix`));\n }\n \n if (totalFixed === 0 && totalSkipped === 0) {\n console.log(chalk.green(' ✓ No issues found!\\n'));\n } else if (dryRun) {\n console.log(chalk.dim('\\n Run without --dry-run to apply fixes\\n'));\n } else {\n console.log(chalk.green('\\n✨ Fixes applied!\\n'));\n console.log(chalk.dim('Run \"npx microbuild validate\" to verify.\\n'));\n }\n \n } catch (error) {\n spinner.fail('Fix failed');\n console.error(chalk.red(error));\n process.exit(1);\n }\n}\n","/**\n * Microbuild CLI - Bootstrap Command\n * \n * Single atomic command that combines:\n * 1. init (create microbuild.json, package.json, Next.js skeleton)\n * 2. add --all (copy all components)\n * 3. npm dependency installation\n * 4. post-install validation\n * \n * Designed for AI agents and CI/CD where the entire setup must complete\n * in a single terminal invocation without hanging.\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { init } from './init.js';\nimport { add } from './add.js';\nimport { validate } from './validate.js';\n\n/**\n * Main bootstrap command\n * \n * Usage:\n * pnpm cli bootstrap --cwd /path/to/project\n * pnpm cli bootstrap --skip-deps --cwd /path/to/project\n */\nexport async function bootstrap(options: {\n cwd: string;\n skipDeps?: boolean;\n skipValidate?: boolean;\n}) {\n const { cwd, skipDeps = false, skipValidate = false } = options;\n const startTime = Date.now();\n\n console.log(chalk.bold.blue('\\n🚀 Microbuild Bootstrap - Full Project Setup\\n'));\n console.log(chalk.dim(`Target: ${cwd}\\n`));\n\n // ── Step 1: Init ───────────────────────────────────────────────\n console.log(chalk.bold('━'.repeat(60)));\n console.log(chalk.bold('Step 1/3: Initializing project...\\n'));\n\n try {\n await init({ yes: true, cwd });\n } catch (error) {\n console.error(chalk.red('\\n✗ Init failed:'), error);\n process.exit(1);\n }\n\n // ── Step 2: Add all components ─────────────────────────────────\n console.log(chalk.bold('\\n' + '━'.repeat(60)));\n console.log(chalk.bold('Step 2/3: Adding all components...\\n'));\n\n try {\n await add([], {\n all: true,\n withApi: true,\n cwd,\n nonInteractive: true,\n });\n } catch (error) {\n console.error(chalk.red('\\n✗ Component installation failed:'), error);\n process.exit(1);\n }\n\n // ── Step 3: Install npm dependencies ───────────────────────────\n // All dependencies (including TipTap, EditorJS, MapLibre, etc.) are now\n // pre-configured in package.json by the init step, so a single `pnpm install`\n // resolves everything. No more post-install surprise TS2307 errors.\n if (!skipDeps) {\n console.log(chalk.bold('\\n' + '━'.repeat(60)));\n console.log(chalk.bold('Step 3/3: Installing npm dependencies...\\n'));\n\n try {\n // Run pnpm install to resolve everything from package.json\n const { execSync } = await import('child_process');\n const hasPnpmLock = fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'));\n const hasYarnLock = fs.existsSync(path.join(cwd, 'yarn.lock'));\n const hasBunLock = fs.existsSync(path.join(cwd, 'bun.lockb'));\n\n let installCmd: string;\n if (hasPnpmLock || (!hasYarnLock && !hasBunLock)) {\n installCmd = 'pnpm install';\n } else if (hasYarnLock) {\n installCmd = 'yarn install';\n } else {\n installCmd = 'bun install';\n }\n\n console.log(chalk.dim(` Running: ${installCmd}\\n`));\n execSync(installCmd, { cwd, stdio: 'inherit' });\n console.log(chalk.green('\\n✓ Dependencies installed!'));\n } catch (error) {\n console.log(chalk.yellow('\\n⚠ Dependency installation had issues. Run \"pnpm install\" manually.'));\n }\n } else {\n console.log(chalk.dim('\\nSkipped dependency installation (--skip-deps)\\n'));\n }\n\n // ── Validation ─────────────────────────────────────────────────\n if (!skipValidate) {\n console.log(chalk.bold('\\n' + '━'.repeat(60)));\n console.log(chalk.bold('Validating installation...\\n'));\n\n try {\n const result = await validate({ cwd, json: false, noExit: true });\n \n if (result && !result.valid) {\n // Separate TS errors (non-fatal) from structural errors (fatal)\n const tsErrors = result.errors.filter((e: { code: string }) => e.code === 'TYPESCRIPT_ERROR');\n const structuralErrors = result.errors.filter((e: { code: string }) => e.code !== 'TYPESCRIPT_ERROR');\n \n if (tsErrors.length > 0) {\n console.log(chalk.yellow(`\\n⚠ ${tsErrors.length} TypeScript type error(s) detected in component files.`));\n console.log(chalk.yellow(' These may cause build failures. Run \"pnpm cli fix --cwd .\" to attempt auto-fix,'));\n console.log(chalk.yellow(' or ensure all component dependencies are installed.\\n'));\n }\n \n if (structuralErrors.length > 0) {\n console.log(chalk.red(`\\n✗ ${structuralErrors.length} structural error(s) found that need fixing.`));\n }\n }\n } catch {\n // Validation errors are printed inline, don't fail bootstrap\n console.log(chalk.yellow('\\n⚠ Validation encountered issues (see above). Bootstrap still completed.\\n'));\n }\n }\n\n // ── Summary ────────────────────────────────────────────────────\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\n\n console.log(chalk.bold('\\n' + '━'.repeat(60)));\n console.log(chalk.bold.green(`\\n✨ Bootstrap complete! (${elapsed}s)\\n`));\n console.log(chalk.dim('Your project is ready with:'));\n console.log(chalk.dim(' • microbuild.json configuration'));\n console.log(chalk.dim(' • 40+ UI components in components/ui/'));\n console.log(chalk.dim(' • Types, services, hooks in lib/microbuild/'));\n console.log(chalk.dim(' • API proxy routes in app/api/'));\n console.log(chalk.dim(' • Supabase auth utilities'));\n console.log(chalk.dim(' • Next.js skeleton (layout, page, config)'));\n\n console.log(chalk.bold('\\nNext steps:'));\n console.log(chalk.cyan(' 1. ') + chalk.dim('Configure .env.local with your DaaS URL'));\n console.log(chalk.cyan(' 2. ') + chalk.dim('pnpm dev'));\n console.log(chalk.cyan(' 3. ') + chalk.dim('Create pages that import from @/components/ui/\\n'));\n}\n"],"mappings":"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","names":["fs","path","chalk","ora","getRegistry","chalk","path","fs","info","spinner","ora","execSync","chalk","getRegistry","chalk","status","fs","path","chalk","getRegistry","chalk","path","fs","fs","path","chalk","fs","path","info","chalk","chalk","getRegistry","chalk","chalk","getRegistry","chalk","findComponent","fs","path","chalk","ora","fg","prompts","path","fg","fs","chalk","info","prompts","ora","fs","path","chalk","chalk","execSync","fs","path"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getRegistry,
3
3
  loadConfig
4
- } from "./chunk-6YA3DSAE.js";
4
+ } from "./chunk-IW632G56.js";
5
5
 
6
6
  // src/commands/outdated.ts
7
7
  import chalk from "chalk";
@@ -107,4 +107,4 @@ Total: ${config.installedComponents.length} components, ${config.installedLib.le
107
107
  export {
108
108
  outdated
109
109
  };
110
- //# sourceMappingURL=outdated-TV5ERBNC.js.map
110
+ //# sourceMappingURL=outdated-7AGUFNHG.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microbuild/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "CLI tool for adding Microbuild components to your project - like shadcn/ui",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",