ui8kit 1.3.8 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/commands/add.ts","../src/registry/api.ts","../src/registry/schema.ts","../src/utils/schema-config.ts","../src/utils/logger.ts","../src/utils/cache.ts","../src/utils/project.ts","../src/utils/registry-validator.ts","../src/commands/init.ts","../src/utils/cli-messages.ts","../src/utils/package-manager.ts","../src/utils/dependency-checker.ts","../src/utils/errors.ts","../src/utils/dependency-resolver.ts","../src/utils/diff-utils.ts","../src/utils/transform.ts","../src/commands/build.ts","../src/registry/build-schema.ts","../src/utils/schema-generator.ts","../src/utils/map-generator.ts","../src/commands/scan.ts","../src/commands/list.ts","../src/commands/diff.ts","../src/commands/cache.ts","../src/commands/info.ts","../src/utils/cli-version.ts","../src/commands/registry.ts","../src/commands/reset.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\"\nimport chalk from \"chalk\"\nimport { addCommand } from \"./commands/add.js\"\nimport { initCommand } from \"./commands/init.js\"\nimport { buildCommand } from \"./commands/build.js\"\nimport { scanCommand } from \"./commands/scan.js\"\nimport { listCommand } from \"./commands/list.js\"\nimport { diffCommand } from \"./commands/diff.js\"\nimport { cacheClearCommand } from \"./commands/cache.js\"\nimport { infoCommand } from \"./commands/info.js\"\nimport { registryCleanCommand } from \"./commands/registry.js\"\nimport { resetCommand } from \"./commands/reset.js\"\nimport { logger } from \"./utils/logger.js\"\nimport { getCliVersion } from \"./utils/cli-version.js\"\nimport { resolve } from \"node:path\"\n\nconst program = new Command()\n\nprogram\n .option(\"-c, --cwd <dir>\", \"Working directory\", process.cwd())\n .option(\"-v, --verbose\", \"Enable verbose output\")\n .option(\"--no-cache\", \"Bypass registry cache\")\n .name(\"ui8kit\")\n .description(\"A CLI for adding UI components to your Vite React projects (UI8Kit registry)\")\n .version(getCliVersion())\n\nprogram\n .command(\"list\")\n .description(\"List available components in registry\")\n .option(\"-r, --registry <type>\", \"Registry type: ui\", \"ui\")\n .option(\"--json\", \"Output raw JSON\")\n .option(\"--registry-url <url>\", \"Override CDN registry base URL\")\n .option(\"--registry-version <version>\", \"Override registry @latest version\")\n .option(\"--strict-cdn\", \"Disable fallback CDN providers when override is provided\")\n .action((options) => listCommand(options))\n\nprogram\n .command(\"diff\")\n .description(\"Show local vs registry differences\")\n .argument(\"[component]\", \"Component name\")\n .option(\"-r, --registry <type>\", \"Registry type: ui\", \"ui\")\n .option(\"--json\", \"Output diff in machine-readable JSON\")\n .option(\"--registry-url <url>\", \"Override CDN registry base URL\")\n .option(\"--registry-version <version>\", \"Override registry @latest version\")\n .option(\"--strict-cdn\", \"Disable fallback CDN providers when override is provided\")\n .action((component, options) => diffCommand(component, options))\n\nprogram\n .command(\"cache\")\n .description(\"Manage local cache\")\n .command(\"clear\")\n .description(\"Clear registry cache\")\n .action(cacheClearCommand)\n\nprogram\n .command(\"registry\")\n .description(\"Manage generated registry artifacts\")\n .command(\"clean\")\n .description(\"Remove generated registry build artifacts\")\n .option(\"--dry-run\", \"Show what would be removed without deleting\")\n .option(\"--all\", \"Also remove src/registry.json if it exists\")\n .option(\"-f, --force\", \"Skip confirmation prompt\")\n .action(registryCleanCommand)\n\nprogram\n .command(\"reset\")\n .description(\"Reset local UI8Kit state\")\n .option(\"--dry-run\", \"Show what would be removed without deleting\")\n .option(\"--with-cache\", \"Also clear CLI cache data\")\n .option(\"-y, --yes\", \"Skip prompts and perform reset\")\n .option(\"-f, --force\", \"Skip confirmation prompt\")\n .action(resetCommand)\n\nprogram\n .command(\"info\")\n .description(\"Show environment and config diagnostics\")\n .option(\"--json\", \"Output diagnostics as JSON\")\n .option(\"--cdn\", \"Show resolved CDN order and active overrides\")\n .action(infoCommand)\n\nprogram\n .command(\"init\")\n .description(\"Initialize UI8Kit structure in your project\")\n .option(\"-y, --yes\", \"Skip prompts and use defaults\")\n .option(\"-r, --registry <type>\", \"Registry type: ui\", \"ui\")\n .option(\"--registry-url <url>\", \"Override CDN registry base URL\")\n .option(\"--registry-version <version>\", \"Override registry @latest version\")\n .option(\"--strict-cdn\", \"Disable fallback CDN providers when override is provided\")\n .action(initCommand)\n\nprogram\n .command(\"add\")\n .description(\"Add components to your project from the registry\")\n .argument(\"[components...]\", \"Components to add\")\n .option(\"-a, --all\", \"Install all available components\")\n .option(\"-f, --force\", \"Overwrite existing files\")\n .option(\"-r, --registry <type>\", \"Registry type: ui\", \"ui\")\n .option(\"--dry-run\", \"Show what would be installed without installing\")\n .option(\"--retry\", \"Aggressive retry mode (3 attempts per CDN request)\")\n .option(\"--registry-url <url>\", \"Override CDN registry base URL\")\n .option(\"--registry-version <version>\", \"Override registry @latest version\")\n .option(\"--strict-cdn\", \"Disable fallback CDN providers when override is provided\")\n .action(addCommand)\n\nprogram\n .command(\"scan\")\n .description(\"Scan and generate registry from existing components\")\n .option(\"-r, --registry <type|path>\", \"Registry type (ui) or custom path\", \"ui\")\n .option(\"-o, --output <file>\", \"Output registry file\")\n .option(\"-s, --source <dir>\", \"Source directory to scan\")\n .action(async (options) => {\n await scanCommand(options)\n })\n\nprogram\n .command(\"build\")\n .description(\"Build components registry\")\n .argument(\"[registry]\", \"Path to registry.json file\", \"./src/registry.json\")\n .option(\"-o, --output <path>\", \"Output directory\", \"./packages/registry/r\")\n .action(buildCommand)\n\nprogram.on(\"command:*\", () => {\n console.error(chalk.red(`Invalid command: ${program.args.join(\" \")}`))\n console.log(\"See --help for a list of available commands.\")\n process.exit(1)\n})\n\nprogram.hook(\"preAction\", (_, actionCommand) => {\n const actionOptions = actionCommand?.opts?.() as {\n verbose?: boolean\n cwd?: string\n } | undefined\n const globalOptions = program.opts() as {\n verbose?: boolean\n cwd?: string\n }\n\n const verbose = globalOptions.verbose || actionOptions?.verbose\n const cwd = actionOptions?.cwd || globalOptions.cwd\n\n if (verbose) {\n logger.setVerbose(true)\n }\n\n if (cwd && resolve(process.cwd()) !== resolve(cwd)) {\n process.chdir(cwd)\n }\n})\n\nprogram.parse()","import ora from \"ora\"\nimport path from \"path\"\nimport fs from \"fs-extra\"\nimport fetch from \"node-fetch\"\nimport prompts from \"prompts\"\nimport { getComponent, getAllComponents } from \"../registry/api.js\"\nimport { findConfig } from \"../utils/project.js\"\nimport { Component, type Config } from \"../registry/schema.js\"\nimport { SCHEMA_CONFIG, type RegistryType, getCdnUrls, type CdnResolutionOptions } from \"../utils/schema-config.js\"\nimport { validateComponentInstallation, handleValidationError } from \"../utils/registry-validator.js\"\nimport { checkProjectDependencies, showDependencyStatus } from \"../utils/dependency-checker.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { installDependencies } from \"../utils/package-manager.js\"\nimport { logger } from \"../utils/logger.js\"\nimport { resolveRegistryTree } from \"../utils/dependency-resolver.js\"\nimport { handleError, ConfigNotFoundError } from \"../utils/errors.js\"\nimport { buildUnifiedDiff, formatDiffPreview, hasDiff } from \"../utils/diff-utils.js\"\nimport { applyTransforms, shouldTransformFile } from \"../utils/transform.js\"\n\ninterface AddOptions {\n force?: boolean\n dryRun?: boolean\n all?: boolean\n retry?: boolean\n registry?: string\n cache?: boolean\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n}\n\nconst ADD_EXCLUDED_COMPONENT_TYPES = [\"registry:variants\", \"registry:lib\"]\n\nexport async function addCommand(components: string[], options: AddOptions) {\n const registryType = resolveRegistryType(options.registry)\n const cdnResolution: CdnResolutionOptions = {\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn\n }\n const requestOptions = {\n excludeTypes: ADD_EXCLUDED_COMPONENT_TYPES,\n maxRetries: options.retry ? 3 : 1,\n noCache: options.cache === false,\n cdn: cdnResolution\n }\n\n try {\n if (options.all || components.includes(\"all\")) {\n await addAllComponents(options, registryType, requestOptions)\n return\n }\n\n const selectedComponents = components.length > 0\n ? components\n : await pickComponentsFromPrompt(registryType, requestOptions)\n\n if (selectedComponents.length === 0) {\n logger.warn(CLI_MESSAGES.errors.noComponentsSpecified)\n return\n }\n\n const validation = await validateComponentInstallation(selectedComponents, registryType)\n if (!validation.isValid) {\n handleValidationError(validation)\n }\n\n const config = await findConfig(registryType)\n if (!config) {\n throw new ConfigNotFoundError(registryType)\n }\n\n if (options.retry) {\n logger.info(CLI_MESSAGES.info.retryEnabled)\n }\n\n logger.info(CLI_MESSAGES.info.installing(registryType))\n\n const getComponentFn = (name: string, type: RegistryType) =>\n getComponent(name, type, requestOptions)\n\n const results = await installRequestedComponents(\n selectedComponents,\n registryType,\n config,\n getComponentFn,\n options\n )\n\n displayInstallationSummary(registryType, results)\n } catch (error) {\n handleError(error)\n }\n}\n\nasync function addAllComponents(\n options: AddOptions,\n registryType: RegistryType,\n requestOptions: { excludeTypes: string[]; maxRetries: number; noCache?: boolean; cdn?: CdnResolutionOptions }\n) {\n logger.info(CLI_MESSAGES.info.installingAll(registryType))\n\n const validation = await validateComponentInstallation([], registryType)\n if (!validation.isValid) {\n handleValidationError(validation)\n }\n\n const config = await findConfig(registryType)\n if (!config) {\n throw new ConfigNotFoundError(registryType)\n }\n \n const getAllComponentsFn = (type: RegistryType) => getAllComponents(type, requestOptions)\n \n if (options.retry) {\n logger.info(CLI_MESSAGES.info.retryEnabled)\n }\n \n const spinner = ora(CLI_MESSAGES.info.fetchingComponentList(registryType)).start()\n \n try {\n const allComponents = await getAllComponentsFn(registryType)\n \n if (allComponents.length === 0) {\n spinner.fail(`No components found in ${registryType} registry`)\n logger.warn(`\\n⚠️ ${registryType} ${CLI_MESSAGES.errors.registryTempUnavailable}`)\n console.log(\"Try these alternatives:\")\n CLI_MESSAGES.examples.troubleshooting.forEach(alt => console.log(` • ${alt}`))\n return\n }\n \n spinner.succeed(CLI_MESSAGES.status.foundComponents(allComponents.length, registryType))\n \n if (options.dryRun) {\n await installRequestedComponents(\n allComponents.map(c => c.name),\n registryType,\n config,\n (name: string, type: RegistryType) => getComponent(name, type, requestOptions),\n options,\n allComponents\n )\n return\n }\n \n const results = await installRequestedComponents(\n allComponents.map(c => c.name),\n registryType,\n config,\n (name: string, type: RegistryType) => getComponent(name, type, requestOptions),\n options,\n allComponents\n )\n \n // Install components/index.ts when using --all\n await installComponentsIndex(registryType, config, requestOptions.cdn)\n \n displayInstallationSummary(registryType, results)\n \n } catch (error) {\n spinner.fail(CLI_MESSAGES.errors.failedToFetch(registryType))\n logger.error(`Error: ${(error as Error).message}`)\n logger.warn(`\\n⚠️ ${registryType} ${CLI_MESSAGES.errors.registryTempUnavailable}`)\n console.log(\"Try these alternatives:\")\n CLI_MESSAGES.examples.troubleshooting.forEach(alt => console.log(` • ${alt}`))\n process.exit(1)\n }\n}\n\nasync function processComponents(\n componentNames: string[],\n registryType: RegistryType,\n config: Config,\n getComponentFn: (name: string, type: RegistryType) => Promise<Component | null>,\n options: AddOptions,\n preloadedComponents?: Component[],\n totalCount?: number\n): Promise<Array<{ name: string; status: \"success\" | \"error\"; error?: string }>> {\n const results: Array<{ name: string; status: \"success\" | \"error\"; error?: string }> = []\n const componentMap = new Map(preloadedComponents?.map(c => [c.name.toLowerCase(), c]))\n const total = totalCount ?? componentNames.length\n\n if (total > 1) {\n logger.info(`Installing ${total} components...`)\n }\n\n for (let i = 0; i < componentNames.length; i += 1) {\n const componentName = componentNames[i]\n const position = `${i + 1}/${total}`\n const spinner = ora(`[${position}] ${CLI_MESSAGES.status.installing(componentName, registryType)}`).start()\n \n try {\n const lookupName = componentName.toLowerCase()\n let component: Component | null = componentMap?.get(lookupName) ?? null\n \n if (!component) {\n component = await getComponentFn(componentName, registryType)\n }\n \n if (!component) {\n throw new Error(CLI_MESSAGES.errors.componentNotFound(componentName, registryType))\n }\n \n if (options.dryRun) {\n spinner.succeed(`[${position}] ${CLI_MESSAGES.status.wouldInstall(component.name, registryType)}`)\n logger.info(` Type: ${component.type}`)\n if (component.registryDependencies && component.registryDependencies.length > 0) {\n logger.info(` Registry deps: ${component.registryDependencies.join(\" -> \")}`)\n }\n logger.info(` Files: ${component.files.length}`)\n logger.info(` Dependencies: ${component.dependencies.join(\", \") || \"none\"}`)\n \n for (const file of component.files) {\n const fileName = path.basename(file.path)\n const target = file.target || inferTargetFromType(component.type)\n const installDir = resolveInstallDir(target, config)\n const targetPath = path.join(process.cwd(), installDir, fileName)\n const exists = await fs.pathExists(targetPath)\n const status = exists ? \"overwrite\" : \"create\"\n logger.info(` ${status}: ${targetPath}`)\n \n if (exists) {\n const currentContent = await fs.readFile(targetPath, \"utf-8\")\n const transformedIncoming = shouldTransformFile(fileName)\n ? applyTransforms(file.content, config.aliases)\n : file.content\n const changed = hasDiff(currentContent, transformedIncoming)\n if (changed) {\n const patch = buildUnifiedDiff(targetPath, `${component.name}/${fileName}`, currentContent, transformedIncoming)\n console.log(formatDiffPreview(patch, 40))\n }\n }\n }\n\n if (component.dependencies.length > 0) {\n const depStatus = await checkProjectDependencies(component.dependencies)\n showDependencyStatus(depStatus)\n }\n continue\n }\n \n await installComponentFiles(component, config, options.force)\n \n if (component.dependencies.length > 0) {\n try {\n await installDependencies(component.dependencies)\n } catch (error) {\n logger.warn(CLI_MESSAGES.errors.couldNotInstallDeps(component.name))\n logger.warn(` Dependencies: ${component.dependencies.join(\", \")}`)\n logger.warn(\" Please install them manually if needed\")\n }\n }\n \n spinner.succeed(`[${position}] ${CLI_MESSAGES.status.installing(component.name, registryType)}`)\n results.push({ name: component.name, status: \"success\" })\n \n } catch (error) {\n spinner.fail(`[${position}] ${CLI_MESSAGES.errors.failedToInstall(componentName, registryType)}`)\n logger.error(` Error: ${(error as Error).message}`)\n results.push({ \n name: componentName, \n status: \"error\", \n error: (error as Error).message \n })\n }\n }\n \n return results\n}\n\nasync function pickComponentsFromPrompt(\n registryType: RegistryType,\n requestOptions: { excludeTypes: string[]; maxRetries: number }\n): Promise<string[]> {\n const allComponents = await getAllComponents(registryType, requestOptions)\n if (allComponents.length === 0) {\n logger.warn(`No components found in ${registryType} registry`)\n return []\n }\n\n const sorted = allComponents\n .filter(component => !ADD_EXCLUDED_COMPONENT_TYPES.includes(component.type))\n .sort((a, b) => {\n if (a.type === b.type) {\n return a.name.localeCompare(b.name)\n }\n return a.type.localeCompare(b.type)\n })\n\n const grouped = new Map<string, Component[]>()\n for (const component of sorted) {\n const group = grouped.get(component.type) ?? []\n group.push(component)\n if (!grouped.has(component.type)) {\n grouped.set(component.type, group)\n }\n }\n\n const choices: Array<{ title: string; value: string; description?: string; disabled?: boolean }> = []\n for (const [type, components] of grouped) {\n choices.push({\n title: `\\n${type}`,\n value: \"__separator__\",\n description: \"\",\n disabled: true\n })\n\n for (const component of components) {\n choices.push({\n title: component.name,\n value: component.name,\n description: component.description || component.type\n })\n }\n }\n\n if (choices.length === 0) {\n logger.warn(`No selectable components found in ${registryType} registry`)\n return []\n }\n\n const { selected } = await prompts({\n type: \"multiselect\",\n name: \"selected\",\n message: \"Which components would you like to add?\",\n instructions: false,\n choices,\n hint: \"Space to select, Enter to confirm\"\n })\n\n return selected || []\n}\n\nasync function installRequestedComponents(\n componentNames: string[],\n registryType: RegistryType,\n config: Config,\n getComponentFn: (name: string, type: RegistryType) => Promise<Component | null>,\n options: AddOptions,\n preloadedComponents: Component[] = []\n): Promise<Array<{ name: string; status: \"success\" | \"error\"; error?: string }>> {\n const componentMap = new Map<string, Component>()\n for (const component of preloadedComponents) {\n componentMap.set(component.name.toLowerCase(), component)\n }\n\n const resolverGetComponent = async (name: string, type: RegistryType): Promise<Component | null> => {\n const normalized = name.toLowerCase()\n const cached = componentMap.get(normalized)\n if (cached) {\n return cached\n }\n\n const component = await getComponentFn(name, type)\n if (!component) {\n return null\n }\n\n componentMap.set(component.name.toLowerCase(), component)\n return component\n }\n\n const orderedComponents = await resolveRegistryTree(componentNames, registryType, (name, type) =>\n resolverGetComponent(name, type)\n )\n if (options.dryRun && orderedComponents.length > 0) {\n logger.info(\"\\n📦 Resolved registry dependency tree:\")\n orderedComponents.forEach((component, index) => {\n console.log(` ${index + 1}. ${component.name}`)\n })\n }\n\n const orderedNames = new Set(orderedComponents.map(component => component.name.toLowerCase()))\n const normalizedRequested = Array.from(new Set(componentNames.map(name => name.toLowerCase())))\n const missingRequested = normalizedRequested.filter(name => !orderedNames.has(name))\n\n const missingResults = missingRequested.map(name => ({\n name,\n status: \"error\" as const,\n error: `Component \"${name}\" was not found in ${registryType} registry`\n }))\n\n const processingResults = await processComponents(\n orderedComponents.map(component => component.name),\n registryType,\n config,\n resolverGetComponent,\n options,\n orderedComponents,\n orderedComponents.length\n )\n return [...missingResults, ...processingResults]\n}\n\nfunction displayInstallationSummary(\n registryType: RegistryType,\n results: Array<{ name: string; status: \"success\" | \"error\" }>\n) {\n const successful = results.filter(r => r.status === \"success\")\n const failed = results.filter(r => r.status === \"error\")\n \n logger.info(\"\\n📊 Installation Summary:\")\n console.log(` Registry: ${registryType}`)\n console.log(` ✅ Successful: ${successful.length}`)\n console.log(` ❌ Failed: ${failed.length}`)\n \n if (successful.length > 0) {\n logger.success(`\\n🎉 ${CLI_MESSAGES.success.componentsInstalled}`)\n console.log(\"You can now import and use them in your project.\")\n }\n \n if (failed.length > 0) {\n process.exit(1)\n }\n}\n\nasync function installComponentFiles(\n component: Component,\n config: Config,\n force = false\n): Promise<void> {\n for (const file of component.files) {\n const fileName = path.basename(file.path)\n\n const target = file.target || inferTargetFromType(component.type)\n const installDir = resolveInstallDir(target, config)\n const targetPath = path.join(process.cwd(), installDir, fileName)\n\n if (!force && await fs.pathExists(targetPath)) {\n console.log(` ⚠️ ${CLI_MESSAGES.status.skipped(fileName)}`) \n continue\n }\n\n await fs.ensureDir(path.dirname(targetPath))\n const preparedContent = shouldTransformFile(fileName)\n ? applyTransforms(file.content, config.aliases)\n : file.content\n await fs.writeFile(targetPath, preparedContent, \"utf-8\")\n }\n}\n\nexport function inferTargetFromType(componentType: string): string {\n switch (componentType) {\n case \"registry:ui\":\n return \"ui\"\n case \"registry:composite\":\n return \"components\"\n case \"registry:block\":\n return \"blocks\"\n case \"registry:component\":\n return \"components\"\n case \"registry:layout\":\n return \"layouts\"\n case \"registry:lib\":\n return \"lib\"\n case \"registry:variants\":\n return \"variants\"\n default:\n return \"components\"\n }\n}\n\nexport function resolveInstallDir(target: string, config: Config): string {\n const normalizedTarget = target.replace(/\\\\/g, \"/\").replace(/^\\/?src\\//i, \"\")\n\n // lib has own root at src/lib\n if (normalizedTarget === \"lib\") {\n return normalizeDir(config.libDir || SCHEMA_CONFIG.defaultDirectories.lib)\n }\n\n // variants has own root at src/variants\n if (normalizedTarget === \"variants\") {\n return normalizeDir(SCHEMA_CONFIG.defaultDirectories.variants)\n }\n\n const baseComponentsDir = normalizeDir(config.componentsDir || SCHEMA_CONFIG.defaultDirectories.components)\n\n // Composite targets like \"components/ui\" → parent(src) + target\n if (normalizedTarget.includes(\"/\")) {\n const parentRoot = baseComponentsDir.replace(/[/\\\\]components$/i, \"\") || \"src\"\n return path.join(parentRoot, normalizedTarget).replace(/\\\\/g, \"/\")\n }\n\n if (normalizedTarget === \"ui\") return path.join(baseComponentsDir, \"ui\").replace(/\\\\/g, \"/\")\n if (normalizedTarget === \"components\") return baseComponentsDir\n\n switch (normalizedTarget) {\n case \"blocks\":\n return normalizeDir(SCHEMA_CONFIG.defaultDirectories.blocks)\n case \"layouts\":\n return normalizeDir(SCHEMA_CONFIG.defaultDirectories.layouts)\n default:\n return baseComponentsDir\n }\n}\n\nfunction normalizeDir(dir: string): string {\n return dir.replace(/^\\.\\//, \"\").replace(/\\\\/g, \"/\")\n}\n\nfunction resolveRegistryType(registryInput?: string): RegistryType {\n if (!registryInput) {\n return SCHEMA_CONFIG.defaultRegistryType\n }\n \n if (SCHEMA_CONFIG.registryTypes.includes(registryInput as any)) {\n return registryInput as RegistryType\n }\n \n logger.warn(`⚠️ Unknown registry type: ${registryInput}`)\n console.log(`Available registries: ${SCHEMA_CONFIG.registryTypes.join(\", \")}`)\n console.log(`Using default: ${SCHEMA_CONFIG.defaultRegistryType}`)\n \n return SCHEMA_CONFIG.defaultRegistryType\n}\n\nasync function installComponentsIndex(registryType: RegistryType, config: Config, cdnResolution: CdnResolutionOptions = {}): Promise<void> {\n const spinner = ora(\"Installing components index...\").start()\n \n try {\n const cdnUrls = getCdnUrls(registryType, cdnResolution)\n \n for (const baseUrl of cdnUrls) {\n try {\n const url = `${baseUrl}/components/index.json`\n const response = await fetch(url)\n \n if (response.ok) {\n const component = await response.json() as Component\n \n for (const file of component.files) {\n const fileName = path.basename(file.path)\n const targetDir = config.componentsDir\n const targetPath = path.join(process.cwd(), targetDir, fileName)\n await fs.ensureDir(path.dirname(targetPath))\n await fs.writeFile(targetPath, file.content || \"\", \"utf-8\")\n }\n \n spinner.succeed(\"Installed components index\")\n return\n }\n } catch {\n continue\n }\n }\n \n spinner.info(\"Components index not found in registry (optional)\")\n } catch (error) {\n spinner.fail(\"Could not install components index\")\n }\n} ","import fetch from \"node-fetch\"\nimport { Component, componentSchema } from \"./schema.js\"\nimport { SCHEMA_CONFIG, TYPE_TO_FOLDER, getCdnUrls, type RegistryType, type CdnResolutionOptions } from \"../utils/schema-config.js\"\nimport { logger } from \"../utils/logger.js\"\nimport { getCachedJson, setCachedJson } from \"../utils/cache.js\"\n\nconst REGISTRY_INDEX_CACHE_TTL_MS = 3_600_000\n\nconst registryCache = new Map<RegistryType, {\n workingCDN: string | null\n registryIndex: any\n}>()\n\nconst DEFAULT_TIMEOUT_MS = 10_000\nconst DEFAULT_MAX_RETRIES = 1\nconst RETRY_DELAY_MS = 1200\n\nexport interface RegistryFetchOptions {\n excludeTypes?: string[]\n maxRetries?: number\n timeoutMs?: number\n noCache?: boolean\n cdn?: CdnResolutionOptions\n}\n\nexport function getRegistryCdnState(\n registryType: RegistryType,\n options: RegistryFetchOptions = {}\n): { workingCDN: string | null; urls: string[] } {\n const cache = getRegistryCache(registryType)\n return {\n workingCDN: cache.workingCDN,\n urls: getCdnUrls(registryType, options.cdn)\n }\n}\n\nexport function isUrl(path: string): boolean {\n try {\n new URL(path)\n return true\n } catch {\n return false\n }\n}\n\nfunction getRegistryCache(registryType: RegistryType) {\n if (!registryCache.has(registryType)) {\n registryCache.set(registryType, {\n workingCDN: null,\n registryIndex: null\n })\n }\n return registryCache.get(registryType)!\n}\n\nasync function fetchJsonWithTimeout(url: string, timeoutMs: number): Promise<any> {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs)\n\n try {\n const response = await fetch(url, { signal: controller.signal })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n return await response.json()\n } finally {\n clearTimeout(timeoutId)\n }\n}\n\nasync function fetchJsonWithRetry(url: string, maxRetries: number, timeoutMs: number): Promise<any> {\n let attempt = 0\n let lastError: unknown\n\n while (attempt < maxRetries) {\n attempt += 1\n try {\n return await fetchJsonWithTimeout(url, timeoutMs)\n } catch (error) {\n lastError = error\n if (attempt >= maxRetries) {\n break\n }\n await new Promise(resolve => setTimeout(resolve, RETRY_DELAY_MS))\n }\n }\n\n throw lastError instanceof Error ? lastError : new Error(\"Request failed\")\n}\n\nasync function fetchFromRegistryPath(\n requestPath: string,\n registryType: RegistryType,\n options: RegistryFetchOptions = {}\n): Promise<any> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS\n const maxRetries = Math.max(1, options.maxRetries ?? DEFAULT_MAX_RETRIES)\n const cache = getRegistryCache(registryType)\n const cdnUrls = getCdnUrls(registryType, options.cdn)\n\n const orderedUrls = cache.workingCDN\n ? [cache.workingCDN, ...cdnUrls.filter(url => url !== cache.workingCDN)]\n : [...cdnUrls]\n\n let lastError: unknown\n for (const baseUrl of orderedUrls) {\n try {\n const data = await fetchJsonWithRetry(`${baseUrl}/${requestPath}`, maxRetries, timeoutMs)\n if (cache.workingCDN !== baseUrl) {\n cache.registryIndex = null\n }\n cache.workingCDN = baseUrl\n return data\n } catch (error) {\n lastError = error\n if (cache.workingCDN === baseUrl) {\n cache.workingCDN = null\n }\n }\n }\n\n throw lastError instanceof Error ? lastError : new Error(`No working ${registryType} CDN found`)\n}\n\nasync function getRegistryIndex(registryType: RegistryType, options: RegistryFetchOptions = {}): Promise<any> {\n if (cacheStateHasIndex(registryType, options)) {\n return getCachedInMemory(registryType)\n }\n\n const cached = await getCachedJson(\n `${registryType}/index.json`,\n { noCache: options.noCache, ttlMs: REGISTRY_INDEX_CACHE_TTL_MS }\n )\n if (cached) {\n setCachedInMemory(registryType, cached)\n return cached\n }\n\n const cache = getRegistryCache(registryType)\n\n cache.registryIndex = await fetchFromRegistryPath(\"index.json\", registryType, options)\n await setCachedJson(\n `${registryType}/index.json`,\n cache.registryIndex,\n { ttlMs: REGISTRY_INDEX_CACHE_TTL_MS }\n )\n return cache.registryIndex\n}\n\nasync function getComponentByType(\n name: string,\n registryType: RegistryType,\n options: RegistryFetchOptions = {}\n): Promise<Component | null> {\n const normalizedName = name.toLowerCase()\n const cachedComponent = await getCachedJson(\n `${registryType}/components/${normalizedName}.json`,\n { noCache: options.noCache, ttlMs: REGISTRY_INDEX_CACHE_TTL_MS }\n )\n if (cachedComponent) {\n try {\n return componentSchema.parse(cachedComponent)\n } catch (error) {\n logger.debug(`Invalid cached component for ${name}, refetching`)\n }\n }\n\n try {\n const index = await getRegistryIndex(registryType, options)\n const excludeTypes = options.excludeTypes ?? []\n const componentInfo = index.components?.find(\n (c: any) =>\n typeof c?.name === \"string\" &&\n c.name.toLowerCase() === normalizedName &&\n !excludeTypes.includes(c.type)\n )\n if (!componentInfo) {\n logger.debug(`Component ${name} not found in ${registryType} registry`)\n return null\n }\n\n const folder =\n componentInfo.type === \"registry:variants\"\n ? \"components/variants\"\n : TYPE_TO_FOLDER[componentInfo.type as keyof typeof TYPE_TO_FOLDER]\n if (!folder) {\n logger.debug(`Unknown component type: ${componentInfo.type}`)\n return null\n }\n\n logger.debug(`Loading ${name} from /${folder}/ (type: ${componentInfo.type})`)\n const data = await fetchFromRegistryPath(`${folder}/${name}.json`, registryType, options)\n await setCachedJson(`${registryType}/components/${normalizedName}.json`, data, { ttlMs: REGISTRY_INDEX_CACHE_TTL_MS })\n return componentSchema.parse(data)\n } catch (error) {\n logger.debug(`Failed to get component by type: ${(error as Error).message}`)\n return null\n }\n}\n\nexport async function getComponent(\n name: string,\n registryType: RegistryType = SCHEMA_CONFIG.defaultRegistryType,\n options: RegistryFetchOptions = {}\n): Promise<Component | null> {\n try {\n if (isUrl(name)) {\n return await fetchFromUrl(name, options)\n }\n\n return await getComponentByType(name, registryType, options)\n } catch (error) {\n logger.debug(`Failed to fetch ${name} from ${registryType}: ${(error as Error).message}`)\n return null\n }\n}\n\nasync function fetchFromUrl(url: string, options: RegistryFetchOptions = {}): Promise<Component | null> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS\n const maxRetries = Math.max(1, options.maxRetries ?? DEFAULT_MAX_RETRIES)\n logger.debug(`Fetching component from: ${url}`)\n\n const data = await fetchJsonWithRetry(url, maxRetries, timeoutMs)\n return componentSchema.parse(data)\n}\n\nexport async function getAllComponents(\n registryType: RegistryType = SCHEMA_CONFIG.defaultRegistryType,\n options: RegistryFetchOptions = {}\n): Promise<Component[]> {\n try {\n logger.debug(`Fetching all ${registryType} components using optimized approach`)\n const indexData = await getRegistryIndex(registryType, options)\n const components: Component[] = []\n const excludeTypes = options.excludeTypes ?? []\n\n if (indexData.components && Array.isArray(indexData.components)) {\n for (const componentInfo of indexData.components) {\n if (excludeTypes.includes(componentInfo.type)) {\n continue\n }\n const component = await getComponent(componentInfo.name, registryType, options)\n if (component) {\n components.push(component)\n }\n }\n }\n return components\n } catch (error) {\n logger.debug(`Failed to fetch all ${registryType} components: ${(error as Error).message}`)\n return []\n }\n}\n\nfunction cacheStateHasIndex(registryType: RegistryType, options: RegistryFetchOptions): boolean {\n if (options.noCache) {\n return false\n }\n const cache = getRegistryCache(registryType)\n return Boolean(cache.registryIndex)\n}\n\nfunction getCachedInMemory(registryType: RegistryType) {\n return getRegistryCache(registryType).registryIndex\n}\n\nfunction setCachedInMemory(registryType: RegistryType, index: any) {\n const cache = getRegistryCache(registryType)\n cache.registryIndex = index\n}\n\nexport async function getComponents(\n names: string[],\n registryType: RegistryType = SCHEMA_CONFIG.defaultRegistryType,\n options: RegistryFetchOptions = {}\n): Promise<Component[]> {\n const components: Component[] = []\n\n for (const name of names) {\n const component = await getComponent(name, registryType, options)\n if (component) {\n components.push(component)\n }\n }\n\n return components\n}\n\nexport function resetCache(registryType?: RegistryType): void {\n if (registryType) {\n registryCache.delete(registryType)\n logger.debug(`Cache reset for ${registryType} - will rediscover working CDN`)\n } else {\n registryCache.clear()\n logger.debug(`All registry caches reset - will rediscover working CDNs`)\n }\n} ","import { z } from \"zod\"\nimport { SCHEMA_CONFIG } from \"../utils/schema-config\"\n\nexport const componentFileSchema = z.object({\n path: z.string(),\n content: z.string(),\n target: z.string().optional(),\n})\n\nexport const componentSchema = z.object({\n name: z.string(),\n type: z.enum(SCHEMA_CONFIG.componentTypes as unknown as readonly [string, ...string[]]),\n title: z.string().optional(),\n description: z.string().optional(),\n dependencies: z.array(z.string()).default([]),\n devDependencies: z.array(z.string()).default([]),\n registryDependencies: z.array(z.string()).optional(),\n files: z.array(componentFileSchema),\n tailwind: z.object({\n config: z.object({\n content: z.array(z.string()).optional(),\n theme: z.record(z.string(), z.any()).optional(),\n plugins: z.array(z.string()).optional(),\n }).optional(),\n }).optional(),\n cssVars: z.object({\n theme: z.record(z.string(), z.string()).optional(),\n light: z.record(z.string(), z.string()).optional(),\n dark: z.record(z.string(), z.string()).optional(),\n }).optional(),\n meta: z.record(z.string(), z.any()).optional(),\n})\n\nexport type ComponentFile = z.infer<typeof componentFileSchema>\nexport type Component = z.infer<typeof componentSchema>\n\nexport const configSchema = z.object({\n $schema: z.string().optional(),\n framework: z.literal(SCHEMA_CONFIG.supportedFrameworks[0]),\n typescript: z.boolean().default(true),\n globalCss: z.string().default(\"src/index.css\"),\n aliases: z.record(z.string(), z.string()).default(SCHEMA_CONFIG.defaultAliases as Record<string, string>),\n registry: z.string().default(SCHEMA_CONFIG.defaultRegistry),\n componentsDir: z.string().default(SCHEMA_CONFIG.defaultDirectories.components as string),\n libDir: z.string().default(SCHEMA_CONFIG.defaultDirectories.lib as string),\n registryUrl: z.string().url().optional(),\n registryVersion: z.string().optional(),\n strictCdn: z.boolean().default(false).optional(),\n})\n\nexport type Config = z.infer<typeof configSchema> ","// Configuration for schema generation\n// Centralized configuration file with all constants and defaults\n\nexport const SCHEMA_CONFIG = {\n // Base schema information\n schemaVersion: \"http://json-schema.org/draft-07/schema#\",\n baseUrl: \"https://ui.buildy.tw/schema\",\n \n // Framework configuration\n supportedFrameworks: [\"vite-react\"] as const,\n \n // Default aliases for path mapping\n defaultAliases: {\n \"@\": \"./src\",\n \"@/components\": \"./src/components\",\n \"@/ui\": \"./src/components/ui\",\n \"@/layouts\": \"./src/layouts\",\n \"@/blocks\": \"./src/blocks\",\n \"@/lib\": \"./src/lib\",\n \"@/variants\": \"./src/variants\"\n },\n \n // Registry configuration\n defaultRegistry: \"@ui8kit\",\n registryTypes: [\"ui\"] as const,\n\n // Default registry type\n defaultRegistryType: \"ui\" as const,\n \n // CDN base URLs (registryName will be substituted)\n cdnBaseUrls: [\n \"https://unpkg.com/@ui8kit/registry@latest/r\",\n \"https://cdn.jsdelivr.net/npm/@ui8kit/registry@latest/r\", \n \"https://raw.githubusercontent.com/buildy-ui/ui/main/packages/@ui8kit/registry/r\"\n ] as const,\n \n // Component categories\n componentCategories: [\"ui\", \"composite\", \"components\", \"layouts\", \"lib\", \"blocks\", \"variants\"] as const,\n \n // Component types (should match registryItemTypeSchema)\n componentTypes: [\n \"registry:lib\",\n \"registry:block\", \n \"registry:component\",\n \"registry:ui\",\n \"registry:composite\",\n \"registry:layout\",\n \"registry:variants\"\n ] as const,\n \n // Default directories structure\n // Source directories (where CLI scans for components)\n defaultDirectories: {\n components: \"./src/components\",\n lib: \"./src/lib\",\n layouts: \"./src/layouts\",\n blocks: \"./src/blocks\",\n variants: \"./src/variants\",\n } as const,\n \n // Schema descriptions and titles\n descriptions: {\n config: {\n title: \"UI8Kit Configuration\",\n description: \"Configuration file for ui8kit CLI (UI8Kit structure)\",\n },\n registry: {\n title: \"UI8Kit Registry\",\n description: \"Registry schema for UI8Kit component system\",\n },\n registryItem: {\n title: \"UI8Kit Registry Item\",\n description: \"Schema for individual registry items in the UI8Kit component system\",\n }\n } as const,\n \n // Field descriptions\n fieldDescriptions: {\n schema: \"JSON Schema URL\",\n framework: \"Target framework\",\n typescript: \"Whether the project uses TypeScript\",\n globalCss: \"Path to global styles entry file\",\n aliases: \"Path aliases for imports in UI8Kit structure\",\n registry: \"Default component registry\",\n componentsDir: \"Directory where utility components will be installed\",\n libDir: \"Directory for utility libraries\",\n registryName: \"Registry name\",\n registryHomepage: \"Registry homepage URL\",\n registryType: \"Registry type (e.g., ui)\",\n registryVersion: \"Registry version\",\n registryUrl: \"Explicit registry URL override\",\n strictCdn: \"Disable fallback to built-in CDN URLs\",\n lastUpdated: \"Last update timestamp\",\n categories: \"Available component categories\",\n components: \"Component metadata for quick lookup\",\n items: \"Full component definitions\",\n } as const\n} as const\n\nexport type RegistryType = typeof SCHEMA_CONFIG.registryTypes[number]\n\n// Map component types to their target installation folders (on user's project side)\nexport const TYPE_TO_FOLDER = {\n \"registry:ui\": \"components/ui\",\n \"registry:composite\": \"components\",\n \"registry:block\": \"blocks\", \n \"registry:component\": \"components\",\n \"registry:lib\": \"lib\",\n \"registry:layout\": \"layouts\",\n \"registry:variants\": \"variants\"\n} as const\n\n// Helper functions to generate URLs dynamically\nexport interface CdnResolutionOptions {\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n}\n\nfunction normalizeCdnVersion(version?: string): string {\n if (!version) {\n return \"\"\n }\n const normalized = version.trim()\n if (!normalized) {\n return \"\"\n }\n return normalized.startsWith(\"@\") ? normalized : `@${normalized}`\n}\n\nfunction applyRegistryVersion(baseUrl: string, version?: string): string {\n const normalizedVersion = normalizeCdnVersion(version)\n if (!normalizedVersion) {\n return baseUrl\n }\n return baseUrl.replace(/@latest(?=\\/|$)/g, normalizedVersion)\n}\n\nexport function getCdnUrls(_registryType: RegistryType, options: CdnResolutionOptions = {}): string[] {\n const baseUrls = SCHEMA_CONFIG.cdnBaseUrls.map(url => applyRegistryVersion(url, options.registryVersion))\n const resolvedUrls: string[] = []\n const explicitUrl = options.registryUrl\n ? normalizeCdnBaseUrl(applyRegistryVersion(normalizeCdnBaseUrl(options.registryUrl), options.registryVersion))\n : \"\"\n\n if (explicitUrl) {\n resolvedUrls.push(explicitUrl)\n }\n\n if (!options.strictCdn || !explicitUrl) {\n resolvedUrls.push(...baseUrls)\n }\n\n return [...new Set(resolvedUrls)]\n}\n\nfunction normalizeCdnBaseUrl(url: string): string {\n return url.trim().replace(/\\/+$/, \"\")\n}\n\nexport function getInstallPath(registryType: RegistryType, componentType: string): string {\n // Deprecated: install path should be resolved via project config. This remains only for backward compatibility.\n const folder = TYPE_TO_FOLDER[componentType as keyof typeof TYPE_TO_FOLDER]\n if (componentType === \"registry:lib\") {\n return SCHEMA_CONFIG.defaultDirectories.lib\n }\n return `src/${folder}`\n}\n\n// Helper function to filter real npm dependencies (exclude local aliases and paths)\nexport function filterRealDependencies(dependencies: string[]): string[] {\n return dependencies.filter(dep => {\n // Skip local aliases that start with @/ or ./\n if (dep.startsWith('@/') || dep.startsWith('./') || dep.startsWith('../')) {\n return false\n }\n \n // Skip tilde aliases\n if (dep.startsWith('~/')) {\n return false\n }\n \n // Skip internal workspace packages\n if (dep.startsWith('@ui8kit/') || dep.startsWith('ui8kit/')) {\n return false\n }\n \n // Skip relative paths and Windows paths\n if (dep.includes('\\\\') || (dep.includes('/') && !dep.startsWith('@') && !dep.includes('://'))) {\n return false\n }\n \n // Skip empty strings\n if (dep.trim() === '') {\n return false\n }\n \n // Skip file: protocol\n if (dep.startsWith('file:')) {\n return false\n }\n \n return true\n })\n}\n\n// Helper function to check if a module is an external dependency\nexport function isExternalDependency(moduleName: string): boolean {\n return !moduleName.startsWith(\".\") && \n !moduleName.startsWith(\"@/\") && \n !moduleName.startsWith(\"~/\") &&\n !moduleName.startsWith(\"@ui8kit/\") &&\n !moduleName.includes(\"\\\\\") &&\n moduleName !== \"\" &&\n !moduleName.startsWith(\"file:\")\n}\n\n// Helper function to get schema reference URL\nexport function getSchemaRef(schemaName: string): string {\n return `${SCHEMA_CONFIG.baseUrl}/${schemaName}.json`\n}\n\n// Helper function to get full schema URL\nexport function getSchemaUrl(schemaName?: string): string {\n if (schemaName) {\n return getSchemaRef(schemaName)\n }\n return `${SCHEMA_CONFIG.baseUrl}.json`\n} ","import chalk from \"chalk\"\nimport ora from \"ora\"\n\nlet verboseEnabled = false\n\nexport type LoggerLevel = \"info\" | \"success\" | \"warn\" | \"error\" | \"debug\"\n\nfunction output(level: LoggerLevel, message: string, ...args: unknown[]) {\n const prefix = (() => {\n switch (level) {\n case \"info\":\n return chalk.blue(\"ℹ\")\n case \"success\":\n return chalk.green(\"✅\")\n case \"warn\":\n return chalk.yellow(\"⚠️\")\n case \"error\":\n return chalk.red(\"❌\")\n case \"debug\":\n return chalk.gray(\"🐞\")\n default:\n return \"\"\n }\n })()\n\n if (level === \"debug\" && !verboseEnabled) {\n return\n }\n\n // Keep output stable across all commands.\n console.log(`${prefix} ${message}`, ...args)\n}\n\nexport const logger = {\n setVerbose(enabled: boolean) {\n verboseEnabled = enabled\n },\n info(message: string, ...args: unknown[]) {\n output(\"info\", message, ...args)\n },\n success(message: string, ...args: unknown[]) {\n output(\"success\", message, ...args)\n },\n warn(message: string, ...args: unknown[]) {\n output(\"warn\", message, ...args)\n },\n error(message: string, ...args: unknown[]) {\n output(\"error\", message, ...args)\n },\n debug(message: string, ...args: unknown[]) {\n output(\"debug\", message, ...args)\n },\n spinner(text: string) {\n return ora(text).start()\n }\n}\n\nexport function isVerboseMode(): boolean {\n return verboseEnabled\n}\n","import fs from \"fs-extra\"\nimport os from \"os\"\nimport path from \"path\"\n\nconst DEFAULT_TTL_MS = 3_600_000\n\nexport interface CacheOptions {\n ttlMs?: number\n noCache?: boolean\n}\n\nfunction normalizeKey(key: string): string {\n return key\n .trim()\n .replace(/^\\/+/, \"\")\n .replace(/\\\\/g, \"/\")\n}\n\nfunction cacheFilePath(key: string): { dataPath: string; metaPath: string } {\n const cacheDir = getCacheDir()\n const normalized = normalizeKey(key)\n const normalizedWithJson = normalized.endsWith(\".json\") ? normalized : `${normalized}.json`\n const dataPath = path.join(cacheDir, normalizedWithJson)\n return { dataPath, metaPath: `${dataPath}.meta.json` }\n}\n\nexport function getCacheDir(): string {\n return path.join(os.homedir(), \".ui8kit\", \"cache\")\n}\n\nfunction parseTimestamp(timestamp: unknown): number | null {\n if (typeof timestamp !== \"number\") {\n return null\n }\n return Number.isFinite(timestamp) ? timestamp : null\n}\n\nexport async function getCachedJson(key: string, options: CacheOptions = {}): Promise<any | null> {\n const ttlMs = options.ttlMs ?? DEFAULT_TTL_MS\n if (options.noCache) {\n return null\n }\n\n const { dataPath, metaPath } = cacheFilePath(key)\n if (!(await fs.pathExists(dataPath)) || !(await fs.pathExists(metaPath))) {\n return null\n }\n\n try {\n const meta = await fs.readJson(metaPath) as { lastFetched?: unknown; ttl?: unknown }\n const lastFetched = parseTimestamp(meta?.lastFetched)\n const metaTtl = parseTimestamp(meta?.ttl) ?? ttlMs\n\n if (!lastFetched) {\n return null\n }\n\n const now = Date.now()\n if (now - lastFetched > metaTtl) {\n return null\n }\n\n return await fs.readJson(dataPath)\n } catch {\n return null\n }\n}\n\nexport async function setCachedJson(key: string, data: unknown, options: CacheOptions = {}): Promise<void> {\n const ttlMs = options.ttlMs ?? DEFAULT_TTL_MS\n const { dataPath, metaPath } = cacheFilePath(key)\n await fs.ensureDir(path.dirname(dataPath))\n\n await fs.writeJson(dataPath, data, { spaces: 2 })\n await fs.writeJson(metaPath, {\n lastFetched: Date.now(),\n ttl: ttlMs\n })\n}\n\nexport async function clearCache(): Promise<void> {\n const cacheDir = getCacheDir()\n if (await fs.pathExists(cacheDir)) {\n await fs.remove(cacheDir)\n }\n}\n\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport { Config, configSchema } from \"../registry/schema.js\"\n\nconst MODERN_CONFIG_NAME = \"ui8kit.config.json\"\n\nexport async function isViteProject(): Promise<boolean> {\n const viteConfigFiles = [\n \"vite.config.ts\",\n \"vite.config.js\",\n \"vite.config.mts\",\n \"vite.config.mjs\"\n ]\n \n for (const file of viteConfigFiles) {\n if (await fs.pathExists(file)) {\n return true\n }\n }\n \n return false\n}\n\nexport async function hasReact(): Promise<boolean> {\n const packageJsonPath = path.join(process.cwd(), \"package.json\")\n \n if (!(await fs.pathExists(packageJsonPath))) {\n return false\n }\n \n const packageJson = await fs.readJson(packageJsonPath)\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies\n }\n \n return \"react\" in deps\n}\n\n/**\n * Find configuration for the project (prefer project root)\n */\nexport async function findConfig(registryType?: string): Promise<Config | null> {\n // Prefer project root config\n const rootConfig = await getConfig()\n if (rootConfig) return rootConfig\n\n // Backward compatibility: config inside ./src\n const srcConfig = await getConfig(\"./src\")\n if (srcConfig) return srcConfig\n\n // Legacy fallback: ./<registryType>/ui8kit.config.json\n if (registryType) {\n const registryConfig = await getConfig(`./${registryType}`)\n if (registryConfig) return registryConfig\n }\n\n return null\n}\n\nexport async function getConfig(registryPath?: string): Promise<Config | null> {\n const baseDir = registryPath ? path.join(process.cwd(), registryPath) : process.cwd()\n const configPath = path.join(baseDir, MODERN_CONFIG_NAME)\n if (!(await fs.pathExists(configPath))) {\n return null\n }\n \n try {\n const config = await fs.readJson(configPath)\n return configSchema.parse(config)\n } catch (error) {\n console.error(\"❌ Invalid ui8kit.config.json:\", (error as Error).message)\n return null\n }\n}\n\nexport async function saveConfig(config: Config): Promise<void> {\n const configPath = path.join(process.cwd(), MODERN_CONFIG_NAME)\n \n // Ensure directory exists\n await fs.ensureDir(path.dirname(configPath))\n \n await fs.writeJson(configPath, config, { spaces: 2 })\n}\n\nexport async function ensureDir(dirPath: string): Promise<void> {\n await fs.ensureDir(dirPath)\n} ","import fs from \"fs-extra\"\nimport path from \"path\"\nimport chalk from \"chalk\"\nimport prompts from \"prompts\"\nimport { findConfig } from \"./project.js\"\nimport { initCommand } from \"../commands/init.js\"\n\nexport interface ValidationResult {\n isValid: boolean\n message?: string\n missingComponents?: string[]\n}\n\n/**\n * Check if utility registry is initialized (base requirement)\n */\nexport async function isUtilityRegistryInitialized(): Promise<boolean> {\n // Deprecated in core/form model. Always allow operations.\n return true\n}\n\n/**\n * Check if a specific registry can be used (requires utility as base)\n */\nexport async function canUseRegistry(registryType: string): Promise<ValidationResult> {\n // In the simplified core/form model, all registries are usable without prerequisites.\n return { isValid: true }\n}\n\n/**\n * Get list of available components in utility registry from all categories\n */\nexport async function getUtilityComponents(): Promise<string[]> {\n // Deprecated in core/form model. No prerequisite components required.\n return []\n}\n\n/**\n * Get detailed component information by category\n */\nexport async function getUtilityComponentsByCategory(): Promise<Record<string, string[]>> {\n // Deprecated in core/form model. No categorized utility prerequisites.\n return {}\n}\n\n/**\n * Validate if components can be installed in non-utility registry\n */\nexport async function validateComponentInstallation(\n components: string[], \n registryType: string\n): Promise<ValidationResult> {\n const packageJsonPath = path.join(process.cwd(), \"package.json\")\n if (!(await fs.pathExists(packageJsonPath))) {\n return {\n isValid: false,\n message: \"No package.json found in the current directory. Run this command from your project root.\"\n }\n }\n\n const nodeMajorVersion = Number.parseInt(process.versions.node.split(\".\")[0] ?? \"0\", 10)\n if (Number.isNaN(nodeMajorVersion) || nodeMajorVersion < 18) {\n return {\n isValid: false,\n message: `Node.js 18+ is required. Current version: ${process.versions.node}`\n }\n }\n\n const existingConfig = await findConfig(registryType)\n if (!existingConfig) {\n const { runInit } = await prompts({\n type: \"confirm\",\n name: \"runInit\",\n message: \"ui8kit.config.json not found. Run init now?\",\n initial: true\n })\n\n if (runInit) {\n await initCommand({ registry: registryType })\n\n const configAfterInit = await findConfig(registryType)\n if (configAfterInit) {\n return { isValid: true }\n }\n }\n\n return {\n isValid: false,\n message: `ui8kit is not initialized. Run: npx ui8kit@latest init --registry ${registryType}`\n }\n }\n\n return { isValid: true }\n}\n\n/**\n * Show validation error and exit\n */\nexport function handleValidationError(result: ValidationResult): never {\n console.error(chalk.red(\"❌ Registry Validation Error:\"))\n console.error(chalk.red(result.message))\n \n if (result.missingComponents && result.missingComponents.length > 0) {\n console.log(chalk.yellow(\"\\n💡 Suggestion:\"))\n console.log(`Install missing components first: ${chalk.cyan(`npx ui8kit add ${result.missingComponents.join(' ')}`)}\\n`)\n }\n \n process.exit(1)\n}\n\n/**\n * Show utility components summary\n */\nexport async function showUtilityComponentsSummary(): Promise<void> {\n // Deprecated in core/form model. No summary to show.\n} ","import chalk from \"chalk\"\nimport prompts from \"prompts\"\nimport ora, { type Ora } from \"ora\"\nimport { isViteProject, hasReact, findConfig, saveConfig, ensureDir } from \"../utils/project.js\"\nimport { Config, Component } from \"../registry/schema.js\"\nimport { SCHEMA_CONFIG, getCdnUrls, type RegistryType, type CdnResolutionOptions } from \"../utils/schema-config.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { installDependencies } from \"../utils/package-manager.js\"\nimport path from \"path\"\nimport fs from \"fs-extra\"\nimport fetch from \"node-fetch\"\nimport { logger } from \"../utils/logger.js\"\nimport { handleError } from \"../utils/errors.js\"\n\ninterface InitOptions {\n yes?: boolean\n registry?: string\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n}\n\nexport interface InitConfigOptions {\n yes?: boolean\n registry?: string\n globalCss?: string\n aliasComponents?: string\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n}\n\nconst INIT_FETCH_TIMEOUT_MS = 10_000\n\nasync function fetchJsonFromRegistry<T>(url: string): Promise<T | null> {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), INIT_FETCH_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, { signal: controller.signal })\n if (!response.ok) {\n return null\n }\n return await response.json() as T\n } catch {\n return null\n } finally {\n clearTimeout(timeoutId)\n }\n}\n\nexport function buildInitConfig(options: InitConfigOptions): Config {\n const registryName = options.registry || SCHEMA_CONFIG.defaultRegistryType\n const aliases = SCHEMA_CONFIG.defaultAliases\n const globalCss = options.globalCss || \"src/index.css\"\n const aliasComponents = options.aliasComponents?.trim() || \"@/components\"\n\n if (options.yes) {\n return {\n $schema: `${SCHEMA_CONFIG.baseUrl}.json`,\n framework: \"vite-react\",\n typescript: true,\n globalCss,\n aliases,\n registry: SCHEMA_CONFIG.defaultRegistry,\n componentsDir: SCHEMA_CONFIG.defaultDirectories.components,\n libDir: SCHEMA_CONFIG.defaultDirectories.lib,\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn\n }\n }\n\n return {\n $schema: `${SCHEMA_CONFIG.baseUrl}.json`,\n framework: \"vite-react\",\n typescript: true,\n globalCss,\n aliases: { ...aliases, \"@/components\": aliasComponents },\n registry: SCHEMA_CONFIG.defaultRegistry,\n componentsDir: SCHEMA_CONFIG.defaultDirectories.components,\n libDir: SCHEMA_CONFIG.defaultDirectories.lib,\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn\n }\n}\n\nexport async function initCommand(options: InitOptions) {\n const registryName = options.registry || SCHEMA_CONFIG.defaultRegistryType\n const cdnOptions: CdnResolutionOptions = {\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn\n }\n \n logger.info(CLI_MESSAGES.info.initializing(registryName))\n \n // Check if it's a Vite project\n const viteDetected = await isViteProject()\n if (!viteDetected) {\n console.error(chalk.red(`❌ ${CLI_MESSAGES.errors.notViteProject}`))\n console.log(\"Please run this command in a Vite project directory.\")\n process.exit(1)\n }\n \n // Check if React is installed\n if (!(await hasReact())) {\n console.error(chalk.red(`❌ ${CLI_MESSAGES.errors.reactNotInstalled}`))\n console.log(\"Please install React first: npm install react react-dom\")\n process.exit(1)\n }\n \n // Check if already initialized (root first, then backward-compatible locations)\n const existingConfig = await findConfig(registryName)\n if (existingConfig && !options.yes) {\n const { overwrite } = await prompts({\n type: \"confirm\",\n name: \"overwrite\",\n message: CLI_MESSAGES.prompts.overwrite(registryName),\n initial: false\n })\n \n if (!overwrite) {\n logger.warn(CLI_MESSAGES.info.installationCancelled)\n return\n }\n }\n\n let config: Config\n \n if (options.yes) {\n config = buildInitConfig({ yes: true, registry: registryName, ...cdnOptions })\n } else {\n const responses = await prompts([\n {\n type: \"text\",\n name: \"globalCss\",\n message: CLI_MESSAGES.prompts.globalCss,\n initial: \"src/index.css\"\n },\n {\n type: \"text\",\n name: \"aliasComponents\",\n message: CLI_MESSAGES.prompts.aliasComponents,\n initial: \"@/components\"\n }\n ])\n\n const aliasComponents = responses.aliasComponents?.trim() || \"@/components\"\n const globalCss = responses.globalCss || \"src/index.css\"\n config = buildInitConfig({\n yes: false,\n registry: registryName,\n globalCss,\n aliasComponents,\n ...cdnOptions\n })\n }\n \n const spinner = ora(CLI_MESSAGES.info.initializing(registryName)).start()\n \n try {\n // Save configuration at project root\n await saveConfig(config)\n \n // Create src-based directory structure\n await ensureDir(config.libDir)\n await ensureDir(config.componentsDir)\n await ensureDir(path.join(config.componentsDir, \"ui\")) // src/components/ui\n await ensureDir(SCHEMA_CONFIG.defaultDirectories.blocks)\n await ensureDir(SCHEMA_CONFIG.defaultDirectories.layouts)\n await ensureDir(SCHEMA_CONFIG.defaultDirectories.variants)\n \n spinner.text = \"Installing core utilities and variants...\"\n \n // Install utils and all variants from registry\n await installCoreFiles(registryName as RegistryType, config, spinner, cdnOptions)\n\n // Install packages required by src/lib/utils.ts (cn helper).\n spinner.text = \"Installing core dependencies...\"\n await installDependencies([\"clsx\", \"tailwind-merge\"], {\n useSpinner: false\n })\n \n spinner.succeed(CLI_MESSAGES.success.initialized(registryName))\n \n logger.success(`\\n✅ ${CLI_MESSAGES.success.setupComplete(registryName)}`)\n console.log(\"\\nDirectories created:\")\n console.log(` ${chalk.cyan(\"src/lib/\")} - Utils, helpers, functions`)\n console.log(` ${chalk.cyan(\"src/variants/\")} - CVA variant configurations`)\n console.log(` ${chalk.cyan(\"src/components/ui/\")} - UI components`)\n console.log(` ${chalk.cyan(\"src/components/\")} - Complex components`)\n console.log(` ${chalk.cyan(\"src/layouts/\")} - Page layouts and structures`)\n console.log(` ${chalk.cyan(\"src/blocks/\")} - Component blocks`)\n \n console.log(\"\\nNext steps:\")\n CLI_MESSAGES.examples.init.forEach(example => console.log(` ${chalk.cyan(example)}`))\n\n } catch (error) {\n spinner.fail(CLI_MESSAGES.errors.buildFailed)\n handleError(error)\n }\n}\n\ninterface RegistryIndex {\n components: Array<{ name: string; type: string }>\n}\n\nasync function installCoreFiles(registryType: RegistryType, config: Config, spinner: Ora, cdnResolution: CdnResolutionOptions = {}): Promise<void> {\n const cdnUrls = getCdnUrls(registryType, {\n registryUrl: cdnResolution.registryUrl,\n registryVersion: cdnResolution.registryVersion,\n strictCdn: cdnResolution.strictCdn\n })\n \n // Try to fetch registry index to get list of variants and utils\n let registryIndex: RegistryIndex | null = null\n \n for (const baseUrl of cdnUrls) {\n try {\n const indexUrl = `${baseUrl}/index.json`\n const indexData = await fetchJsonFromRegistry<RegistryIndex>(indexUrl)\n if (indexData) {\n registryIndex = indexData\n break\n }\n } catch {\n continue\n }\n }\n \n if (!registryIndex) {\n spinner.text = \"⚠️ Could not fetch registry index, creating local utils...\"\n // Fallback: create utils file locally\n await createUtilsFile(config.libDir, config.typescript)\n return\n }\n \n // Filter variants and lib items\n const variantItems = registryIndex.components.filter(c => c.type === \"registry:variants\")\n const libItems = registryIndex.components.filter(c => c.type === \"registry:lib\")\n \n // Install utils (lib items)\n for (const item of libItems) {\n spinner.text = `Installing ${item.name}...`\n await installComponentFromRegistry(item.name, \"registry:lib\", cdnUrls, config)\n }\n \n // Install all variants\n for (const item of variantItems) {\n spinner.text = `Installing variant: ${item.name}...`\n await installComponentFromRegistry(item.name, \"registry:variants\", cdnUrls, config)\n }\n \n // Install variants/index.ts\n spinner.text = \"Syncing variants index...\"\n const variantsIndexStatus = await installVariantsIndex(cdnUrls)\n if (variantsIndexStatus === \"updated\") {\n spinner.text = \"Updated variants/index.ts from CDN\"\n } else if (variantsIndexStatus === \"created\") {\n spinner.text = \"Created variants/index.ts from CDN\"\n } else if (variantsIndexStatus === \"unchanged\") {\n spinner.text = \"variants/index.ts is up to date\"\n } else {\n spinner.text = \"variants/index.ts not found in registry (skipped)\"\n }\n \n spinner.text = `✅ Installed ${libItems.length} utilities and ${variantItems.length} variants`\n}\n\nasync function installComponentFromRegistry(\n name: string, \n type: string, \n cdnUrls: string[], \n config: Config\n): Promise<void> {\n const folder = type === \"registry:lib\" ? \"lib\" : type === \"registry:variants\" ? \"components/variants\" : \"components/ui\"\n \n for (const baseUrl of cdnUrls) {\n const url = `${baseUrl}/${folder}/${name}.json`\n const component = await fetchJsonFromRegistry<Component>(url)\n if (!component) {\n continue\n }\n\n for (const file of component.files) {\n const fileName = path.basename(file.path)\n let targetDir: string\n \n if (type === \"registry:lib\") {\n targetDir = config.libDir\n } else if (type === \"registry:variants\") {\n targetDir = SCHEMA_CONFIG.defaultDirectories.variants\n } else {\n targetDir = path.join(config.componentsDir, \"ui\")\n }\n \n const targetPath = path.join(process.cwd(), targetDir, fileName)\n await fs.ensureDir(path.dirname(targetPath))\n await fs.writeFile(targetPath, file.content || \"\", \"utf-8\")\n }\n return\n }\n}\n\nasync function installVariantsIndex(cdnUrls: string[]): Promise<\"created\" | \"updated\" | \"unchanged\" | \"skipped\"> {\n for (const baseUrl of cdnUrls) {\n // Try to fetch index component from variants\n const url = `${baseUrl}/components/variants/index.json`\n const component = await fetchJsonFromRegistry<Component>(url)\n if (!component) {\n continue\n }\n\n for (const file of component.files) {\n const fileName = path.basename(file.path)\n if (!fileName.startsWith(\"index.\")) {\n continue\n }\n\n const targetDir = SCHEMA_CONFIG.defaultDirectories.variants\n const targetPath = path.join(process.cwd(), targetDir, fileName)\n const incomingContent = file.content || \"\"\n const exists = await fs.pathExists(targetPath)\n\n if (exists) {\n const currentContent = await fs.readFile(targetPath, \"utf-8\")\n if (currentContent === incomingContent) {\n return \"unchanged\"\n }\n }\n\n await fs.ensureDir(path.dirname(targetPath))\n await fs.writeFile(targetPath, incomingContent, \"utf-8\")\n return exists ? \"updated\" : \"created\"\n }\n }\n\n return \"skipped\"\n}\n\nasync function createUtilsFile(libDir: string, typescript: boolean): Promise<void> {\n const utilsContent = `import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}`\n\n const fileName = typescript ? \"utils.ts\" : \"utils.js\"\n const filePath = path.join(process.cwd(), libDir, fileName)\n \n await fs.writeFile(filePath, utilsContent, \"utf-8\")\n}\n","// Centralized CLI messages and user-facing strings\nexport const CLI_MESSAGES = {\n // Error messages\n errors: {\n noComponentsSpecified: \"Please specify at least one component to add.\",\n notInitialized: \"ui8kit is not initialized in this project.\",\n notViteProject: \"This doesn't appear to be a Vite project.\",\n reactNotInstalled: \"React is not installed in this project.\",\n buildFailed: \"Build failed:\",\n scanFailed: \"Scan failed:\",\n registryTempUnavailable: \"registry temporarily unavailable\",\n noCDNFound: (registryType: string) => `No working ${registryType} CDN found`,\n componentNotFound: (name: string, registryType: string) => `Component \"${name}\" not found in ${registryType} registry`,\n unknownComponentType: (type: string) => `Unknown component type: ${type}`,\n fileNotFound: (path: string) => `File not found: ${path}`,\n invalidConfig: \"Invalid ui8kit.config.json:\",\n failedToInstall: (name: string, registryType: string) => `Failed to install ${name} from ${registryType}`,\n failedToFetch: (registryType: string) => `Failed to fetch components from ${registryType}`,\n failedToFetchComponent: (name: string, registryType: string) => `Failed to fetch ${name} from ${registryType}:`,\n failedToAnalyzeDeps: (path: string) => `Warning: Could not analyze dependencies for ${path}:`,\n dependenciesFailed: \"Failed to install dependencies\",\n couldNotInstallDeps: (name: string) => `Warning: Could not install some dependencies for ${name}`,\n noLocalInstall: \"No installed local components were found in this project.\",\n invalidRegistryForDiff: \"Could not load registry data for diff check.\",\n cacheClearFailed: \"Could not clear cache.\"\n },\n\n // Success messages\n success: {\n initialized: (registryName: string) => `UI8Kit ${registryName} structure initialized successfully!`,\n setupComplete: (registryName: string) => `UI8Kit ${registryName} Setup complete!`,\n installed: (name: string, registryType: string) => `Installed ${name} from ${registryType}`,\n allInstalled: (registryType: string) => `All ${registryType} components installed successfully!`,\n componentsInstalled: \"Components installed successfully!\",\n depsInstalled: \"Dependencies installed\",\n registryBuilt: \"Registry built successfully!\",\n schemasGenerated: \"Schema files generated successfully!\",\n registryGenerated: (registryName: string) => `${registryName} registry generated successfully!`,\n depsAvailable: \"All dependencies already available\",\n cacheCleared: \"UI8Kit cache cleared successfully.\"\n },\n\n // Info messages\n info: {\n tryListComponents: (registryType: string) => `Run \"npx ui8kit@latest add --all --registry ${registryType}\" to list available components`,\n initializing: (registryName: string) => `Initializing UI8Kit in your project (${registryName} registry)...`,\n installing: (registryName: string) => `Installing from ${registryName} registry...`,\n installingAll: (registryName: string) => `Installing all available components from ${registryName} registry...`,\n retryEnabled: \"Aggressive retry mode enabled (3 attempts per request)\",\n fetchingComponentList: (registryType: string) => `Fetching component list from ${registryType}...`,\n fetchingRegistry: (registryType: string) => `Fetching ${registryType} registry index`,\n scanningComponents: (registryName: string) => `Scanning ${registryName} components...`,\n building: \"Building registry...\",\n processingComponents: \"Processing components...\",\n scanningDirectories: \"Scanning directories...\",\n analyzingDeps: \"Found {count} components, analyzing dependencies...\",\n installationCancelled: \"Initialization cancelled.\",\n workspaceDepsDetected: \"Workspace dependency detected. Installing individually...\",\n checkingConnection: \"Checking internet connection...\",\n testing: (registryType: string, baseUrl: string) => `Testing ${registryType} CDN: ${baseUrl}`,\n using: (registryType: string, baseUrl: string) => `Using ${registryType} CDN: ${baseUrl}`,\n loading: (name: string, registryType: string, folder: string, type: string) => \n `Loading ${name} from /${registryType}/${folder}/ (type: ${type})`,\n fetching: (registryType: string, url: string) => `Fetching from ${registryType}: ${url}`,\n listingComponents: \"Listing available components\",\n fetchingUrl: \"Fetching component from:\",\n fetchingUrlWithRetry: \"Fetching component from URL with retry:\",\n checkingForUpdates: \"Checking for component updates...\",\n localDiffSummary: \"Local components compared with registry.\",\n },\n\n // Prompts\n prompts: {\n globalCss: \"Where is your global CSS file?\",\n aliasComponents: \"Configure import aliases?\",\n overwrite: (registryName: string) =>\n `UI8Kit is already initialized for ${registryName} registry. Overwrite configuration?`,\n },\n\n // Examples and help text\n examples: {\n add: [\n \"Example: npx ui8kit@latest add button card\",\n \"Example: npx ui8kit@latest add button --registry ui\",\n \"Example: npx ui8kit@latest add all # Install all components\",\n 'Example: npx ui8kit@latest add --all --registry ui # Install all ui components',\n \"Example: npx ui8kit@latest add --retry # Enable retry for unreliable connections\",\n 'Example: npx ui8kit@latest add \"https://example.com/component.json\"'\n ],\n init: [\n `npx ui8kit@latest add button --registry ui - Add a button component`,\n `npx ui8kit@latest add card input --registry ui - Add multiple components`,\n `npx ui8kit@latest add --all --registry ui - Add all components`,\n `npx ui8kit@latest add \"https://example.com/component.json\" - Add from external URL`\n ],\n troubleshooting: [\n \"Check your internet connection\",\n \"Use --retry flag: npx ui8kit@latest add --all --retry\",\n \"Use VPN if available\",\n \"Install from URL: npx ui8kit@latest add 'https://...'\",\n \"Check https://ui.buildy.tw for manual download\"\n ]\n },\n\n // Directory descriptions\n directories: {\n lib: \"Utils, helpers, functions\",\n variants: \"CVA variant configurations\",\n \"components/ui\": \"UI components\",\n components: \"Complex components\",\n layouts: \"Page layouts and structures\",\n blocks: \"Component blocks\",\n },\n\n // Spinners and status\n status: {\n installing: (name: string, registryType: string) => `Installing ${name} from ${registryType}...`,\n wouldInstall: (name: string, registryType: string) => `Would install: ${name} from ${registryType}`,\n foundComponents: (count: number, registryType: string) => `Found ${count} components in ${registryType}`,\n wouldInstallFrom: (registryType: string) => `Would install from ${registryType}:`,\n builtComponents: (count: number) => `Built ${count} components`,\n scannedComponents: (count: number) => `Scanned ${count} components`,\n skipped: (fileName: string) => `Skipped ${fileName} (already exists, use --force to overwrite)`,\n }\n}\n\n// Formatted output helpers\nexport function formatInstallationSummary(registryType: string, successful: number, failed: number): string {\n return `Installation Summary:\n Registry: ${registryType}\n ✅ Successful: ${successful}\n ❌ Failed: ${failed}`\n}\n\nexport function formatComponentSummary(items: Array<{type: string}>): string {\n const summary: Record<string, number> = {}\n items.forEach(item => {\n summary[item.type] = (summary[item.type] || 0) + 1\n })\n return Object.entries(summary).map(([type, count]) => ` ${type}: ${count}`).join(\"\\n\")\n}\n","import chalk from \"chalk\"\nimport ora from \"ora\"\nimport path from \"path\"\nimport fs from \"fs-extra\"\nimport { execa } from \"execa\"\nimport { CLI_MESSAGES } from \"./cli-messages.js\"\nimport {\n checkProjectDependencies,\n showDependencyStatus,\n filterMissingDependencies,\n isWorkspaceError\n} from \"./dependency-checker.js\"\n\nexport type PackageManager = \"npm\" | \"pnpm\" | \"yarn\" | \"bun\"\n\nexport interface InstallDependenciesOptions {\n useSpinner?: boolean\n spinnerText?: string\n}\n\nexport async function installDependencies(\n dependencies: string[],\n options: InstallDependenciesOptions = {}\n): Promise<void> {\n const useSpinner = options.useSpinner ?? true\n const spinner = useSpinner\n ? ora(options.spinnerText ?? CLI_MESSAGES.status.installing(\"dependencies\", \"\")).start()\n : null\n\n try {\n const depStatus = await checkProjectDependencies(dependencies)\n const missingDependencies = await filterMissingDependencies(dependencies)\n\n if (missingDependencies.length === 0) {\n spinner?.succeed(CLI_MESSAGES.success.depsAvailable)\n if (depStatus.workspace.length > 0) {\n console.log(chalk.blue(` 🔗 Using workspace dependencies: ${depStatus.workspace.join(\", \")}`))\n }\n return\n }\n\n showDependencyStatus(depStatus)\n\n const packageManager = await detectPackageManager()\n const installCommand =\n packageManager === \"npm\"\n ? [\"install\", ...missingDependencies]\n : [\"add\", ...missingDependencies]\n\n await execa(packageManager, installCommand, {\n cwd: process.cwd(),\n stdio: \"pipe\"\n })\n\n spinner?.succeed(CLI_MESSAGES.success.depsInstalled)\n } catch (error) {\n spinner?.fail(CLI_MESSAGES.errors.dependenciesFailed)\n\n const errorMessage = (error as any).stderr || (error as Error).message\n\n if (isWorkspaceError(errorMessage)) {\n console.log(chalk.yellow(`\\n💡 ${CLI_MESSAGES.info.workspaceDepsDetected}`))\n\n const results = await installDependenciesIndividually(dependencies)\n if (results.some(result => result.success)) {\n console.log(chalk.green(\"✅ Some dependencies installed successfully\"))\n return\n }\n }\n\n throw new Error(`${CLI_MESSAGES.errors.dependenciesFailed}: ${errorMessage}`)\n }\n}\n\nexport async function installDependenciesIndividually(\n dependencies: string[]\n): Promise<Array<{ dep: string; success: boolean }>> {\n const packageManager = await detectPackageManager()\n const results: Array<{ dep: string; success: boolean }> = []\n const missingDeps = await filterMissingDependencies(dependencies)\n\n for (const dep of missingDeps) {\n try {\n const installCommand = packageManager === \"npm\" ? [\"install\", dep] : [\"add\", dep]\n\n await execa(packageManager, installCommand, {\n cwd: process.cwd(),\n stdio: \"pipe\"\n })\n\n console.log(chalk.green(` ✅ Installed ${dep}`))\n results.push({ dep, success: true })\n } catch {\n console.log(chalk.yellow(` ⚠️ Skipped ${dep} (may already be available)`))\n results.push({ dep, success: false })\n }\n }\n\n return results\n}\n\nexport async function detectPackageManager(): Promise<PackageManager> {\n let dir = process.cwd()\n while (true) {\n if (await fs.pathExists(path.join(dir, \"bun.lock\")) || await fs.pathExists(path.join(dir, \"bun.lockb\"))) {\n return \"bun\"\n }\n if (await fs.pathExists(path.join(dir, \"pnpm-lock.yaml\"))) return \"pnpm\"\n if (await fs.pathExists(path.join(dir, \"yarn.lock\"))) return \"yarn\"\n\n const packageJsonPath = path.join(dir, \"package.json\")\n if (await fs.pathExists(packageJsonPath)) {\n try {\n const packageJson = await fs.readJson(packageJsonPath)\n const packageManager = String(packageJson.packageManager ?? \"\")\n if (packageManager.startsWith(\"bun@\")) return \"bun\"\n if (packageManager.startsWith(\"pnpm@\")) return \"pnpm\"\n if (packageManager.startsWith(\"yarn@\")) return \"yarn\"\n if (packageManager.startsWith(\"npm@\")) return \"npm\"\n } catch {\n // Ignore invalid package.json and continue searching parent directories.\n }\n }\n\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n\n return \"npm\"\n}\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport chalk from \"chalk\"\n\nexport interface DependencyStatus {\n installed: string[]\n missing: string[]\n workspace: string[]\n}\n\nexport async function checkProjectDependencies(requiredDeps: string[]): Promise<DependencyStatus> {\n const packageJsonPath = path.join(process.cwd(), \"package.json\")\n \n if (!(await fs.pathExists(packageJsonPath))) {\n return {\n installed: [],\n missing: requiredDeps,\n workspace: []\n }\n }\n \n try {\n const packageJson = await fs.readJson(packageJsonPath)\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies\n }\n \n const installed: string[] = []\n const missing: string[] = []\n const workspace: string[] = []\n \n for (const dep of requiredDeps) {\n const version = allDeps[dep]\n \n if (!version) {\n missing.push(dep)\n } else if (version.startsWith(\"workspace:\")) {\n workspace.push(dep)\n } else {\n installed.push(dep)\n }\n }\n \n return { installed, missing, workspace }\n } catch (error) {\n return {\n installed: [],\n missing: requiredDeps,\n workspace: []\n }\n }\n}\n\nexport function showDependencyStatus(deps: DependencyStatus) {\n if (deps.installed.length > 0) {\n console.log(chalk.green(` ✅ Already installed: ${deps.installed.join(\", \")}`))\n }\n \n if (deps.workspace.length > 0) {\n console.log(chalk.blue(` 🔗 Workspace dependencies: ${deps.workspace.join(\", \")}`))\n }\n \n if (deps.missing.length > 0) {\n console.log(chalk.yellow(` 📦 Will install: ${deps.missing.join(\", \")}`))\n }\n}\n\nexport async function filterMissingDependencies(dependencies: string[]): Promise<string[]> {\n const status = await checkProjectDependencies(dependencies)\n \n // Return only missing dependencies (not workspace ones)\n return status.missing\n}\n\nexport function isWorkspaceError(errorMessage: string): boolean {\n return errorMessage.includes(\"EUNSUPPORTEDPROTOCOL\") || \n errorMessage.includes(\"workspace:\") ||\n errorMessage.includes(\"Unsupported URL Type \\\"workspace:\\\"\")\n} ","import { type ZodError } from \"zod\"\nimport chalk from \"chalk\"\nimport { CLI_MESSAGES } from \"./cli-messages.js\"\n\nexport type ErrorSuggestion = string\n\nexport class Ui8kitError extends Error {\n suggestion?: ErrorSuggestion\n\n constructor(message: string, suggestion?: ErrorSuggestion) {\n super(message)\n this.name = this.constructor.name\n this.suggestion = suggestion\n }\n}\n\nexport class RegistryNotFoundError extends Ui8kitError {\n constructor(name: string, registry: string) {\n super(\n `Component \"${name}\" was not found in ${registry} registry.`,\n CLI_MESSAGES.info.tryListComponents(registry)\n )\n }\n}\n\nexport class ConfigNotFoundError extends Ui8kitError {\n constructor(registry: string) {\n super(\n `ui8kit config not found for registry \"${registry}\".`,\n `Run: npx ui8kit@latest init --registry ${registry}`\n )\n }\n}\n\nexport class RegistryFetchError extends Ui8kitError {\n constructor(message: string, suggestion?: string) {\n super(message, suggestion)\n }\n}\n\nexport class ConfigParseError extends Ui8kitError {\n constructor(path: string, details?: string) {\n super(\n `Invalid ui8kit config at \"${path}\".`,\n details ? `Config parse error: ${details}` : \"Open the file and fix the JSON format.\"\n )\n }\n}\n\nexport class NetworkError extends Ui8kitError {\n constructor(url: string, statusCode?: number) {\n super(\n `Network request failed for ${url}.`,\n statusCode\n ? `HTTP status: ${statusCode}. Retry with --retry to try multiple CDN attempts.`\n : \"Check internet connection and retry.\"\n )\n }\n}\n\nexport function handleError(error: unknown): never {\n if (error instanceof Ui8kitError) {\n if (error.message) {\n console.error(chalk.red(error.message))\n }\n\n if (error.suggestion) {\n console.log(chalk.yellow(`💡 ${error.suggestion}`))\n }\n\n process.exit(1)\n }\n\n if (isZodError(error)) {\n console.error(chalk.red(\"❌ Configuration validation error:\"))\n error.errors.forEach(issue => {\n const path = issue.path.join(\".\") || \"root\"\n console.log(chalk.yellow(` - ${path}: ${issue.message}`))\n })\n process.exit(1)\n }\n\n console.error(chalk.red(\"❌ Unexpected error:\"))\n console.error(chalk.red((error as Error).message ?? String(error)))\n process.exit(1)\n}\n\nexport function isZodError(error: unknown): error is ZodError {\n return Boolean(error && typeof error === \"object\" && \"issues\" in (error as Record<string, unknown>))\n}\n","import { logger } from \"./logger.js\"\nimport { Component } from \"../registry/schema.js\"\nimport { type RegistryType } from \"../utils/schema-config.js\"\n\ntype GetComponentFn = (name: string, registryType: RegistryType) => Promise<Component | null>\n\nexport async function resolveRegistryTree(\n componentNames: string[],\n registryType: RegistryType,\n getComponent: GetComponentFn\n): Promise<Component[]> {\n const componentsByName = new Map<string, Component>()\n const state = new Map<string, \"visiting\" | \"done\">()\n const visitStack: string[] = []\n\n const normalized = componentNames.map(name => name.toLowerCase())\n\n const ensureComponent = async (name: string): Promise<Component | null> => {\n const key = name.toLowerCase()\n if (state.get(key) === \"done\") {\n return componentsByName.get(key) ?? null\n }\n\n if (state.get(key) === \"visiting\") {\n const cycle = visitStack.includes(key)\n ? [...visitStack, key].join(\" -> \")\n : key\n logger.warn(`Circular registry dependency detected: ${cycle}`)\n return componentsByName.get(key) ?? null\n }\n\n const component = await getComponent(name, registryType)\n if (!component) {\n logger.warn(`Component ${name} not found in ${registryType} registry, skipping`)\n state.set(key, \"done\")\n return null\n }\n\n componentsByName.set(key, component)\n state.set(key, \"visiting\")\n visitStack.push(key)\n\n for (const dependency of component.registryDependencies ?? []) {\n await ensureComponent(dependency)\n }\n\n visitStack.pop()\n state.set(key, \"done\")\n return component\n }\n\n for (const name of normalized) {\n await ensureComponent(name)\n }\n\n const graph = new Map<string, Set<string>>()\n const inDegree = new Map<string, number>()\n\n for (const component of componentsByName.values()) {\n const name = component.name.toLowerCase()\n if (!graph.has(name)) {\n graph.set(name, new Set())\n inDegree.set(name, 0)\n }\n }\n\n for (const component of componentsByName.values()) {\n const from = component.name.toLowerCase()\n const deps = component.registryDependencies ?? []\n for (const dep of deps) {\n const to = dep.toLowerCase()\n if (!componentsByName.has(to)) {\n continue\n }\n\n const targets = graph.get(to)\n if (targets) {\n targets.add(from)\n } else {\n graph.set(to, new Set([from]))\n }\n\n inDegree.set(from, (inDegree.get(from) ?? 0) + 1)\n }\n }\n\n const queue: string[] = []\n inDegree.forEach((value, name) => {\n if (value === 0) {\n queue.push(name)\n }\n })\n\n const orderedKeys: string[] = []\n while (queue.length > 0) {\n const current = queue.shift()\n if (!current) continue\n\n orderedKeys.push(current)\n const targets = graph.get(current) || new Set()\n for (const next of targets) {\n const degree = (inDegree.get(next) ?? 1) - 1\n inDegree.set(next, degree)\n if (degree === 0) {\n queue.push(next)\n }\n }\n }\n\n // Fall back to stable insertion order for any remaining cyclic nodes.\n for (const key of componentsByName.keys()) {\n if (!orderedKeys.includes(key)) {\n logger.warn(`Unresolved dependency cycle detected for ${key}, appending in current order`)\n orderedKeys.push(key)\n }\n }\n\n return orderedKeys\n .map(key => componentsByName.get(key))\n .filter((component): component is Component => Boolean(component))\n}\n","import { createTwoFilesPatch } from \"diff\"\n\nexport interface FileDiffResult {\n filePath: string\n changed: boolean\n patch?: string\n}\n\nexport function buildUnifiedDiff(\n oldFilePath: string,\n newFilePath: string,\n oldContent: string,\n newContent: string\n): string {\n return createTwoFilesPatch(\n oldFilePath,\n newFilePath,\n oldContent,\n newContent,\n \"local\",\n \"registry\",\n { context: 3 }\n )\n}\n\nexport function getLineDiff(oldContent: string, newContent: string): string {\n return buildUnifiedDiff(\"local\", \"registry\", oldContent, newContent)\n}\n\nexport function hasDiff(oldContent: string, newContent: string): boolean {\n return oldContent !== newContent\n}\n\nexport function formatDiffPreview(diff: string, maxLines = 80): string {\n const lines = diff.split(\"\\n\")\n if (lines.length <= maxLines) {\n return diff\n }\n\n return `${lines.slice(0, maxLines).join(\"\\n\")}\\n...`\n}\n","import path from \"path\"\nimport ts from \"typescript\"\nimport { SCHEMA_CONFIG } from \"./schema-config.js\"\n\nconst IMPORT_NODE_KIND = ts.SyntaxKind.ImportDeclaration\n\nfunction normalizeAliasKey(alias: string): string {\n return alias.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\")\n}\n\nfunction toPosix(value: string): string {\n return value.replace(/\\\\/g, \"/\")\n}\n\nfunction normalizeAliasTarget(alias: string): string {\n return toPosix(alias).replace(/\\/+$/, \"\")\n}\n\nfunction normalizeDefaultAliases(): Map<string, string> {\n const map = new Map<string, string>()\n for (const [alias, target] of Object.entries(SCHEMA_CONFIG.defaultAliases)) {\n map.set(normalizeAliasKey(alias), normalizeAliasTarget(target))\n }\n return map\n}\n\nfunction normalizeConfiguredAliases(aliasMap: Record<string, string>): Map<string, string> {\n const normalized = new Map<string, string>()\n for (const [alias, target] of Object.entries(aliasMap)) {\n normalized.set(normalizeAliasKey(alias), normalizeAliasTarget(target))\n }\n return normalized\n}\n\nfunction pickAliasForImport(\n importPath: string,\n configuredAliases: Map<string, string>\n): string | undefined {\n const pathValue = toPosix(importPath)\n if (!pathValue.startsWith(\"@/\")) {\n return undefined\n }\n\n const trimmed = pathValue.slice(2)\n const [root] = trimmed.split(\"/\")\n const rootAlias = `@/${root}`\n\n const directAlias = Array.from(configuredAliases.keys())\n .filter(alias => pathValue === alias || pathValue.startsWith(`${alias}/`))\n .sort((a, b) => b.length - a.length)[0]\n if (directAlias) {\n const aliasValue = configuredAliases.get(directAlias)\n if (!aliasValue || !aliasValue.startsWith(\"@/\")) {\n return undefined\n }\n\n const remainder = pathValue.slice(directAlias.length).replace(/^\\/+/, \"\")\n if (!remainder) {\n return aliasValue\n }\n\n const remainderParts = remainder.split(\"/\")\n const targetParts = normalizeAliasKey(aliasValue).replace(/^@\\//, \"\").split(\"/\")\n const aliasTail = targetParts[targetParts.length - 1]\n const normalizedRemainder = (remainderParts[0] === aliasTail)\n ? remainderParts.slice(1).join(\"/\")\n : remainder\n return normalizedRemainder ? `${aliasValue}/${normalizedRemainder}` : aliasValue\n }\n\n const defaultAliasCandidates = Array.from(normalizeDefaultAliases().keys())\n .filter(alias => pathValue === alias || pathValue.startsWith(`${alias}/`))\n .sort((a, b) => b.length - a.length)\n\n for (const defaultAlias of defaultAliasCandidates) {\n const defaultParts = normalizeAliasKey(defaultAlias).replace(/^@\\//, \"\").split(\"/\")\n const remainderFromDefault = trimmed.split(\"/\").slice(defaultParts.length)\n if (remainderFromDefault.length === 0) {\n continue\n }\n\n const candidateAliasTail = remainderFromDefault[0]\n const candidateAlias = `@/${candidateAliasTail}`\n if (configuredAliases.has(candidateAlias)) {\n const remainderPath = remainderFromDefault.slice(1).join(\"/\")\n return remainderPath ? `${candidateAlias}/${remainderPath}` : candidateAlias\n }\n }\n\n return undefined\n}\n\nfunction rewriteModuleSpecifier(specifierText: string, configuredAliases: Record<string, string>): string {\n if (!specifierText.startsWith(\"@/\")) {\n return specifierText\n }\n\n const aliasesMap = normalizeConfiguredAliases(configuredAliases)\n const rewrittenRemainder = pickAliasForImport(specifierText, aliasesMap)\n if (!rewrittenRemainder || rewrittenRemainder === normalizeAliasKey(specifierText)) {\n return specifierText\n }\n\n if (rewrittenRemainder) {\n return rewrittenRemainder\n }\n\n return specifierText\n}\n\nexport function transformImports(content: string, aliases: Record<string, string>): string {\n const sourceFile = ts.createSourceFile(\"component.tsx\", content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX)\n\n const importSpans: Array<{ start: number; end: number; replacement: string }> = []\n const configuredAliases = normalizeConfiguredAliases(aliases)\n\n function visit(node: ts.Node) {\n if (node.kind === IMPORT_NODE_KIND && ts.isImportDeclaration(node)) {\n const moduleSpecifier = node.moduleSpecifier\n if (ts.isStringLiteral(moduleSpecifier)) {\n const value = moduleSpecifier.text\n const rewritten = rewriteModuleSpecifier(value, Object.fromEntries(configuredAliases))\n if (rewritten !== value) {\n importSpans.push({\n start: moduleSpecifier.getStart(sourceFile),\n end: moduleSpecifier.getEnd(),\n replacement: `\"${rewritten}\"`\n })\n }\n }\n }\n ts.forEachChild(node, visit)\n }\n\n ts.forEachChild(sourceFile, visit)\n if (importSpans.length === 0) {\n return content\n }\n\n importSpans.sort((a, b) => b.start - a.start)\n let transformed = content\n for (const span of importSpans) {\n transformed = `${transformed.slice(0, span.start)}${span.replacement}${transformed.slice(span.end)}`\n }\n\n return transformed\n}\n\nexport function transformCleanup(content: string): string {\n return content\n .replace(/\\r\\n/g, \"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trimEnd()\n + \"\\n\"\n}\n\nexport function applyTransforms(content: string, aliases: Record<string, string>): string {\n const withImports = transformImports(content, aliases)\n return transformCleanup(withImports)\n}\n\nexport function shouldTransformFile(fileName: string): boolean {\n return [\".ts\", \".tsx\"].includes(path.extname(fileName))\n}\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport chalk from \"chalk\"\nimport ora from \"ora\"\nimport * as ts from \"typescript\"\nimport { registrySchema, registryItemSchema } from \"../registry/build-schema.js\"\nimport { resetCache } from \"../registry/api.js\"\nimport { generateConfigSchema, generateRegistrySchema, generateRegistryItemSchema } from \"../utils/schema-generator.js\"\nimport { TYPE_TO_FOLDER, SCHEMA_CONFIG, isExternalDependency } from \"../utils/schema-config.js\"\nimport { generateMap } from \"../utils/map-generator.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { handleError } from \"../utils/errors.js\"\nimport { clearCache } from \"../utils/cache.js\"\n\ninterface BuildOptions {\n cwd: string\n registryFile: string\n outputDir: string\n}\n\nexport async function buildCommand(\n registryPath = \"./src/registry.json\",\n options: { output?: string; cwd?: string } = {}\n) {\n const buildOptions: BuildOptions = {\n cwd: path.resolve(options.cwd || process.cwd()),\n registryFile: path.resolve(registryPath),\n outputDir: path.resolve(options.output || \"./packages/registry/r\"),\n }\n\n console.log(chalk.blue(CLI_MESSAGES.info.building))\n \n try {\n await clearCache()\n resetCache()\n\n // Read registry.json\n const registryContent = await fs.readFile(buildOptions.registryFile, \"utf-8\")\n const registryData = JSON.parse(registryContent)\n \n // Validate schema\n const registry = registrySchema.parse(registryData)\n await ensureVariantsIndexItem(registry, buildOptions.cwd)\n \n // Create output directory\n await fs.ensureDir(buildOptions.outputDir)\n \n // Generate schema files\n await generateSchemaFiles(buildOptions.outputDir)\n \n const spinner = ora(CLI_MESSAGES.info.processingComponents).start()\n \n for (const item of registry.items) {\n spinner.text = `Building ${item.name}...`\n \n // Add schema\n item.$schema = \"https://ui.buildy.tw/schema/registry-item.json\"\n \n // Read file contents from utility structure\n for (const file of item.files) {\n const filePath = path.resolve(buildOptions.cwd, file.path)\n \n if (await fs.pathExists(filePath)) {\n file.content = await fs.readFile(filePath, \"utf-8\")\n } else {\n throw new Error(CLI_MESSAGES.errors.fileNotFound(file.path))\n }\n }\n \n // Validate final item\n const validatedItem = registryItemSchema.parse(item)\n \n // Determine output directory by type\n const typeDir = getOutputDir(validatedItem.type)\n const outputPath = path.join(buildOptions.outputDir, typeDir)\n await fs.ensureDir(outputPath)\n \n // Write file\n const outputFile = path.join(outputPath, `${validatedItem.name}.json`)\n await fs.writeFile(outputFile, JSON.stringify(validatedItem, null, 2))\n }\n \n spinner.succeed(CLI_MESSAGES.status.builtComponents(registry.items.length))\n \n // Create index file at /r/index.json\n await createIndexFile(registry, buildOptions.outputDir)\n\n // Create map file at /packages/registry/ui8kit.map.json\n const mapSourcePath = path.join(buildOptions.cwd, \"src\", \"lib\", \"utility-props.map.ts\")\n const mapOutputPath = path.join(path.dirname(buildOptions.outputDir), \"ui8kit.map.json\")\n const mapResult = await generateMap({\n sourcePath: mapSourcePath,\n outputPath: mapOutputPath,\n skipMissing: true\n })\n if (mapResult.generated) {\n console.log(chalk.green(`✅ Generated map file: ${mapResult.path}`))\n }\n \n console.log(chalk.green(`✅ ${CLI_MESSAGES.success.registryBuilt}`))\n console.log(`Output: ${buildOptions.outputDir}`)\n console.log(chalk.green(`✅ ${CLI_MESSAGES.success.schemasGenerated}`))\n \n } catch (error) {\n handleError(error)\n }\n}\n\n// Build output directories (for CDN/registry structure)\n// Note: This differs from TYPE_TO_FOLDER which is for user installation paths\nconst BUILD_OUTPUT_FOLDERS = {\n \"registry:ui\": \"components/ui\",\n \"registry:composite\": \"components\",\n \"registry:block\": \"blocks\", \n \"registry:component\": \"components\",\n \"registry:lib\": \"lib\",\n \"registry:layout\": \"layouts\",\n \"registry:variants\": \"components/variants\"\n} as const\n\nfunction getOutputDir(type: string): string {\n const folder = BUILD_OUTPUT_FOLDERS[type as keyof typeof BUILD_OUTPUT_FOLDERS]\n return folder || \"misc\"\n}\n\nasync function createIndexFile(registry: any, outputDir: string) {\n const index = {\n $schema: \"https://ui.buildy.tw/schema/registry.json\",\n components: registry.items.map((item: any) => ({\n name: item.name,\n type: item.type,\n title: item.title,\n description: item.description,\n })),\n categories: SCHEMA_CONFIG.componentCategories,\n version: \"1.0.0\",\n lastUpdated: new Date().toISOString(),\n registry: registry?.registry || SCHEMA_CONFIG.defaultRegistryType,\n }\n \n await fs.writeFile(\n path.join(outputDir, \"index.json\"),\n JSON.stringify(index, null, 2)\n )\n}\n\nasync function generateSchemaFiles(outputDir: string) {\n const registryBaseDir = path.dirname(outputDir)\n \n // Create schema directory\n const schemaDir = path.join(registryBaseDir, \"schema\")\n await fs.ensureDir(schemaDir)\n \n // Generate schemas dynamically from Zod schemas\n const configSchemaJson = generateConfigSchema()\n const registrySchemaJson = generateRegistrySchema()\n const registryItemSchemaJson = generateRegistryItemSchema()\n \n // Write schema files\n await fs.writeFile(\n path.join(registryBaseDir, \"schema.json\"),\n JSON.stringify(configSchemaJson, null, 2)\n )\n \n await fs.writeFile(\n path.join(schemaDir, \"registry.json\"),\n JSON.stringify(registrySchemaJson, null, 2)\n )\n \n await fs.writeFile(\n path.join(schemaDir, \"registry-item.json\"),\n JSON.stringify(registryItemSchemaJson, null, 2)\n )\n}\n\nasync function ensureVariantsIndexItem(registry: any, cwd: string): Promise<void> {\n const indexSourcePath = path.join(cwd, \"src/variants/index.ts\")\n\n if (!(await fs.pathExists(indexSourcePath))) {\n return\n }\n\n const sourceContent = await fs.readFile(indexSourcePath, \"utf-8\")\n const dependencies = extractFileDependencies(sourceContent)\n const exportedModules = extractExportedModules(sourceContent)\n\n const indexItem = {\n type: \"registry:variants\",\n name: \"index\",\n description: exportedModules.length > 0\n ? `Variant exports: ${exportedModules.join(\", \")}`\n : \"Variants export index\",\n dependencies,\n devDependencies: [],\n files: [\n {\n path: path.relative(cwd, indexSourcePath).replace(/\\\\/g, \"/\")\n }\n ]\n }\n\n const items = Array.isArray(registry.items) ? registry.items : []\n const existingIndexIdx = items.findIndex((item: any) =>\n item && item.type === indexItem.type && item.name === indexItem.name\n )\n\n if (existingIndexIdx >= 0) {\n items[existingIndexIdx] = {\n ...items[existingIndexIdx],\n ...indexItem\n }\n } else {\n items.push(indexItem)\n }\n}\n\nfunction extractExportedModules(content: string): string[] {\n const exports = new Set<string>()\n const starExportRegex = /export\\s+\\*\\s+from\\s+['\"]\\.\\/([^'\"]+)['\"]/g\n const namedExportRegex = /export\\s+\\{[^}]+\\}\\s+from\\s+['\"]\\.\\/([^'\"]+)['\"]/g\n\n let match: RegExpExecArray | null\n while ((match = starExportRegex.exec(content)) !== null) {\n exports.add(match[1])\n }\n while ((match = namedExportRegex.exec(content)) !== null) {\n exports.add(match[1])\n }\n\n return [...exports]\n}\n\nfunction extractFileDependencies(content: string): string[] {\n const dependencies = new Set<string>()\n const sourceFile = ts.createSourceFile(\"index.ts\", content, ts.ScriptTarget.Latest, true)\n\n function visit(node: ts.Node) {\n if (ts.isImportDeclaration(node)) {\n const moduleSpecifier = node.moduleSpecifier\n if (ts.isStringLiteral(moduleSpecifier)) {\n const moduleName = moduleSpecifier.text\n if (isExternalDependency(moduleName)) {\n dependencies.add(moduleName)\n }\n }\n }\n\n ts.forEachChild(node, visit)\n }\n\n visit(sourceFile)\n\n return [...dependencies]\n}\n","import { z } from \"zod\"\n\nexport const registryItemTypeSchema = z.enum([\n \"registry:lib\",\n \"registry:block\", \n \"registry:component\",\n \"registry:ui\",\n \"registry:composite\",\n \"registry:layout\",\n \"registry:variants\"\n])\n\nexport const registryItemFileSchema = z.object({\n path: z.string(),\n content: z.string().optional(), // Populated during build\n target: z.string().optional(),\n})\n\nexport const registryItemTailwindSchema = z.object({\n config: z.object({\n content: z.array(z.string()).optional(),\n theme: z.record(z.string(), z.any()).optional(),\n plugins: z.array(z.string()).optional(),\n }).optional(),\n})\n\nexport const registryItemCssVarsSchema = z.object({\n theme: z.record(z.string(), z.string()).optional(),\n light: z.record(z.string(), z.string()).optional(),\n dark: z.record(z.string(), z.string()).optional(),\n})\n\nexport const registryItemSchema = z.object({\n $schema: z.string().optional(),\n name: z.string(),\n type: registryItemTypeSchema,\n title: z.string().optional(),\n description: z.string().optional(),\n dependencies: z.array(z.string()).default([]),\n devDependencies: z.array(z.string()).default([]),\n registryDependencies: z.array(z.string()).optional(),\n files: z.array(registryItemFileSchema),\n tailwind: registryItemTailwindSchema.optional(),\n cssVars: registryItemCssVarsSchema.optional(),\n meta: z.record(z.string(), z.any()).optional(),\n})\n\nexport const registrySchema = z.object({\n $schema: z.string().optional(),\n items: z.array(registryItemSchema),\n})\n\nexport type RegistryItem = z.infer<typeof registryItemSchema>\nexport type Registry = z.infer<typeof registrySchema>\nexport type RegistryItemTailwind = z.infer<typeof registryItemTailwindSchema>\nexport type RegistryItemCssVars = z.infer<typeof registryItemCssVarsSchema>\n","import { zodToJsonSchema } from \"zod-to-json-schema\"\nimport { z } from \"zod\"\nimport { configSchema } from \"../registry/schema.js\"\nimport { registryItemSchema, registryItemTypeSchema } from \"../registry/build-schema.js\"\nimport { SCHEMA_CONFIG, getSchemaRef } from \"./schema-config.js\"\n\n// Extended registry schema for the full registry index\nconst fullRegistrySchema = z.object({\n $schema: z.string().optional(),\n name: z.string().optional(),\n homepage: z.string().optional(),\n registry: z.enum(SCHEMA_CONFIG.registryTypes).optional(),\n version: z.string().optional(),\n lastUpdated: z.string().optional(),\n categories: z.array(z.enum(SCHEMA_CONFIG.componentCategories)).optional(),\n components: z.array(z.object({\n name: z.string(),\n type: registryItemTypeSchema,\n description: z.string().optional(),\n })).optional(),\n items: z.array(registryItemSchema),\n})\n\nexport function generateConfigSchema() {\n const baseSchema = zodToJsonSchema(configSchema as any, {\n name: \"UI8KitConfiguration\",\n $refStrategy: \"none\",\n }) as any\n\n const actualSchema = baseSchema.definitions?.UI8KitConfiguration || baseSchema\n\n return {\n \"$schema\": SCHEMA_CONFIG.schemaVersion,\n \"title\": SCHEMA_CONFIG.descriptions.config.title,\n \"description\": SCHEMA_CONFIG.descriptions.config.description,\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.schema\n },\n \"framework\": {\n \"type\": \"string\",\n \"enum\": SCHEMA_CONFIG.supportedFrameworks,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.framework\n },\n \"typescript\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.typescript\n },\n \"globalCss\": {\n \"type\": \"string\",\n \"default\": \"src/index.css\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.globalCss\n },\n \"aliases\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n },\n \"default\": SCHEMA_CONFIG.defaultAliases,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.aliases\n },\n \"registry\": {\n \"type\": \"string\", \n \"default\": SCHEMA_CONFIG.defaultRegistry,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registry\n },\n \"componentsDir\": {\n \"type\": \"string\",\n \"default\": SCHEMA_CONFIG.defaultDirectories.components,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.componentsDir\n },\n \"libDir\": {\n \"type\": \"string\",\n \"default\": SCHEMA_CONFIG.defaultDirectories.lib,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.libDir\n },\n \"registryUrl\": {\n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryUrl\n },\n \"registryVersion\": {\n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryVersion\n },\n \"strictCdn\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.strictCdn\n }\n },\n \"required\": [\"framework\"],\n \"additionalProperties\": false\n }\n}\n\nexport function generateRegistrySchema() {\n const baseSchema = zodToJsonSchema(fullRegistrySchema as any, {\n name: \"UI8KitRegistry\", \n $refStrategy: \"none\",\n }) as any\n\n const actualSchema = baseSchema.definitions?.UI8KitRegistry || baseSchema\n\n return {\n \"$schema\": SCHEMA_CONFIG.schemaVersion,\n \"title\": SCHEMA_CONFIG.descriptions.registry.title,\n \"description\": SCHEMA_CONFIG.descriptions.registry.description,\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.schema\n },\n \"name\": { \n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryName\n },\n \"homepage\": { \n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryHomepage\n },\n \"registry\": {\n \"type\": \"string\",\n \"enum\": SCHEMA_CONFIG.registryTypes,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryType\n },\n \"version\": {\n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryVersion\n },\n \"lastUpdated\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.lastUpdated\n },\n \"categories\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"enum\": SCHEMA_CONFIG.componentCategories\n },\n \"description\": SCHEMA_CONFIG.fieldDescriptions.categories\n },\n \"components\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"type\": { \n \"type\": \"string\",\n \"enum\": actualSchema.properties?.components?.items?.properties?.type?.enum || [\n \"registry:lib\", \"registry:block\", \"registry:component\", \"registry:ui\", \"registry:template\"\n ]\n },\n \"description\": { \"type\": \"string\" }\n },\n \"required\": [\"name\", \"type\"],\n \"additionalProperties\": false\n },\n \"description\": SCHEMA_CONFIG.fieldDescriptions.components\n },\n \"items\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": getSchemaRef(\"registry-item\") },\n \"description\": SCHEMA_CONFIG.fieldDescriptions.items\n }\n },\n \"required\": [\"items\"],\n \"additionalProperties\": false\n }\n}\n\nexport function generateRegistryItemSchema() {\n const baseSchema = zodToJsonSchema(registryItemSchema as any, {\n name: \"UI8KitRegistryItem\",\n $refStrategy: \"none\",\n }) as any\n\n const actualSchema = baseSchema.definitions?.UI8KitRegistryItem || baseSchema\n\n return {\n \"$schema\": SCHEMA_CONFIG.schemaVersion,\n \"title\": SCHEMA_CONFIG.descriptions.registryItem.title,\n \"description\": SCHEMA_CONFIG.descriptions.registryItem.description,\n \"type\": \"object\",\n \"properties\": actualSchema.properties,\n \"required\": actualSchema.required || [\"name\", \"type\", \"files\"],\n \"additionalProperties\": false\n }\n}","import fs from \"fs-extra\"\nimport path from \"path\"\nimport * as ts from \"typescript\"\n\nexport interface UtilityMap {\n [utility: string]: string[]\n}\n\nexport interface Ui8kitMapFile {\n version: string\n generatedAt: string\n map: UtilityMap\n}\n\nexport interface GenerateMapResult {\n generated: boolean\n path?: string\n}\n\nexport interface GenerateMapOptions {\n sourcePath: string\n outputPath: string\n skipMissing?: boolean\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value)\n}\n\nfunction parseJsonCandidate(content: string): unknown {\n const trimmed = content.trim()\n if (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) {\n return null\n }\n\n try {\n return JSON.parse(trimmed)\n } catch {\n return null\n }\n}\n\nfunction parseObjectValue(node: ts.Node): unknown {\n if (ts.isStringLiteral(node)) {\n return node.text\n }\n\n if (ts.isNumericLiteral(node)) {\n return node.text\n }\n\n if (ts.isNoSubstitutionTemplateLiteral(node)) {\n return node.text\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements.map(parseObjectValue)\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n const result: Record<string, unknown> = {}\n for (const property of node.properties) {\n if (!ts.isPropertyAssignment(property)) {\n continue\n }\n let key: string | null = null\n if (ts.isStringLiteralLike(property.name) || ts.isNumericLiteral(property.name)) {\n key = property.name.text\n } else if (ts.isIdentifier(property.name)) {\n key = property.name.text\n }\n if (!key) {\n continue\n }\n result[key] = parseObjectValue(property.initializer)\n }\n return result\n }\n\n if (ts.isAsExpression(node) || ts.isTypeAssertionExpression(node)) {\n return parseObjectValue(node.expression)\n }\n\n if (ts.isParenthesizedExpression(node)) {\n return parseObjectValue(node.expression)\n }\n\n return undefined\n}\n\nfunction extractExportedObject(source: string): unknown | null {\n const sourceFile = ts.createSourceFile(\n \"utility-props.map.ts\",\n source,\n ts.ScriptTarget.Latest,\n true\n )\n\n let extracted: unknown | null = null\n\n const visit = (node: ts.Node) => {\n if (extracted !== null) {\n return\n }\n\n if (ts.isVariableStatement(node)) {\n const isExported = node.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.ExportKeyword)\n if (!isExported) {\n return\n }\n\n for (const declaration of node.declarationList.declarations) {\n if (!declaration.initializer) {\n continue\n }\n extracted = parseObjectValue(declaration.initializer)\n if (extracted !== undefined) {\n return\n }\n }\n return\n }\n\n if (ts.isExportAssignment(node) && node.expression) {\n extracted = parseObjectValue(node.expression)\n return\n }\n\n ts.forEachChild(node, visit)\n }\n\n visit(sourceFile)\n return extracted\n}\n\nexport function normalizeUtilityMap(raw: unknown): UtilityMap {\n if (!isPlainObject(raw)) {\n throw new Error(\"Invalid utility map shape: expected object with utility keys\")\n }\n\n const normalized: UtilityMap = {}\n const errors: string[] = []\n\n for (const [key, value] of Object.entries(raw)) {\n if (typeof key !== \"string\" || !key.trim()) {\n errors.push(`Invalid utility key: ${String(key)}`)\n continue\n }\n\n if (!Array.isArray(value) || !value.every(item => typeof item === \"string\")) {\n errors.push(`Utility \"${key}\" expects string[]`)\n continue\n }\n\n const uniqueValues = [...new Set(value.map(item => item.trim()))]\n .filter(item => item.length > 0)\n .sort()\n normalized[key.trim()] = uniqueValues\n }\n\n if (errors.length > 0) {\n throw new Error(`Invalid utility map shape: ${errors.join(\"; \")}`)\n }\n\n const sortedKeys = Object.keys(normalized).sort()\n const ordered: UtilityMap = {}\n for (const key of sortedKeys) {\n ordered[key] = normalized[key]\n }\n return ordered\n}\n\nexport function parseUtilityMapSource(content: string): unknown {\n const fromJson = parseJsonCandidate(content)\n if (fromJson !== null) {\n return fromJson\n }\n\n const fromExport = extractExportedObject(content)\n if (fromExport !== null) {\n return fromExport\n }\n\n throw new Error(\"Could not parse utility props map source\")\n}\n\nexport async function generateMap(options: GenerateMapOptions): Promise<GenerateMapResult> {\n const { sourcePath, outputPath, skipMissing = true } = options\n\n if (!(await fs.pathExists(sourcePath))) {\n if (skipMissing) {\n return { generated: false }\n }\n throw new Error(`Utility props map source not found: ${path.resolve(sourcePath)}`)\n }\n\n const content = await fs.readFile(sourcePath, \"utf-8\")\n const rawMap = parseUtilityMapSource(content)\n const map = normalizeUtilityMap(rawMap)\n\n const mapFile: Ui8kitMapFile = {\n version: \"1.0.0\",\n generatedAt: new Date().toISOString(),\n map\n }\n\n await fs.ensureDir(path.dirname(outputPath))\n await fs.writeJson(outputPath, mapFile, { spaces: 2 })\n return { generated: true, path: outputPath }\n}\n\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport chalk from \"chalk\"\nimport ora from \"ora\"\nimport { glob } from \"glob\"\nimport * as ts from \"typescript\"\nimport { SCHEMA_CONFIG, isExternalDependency, TYPE_TO_FOLDER } from \"../utils/schema-config.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { handleError } from \"../utils/errors.js\"\n\ninterface ScanOptions {\n cwd: string\n registry: string\n outputFile: string\n sourceDir: string\n}\n\ninterface ComponentFile {\n path: string\n content?: string\n target?: string\n}\n\ninterface RegistryItem {\n name: string\n type: string\n description?: string\n dependencies: string[]\n devDependencies: string[]\n files: ComponentFile[]\n}\n\ninterface ASTAnalysis {\n dependencies: string[]\n devDependencies: string[]\n description?: string\n hasExports: boolean\n}\n\n// Dev dependency patterns\nconst DEV_PATTERNS = [\n '@types/',\n 'eslint',\n 'prettier',\n 'typescript',\n 'jest',\n 'vitest',\n 'testing-library',\n '@testing-library/',\n 'storybook',\n '@storybook/',\n 'webpack',\n 'vite',\n 'rollup',\n 'babel',\n '@babel/',\n 'postcss',\n 'tailwindcss',\n 'autoprefixer'\n] as const\n\nfunction toGlobAll(dir: string): string {\n return path.join(dir, \"**/*\").replace(/\\\\/g, \"/\")\n}\n\nexport async function scanCommand(\n options: { cwd?: string; registry?: string; output?: string; source?: string } = {}\n) {\n const registryName = options.registry || SCHEMA_CONFIG.defaultRegistryType\n const registryPath = `./${registryName}`\n \n const scanOptions: ScanOptions = {\n cwd: path.resolve(options.cwd || process.cwd()),\n registry: path.resolve(registryPath),\n outputFile: path.resolve(options.output || \"./src/registry.json\"),\n sourceDir: path.resolve(options.source || \"./src\"),\n }\n\n console.log(chalk.blue(`🔍 ${CLI_MESSAGES.info.scanningComponents(registryName)}`))\n \n try {\n const spinner = ora(CLI_MESSAGES.info.scanningDirectories).start()\n \n // Resolve directories based on SCHEMA_CONFIG\n const componentsDir = path.resolve(scanOptions.cwd, normalizeDir(SCHEMA_CONFIG.defaultDirectories.components))\n const uiDir = path.join(componentsDir, \"ui\")\n const blocksDir = path.resolve(scanOptions.cwd, normalizeDir(SCHEMA_CONFIG.defaultDirectories.blocks))\n const layoutsDir = path.resolve(scanOptions.cwd, normalizeDir(SCHEMA_CONFIG.defaultDirectories.layouts))\n const libDir = path.resolve(scanOptions.cwd, normalizeDir(SCHEMA_CONFIG.defaultDirectories.lib))\n const variantsDir = path.resolve(scanOptions.cwd, normalizeDir(SCHEMA_CONFIG.defaultDirectories.variants))\n \n // Scan different component types\n const uiComponents = await scanDirectory(uiDir, \"registry:ui\")\n const compositeComponents = await scanDirectoryFlat(componentsDir, \"registry:composite\", [\"index.ts\"])\n const variantComponents = await scanDirectory(variantsDir, \"registry:variants\", [\"index.ts\"])\n const blockComponents = await scanDirectory(blocksDir, \"registry:block\")\n const layoutComponents = await scanDirectory(layoutsDir, \"registry:layout\")\n const libComponents = await scanDirectory(libDir, \"registry:lib\")\n \n // Scan index files as special items\n const variantsIndexItem = await scanSingleFile(path.join(variantsDir, \"index.ts\"), \"registry:variants\")\n const componentsIndexItem = await scanSingleFile(path.join(componentsDir, \"index.ts\"), \"registry:composite\")\n \n // Merge and deduplicate by (type,name)\n const allComponentsRaw = [\n ...uiComponents,\n ...compositeComponents,\n ...variantComponents,\n ...(variantsIndexItem ? [variantsIndexItem] : []),\n ...(componentsIndexItem ? [componentsIndexItem] : []),\n ...blockComponents,\n ...layoutComponents,\n ...libComponents\n ]\n const seen = new Set<string>()\n const allComponents: RegistryItem[] = []\n for (const comp of allComponentsRaw) {\n const key = `${comp.type}:${comp.name}`\n if (seen.has(key)) continue\n seen.add(key)\n allComponents.push(comp)\n }\n \n spinner.text = CLI_MESSAGES.info.analyzingDeps.replace(\"{count}\", allComponents.length.toString())\n \n // Analyze each component for dependencies and devDependencies\n for (const component of allComponents) {\n const analysis = await analyzeComponentDependencies(component.files, scanOptions.cwd)\n component.dependencies = analysis.dependencies\n component.devDependencies = analysis.devDependencies\n \n // Update description if found during analysis\n if (analysis.description && !component.description) {\n component.description = analysis.description\n }\n }\n \n // Create registry with dynamic registry name\n const registry = {\n $schema: \"https://ui.buildy.tw/schema/registry.json\",\n items: allComponents,\n version: \"1.0.0\",\n lastUpdated: new Date().toISOString(),\n registry: registryName\n }\n \n // Ensure output directory exists\n await fs.ensureDir(path.dirname(scanOptions.outputFile))\n \n // Write registry file\n await fs.writeFile(scanOptions.outputFile, JSON.stringify(registry, null, 2))\n \n spinner.succeed(CLI_MESSAGES.status.scannedComponents(allComponents.length))\n \n console.log(chalk.green(`✅ ${CLI_MESSAGES.success.registryGenerated(registryName)}`))\n console.log(`Output: ${scanOptions.outputFile}`)\n \n // Show summary\n const summary = allComponents.reduce((acc, comp) => {\n acc[comp.type] = (acc[comp.type] || 0) + 1\n return acc\n }, {} as Record<string, number>)\n \n console.log(chalk.blue(\"\\n📊 Component Summary:\"))\n Object.entries(summary).forEach(([type, count]) => {\n console.log(` ${type}: ${count}`)\n })\n \n // Show dependency summary\n const allDeps = new Set<string>()\n const allDevDeps = new Set<string>()\n allComponents.forEach(comp => {\n comp.dependencies.forEach(dep => allDeps.add(dep))\n comp.devDependencies.forEach(dep => allDevDeps.add(dep))\n })\n \n console.log(chalk.blue(\"\\n📦 Dependencies Summary:\"))\n console.log(` Dependencies: ${allDeps.size} unique (${Array.from(allDeps).join(\", \") || \"none\"})`)\n console.log(` DevDependencies: ${allDevDeps.size} unique (${Array.from(allDevDeps).join(\", \") || \"none\"})`)\n \n } catch (error) {\n handleError(error)\n }\n}\n\nasync function scanDirectory(dirPath: string, type: string, ignorePatterns: string[] = []): Promise<RegistryItem[]> {\n if (!(await fs.pathExists(dirPath))) {\n return []\n }\n \n const components: RegistryItem[] = []\n \n // Find all TypeScript/JavaScript files\n const pattern = path.join(dirPath, \"**/*.{ts,tsx,js,jsx}\").replace(/\\\\/g, \"/\")\n const ignore = ignorePatterns.map(p => p.replace(/\\\\/g, \"/\"))\n const files = await glob(pattern, { windowsPathsNoEscape: true, ignore })\n \n for (const filePath of files) {\n const relativePath = path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\")\n const fileName = path.basename(filePath, path.extname(filePath))\n \n // Skip index files and files starting with underscore\n if (fileName === \"index\" || fileName.startsWith(\"_\")) {\n continue\n }\n \n try {\n const content = await fs.readFile(filePath, \"utf-8\")\n const description = extractDescription(content)\n \n // Check if file has valid exports\n if (!hasValidExports(content)) {\n continue\n }\n \n components.push({\n name: fileName,\n type,\n description,\n dependencies: [],\n devDependencies: [],\n files: [{\n path: relativePath,\n target: getTargetFromType(type)\n }]\n })\n } catch (error) {\n console.warn(`Warning: Could not process ${filePath}:`, (error as Error).message)\n }\n }\n \n return components\n}\n\nasync function scanDirectoryFlat(dirPath: string, type: string, ignoreFiles: string[] = []): Promise<RegistryItem[]> {\n if (!(await fs.pathExists(dirPath))) {\n return []\n }\n \n const components: RegistryItem[] = []\n \n // Find only files in the root of the directory (no subdirectories)\n const pattern = path.join(dirPath, \"*.{ts,tsx,js,jsx}\").replace(/\\\\/g, \"/\")\n const files = await glob(pattern, { windowsPathsNoEscape: true })\n \n for (const filePath of files) {\n const relativePath = path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\")\n const fileName = path.basename(filePath, path.extname(filePath))\n \n // Skip specified files and files starting with underscore\n if (ignoreFiles.includes(fileName + path.extname(filePath)) || fileName.startsWith(\"_\")) {\n continue\n }\n \n try {\n const content = await fs.readFile(filePath, \"utf-8\")\n const description = extractDescription(content)\n \n // Check if file has valid exports\n if (!hasValidExports(content)) {\n continue\n }\n \n components.push({\n name: fileName,\n type,\n description,\n dependencies: [],\n devDependencies: [],\n files: [{\n path: relativePath,\n target: getTargetFromType(type)\n }]\n })\n } catch (error) {\n console.warn(`Warning: Could not process ${filePath}:`, (error as Error).message)\n }\n }\n \n return components\n}\n\nasync function scanSingleFile(filePath: string, type: string): Promise<RegistryItem | null> {\n if (!(await fs.pathExists(filePath))) {\n return null\n }\n \n try {\n const content = await fs.readFile(filePath, \"utf-8\")\n const description = extractDescription(content)\n \n // Check if file has valid exports\n if (!hasValidExports(content)) {\n return null\n }\n \n const relativePath = path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\")\n const fileName = path.basename(filePath, path.extname(filePath))\n \n return {\n name: fileName,\n type,\n description,\n dependencies: [],\n devDependencies: [],\n files: [{\n path: relativePath,\n target: getTargetFromType(type)\n }]\n }\n } catch (error) {\n console.warn(`Warning: Could not process ${filePath}:`, (error as Error).message)\n return null\n }\n}\n\nfunction extractDescription(content: string): string {\n // Look for JSDoc comment at the top of the file\n const jsdocMatch = content.match(/\\/\\*\\*\\s*\\n\\s*\\*\\s*(.+?)\\s*\\n\\s*\\*\\//s)\n if (jsdocMatch) {\n return jsdocMatch[1].trim()\n }\n \n // Look for single line comment\n const commentMatch = content.match(/^\\/\\/\\s*(.+)$/m)\n if (commentMatch) {\n return commentMatch[1].trim()\n }\n \n return \"\"\n}\n\nfunction hasValidExports(content: string): boolean {\n const sourceFile = ts.createSourceFile(\"index.ts\", content, ts.ScriptTarget.Latest, true)\n let hasExports = false\n\n function visit(node: ts.Node) {\n if (ts.isExportDeclaration(node) || ts.isExportAssignment(node) || hasExportModifier(node)) {\n hasExports = true\n return\n }\n\n ts.forEachChild(node, visit)\n }\n\n visit(sourceFile)\n return hasExports\n}\n\nasync function analyzeComponentDependencies(files: ComponentFile[], cwd: string): Promise<{\n dependencies: string[]\n devDependencies: string[]\n description?: string\n}> {\n const allDependencies = new Set<string>()\n const allDevDependencies = new Set<string>()\n let description: string | undefined\n \n for (const file of files) {\n try {\n const filePath = path.resolve(cwd, file.path)\n const content = await fs.readFile(filePath, \"utf-8\")\n \n // Parse TypeScript/JavaScript to extract imports\n const sourceFile = ts.createSourceFile(\n file.path,\n content,\n ts.ScriptTarget.Latest,\n true\n )\n \n const analysis = analyzeAST(sourceFile)\n \n // Merge dependencies\n analysis.dependencies.forEach(dep => allDependencies.add(dep))\n analysis.devDependencies.forEach(dep => allDevDependencies.add(dep))\n \n // Use first found description\n if (analysis.description && !description) {\n description = analysis.description\n }\n \n } catch (error) {\n console.warn(CLI_MESSAGES.errors.failedToAnalyzeDeps(file.path), (error as Error).message)\n }\n }\n \n return {\n dependencies: Array.from(allDependencies),\n devDependencies: Array.from(allDevDependencies),\n description\n }\n}\n\nfunction analyzeAST(sourceFile: ts.SourceFile): ASTAnalysis {\n const dependencies = new Set<string>()\n const devDependencies = new Set<string>()\n let description: string | undefined\n let hasExports = false\n \n function visit(node: ts.Node) {\n // Analyze imports\n if (ts.isImportDeclaration(node)) {\n const moduleSpecifier = node.moduleSpecifier\n if (ts.isStringLiteral(moduleSpecifier)) {\n const moduleName = moduleSpecifier.text\n \n // Add only external dependencies using the same logic as generate-registry.ts\n if (isExternalDependency(moduleName)) {\n // Determine if it's a dev dependency based on common patterns\n if (isDevDependency(moduleName)) {\n devDependencies.add(moduleName)\n } else {\n dependencies.add(moduleName)\n }\n }\n }\n }\n \n // Analyze exports\n if (ts.isExportDeclaration(node)) {\n hasExports = true\n } else if (ts.isExportAssignment(node)) {\n hasExports = true\n } else if (hasExportModifier(node)) {\n hasExports = true\n }\n \n // Search for JSDoc comments\n const jsDocComment = getJSDocComment(node)\n if (jsDocComment && !description) {\n description = jsDocComment\n }\n \n ts.forEachChild(node, visit)\n }\n \n visit(sourceFile)\n \n return {\n dependencies: Array.from(dependencies),\n devDependencies: Array.from(devDependencies),\n description,\n hasExports\n }\n}\n\nfunction isDevDependency(moduleName: string): boolean {\n return DEV_PATTERNS.some(pattern => moduleName.includes(pattern))\n}\n\nfunction hasExportModifier(node: ts.Node): boolean {\n if ('modifiers' in node && node.modifiers) {\n return (node.modifiers as ts.NodeArray<ts.Modifier>).some(\n mod => mod.kind === ts.SyntaxKind.ExportKeyword\n )\n }\n return false\n}\n\nfunction getJSDocComment(node: ts.Node): string | undefined {\n try {\n // Get JSDoc comments\n const jsDocTags = ts.getJSDocCommentsAndTags(node)\n \n for (const tag of jsDocTags) {\n if (ts.isJSDoc(tag) && tag.comment) {\n if (typeof tag.comment === 'string') {\n return tag.comment.trim()\n } else if (Array.isArray(tag.comment)) {\n return tag.comment.map(part => part.text).join('').trim()\n }\n }\n }\n } catch (error) {\n // Ignore JSDoc parsing errors\n }\n \n return undefined\n}\n\nfunction getTargetFromType(type: string): string {\n const folder = TYPE_TO_FOLDER[type as keyof typeof TYPE_TO_FOLDER]\n return folder || \"components\"\n}\n\n// TYPE_TO_FOLDER mapping:\n// - \"registry:ui\" → \"components/ui\"\n// - \"registry:variants\" → \"variants\"\n// - \"registry:lib\" → \"lib\"\n\nfunction normalizeDir(dir: string): string {\n return dir.replace(/^\\.\\//, \"\").replace(/\\\\/g, \"/\")\n} ","import chalk from \"chalk\"\nimport { Component } from \"../registry/schema.js\"\nimport { getAllComponents } from \"../registry/api.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { logger } from \"../utils/logger.js\"\nimport { CdnResolutionOptions, SCHEMA_CONFIG, type RegistryType } from \"../utils/schema-config.js\"\n\nconst LIST_EXCLUDED_COMPONENT_TYPES = [\"registry:variants\", \"registry:lib\"]\n\ninterface ListOptions {\n registry?: string\n json?: boolean\n cache?: boolean\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n}\n\nexport async function listCommand(options: ListOptions = {}) {\n const registryType = resolveRegistryType(options.registry)\n const cdnResolution: CdnResolutionOptions = {\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn\n }\n const requestOptions = {\n excludeTypes: LIST_EXCLUDED_COMPONENT_TYPES,\n noCache: options.cache === false,\n cdn: cdnResolution\n }\n\n try {\n const components = await getAllComponents(registryType, requestOptions)\n\n if (options.json) {\n console.log(JSON.stringify(components, null, 2))\n return\n }\n\n const byType = new Map<string, Component[]>()\n for (const component of components) {\n const group = byType.get(component.type) ?? []\n group.push(component)\n byType.set(component.type, group)\n }\n\n const sortedGroups = Array.from(byType.entries()).sort((a, b) => a[0].localeCompare(b[0]))\n if (sortedGroups.length === 0) {\n logger.warn(CLI_MESSAGES.errors.registryTempUnavailable)\n return\n }\n\n logger.info(CLI_MESSAGES.info.listingComponents)\n for (const [type, group] of sortedGroups) {\n const entries = group.sort((a, b) => a.name.localeCompare(b.name))\n console.log(chalk.cyan(`${type} (${entries.length} components)`))\n for (const component of entries) {\n const description = component.description ? chalk.dim(component.description) : \"\"\n console.log(chalk.white(` ${component.name.padEnd(14)}`) + description)\n }\n console.log(\"\")\n }\n } catch (error) {\n logger.error((error as Error).message)\n }\n}\n\nfunction resolveRegistryType(registryInput?: string): RegistryType {\n if (!registryInput) {\n return SCHEMA_CONFIG.defaultRegistryType\n }\n\n if (SCHEMA_CONFIG.registryTypes.includes(registryInput as RegistryType)) {\n return registryInput as RegistryType\n }\n\n logger.warn(`⚠️ Unknown registry type: ${registryInput}`)\n logger.warn(`Available registries: ${SCHEMA_CONFIG.registryTypes.join(\", \")}`)\n return SCHEMA_CONFIG.defaultRegistryType\n}\n\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport { glob } from \"glob\"\nimport chalk from \"chalk\"\nimport { findConfig } from \"../utils/project.js\"\nimport { Component, Config } from \"../registry/schema.js\"\nimport { getAllComponents } from \"../registry/api.js\"\nimport { buildUnifiedDiff, formatDiffPreview, hasDiff } from \"../utils/diff-utils.js\"\nimport { applyTransforms } from \"../utils/transform.js\"\nimport { SCHEMA_CONFIG, type RegistryType, CdnResolutionOptions } from \"../utils/schema-config.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { logger } from \"../utils/logger.js\"\nimport { handleError } from \"../utils/errors.js\"\n\ninterface DiffOptions {\n registry?: string\n json?: boolean\n cache?: boolean\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n}\n\ninterface ScannedLocalComponent {\n name: string\n filePath: string\n}\n\ninterface ComponentDiffSummary {\n component: string\n type: string\n status: \"up-to-date\" | \"update\" | \"missing-remote\" | \"missing-local\"\n files: Array<{ path: string; changed: boolean; diff?: string }>\n}\n\nexport async function diffCommand(componentName?: string, options: DiffOptions = {}) {\n try {\n const registryType = resolveRegistryType(options.registry)\n const cdnResolution: CdnResolutionOptions = {\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn\n }\n const config = await findConfig(registryType)\n const defaultConfig: Config = config ?? {\n framework: SCHEMA_CONFIG.supportedFrameworks[0],\n typescript: true,\n globalCss: \"src/index.css\",\n aliases: SCHEMA_CONFIG.defaultAliases,\n registry: SCHEMA_CONFIG.defaultRegistry,\n componentsDir: SCHEMA_CONFIG.defaultDirectories.components,\n libDir: SCHEMA_CONFIG.defaultDirectories.lib\n }\n\n const installed = await scanLocalComponents(defaultConfig)\n if (installed.length === 0) {\n logger.warn(CLI_MESSAGES.errors.noLocalInstall)\n return\n }\n\n const registryComponents = await getAllComponents(registryType, {\n noCache: options.cache === false,\n cdn: cdnResolution\n })\n const registryIndex = new Map(registryComponents.map(item => [item.name.toLowerCase(), item]))\n\n const targets = componentName\n ? installed.filter(item => item.name.toLowerCase() === componentName.toLowerCase())\n : installed\n\n if (componentName && targets.length === 0) {\n logger.warn(`Component \"${componentName}\" not found in local project structure`)\n return\n }\n\n const results: ComponentDiffSummary[] = []\n const shouldLogOutput = !options.json\n if (shouldLogOutput) {\n logger.info(CLI_MESSAGES.info.checkingForUpdates)\n }\n for (const item of targets) {\n const remoteComponent = registryIndex.get(item.name.toLowerCase())\n if (!remoteComponent) {\n results.push({\n component: item.name,\n type: \"unknown\",\n status: \"missing-remote\",\n files: [{ path: item.filePath, changed: false }]\n })\n continue\n }\n\n const fileSummary = await compareComponentFiles(item, remoteComponent, defaultConfig)\n const hasChanges = fileSummary.some(file => file.changed)\n results.push({\n component: item.name,\n type: remoteComponent.type,\n status: hasChanges ? \"update\" : \"up-to-date\",\n files: fileSummary\n })\n }\n\n if (options.json) {\n console.log(JSON.stringify(results, null, 2))\n return\n }\n\n const updates = results.filter(item => item.status === \"update\").length\n const upToDate = results.filter(item => item.status === \"up-to-date\").length\n\n for (const result of results) {\n if (result.status === \"missing-remote\") {\n logger.warn(`\\n⚠️ ${result.component}: not found in registry`)\n continue\n }\n\n const statusTitle = result.status === \"update\"\n ? `${chalk.yellow(\"UPDATE\")}`\n : chalk.green(\"UP-TO-DATE\")\n const title = `${statusTitle} ${result.component} (${result.type})`\n logger.info(title)\n\n for (const file of result.files) {\n console.log(` ${chalk.white(file.path)}`)\n if (file.changed && file.diff) {\n const preview = formatDiffPreview(file.diff, 120)\n console.log(colorDiff(preview))\n } else {\n console.log(chalk.dim(\" No changes\"))\n }\n }\n }\n\n console.log(\n `\\n${CLI_MESSAGES.info.localDiffSummary} ${chalk.yellow(updates)} component(s) have updates, ${chalk.green(upToDate)} up to date`\n )\n\n if (updates > 0) {\n console.log('Run \"ui8kit add <component> --force\" to update.')\n }\n } catch (error) {\n handleError(error)\n }\n}\n\nasync function compareComponentFiles(\n installed: ScannedLocalComponent,\n remote: Component,\n config: Config\n): Promise<Array<{ path: string; changed: boolean; diff?: string }>> {\n const localContent = await fs.readFile(installed.filePath, \"utf-8\")\n const remoteCandidate = remote.files.find(file => {\n const candidateName = path.basename(file.path)\n return candidateName.toLowerCase() === path.basename(installed.filePath).toLowerCase()\n })\n\n if (!remoteCandidate) {\n return [{ path: installed.filePath, changed: false }]\n }\n\n const remoteContent = applyTransforms(remoteCandidate.content, config.aliases)\n const changed = hasDiff(localContent, remoteContent)\n return changed\n ? [{\n path: installed.filePath,\n changed: true,\n diff: buildUnifiedDiff(installed.filePath, `${remote.name}/${path.basename(installed.filePath)}`, localContent, remoteContent)\n }]\n : [{ path: installed.filePath, changed: false }]\n}\n\nasync function scanLocalComponents(config: Config): Promise<ScannedLocalComponent[]> {\n const componentsDir = path.resolve(process.cwd(), config.componentsDir || SCHEMA_CONFIG.defaultDirectories.components)\n const componentsUiDir = path.join(componentsDir, \"ui\")\n const blocksDir = path.resolve(process.cwd(), SCHEMA_CONFIG.defaultDirectories.blocks)\n const layoutsDir = path.resolve(process.cwd(), SCHEMA_CONFIG.defaultDirectories.layouts)\n\n const directories = [componentsUiDir, componentsDir, blocksDir, layoutsDir]\n const entries: ScannedLocalComponent[] = []\n const patterns = directories.map(dir => path.join(dir, \"*.{ts,tsx}\").replace(/\\\\/g, \"/\"))\n\n for (const pattern of patterns) {\n const baseDir = path.dirname(pattern)\n if (!(await fs.pathExists(baseDir))) {\n continue\n }\n\n const filePaths = await glob(pattern, { windowsPathsNoEscape: true })\n for (const filePath of filePaths) {\n const fileName = path.basename(filePath)\n if (fileName === \"index.tsx\" || fileName === \"index.ts\") {\n continue\n }\n entries.push({\n name: path.parse(fileName).name.toLowerCase(),\n filePath: path.resolve(process.cwd(), filePath)\n })\n }\n }\n\n const uniqueByName = new Map<string, ScannedLocalComponent>()\n for (const entry of entries) {\n if (!uniqueByName.has(entry.name)) {\n uniqueByName.set(entry.name, entry)\n }\n }\n return Array.from(uniqueByName.values())\n}\n\nfunction colorDiff(value: string): string {\n return value\n .split(\"\\n\")\n .map(line => {\n if (line.startsWith(\"+\")) {\n return chalk.green(line)\n }\n if (line.startsWith(\"-\")) {\n return chalk.red(line)\n }\n return line\n })\n .join(\"\\n\")\n}\n\nfunction resolveRegistryType(registryInput?: string): RegistryType {\n if (!registryInput) {\n return SCHEMA_CONFIG.defaultRegistryType\n }\n\n if (SCHEMA_CONFIG.registryTypes.includes(registryInput as RegistryType)) {\n return registryInput as RegistryType\n }\n\n logger.warn(`⚠️ Unknown registry type: ${registryInput}`)\n logger.warn(`Available registries: ${SCHEMA_CONFIG.registryTypes.join(\", \")}`)\n return SCHEMA_CONFIG.defaultRegistryType\n}\n\n","import { clearCache, getCacheDir } from \"../utils/cache.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { logger } from \"../utils/logger.js\"\nimport { handleError } from \"../utils/errors.js\"\n\nexport async function cacheClearCommand() {\n try {\n await clearCache()\n logger.success(`${CLI_MESSAGES.success.cacheCleared} (${getCacheDir()})`)\n } catch (error) {\n handleError(error)\n }\n}\n\n","import fs from \"fs-extra\"\nimport os from \"os\"\nimport path from \"path\"\nimport fetch from \"node-fetch\"\nimport chalk from \"chalk\"\nimport { SCHEMA_CONFIG, getCdnUrls } from \"../utils/schema-config.js\"\nimport { getRegistryCdnState } from \"../registry/api.js\"\nimport { detectPackageManager } from \"../utils/package-manager.js\"\nimport { getCliVersion } from \"../utils/cli-version.js\"\nimport { getCacheDir } from \"../utils/cache.js\"\n\ninterface InfoOptions {\n json?: boolean\n cdn?: boolean\n}\n\nexport async function infoCommand(options: InfoOptions = {}) {\n const version = getCliVersion()\n const pm = await detectPackageManager()\n const cwd = process.cwd()\n\n const configStatus = await readConfigStatus()\n const cache = await readCacheStatus()\n const configOptions = configStatus.found ? {\n registryUrl: configStatus.config.registryUrl,\n registryVersion: configStatus.config.registryVersion,\n strictCdn: configStatus.config.strictCdn\n } : {}\n const cdnCandidates = getCdnUrls(SCHEMA_CONFIG.defaultRegistryType, configOptions)\n const cdn = await checkPrimaryCdn(cdnCandidates)\n const cdnState = getRegistryCdnState(SCHEMA_CONFIG.defaultRegistryType, { cdn: configOptions })\n\n if (options.json) {\n console.log(JSON.stringify({\n version,\n node: process.version,\n os: `${os.platform()} ${os.arch()}`,\n packageManager: pm,\n cwd,\n config: configStatus.config,\n configFound: configStatus.found,\n cache,\n cdn,\n registry: SCHEMA_CONFIG.defaultRegistry,\n cdnResolution: {\n overrides: configOptions,\n resolvedUrls: cdnState.urls,\n workingCDN: cdnState.workingCDN\n }\n }, null, 2))\n return\n }\n\n console.log(`ui8kit v${version}`)\n console.log(`Node ${process.version}`)\n console.log(`OS ${os.platform()} ${os.arch()}`)\n console.log(`PM ${pm}`)\n console.log(`CWD ${cwd}`)\n console.log(\"\")\n if (configStatus.found) {\n console.log(chalk.green(`Config ${configStatus.path} (found)`))\n const config = configStatus.config\n console.log(` framework ${config.framework}`)\n console.log(` typescript ${config.typescript}`)\n console.log(` globalCss ${config.globalCss}`)\n console.log(` componentsDir ${config.componentsDir}`)\n console.log(` libDir ${config.libDir}`)\n } else {\n console.log(chalk.yellow(\"Config not found\"))\n }\n console.log(\"\")\n\n console.log(`Registry ${SCHEMA_CONFIG.defaultRegistry}`)\n console.log(`CDN ${cdn.url} (${cdn.ok ? \"ok\" : \"failed\"})`)\n console.log(`Cache ${cache.path} (${cache.items} items, ${cache.mb} MB)`)\n\n if (options.cdn) {\n console.log(\"\")\n console.log(\"CDN Resolution\")\n console.log(` workingCDN: ${cdnState.workingCDN || \"not resolved yet in cache\"}`\n )\n console.log(` registryUrl override: ${configOptions.registryUrl || \"not set\"}`)\n console.log(` registryVersion: ${configOptions.registryVersion || \"not set\"}`)\n console.log(` strictCdn: ${configOptions.strictCdn ? \"enabled\" : \"disabled\"}`)\n console.log(\" resolved order:\")\n cdnState.urls.forEach((item, index) => {\n console.log(` ${index + 1}. ${item}`)\n })\n }\n}\n\nasync function readConfigStatus():\n Promise<{ found: boolean; path: string | null; config: any }>{\n const candidatePaths = [\n path.join(process.cwd(), \"ui8kit.config.json\"),\n path.join(process.cwd(), \"src\", \"ui8kit.config.json\"),\n path.join(process.cwd(), SCHEMA_CONFIG.defaultRegistryType, \"ui8kit.config.json\"),\n ]\n\n for (const configPath of candidatePaths) {\n if (await fs.pathExists(configPath)) {\n try {\n const config = await fs.readJson(configPath)\n return {\n found: true,\n path: `./${path.relative(process.cwd(), configPath).replace(/\\\\/g, \"/\")}`,\n config: {\n framework: config.framework ?? \"unknown\",\n typescript: config.typescript ?? false,\n globalCss: config.globalCss ?? \"src/index.css\",\n componentsDir: config.componentsDir ?? SCHEMA_CONFIG.defaultDirectories.components,\n libDir: config.libDir ?? SCHEMA_CONFIG.defaultDirectories.lib,\n registryUrl: config.registryUrl,\n registryVersion: config.registryVersion,\n strictCdn: config.strictCdn\n }\n }\n } catch {\n continue\n }\n }\n }\n\n return {\n found: false,\n path: null,\n config: null\n }\n}\n\nasync function readCacheStatus(): Promise<{ path: string; items: number; mb: string }> {\n const cachePath = getCacheDir()\n let items = 0\n let bytes = 0\n if (await fs.pathExists(cachePath)) {\n const result = await countCacheFiles(cachePath)\n items = result.count\n bytes = result.bytes\n }\n return {\n path: cachePath.replace(/\\\\/g, \"/\"),\n items,\n mb: `${(bytes / (1024 * 1024)).toFixed(1)}`\n }\n}\n\nasync function countCacheFiles(dirPath: string): Promise<{ count: number; bytes: number }> {\n let count = 0\n let size = 0\n const entries = await fs.readdir(dirPath, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name)\n if (entry.isDirectory()) {\n const nested = await countCacheFiles(fullPath)\n count += nested.count\n size += nested.bytes\n continue\n }\n\n count += 1\n const stat = await fs.stat(fullPath)\n size += stat.size\n }\n return { count, bytes: size }\n}\n\nasync function checkPrimaryCdn(urls: string[] = SCHEMA_CONFIG.cdnBaseUrls): Promise<{ url: string; ok: boolean }> {\n const url = urls[0]\n if (!url) {\n return { url: \"not configured\", ok: false }\n }\n try {\n const response = await fetch(`${url}/index.json`, { method: \"HEAD\" })\n if (response.status >= 200 && response.status < 400) {\n return { url, ok: true }\n }\n } catch {\n // Intentionally ignore.\n }\n return { url, ok: false }\n}\n","import { existsSync, readFileSync } from \"node:fs\"\nimport { dirname, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\nfunction findPackageJsonPath(): string | null {\n const roots = [process.argv[1], __dirname]\n\n for (const rawRoot of roots) {\n if (!rawRoot) {\n continue\n }\n\n let current = rawRoot.endsWith(\".js\") ? dirname(rawRoot) : rawRoot\n for (let i = 0; i < 8; i += 1) {\n const candidate = resolve(current, \"package.json\")\n if (existsSync(candidate)) {\n return candidate\n }\n\n const parent = dirname(current)\n if (parent === current) {\n break\n }\n current = parent\n }\n }\n\n return null\n}\n\nexport function getCliVersion(): string {\n const packageJsonPath = findPackageJsonPath()\n if (!packageJsonPath) {\n return \"0.0.0\"\n }\n\n try {\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as { version?: string }\n return pkg.version ?? \"0.0.0\"\n } catch {\n return \"0.0.0\"\n }\n}\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport prompts from \"prompts\"\nimport { logger } from \"../utils/logger.js\"\nimport { handleError } from \"../utils/errors.js\"\n\nconst DEFAULT_BUILD_OUTPUT_DIR = path.join(\"packages\", \"registry\", \"r\")\nconst REGISTRY_ROOT = path.join(\"packages\", \"registry\")\n\ninterface RegistryCleanOptions {\n all?: boolean\n dryRun?: boolean\n force?: boolean\n}\n\nfunction normalizeWorkingPath(value: string): string {\n return path.resolve(value)\n}\n\nexport function getDefaultRegistryOutputDir(cwd = process.cwd()): string {\n return normalizeWorkingPath(path.resolve(cwd, DEFAULT_BUILD_OUTPUT_DIR))\n}\n\nexport function resolveRegistryBaseDir(cwd: string): string {\n return normalizeWorkingPath(path.resolve(cwd, REGISTRY_ROOT))\n}\n\nexport function getRegistryCleanTargets(cwd: string, includeManifest = false): string[] {\n const normalizedCwd = normalizeWorkingPath(cwd)\n const registryDir = resolveRegistryBaseDir(normalizedCwd)\n const outputDir = getDefaultRegistryOutputDir(normalizedCwd)\n const schemaDir = path.join(registryDir, \"schema\")\n const schemaFile = path.join(registryDir, \"schema.json\")\n const mapFile = path.join(registryDir, \"ui8kit.map.json\")\n\n const targets = [outputDir, schemaDir, schemaFile, mapFile]\n if (includeManifest) {\n targets.push(path.join(normalizedCwd, \"src\", \"registry.json\"))\n }\n\n return targets\n}\n\nexport function isSafePath(candidate: string, cwd: string): boolean {\n const resolvedCandidate = normalizeWorkingPath(candidate)\n const normalizedCwd = normalizeWorkingPath(cwd)\n return resolvedCandidate === normalizedCwd || resolvedCandidate.startsWith(`${normalizedCwd}${path.sep}`)\n}\n\nasync function confirmDeletion(paths: string[]): Promise<boolean> {\n const { ok } = await prompts({\n type: \"confirm\",\n name: \"ok\",\n message: `Delete ${paths.length} path(s)?`,\n initial: false\n })\n return Boolean(ok)\n}\n\nasync function removePath(target: string) {\n if (await fs.pathExists(target)) {\n await fs.remove(target)\n logger.info(`removed: ${target}`)\n }\n}\n\nexport async function registryCleanCommand(options: RegistryCleanOptions = {}) {\n const cwd = normalizeWorkingPath(process.cwd())\n const targets = getRegistryCleanTargets(cwd, Boolean(options.all))\n const existing = []\n for (const target of targets) {\n if (isSafePath(target, cwd) && await fs.pathExists(target)) {\n existing.push(target)\n }\n }\n\n if (existing.length === 0) {\n logger.info(\"No generated registry artifacts found.\")\n return\n }\n\n const uniqueTargets = [...new Set(existing)]\n if (options.dryRun) {\n logger.info(\"Dry run enabled. The following paths will be removed:\")\n uniqueTargets.forEach((target) => logger.info(` ${target}`))\n logger.info(`Total: ${uniqueTargets.length}`)\n return\n }\n\n if (!options.force && !await confirmDeletion(uniqueTargets)) {\n logger.warn(\"Registry cleanup was cancelled.\")\n return\n }\n\n try {\n for (const target of uniqueTargets) {\n await removePath(target)\n }\n logger.success(`Removed ${uniqueTargets.length} registry artifact path(s).`)\n } catch (error) {\n handleError(error)\n }\n}\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport prompts from \"prompts\"\nimport { logger } from \"../utils/logger.js\"\nimport { handleError } from \"../utils/errors.js\"\nimport { clearCache } from \"../utils/cache.js\"\nimport { SCHEMA_CONFIG } from \"../utils/schema-config.js\"\nimport { isSafePath, getRegistryCleanTargets } from \"./registry.js\"\n\ninterface ResetOptions {\n dryRun?: boolean\n force?: boolean\n yes?: boolean\n withCache?: boolean\n}\n\ninterface ProjectConfig {\n componentsDir?: string\n libDir?: string\n}\n\nexport async function resetCommand(options: ResetOptions = {}) {\n const cwd = path.resolve(process.cwd())\n if (options.withCache) {\n logger.info(\"Cache cleanup requested.\")\n await clearCache()\n }\n\n const targets = await gatherResetTargets(cwd)\n\n if (targets.length === 0) {\n logger.info(\"No UI8Kit state files found to reset.\")\n return\n }\n\n if (options.dryRun) {\n logger.info(\"Reset dry-run. No files were removed.\")\n targets.forEach((target) => logger.info(` ${target}`))\n logger.info(`Total: ${targets.length}`)\n return\n }\n\n if (!options.force && !options.yes) {\n const { ok } = await prompts({\n type: \"confirm\",\n name: \"ok\",\n message: \"This will remove local UI8Kit generated files and cannot be undone. Continue?\",\n initial: false\n })\n if (!ok) {\n logger.warn(\"Reset was cancelled.\")\n return\n }\n }\n\n try {\n for (const target of targets) {\n await fs.remove(target)\n logger.info(`removed: ${target}`)\n }\n logger.success(`Reset complete. Removed ${targets.length} path(s).`)\n } catch (error) {\n handleError(error)\n }\n}\n\nasync function gatherResetTargets(cwd: string): Promise<string[]> {\n const normalizedCwd = path.resolve(cwd)\n const registryTargets = getRegistryCleanTargets(normalizedCwd, true)\n\n const configPath = path.join(normalizedCwd, \"ui8kit.config.json\")\n const configCandidates = [\n configPath,\n path.join(normalizedCwd, \"src\", \"ui8kit.config.json\")\n ]\n\n const discoveredTargets: string[] = []\n\n for (const target of configCandidates) {\n if (await fs.pathExists(target)) {\n discoveredTargets.push(target)\n }\n }\n\n const config = await readConfig(discoveredTargets.at(0))\n const componentsDir = path.resolve(normalizedCwd, config?.componentsDir || SCHEMA_CONFIG.defaultDirectories.components)\n const libDir = path.resolve(normalizedCwd, config?.libDir || SCHEMA_CONFIG.defaultDirectories.lib)\n const variantsDir = path.join(normalizedCwd, SCHEMA_CONFIG.defaultDirectories.variants)\n const layoutsDir = path.join(normalizedCwd, SCHEMA_CONFIG.defaultDirectories.layouts)\n const blocksDir = path.join(normalizedCwd, SCHEMA_CONFIG.defaultDirectories.blocks)\n\n const projectTargets = [componentsDir, libDir, variantsDir, layoutsDir, blocksDir]\n\n const allTargets = [\n ...registryTargets,\n ...discoveredTargets,\n ...projectTargets\n ]\n\n const uniqueTargets = [...new Set(allTargets)]\n return uniqueTargets.filter((target) => isSafePath(target, normalizedCwd) && fs.pathExistsSync(target))\n}\n\nasync function readConfig(configPath?: string): Promise<ProjectConfig | null> {\n if (!configPath || !(await fs.pathExists(configPath))) {\n return null\n }\n\n try {\n const config = await fs.readJson(configPath)\n return {\n componentsDir: config.componentsDir,\n libDir: config.libDir\n }\n } catch {\n return null\n }\n}\n\n"],"mappings":"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","names":["chalk","ora","path","fs","fetch","prompts","path","resolve","fs","path","fs","path","fs","path","chalk","prompts","chalk","ora","path","chalk","ora","path","fs","fs","path","chalk","ora","chalk","fs","path","path","fs","fetch","chalk","chalk","path","fetch","chalk","ora","path","fs","path","fs","prompts","chalk","getComponent","path","path","ora","path","fs","prompts","fetch","fs","path","chalk","ora","ts","z","z","z","fs","path","ts","path","chalk","fs","ora","fs","path","chalk","ora","ts","path","chalk","ora","normalizeDir","fs","chalk","resolveRegistryType","chalk","fs","path","glob","chalk","resolveRegistryType","chalk","fs","path","glob","fs","os","path","fetch","chalk","os","chalk","path","fs","fetch","fs","path","prompts","path","prompts","fs","fs","path","prompts","path","prompts","fs","resolve","chalk"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/add.ts","../src/registry/api.ts","../src/registry/schema.ts","../src/utils/schema-config.ts","../src/utils/logger.ts","../src/utils/cache.ts","../src/utils/project.ts","../src/utils/registry-validator.ts","../src/commands/init.ts","../src/utils/cli-messages.ts","../src/utils/package-manager.ts","../src/utils/dependency-checker.ts","../src/utils/errors.ts","../src/utils/dependency-resolver.ts","../src/utils/diff-utils.ts","../src/utils/transform.ts","../src/commands/build.ts","../src/registry/build-schema.ts","../src/utils/schema-generator.ts","../src/utils/map-generator.ts","../src/commands/scan.ts","../src/commands/list.ts","../src/commands/diff.ts","../src/commands/cache.ts","../src/commands/info.ts","../src/utils/cli-version.ts","../src/commands/registry.ts","../src/commands/reset.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\"\nimport chalk from \"chalk\"\nimport { addCommand } from \"./commands/add.js\"\nimport { initCommand } from \"./commands/init.js\"\nimport { buildCommand } from \"./commands/build.js\"\nimport { scanCommand } from \"./commands/scan.js\"\nimport { listCommand } from \"./commands/list.js\"\nimport { diffCommand } from \"./commands/diff.js\"\nimport { cacheClearCommand } from \"./commands/cache.js\"\nimport { infoCommand } from \"./commands/info.js\"\nimport { registryCleanCommand } from \"./commands/registry.js\"\nimport { resetCommand } from \"./commands/reset.js\"\nimport { logger } from \"./utils/logger.js\"\nimport { getCliVersion } from \"./utils/cli-version.js\"\nimport { resolve } from \"node:path\"\n\nconst program = new Command()\n\nprogram\n .option(\"-c, --cwd <dir>\", \"Working directory\", process.cwd())\n .option(\"-v, --verbose\", \"Enable verbose output\")\n .option(\"--no-cache\", \"Bypass registry cache\")\n .name(\"ui8kit\")\n .description(\"A CLI for adding UI components to your Vite React projects (UI8Kit registry)\")\n .version(getCliVersion())\n\nprogram\n .command(\"list\")\n .description(\"List available components in registry\")\n .option(\"-r, --registry <type>\", \"Registry type: ui\", \"ui\")\n .option(\"--json\", \"Output raw JSON\")\n .option(\"--registry-url <url>\", \"Override CDN registry base URL\")\n .option(\"--registry-version <version>\", \"Override registry @latest version\")\n .option(\"--strict-cdn\", \"Disable fallback CDN providers when override is provided\")\n .action((options) => listCommand(options))\n\nprogram\n .command(\"diff\")\n .description(\"Show local vs registry differences\")\n .argument(\"[component]\", \"Component name\")\n .option(\"-r, --registry <type>\", \"Registry type: ui\", \"ui\")\n .option(\"--json\", \"Output diff in machine-readable JSON\")\n .option(\"--registry-url <url>\", \"Override CDN registry base URL\")\n .option(\"--registry-version <version>\", \"Override registry @latest version\")\n .option(\"--strict-cdn\", \"Disable fallback CDN providers when override is provided\")\n .action((component, options) => diffCommand(component, options))\n\nprogram\n .command(\"cache\")\n .description(\"Manage local cache\")\n .command(\"clear\")\n .description(\"Clear registry cache\")\n .action(cacheClearCommand)\n\nprogram\n .command(\"registry\")\n .description(\"Manage generated registry artifacts\")\n .command(\"clean\")\n .description(\"Remove generated registry build artifacts\")\n .option(\"--dry-run\", \"Show what would be removed without deleting\")\n .option(\"--all\", \"Also remove src/registry.json if it exists\")\n .option(\"-f, --force\", \"Skip confirmation prompt\")\n .action(registryCleanCommand)\n\nprogram\n .command(\"reset\")\n .description(\"Reset local UI8Kit state\")\n .option(\"--dry-run\", \"Show what would be removed without deleting\")\n .option(\"--with-cache\", \"Also clear CLI cache data\")\n .option(\"-y, --yes\", \"Skip prompts and perform reset\")\n .option(\"-f, --force\", \"Skip confirmation prompt\")\n .action(resetCommand)\n\nprogram\n .command(\"info\")\n .description(\"Show environment and config diagnostics\")\n .option(\"--json\", \"Output diagnostics as JSON\")\n .option(\"--cdn\", \"Show resolved CDN order and active overrides\")\n .action(infoCommand)\n\nprogram\n .command(\"init\")\n .description(\"Initialize UI8Kit structure in your project\")\n .option(\"-y, --yes\", \"Skip prompts and use defaults\")\n .option(\"-r, --registry <type>\", \"Registry type: ui\", \"ui\")\n .option(\"--registry-url <url>\", \"Override CDN registry base URL\")\n .option(\"--registry-version <version>\", \"Override registry @latest version\")\n .option(\"--strict-cdn\", \"Disable fallback CDN providers when override is provided\")\n .option(\"--import-style <alias|package>\", \"Rewrite imports as alias paths or @ui8kit/core package imports\", \"alias\")\n .action(initCommand)\n\nprogram\n .command(\"add\")\n .description(\"Add components to your project from the registry\")\n .argument(\"[components...]\", \"Components to add\")\n .option(\"-a, --all\", \"Install all available components\")\n .option(\"-f, --force\", \"Overwrite existing files\")\n .option(\"-r, --registry <type>\", \"Registry type: ui\", \"ui\")\n .option(\"--dry-run\", \"Show what would be installed without installing\")\n .option(\"--retry\", \"Aggressive retry mode (3 attempts per CDN request)\")\n .option(\"--registry-url <url>\", \"Override CDN registry base URL\")\n .option(\"--registry-version <version>\", \"Override registry @latest version\")\n .option(\"--strict-cdn\", \"Disable fallback CDN providers when override is provided\")\n .action(addCommand)\n\nprogram\n .command(\"scan\")\n .description(\"Scan and generate registry from existing components\")\n .option(\"-r, --registry <type|path>\", \"Registry type (ui) or custom path\", \"ui\")\n .option(\"-o, --output <file>\", \"Output registry file\")\n .option(\"-s, --source <dir>\", \"Source directory to scan\")\n .action(async (options) => {\n await scanCommand(options)\n })\n\nprogram\n .command(\"build\")\n .description(\"Build components registry\")\n .argument(\"[registry]\", \"Path to registry.json file\", \"./src/registry.json\")\n .option(\"-o, --output <path>\", \"Output directory\", \"./packages/registry/r\")\n .action(buildCommand)\n\nprogram.on(\"command:*\", () => {\n console.error(chalk.red(`Invalid command: ${program.args.join(\" \")}`))\n console.log(\"See --help for a list of available commands.\")\n process.exit(1)\n})\n\nprogram.hook(\"preAction\", (_, actionCommand) => {\n const actionOptions = actionCommand?.opts?.() as {\n verbose?: boolean\n cwd?: string\n } | undefined\n const globalOptions = program.opts() as {\n verbose?: boolean\n cwd?: string\n }\n\n const verbose = globalOptions.verbose || actionOptions?.verbose\n const cwd = actionOptions?.cwd || globalOptions.cwd\n\n if (verbose) {\n logger.setVerbose(true)\n }\n\n if (cwd && resolve(process.cwd()) !== resolve(cwd)) {\n process.chdir(cwd)\n }\n})\n\nprogram.parse()","import ora from \"ora\"\nimport path from \"path\"\nimport fs from \"fs-extra\"\nimport fetch from \"node-fetch\"\nimport prompts from \"prompts\"\nimport { getComponent, getAllComponents } from \"../registry/api.js\"\nimport { findConfig } from \"../utils/project.js\"\nimport { Component, type Config } from \"../registry/schema.js\"\nimport { SCHEMA_CONFIG, type RegistryType, getCdnUrls, type CdnResolutionOptions } from \"../utils/schema-config.js\"\nimport { validateComponentInstallation, handleValidationError } from \"../utils/registry-validator.js\"\nimport { checkProjectDependencies, showDependencyStatus } from \"../utils/dependency-checker.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { installDependencies } from \"../utils/package-manager.js\"\nimport { logger } from \"../utils/logger.js\"\nimport { resolveRegistryTree } from \"../utils/dependency-resolver.js\"\nimport { handleError, ConfigNotFoundError } from \"../utils/errors.js\"\nimport { buildUnifiedDiff, formatDiffPreview, hasDiff } from \"../utils/diff-utils.js\"\nimport { applyTransforms, shouldTransformFile } from \"../utils/transform.js\"\n\ninterface AddOptions {\n force?: boolean\n dryRun?: boolean\n all?: boolean\n retry?: boolean\n registry?: string\n cache?: boolean\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n}\n\nconst ADD_EXCLUDED_COMPONENT_TYPES = [\"registry:variants\", \"registry:lib\"]\n\nexport async function addCommand(components: string[], options: AddOptions) {\n const registryType = resolveRegistryType(options.registry)\n const cdnResolution: CdnResolutionOptions = {\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn\n }\n const requestOptions = {\n excludeTypes: ADD_EXCLUDED_COMPONENT_TYPES,\n maxRetries: options.retry ? 3 : 1,\n noCache: options.cache === false,\n cdn: cdnResolution\n }\n\n try {\n if (options.all || components.includes(\"all\")) {\n await addAllComponents(options, registryType, requestOptions)\n return\n }\n\n const selectedComponents = components.length > 0\n ? components\n : await pickComponentsFromPrompt(registryType, requestOptions)\n\n if (selectedComponents.length === 0) {\n logger.warn(CLI_MESSAGES.errors.noComponentsSpecified)\n return\n }\n\n const validation = await validateComponentInstallation(selectedComponents, registryType)\n if (!validation.isValid) {\n handleValidationError(validation)\n }\n\n const config = await findConfig(registryType)\n if (!config) {\n throw new ConfigNotFoundError(registryType)\n }\n\n if (options.retry) {\n logger.info(CLI_MESSAGES.info.retryEnabled)\n }\n\n logger.info(CLI_MESSAGES.info.installing(registryType))\n\n const getComponentFn = (name: string, type: RegistryType) =>\n getComponent(name, type, requestOptions)\n\n const results = await installRequestedComponents(\n selectedComponents,\n registryType,\n config,\n getComponentFn,\n options\n )\n\n displayInstallationSummary(registryType, results)\n } catch (error) {\n handleError(error)\n }\n}\n\nasync function addAllComponents(\n options: AddOptions,\n registryType: RegistryType,\n requestOptions: { excludeTypes: string[]; maxRetries: number; noCache?: boolean; cdn?: CdnResolutionOptions }\n) {\n logger.info(CLI_MESSAGES.info.installingAll(registryType))\n\n const validation = await validateComponentInstallation([], registryType)\n if (!validation.isValid) {\n handleValidationError(validation)\n }\n\n const config = await findConfig(registryType)\n if (!config) {\n throw new ConfigNotFoundError(registryType)\n }\n \n const getAllComponentsFn = (type: RegistryType) => getAllComponents(type, requestOptions)\n \n if (options.retry) {\n logger.info(CLI_MESSAGES.info.retryEnabled)\n }\n \n const spinner = ora(CLI_MESSAGES.info.fetchingComponentList(registryType)).start()\n \n try {\n if (!options.dryRun) {\n await ensureBaseProjectDirectories(config)\n }\n \n const allComponents = await getAllComponentsFn(registryType)\n \n if (allComponents.length === 0) {\n spinner.fail(`No components found in ${registryType} registry`)\n logger.warn(`\\n⚠️ ${registryType} ${CLI_MESSAGES.errors.registryTempUnavailable}`)\n console.log(\"Try these alternatives:\")\n CLI_MESSAGES.examples.troubleshooting.forEach(alt => console.log(` • ${alt}`))\n return\n }\n \n spinner.succeed(CLI_MESSAGES.status.foundComponents(allComponents.length, registryType))\n \n if (options.dryRun) {\n await installRequestedComponents(\n allComponents.map(c => c.name),\n registryType,\n config,\n (name: string, type: RegistryType) => getComponent(name, type, requestOptions),\n options,\n allComponents\n )\n return\n }\n \n const results = await installRequestedComponents(\n allComponents.map(c => c.name),\n registryType,\n config,\n (name: string, type: RegistryType) => getComponent(name, type, requestOptions),\n options,\n allComponents\n )\n \n // Install components/index.ts when using --all\n await installComponentsIndex(registryType, config, requestOptions.cdn)\n \n displayInstallationSummary(registryType, results)\n \n } catch (error) {\n spinner.fail(CLI_MESSAGES.errors.failedToFetch(registryType))\n logger.error(`Error: ${(error as Error).message}`)\n logger.warn(`\\n⚠️ ${registryType} ${CLI_MESSAGES.errors.registryTempUnavailable}`)\n console.log(\"Try these alternatives:\")\n CLI_MESSAGES.examples.troubleshooting.forEach(alt => console.log(` • ${alt}`))\n process.exit(1)\n }\n}\n\nasync function ensureBaseProjectDirectories(config: Config): Promise<void> {\n await fs.ensureDir(config.libDir)\n await fs.ensureDir(config.componentsDir)\n await fs.ensureDir(path.join(config.componentsDir, \"ui\"))\n await fs.ensureDir(SCHEMA_CONFIG.defaultDirectories.blocks)\n await fs.ensureDir(SCHEMA_CONFIG.defaultDirectories.layouts)\n await fs.ensureDir(SCHEMA_CONFIG.defaultDirectories.variants)\n}\n\nasync function processComponents(\n componentNames: string[],\n registryType: RegistryType,\n config: Config,\n getComponentFn: (name: string, type: RegistryType) => Promise<Component | null>,\n options: AddOptions,\n preloadedComponents?: Component[],\n totalCount?: number\n): Promise<Array<{ name: string; status: \"success\" | \"error\"; error?: string }>> {\n const results: Array<{ name: string; status: \"success\" | \"error\"; error?: string }> = []\n const componentMap = new Map(preloadedComponents?.map(c => [c.name.toLowerCase(), c]))\n const total = totalCount ?? componentNames.length\n\n if (total > 1) {\n logger.info(`Installing ${total} components...`)\n }\n\n for (let i = 0; i < componentNames.length; i += 1) {\n const componentName = componentNames[i]\n const position = `${i + 1}/${total}`\n const spinner = ora(`[${position}] ${CLI_MESSAGES.status.installing(componentName, registryType)}`).start()\n \n try {\n const lookupName = componentName.toLowerCase()\n let component: Component | null = componentMap?.get(lookupName) ?? null\n \n if (!component) {\n component = await getComponentFn(componentName, registryType)\n }\n \n if (!component) {\n throw new Error(CLI_MESSAGES.errors.componentNotFound(componentName, registryType))\n }\n \n if (options.dryRun) {\n spinner.succeed(`[${position}] ${CLI_MESSAGES.status.wouldInstall(component.name, registryType)}`)\n logger.info(` Type: ${component.type}`)\n if (component.registryDependencies && component.registryDependencies.length > 0) {\n logger.info(` Registry deps: ${component.registryDependencies.join(\" -> \")}`)\n }\n logger.info(` Files: ${component.files.length}`)\n logger.info(` Dependencies: ${component.dependencies.join(\", \") || \"none\"}`)\n \n for (const file of component.files) {\n const fileName = path.basename(file.path)\n const target = file.target || inferTargetFromType(component.type)\n const installDir = resolveInstallDir(target, config)\n const targetPath = path.join(process.cwd(), installDir, fileName)\n const exists = await fs.pathExists(targetPath)\n const status = exists ? \"overwrite\" : \"create\"\n logger.info(` ${status}: ${targetPath}`)\n \n if (exists) {\n const currentContent = await fs.readFile(targetPath, \"utf-8\")\n const transformedIncoming = shouldTransformFile(fileName)\n ? applyTransforms(file.content, config.aliases, config.importStyle || \"alias\")\n : file.content\n const changed = hasDiff(currentContent, transformedIncoming)\n if (changed) {\n const patch = buildUnifiedDiff(targetPath, `${component.name}/${fileName}`, currentContent, transformedIncoming)\n console.log(formatDiffPreview(patch, 40))\n }\n }\n }\n\n if (component.dependencies.length > 0) {\n const depStatus = await checkProjectDependencies(component.dependencies)\n showDependencyStatus(depStatus)\n }\n continue\n }\n \n await installComponentFiles(component, config, options.force)\n \n if (component.dependencies.length > 0) {\n try {\n await installDependencies(component.dependencies)\n } catch (error) {\n logger.warn(CLI_MESSAGES.errors.couldNotInstallDeps(component.name))\n logger.warn(` Dependencies: ${component.dependencies.join(\", \")}`)\n logger.warn(\" Please install them manually if needed\")\n }\n }\n \n spinner.succeed(`[${position}] ${CLI_MESSAGES.status.installing(component.name, registryType)}`)\n results.push({ name: component.name, status: \"success\" })\n \n } catch (error) {\n spinner.fail(`[${position}] ${CLI_MESSAGES.errors.failedToInstall(componentName, registryType)}`)\n logger.error(` Error: ${(error as Error).message}`)\n results.push({ \n name: componentName, \n status: \"error\", \n error: (error as Error).message \n })\n }\n }\n \n return results\n}\n\nasync function pickComponentsFromPrompt(\n registryType: RegistryType,\n requestOptions: { excludeTypes: string[]; maxRetries: number }\n): Promise<string[]> {\n const allComponents = await getAllComponents(registryType, requestOptions)\n if (allComponents.length === 0) {\n logger.warn(`No components found in ${registryType} registry`)\n return []\n }\n\n const sorted = allComponents\n .filter(component => !ADD_EXCLUDED_COMPONENT_TYPES.includes(component.type))\n .sort((a, b) => {\n if (a.type === b.type) {\n return a.name.localeCompare(b.name)\n }\n return a.type.localeCompare(b.type)\n })\n\n const grouped = new Map<string, Component[]>()\n for (const component of sorted) {\n const group = grouped.get(component.type) ?? []\n group.push(component)\n if (!grouped.has(component.type)) {\n grouped.set(component.type, group)\n }\n }\n\n const choices: Array<{ title: string; value: string; description?: string; disabled?: boolean }> = []\n for (const [type, components] of grouped) {\n choices.push({\n title: `\\n${type}`,\n value: \"__separator__\",\n description: \"\",\n disabled: true\n })\n\n for (const component of components) {\n choices.push({\n title: component.name,\n value: component.name,\n description: component.description || component.type\n })\n }\n }\n\n if (choices.length === 0) {\n logger.warn(`No selectable components found in ${registryType} registry`)\n return []\n }\n\n const { selected } = await prompts({\n type: \"multiselect\",\n name: \"selected\",\n message: \"Which components would you like to add?\",\n instructions: false,\n choices,\n hint: \"Space to select, Enter to confirm\"\n })\n\n return selected || []\n}\n\nasync function installRequestedComponents(\n componentNames: string[],\n registryType: RegistryType,\n config: Config,\n getComponentFn: (name: string, type: RegistryType) => Promise<Component | null>,\n options: AddOptions,\n preloadedComponents: Component[] = []\n): Promise<Array<{ name: string; status: \"success\" | \"error\"; error?: string }>> {\n const componentMap = new Map<string, Component>()\n for (const component of preloadedComponents) {\n componentMap.set(component.name.toLowerCase(), component)\n }\n\n const resolverGetComponent = async (name: string, type: RegistryType): Promise<Component | null> => {\n const normalized = name.toLowerCase()\n const cached = componentMap.get(normalized)\n if (cached) {\n return cached\n }\n\n const component = await getComponentFn(name, type)\n if (!component) {\n return null\n }\n\n componentMap.set(component.name.toLowerCase(), component)\n return component\n }\n\n const orderedComponents = await resolveRegistryTree(componentNames, registryType, (name, type) =>\n resolverGetComponent(name, type)\n )\n if (options.dryRun && orderedComponents.length > 0) {\n logger.info(\"\\n📦 Resolved registry dependency tree:\")\n orderedComponents.forEach((component, index) => {\n console.log(` ${index + 1}. ${component.name}`)\n })\n }\n\n const orderedNames = new Set(orderedComponents.map(component => component.name.toLowerCase()))\n const normalizedRequested = Array.from(new Set(componentNames.map(name => name.toLowerCase())))\n const missingRequested = normalizedRequested.filter(name => !orderedNames.has(name))\n\n const missingResults = missingRequested.map(name => ({\n name,\n status: \"error\" as const,\n error: `Component \"${name}\" was not found in ${registryType} registry`\n }))\n\n const processingResults = await processComponents(\n orderedComponents.map(component => component.name),\n registryType,\n config,\n resolverGetComponent,\n options,\n orderedComponents,\n orderedComponents.length\n )\n return [...missingResults, ...processingResults]\n}\n\nfunction displayInstallationSummary(\n registryType: RegistryType,\n results: Array<{ name: string; status: \"success\" | \"error\" }>\n) {\n const successful = results.filter(r => r.status === \"success\")\n const failed = results.filter(r => r.status === \"error\")\n \n logger.info(\"\\n📊 Installation Summary:\")\n console.log(` Registry: ${registryType}`)\n console.log(` ✅ Successful: ${successful.length}`)\n console.log(` ❌ Failed: ${failed.length}`)\n \n if (successful.length > 0) {\n logger.success(`\\n🎉 ${CLI_MESSAGES.success.componentsInstalled}`)\n console.log(\"You can now import and use them in your project.\")\n }\n \n if (failed.length > 0) {\n process.exit(1)\n }\n}\n\nasync function installComponentFiles(\n component: Component,\n config: Config,\n force = false\n): Promise<void> {\n for (const file of component.files) {\n const fileName = path.basename(file.path)\n\n const target = file.target || inferTargetFromType(component.type)\n const installDir = resolveInstallDir(target, config)\n const targetPath = path.join(process.cwd(), installDir, fileName)\n\n if (!force && await fs.pathExists(targetPath)) {\n console.log(` ⚠️ ${CLI_MESSAGES.status.skipped(fileName)}`) \n continue\n }\n\n await fs.ensureDir(path.dirname(targetPath))\n const preparedContent = shouldTransformFile(fileName)\n ? applyTransforms(file.content, config.aliases, config.importStyle || \"alias\")\n : file.content\n await fs.writeFile(targetPath, preparedContent, \"utf-8\")\n }\n}\n\nexport function inferTargetFromType(componentType: string): string {\n switch (componentType) {\n case \"registry:ui\":\n return \"ui\"\n case \"registry:composite\":\n return \"components\"\n case \"registry:block\":\n return \"blocks\"\n case \"registry:component\":\n return \"components\"\n case \"registry:layout\":\n return \"layouts\"\n case \"registry:lib\":\n return \"lib\"\n case \"registry:variants\":\n return \"variants\"\n default:\n return \"components\"\n }\n}\n\nexport function resolveInstallDir(target: string, config: Config): string {\n const normalizedTarget = target.replace(/\\\\/g, \"/\").replace(/^\\/?src\\//i, \"\")\n\n // lib has own root at src/lib\n if (normalizedTarget === \"lib\") {\n return normalizeDir(config.libDir || SCHEMA_CONFIG.defaultDirectories.lib)\n }\n\n // variants has own root at src/variants\n if (normalizedTarget === \"variants\") {\n return normalizeDir(SCHEMA_CONFIG.defaultDirectories.variants)\n }\n\n const baseComponentsDir = normalizeDir(config.componentsDir || SCHEMA_CONFIG.defaultDirectories.components)\n\n // Composite targets like \"components/ui\" → parent(src) + target\n if (normalizedTarget.includes(\"/\")) {\n const parentRoot = baseComponentsDir.replace(/[/\\\\]components$/i, \"\") || \"src\"\n return path.join(parentRoot, normalizedTarget).replace(/\\\\/g, \"/\")\n }\n\n if (normalizedTarget === \"ui\") return path.join(baseComponentsDir, \"ui\").replace(/\\\\/g, \"/\")\n if (normalizedTarget === \"components\") return baseComponentsDir\n\n switch (normalizedTarget) {\n case \"blocks\":\n return normalizeDir(SCHEMA_CONFIG.defaultDirectories.blocks)\n case \"layouts\":\n return normalizeDir(SCHEMA_CONFIG.defaultDirectories.layouts)\n default:\n return baseComponentsDir\n }\n}\n\nfunction normalizeDir(dir: string): string {\n return dir.replace(/^\\.\\//, \"\").replace(/\\\\/g, \"/\")\n}\n\nfunction resolveRegistryType(registryInput?: string): RegistryType {\n if (!registryInput) {\n return SCHEMA_CONFIG.defaultRegistryType\n }\n \n if (SCHEMA_CONFIG.registryTypes.includes(registryInput as any)) {\n return registryInput as RegistryType\n }\n \n logger.warn(`⚠️ Unknown registry type: ${registryInput}`)\n console.log(`Available registries: ${SCHEMA_CONFIG.registryTypes.join(\", \")}`)\n console.log(`Using default: ${SCHEMA_CONFIG.defaultRegistryType}`)\n \n return SCHEMA_CONFIG.defaultRegistryType\n}\n\nasync function installComponentsIndex(registryType: RegistryType, config: Config, cdnResolution: CdnResolutionOptions = {}): Promise<void> {\n const spinner = ora(\"Installing components index...\").start()\n \n try {\n const cdnUrls = getCdnUrls(registryType, cdnResolution)\n \n for (const baseUrl of cdnUrls) {\n try {\n const url = `${baseUrl}/components/index.json`\n const response = await fetch(url)\n \n if (response.ok) {\n const component = await response.json() as Component\n \n for (const file of component.files) {\n const fileName = path.basename(file.path)\n const targetDir = config.componentsDir\n const targetPath = path.join(process.cwd(), targetDir, fileName)\n await fs.ensureDir(path.dirname(targetPath))\n await fs.writeFile(targetPath, file.content || \"\", \"utf-8\")\n }\n \n spinner.succeed(\"Installed components index\")\n return\n }\n } catch {\n continue\n }\n }\n \n spinner.info(\"Components index not found in registry (optional)\")\n } catch (error) {\n spinner.fail(\"Could not install components index\")\n }\n} ","import fetch from \"node-fetch\"\nimport { Component, componentSchema } from \"./schema.js\"\nimport { SCHEMA_CONFIG, TYPE_TO_FOLDER, getCdnUrls, type RegistryType, type CdnResolutionOptions } from \"../utils/schema-config.js\"\nimport { logger } from \"../utils/logger.js\"\nimport { getCachedJson, setCachedJson } from \"../utils/cache.js\"\n\nconst REGISTRY_INDEX_CACHE_TTL_MS = 3_600_000\n\nconst registryCache = new Map<RegistryType, {\n workingCDN: string | null\n registryIndex: any\n}>()\n\nconst DEFAULT_TIMEOUT_MS = 10_000\nconst DEFAULT_MAX_RETRIES = 1\nconst RETRY_DELAY_MS = 1200\n\nexport interface RegistryFetchOptions {\n excludeTypes?: string[]\n maxRetries?: number\n timeoutMs?: number\n noCache?: boolean\n cdn?: CdnResolutionOptions\n}\n\nexport function getRegistryCdnState(\n registryType: RegistryType,\n options: RegistryFetchOptions = {}\n): { workingCDN: string | null; urls: string[] } {\n const cache = getRegistryCache(registryType)\n return {\n workingCDN: cache.workingCDN,\n urls: getCdnUrls(registryType, options.cdn)\n }\n}\n\nexport function isUrl(path: string): boolean {\n try {\n new URL(path)\n return true\n } catch {\n return false\n }\n}\n\nfunction getRegistryCache(registryType: RegistryType) {\n if (!registryCache.has(registryType)) {\n registryCache.set(registryType, {\n workingCDN: null,\n registryIndex: null\n })\n }\n return registryCache.get(registryType)!\n}\n\nasync function fetchJsonWithTimeout(url: string, timeoutMs: number): Promise<any> {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs)\n\n try {\n const response = await fetch(url, { signal: controller.signal })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n return await response.json()\n } finally {\n clearTimeout(timeoutId)\n }\n}\n\nasync function fetchJsonWithRetry(url: string, maxRetries: number, timeoutMs: number): Promise<any> {\n let attempt = 0\n let lastError: unknown\n\n while (attempt < maxRetries) {\n attempt += 1\n try {\n return await fetchJsonWithTimeout(url, timeoutMs)\n } catch (error) {\n lastError = error\n if (attempt >= maxRetries) {\n break\n }\n await new Promise(resolve => setTimeout(resolve, RETRY_DELAY_MS))\n }\n }\n\n throw lastError instanceof Error ? lastError : new Error(\"Request failed\")\n}\n\nasync function fetchFromRegistryPath(\n requestPath: string,\n registryType: RegistryType,\n options: RegistryFetchOptions = {}\n): Promise<any> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS\n const maxRetries = Math.max(1, options.maxRetries ?? DEFAULT_MAX_RETRIES)\n const cache = getRegistryCache(registryType)\n const cdnUrls = getCdnUrls(registryType, options.cdn)\n\n const orderedUrls = cache.workingCDN\n ? [cache.workingCDN, ...cdnUrls.filter(url => url !== cache.workingCDN)]\n : [...cdnUrls]\n\n let lastError: unknown\n for (const baseUrl of orderedUrls) {\n try {\n const data = await fetchJsonWithRetry(`${baseUrl}/${requestPath}`, maxRetries, timeoutMs)\n if (cache.workingCDN !== baseUrl) {\n cache.registryIndex = null\n }\n cache.workingCDN = baseUrl\n return data\n } catch (error) {\n lastError = error\n if (cache.workingCDN === baseUrl) {\n cache.workingCDN = null\n }\n }\n }\n\n throw lastError instanceof Error ? lastError : new Error(`No working ${registryType} CDN found`)\n}\n\nasync function getRegistryIndex(registryType: RegistryType, options: RegistryFetchOptions = {}): Promise<any> {\n if (cacheStateHasIndex(registryType, options)) {\n return getCachedInMemory(registryType)\n }\n\n const cached = await getCachedJson(\n `${registryType}/index.json`,\n { noCache: options.noCache, ttlMs: REGISTRY_INDEX_CACHE_TTL_MS }\n )\n if (cached) {\n setCachedInMemory(registryType, cached)\n return cached\n }\n\n const cache = getRegistryCache(registryType)\n\n cache.registryIndex = await fetchFromRegistryPath(\"index.json\", registryType, options)\n await setCachedJson(\n `${registryType}/index.json`,\n cache.registryIndex,\n { ttlMs: REGISTRY_INDEX_CACHE_TTL_MS }\n )\n return cache.registryIndex\n}\n\nasync function getComponentByType(\n name: string,\n registryType: RegistryType,\n options: RegistryFetchOptions = {}\n): Promise<Component | null> {\n const normalizedName = name.toLowerCase()\n const cachedComponent = await getCachedJson(\n `${registryType}/components/${normalizedName}.json`,\n { noCache: options.noCache, ttlMs: REGISTRY_INDEX_CACHE_TTL_MS }\n )\n if (cachedComponent) {\n try {\n return componentSchema.parse(cachedComponent)\n } catch (error) {\n logger.debug(`Invalid cached component for ${name}, refetching`)\n }\n }\n\n try {\n const index = await getRegistryIndex(registryType, options)\n const excludeTypes = options.excludeTypes ?? []\n const componentInfo = index.components?.find(\n (c: any) =>\n typeof c?.name === \"string\" &&\n c.name.toLowerCase() === normalizedName &&\n !excludeTypes.includes(c.type)\n )\n if (!componentInfo) {\n logger.debug(`Component ${name} not found in ${registryType} registry`)\n return null\n }\n\n const folder =\n componentInfo.type === \"registry:variants\"\n ? \"components/variants\"\n : TYPE_TO_FOLDER[componentInfo.type as keyof typeof TYPE_TO_FOLDER]\n if (!folder) {\n logger.debug(`Unknown component type: ${componentInfo.type}`)\n return null\n }\n\n logger.debug(`Loading ${name} from /${folder}/ (type: ${componentInfo.type})`)\n const data = await fetchFromRegistryPath(`${folder}/${name}.json`, registryType, options)\n await setCachedJson(`${registryType}/components/${normalizedName}.json`, data, { ttlMs: REGISTRY_INDEX_CACHE_TTL_MS })\n return componentSchema.parse(data)\n } catch (error) {\n logger.debug(`Failed to get component by type: ${(error as Error).message}`)\n return null\n }\n}\n\nexport async function getComponent(\n name: string,\n registryType: RegistryType = SCHEMA_CONFIG.defaultRegistryType,\n options: RegistryFetchOptions = {}\n): Promise<Component | null> {\n try {\n if (isUrl(name)) {\n return await fetchFromUrl(name, options)\n }\n\n return await getComponentByType(name, registryType, options)\n } catch (error) {\n logger.debug(`Failed to fetch ${name} from ${registryType}: ${(error as Error).message}`)\n return null\n }\n}\n\nasync function fetchFromUrl(url: string, options: RegistryFetchOptions = {}): Promise<Component | null> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS\n const maxRetries = Math.max(1, options.maxRetries ?? DEFAULT_MAX_RETRIES)\n logger.debug(`Fetching component from: ${url}`)\n\n const data = await fetchJsonWithRetry(url, maxRetries, timeoutMs)\n return componentSchema.parse(data)\n}\n\nexport async function getAllComponents(\n registryType: RegistryType = SCHEMA_CONFIG.defaultRegistryType,\n options: RegistryFetchOptions = {}\n): Promise<Component[]> {\n try {\n logger.debug(`Fetching all ${registryType} components using optimized approach`)\n const indexData = await getRegistryIndex(registryType, options)\n const components: Component[] = []\n const excludeTypes = options.excludeTypes ?? []\n\n if (indexData.components && Array.isArray(indexData.components)) {\n for (const componentInfo of indexData.components) {\n if (excludeTypes.includes(componentInfo.type)) {\n continue\n }\n const component = await getComponent(componentInfo.name, registryType, options)\n if (component) {\n components.push(component)\n }\n }\n }\n return components\n } catch (error) {\n logger.debug(`Failed to fetch all ${registryType} components: ${(error as Error).message}`)\n return []\n }\n}\n\nfunction cacheStateHasIndex(registryType: RegistryType, options: RegistryFetchOptions): boolean {\n if (options.noCache) {\n return false\n }\n const cache = getRegistryCache(registryType)\n return Boolean(cache.registryIndex)\n}\n\nfunction getCachedInMemory(registryType: RegistryType) {\n return getRegistryCache(registryType).registryIndex\n}\n\nfunction setCachedInMemory(registryType: RegistryType, index: any) {\n const cache = getRegistryCache(registryType)\n cache.registryIndex = index\n}\n\nexport async function getComponents(\n names: string[],\n registryType: RegistryType = SCHEMA_CONFIG.defaultRegistryType,\n options: RegistryFetchOptions = {}\n): Promise<Component[]> {\n const components: Component[] = []\n\n for (const name of names) {\n const component = await getComponent(name, registryType, options)\n if (component) {\n components.push(component)\n }\n }\n\n return components\n}\n\nexport function resetCache(registryType?: RegistryType): void {\n if (registryType) {\n registryCache.delete(registryType)\n logger.debug(`Cache reset for ${registryType} - will rediscover working CDN`)\n } else {\n registryCache.clear()\n logger.debug(`All registry caches reset - will rediscover working CDNs`)\n }\n} ","import { z } from \"zod\"\nimport { SCHEMA_CONFIG } from \"../utils/schema-config\"\n\nexport const componentFileSchema = z.object({\n path: z.string(),\n content: z.string(),\n target: z.string().optional(),\n})\n\nexport const componentSchema = z.object({\n name: z.string(),\n type: z.enum(SCHEMA_CONFIG.componentTypes as unknown as readonly [string, ...string[]]),\n title: z.string().optional(),\n description: z.string().optional(),\n dependencies: z.array(z.string()).default([]),\n devDependencies: z.array(z.string()).default([]),\n registryDependencies: z.array(z.string()).optional(),\n files: z.array(componentFileSchema),\n tailwind: z.object({\n config: z.object({\n content: z.array(z.string()).optional(),\n theme: z.record(z.string(), z.any()).optional(),\n plugins: z.array(z.string()).optional(),\n }).optional(),\n }).optional(),\n cssVars: z.object({\n theme: z.record(z.string(), z.string()).optional(),\n light: z.record(z.string(), z.string()).optional(),\n dark: z.record(z.string(), z.string()).optional(),\n }).optional(),\n meta: z.record(z.string(), z.any()).optional(),\n})\n\nexport type ComponentFile = z.infer<typeof componentFileSchema>\nexport type Component = z.infer<typeof componentSchema>\n\nexport const configSchema = z.object({\n $schema: z.string().optional(),\n framework: z.literal(SCHEMA_CONFIG.supportedFrameworks[0]),\n typescript: z.boolean().default(true),\n globalCss: z.string().default(\"src/index.css\"),\n aliases: z.record(z.string(), z.string()).default(SCHEMA_CONFIG.defaultAliases as Record<string, string>),\n registry: z.string().default(SCHEMA_CONFIG.defaultRegistry),\n componentsDir: z.string().default(SCHEMA_CONFIG.defaultDirectories.components as string),\n libDir: z.string().default(SCHEMA_CONFIG.defaultDirectories.lib as string),\n registryUrl: z.string().url().optional(),\n registryVersion: z.string().optional(),\n strictCdn: z.boolean().default(false).optional(),\n importStyle: z.enum([\"alias\", \"package\"]).default(\"alias\").optional(),\n})\n\nexport type Config = z.infer<typeof configSchema> ","// Configuration for schema generation\n// Centralized configuration file with all constants and defaults\n\nexport const SCHEMA_CONFIG = {\n // Base schema information\n schemaVersion: \"http://json-schema.org/draft-07/schema#\",\n baseUrl: \"https://ui.buildy.tw/schema\",\n \n // Framework configuration\n supportedFrameworks: [\"vite-react\"] as const,\n \n // Default aliases for path mapping\n defaultAliases: {\n \"@\": \"./src\",\n \"@/components\": \"./src/components\",\n \"@/ui\": \"./src/components/ui\",\n \"@/layouts\": \"./src/layouts\",\n \"@/blocks\": \"./src/blocks\",\n \"@/lib\": \"./src/lib\",\n \"@/variants\": \"./src/variants\"\n },\n \n // Registry configuration\n defaultRegistry: \"@ui8kit\",\n registryTypes: [\"ui\"] as const,\n\n // Default registry type\n defaultRegistryType: \"ui\" as const,\n \n // CDN base URLs (registryName will be substituted)\n cdnBaseUrls: [\n \"https://unpkg.com/@ui8kit/registry@latest/r\",\n \"https://cdn.jsdelivr.net/npm/@ui8kit/registry@latest/r\", \n \"https://raw.githubusercontent.com/buildy-ui/ui/main/packages/@ui8kit/registry/r\"\n ] as const,\n \n // Component categories\n componentCategories: [\"ui\", \"composite\", \"components\", \"layouts\", \"lib\", \"blocks\", \"variants\"] as const,\n \n // Component types (should match registryItemTypeSchema)\n componentTypes: [\n \"registry:lib\",\n \"registry:block\", \n \"registry:component\",\n \"registry:ui\",\n \"registry:composite\",\n \"registry:layout\",\n \"registry:variants\"\n ] as const,\n \n // Default directories structure\n // Source directories (where CLI scans for components)\n defaultDirectories: {\n components: \"./src/components\",\n lib: \"./src/lib\",\n layouts: \"./src/layouts\",\n blocks: \"./src/blocks\",\n variants: \"./src/variants\",\n } as const,\n \n // Schema descriptions and titles\n descriptions: {\n config: {\n title: \"UI8Kit Configuration\",\n description: \"Configuration file for ui8kit CLI (UI8Kit structure)\",\n },\n registry: {\n title: \"UI8Kit Registry\",\n description: \"Registry schema for UI8Kit component system\",\n },\n registryItem: {\n title: \"UI8Kit Registry Item\",\n description: \"Schema for individual registry items in the UI8Kit component system\",\n }\n } as const,\n \n // Field descriptions\n fieldDescriptions: {\n schema: \"JSON Schema URL\",\n framework: \"Target framework\",\n typescript: \"Whether the project uses TypeScript\",\n globalCss: \"Path to global styles entry file\",\n aliases: \"Path aliases for imports in UI8Kit structure\",\n registry: \"Default component registry\",\n componentsDir: \"Directory where utility components will be installed\",\n libDir: \"Directory for utility libraries\",\n registryName: \"Registry name\",\n registryHomepage: \"Registry homepage URL\",\n registryType: \"Registry type (e.g., ui)\",\n registryVersion: \"Registry version\",\n registryUrl: \"Explicit registry URL override\",\n strictCdn: \"Disable fallback to built-in CDN URLs\",\n importStyle: \"How component imports are rewritten: alias or package\",\n lastUpdated: \"Last update timestamp\",\n categories: \"Available component categories\",\n components: \"Component metadata for quick lookup\",\n items: \"Full component definitions\",\n } as const,\n packageAliases: {\n core: \"@ui8kit/core\"\n } as const,\n importStyle: {\n alias: \"alias\",\n package: \"package\"\n } as const\n} as const\n\nexport type RegistryType = typeof SCHEMA_CONFIG.registryTypes[number]\nexport type ImportStyle = (typeof SCHEMA_CONFIG.importStyle)[keyof typeof SCHEMA_CONFIG.importStyle]\n\n// Map component types to their target installation folders (on user's project side)\nexport const TYPE_TO_FOLDER = {\n \"registry:ui\": \"components/ui\",\n \"registry:composite\": \"components\",\n \"registry:block\": \"blocks\", \n \"registry:component\": \"components\",\n \"registry:lib\": \"lib\",\n \"registry:layout\": \"layouts\",\n \"registry:variants\": \"variants\"\n} as const\n\n// Helper functions to generate URLs dynamically\nexport interface CdnResolutionOptions {\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n}\n\nfunction normalizeCdnVersion(version?: string): string {\n if (!version) {\n return \"\"\n }\n const normalized = version.trim()\n if (!normalized) {\n return \"\"\n }\n return normalized.startsWith(\"@\") ? normalized : `@${normalized}`\n}\n\nfunction applyRegistryVersion(baseUrl: string, version?: string): string {\n const normalizedVersion = normalizeCdnVersion(version)\n if (!normalizedVersion) {\n return baseUrl\n }\n return baseUrl.replace(/@latest(?=\\/|$)/g, normalizedVersion)\n}\n\nexport function getCdnUrls(_registryType: RegistryType, options: CdnResolutionOptions = {}): string[] {\n const baseUrls = SCHEMA_CONFIG.cdnBaseUrls.map(url => applyRegistryVersion(url, options.registryVersion))\n const resolvedUrls: string[] = []\n const explicitUrl = options.registryUrl\n ? normalizeCdnBaseUrl(applyRegistryVersion(normalizeCdnBaseUrl(options.registryUrl), options.registryVersion))\n : \"\"\n\n if (explicitUrl) {\n resolvedUrls.push(explicitUrl)\n }\n\n if (!options.strictCdn || !explicitUrl) {\n resolvedUrls.push(...baseUrls)\n }\n\n return [...new Set(resolvedUrls)]\n}\n\nfunction normalizeCdnBaseUrl(url: string): string {\n return url.trim().replace(/\\/+$/, \"\")\n}\n\nexport function getInstallPath(registryType: RegistryType, componentType: string): string {\n // Deprecated: install path should be resolved via project config. This remains only for backward compatibility.\n const folder = TYPE_TO_FOLDER[componentType as keyof typeof TYPE_TO_FOLDER]\n if (componentType === \"registry:lib\") {\n return SCHEMA_CONFIG.defaultDirectories.lib\n }\n return `src/${folder}`\n}\n\n// Helper function to filter real npm dependencies (exclude local aliases and paths)\nexport function filterRealDependencies(dependencies: string[]): string[] {\n return dependencies.filter(dep => {\n // Skip local aliases that start with @/ or ./\n if (dep.startsWith('@/') || dep.startsWith('./') || dep.startsWith('../')) {\n return false\n }\n \n // Skip tilde aliases\n if (dep.startsWith('~/')) {\n return false\n }\n \n // Skip internal workspace packages\n if (dep.startsWith('@ui8kit/') || dep.startsWith('ui8kit/')) {\n return false\n }\n \n // Skip relative paths and Windows paths\n if (dep.includes('\\\\') || (dep.includes('/') && !dep.startsWith('@') && !dep.includes('://'))) {\n return false\n }\n \n // Skip empty strings\n if (dep.trim() === '') {\n return false\n }\n \n // Skip file: protocol\n if (dep.startsWith('file:')) {\n return false\n }\n \n return true\n })\n}\n\n// Helper function to check if a module is an external dependency\nexport function isExternalDependency(moduleName: string): boolean {\n return !moduleName.startsWith(\".\") && \n !moduleName.startsWith(\"@/\") && \n !moduleName.startsWith(\"~/\") &&\n !moduleName.startsWith(\"@ui8kit/\") &&\n !moduleName.includes(\"\\\\\") &&\n moduleName !== \"\" &&\n !moduleName.startsWith(\"file:\")\n}\n\n// Helper function to get schema reference URL\nexport function getSchemaRef(schemaName: string): string {\n return `${SCHEMA_CONFIG.baseUrl}/${schemaName}.json`\n}\n\n// Helper function to get full schema URL\nexport function getSchemaUrl(schemaName?: string): string {\n if (schemaName) {\n return getSchemaRef(schemaName)\n }\n return `${SCHEMA_CONFIG.baseUrl}.json`\n} ","import chalk from \"chalk\"\nimport ora from \"ora\"\n\nlet verboseEnabled = false\n\nexport type LoggerLevel = \"info\" | \"success\" | \"warn\" | \"error\" | \"debug\"\n\nfunction output(level: LoggerLevel, message: string, ...args: unknown[]) {\n const prefix = (() => {\n switch (level) {\n case \"info\":\n return chalk.blue(\"ℹ\")\n case \"success\":\n return chalk.green(\"✅\")\n case \"warn\":\n return chalk.yellow(\"⚠️\")\n case \"error\":\n return chalk.red(\"❌\")\n case \"debug\":\n return chalk.gray(\"🐞\")\n default:\n return \"\"\n }\n })()\n\n if (level === \"debug\" && !verboseEnabled) {\n return\n }\n\n // Keep output stable across all commands.\n console.log(`${prefix} ${message}`, ...args)\n}\n\nexport const logger = {\n setVerbose(enabled: boolean) {\n verboseEnabled = enabled\n },\n info(message: string, ...args: unknown[]) {\n output(\"info\", message, ...args)\n },\n success(message: string, ...args: unknown[]) {\n output(\"success\", message, ...args)\n },\n warn(message: string, ...args: unknown[]) {\n output(\"warn\", message, ...args)\n },\n error(message: string, ...args: unknown[]) {\n output(\"error\", message, ...args)\n },\n debug(message: string, ...args: unknown[]) {\n output(\"debug\", message, ...args)\n },\n spinner(text: string) {\n return ora(text).start()\n }\n}\n\nexport function isVerboseMode(): boolean {\n return verboseEnabled\n}\n","import fs from \"fs-extra\"\nimport os from \"os\"\nimport path from \"path\"\n\nconst DEFAULT_TTL_MS = 3_600_000\n\nexport interface CacheOptions {\n ttlMs?: number\n noCache?: boolean\n}\n\nfunction normalizeKey(key: string): string {\n return key\n .trim()\n .replace(/^\\/+/, \"\")\n .replace(/\\\\/g, \"/\")\n}\n\nfunction cacheFilePath(key: string): { dataPath: string; metaPath: string } {\n const cacheDir = getCacheDir()\n const normalized = normalizeKey(key)\n const normalizedWithJson = normalized.endsWith(\".json\") ? normalized : `${normalized}.json`\n const dataPath = path.join(cacheDir, normalizedWithJson)\n return { dataPath, metaPath: `${dataPath}.meta.json` }\n}\n\nexport function getCacheDir(): string {\n return path.join(os.homedir(), \".ui8kit\", \"cache\")\n}\n\nfunction parseTimestamp(timestamp: unknown): number | null {\n if (typeof timestamp !== \"number\") {\n return null\n }\n return Number.isFinite(timestamp) ? timestamp : null\n}\n\nexport async function getCachedJson(key: string, options: CacheOptions = {}): Promise<any | null> {\n const ttlMs = options.ttlMs ?? DEFAULT_TTL_MS\n if (options.noCache) {\n return null\n }\n\n const { dataPath, metaPath } = cacheFilePath(key)\n if (!(await fs.pathExists(dataPath)) || !(await fs.pathExists(metaPath))) {\n return null\n }\n\n try {\n const meta = await fs.readJson(metaPath) as { lastFetched?: unknown; ttl?: unknown }\n const lastFetched = parseTimestamp(meta?.lastFetched)\n const metaTtl = parseTimestamp(meta?.ttl) ?? ttlMs\n\n if (!lastFetched) {\n return null\n }\n\n const now = Date.now()\n if (now - lastFetched > metaTtl) {\n return null\n }\n\n return await fs.readJson(dataPath)\n } catch {\n return null\n }\n}\n\nexport async function setCachedJson(key: string, data: unknown, options: CacheOptions = {}): Promise<void> {\n const ttlMs = options.ttlMs ?? DEFAULT_TTL_MS\n const { dataPath, metaPath } = cacheFilePath(key)\n await fs.ensureDir(path.dirname(dataPath))\n\n await fs.writeJson(dataPath, data, { spaces: 2 })\n await fs.writeJson(metaPath, {\n lastFetched: Date.now(),\n ttl: ttlMs\n })\n}\n\nexport async function clearCache(): Promise<void> {\n const cacheDir = getCacheDir()\n if (await fs.pathExists(cacheDir)) {\n await fs.remove(cacheDir)\n }\n}\n\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport { Config, configSchema } from \"../registry/schema.js\"\n\nconst MODERN_CONFIG_NAME = \"ui8kit.config.json\"\n\nexport async function isViteProject(): Promise<boolean> {\n const viteConfigFiles = [\n \"vite.config.ts\",\n \"vite.config.js\",\n \"vite.config.mts\",\n \"vite.config.mjs\"\n ]\n \n for (const file of viteConfigFiles) {\n if (await fs.pathExists(file)) {\n return true\n }\n }\n \n return false\n}\n\nexport async function hasReact(): Promise<boolean> {\n const packageJsonPath = path.join(process.cwd(), \"package.json\")\n \n if (!(await fs.pathExists(packageJsonPath))) {\n return false\n }\n \n const packageJson = await fs.readJson(packageJsonPath)\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies\n }\n \n return \"react\" in deps\n}\n\n/**\n * Find configuration for the project (prefer project root)\n */\nexport async function findConfig(registryType?: string): Promise<Config | null> {\n // Prefer project root config\n const rootConfig = await getConfig()\n if (rootConfig) return rootConfig\n\n // Backward compatibility: config inside ./src\n const srcConfig = await getConfig(\"./src\")\n if (srcConfig) return srcConfig\n\n // Legacy fallback: ./<registryType>/ui8kit.config.json\n if (registryType) {\n const registryConfig = await getConfig(`./${registryType}`)\n if (registryConfig) return registryConfig\n }\n\n return null\n}\n\nexport async function getConfig(registryPath?: string): Promise<Config | null> {\n const baseDir = registryPath ? path.join(process.cwd(), registryPath) : process.cwd()\n const configPath = path.join(baseDir, MODERN_CONFIG_NAME)\n if (!(await fs.pathExists(configPath))) {\n return null\n }\n \n try {\n const config = await fs.readJson(configPath)\n return configSchema.parse(config)\n } catch (error) {\n console.error(\"❌ Invalid ui8kit.config.json:\", (error as Error).message)\n return null\n }\n}\n\nexport async function saveConfig(config: Config): Promise<void> {\n const configPath = path.join(process.cwd(), MODERN_CONFIG_NAME)\n \n // Ensure directory exists\n await fs.ensureDir(path.dirname(configPath))\n \n await fs.writeJson(configPath, config, { spaces: 2 })\n}\n\nexport async function ensureDir(dirPath: string): Promise<void> {\n await fs.ensureDir(dirPath)\n} ","import fs from \"fs-extra\"\nimport path from \"path\"\nimport chalk from \"chalk\"\nimport prompts from \"prompts\"\nimport { findConfig } from \"./project.js\"\nimport { initCommand } from \"../commands/init.js\"\n\nexport interface ValidationResult {\n isValid: boolean\n message?: string\n missingComponents?: string[]\n}\n\n/**\n * Check if utility registry is initialized (base requirement)\n */\nexport async function isUtilityRegistryInitialized(): Promise<boolean> {\n // Deprecated in core/form model. Always allow operations.\n return true\n}\n\n/**\n * Check if a specific registry can be used (requires utility as base)\n */\nexport async function canUseRegistry(registryType: string): Promise<ValidationResult> {\n // In the simplified core/form model, all registries are usable without prerequisites.\n return { isValid: true }\n}\n\n/**\n * Get list of available components in utility registry from all categories\n */\nexport async function getUtilityComponents(): Promise<string[]> {\n // Deprecated in core/form model. No prerequisite components required.\n return []\n}\n\n/**\n * Get detailed component information by category\n */\nexport async function getUtilityComponentsByCategory(): Promise<Record<string, string[]>> {\n // Deprecated in core/form model. No categorized utility prerequisites.\n return {}\n}\n\n/**\n * Validate if components can be installed in non-utility registry\n */\nexport async function validateComponentInstallation(\n components: string[], \n registryType: string\n): Promise<ValidationResult> {\n const packageJsonPath = path.join(process.cwd(), \"package.json\")\n if (!(await fs.pathExists(packageJsonPath))) {\n return {\n isValid: false,\n message: \"No package.json found in the current directory. Run this command from your project root.\"\n }\n }\n\n const nodeMajorVersion = Number.parseInt(process.versions.node.split(\".\")[0] ?? \"0\", 10)\n if (Number.isNaN(nodeMajorVersion) || nodeMajorVersion < 18) {\n return {\n isValid: false,\n message: `Node.js 18+ is required. Current version: ${process.versions.node}`\n }\n }\n\n const existingConfig = await findConfig(registryType)\n if (!existingConfig) {\n const { runInit } = await prompts({\n type: \"confirm\",\n name: \"runInit\",\n message: \"ui8kit.config.json not found. Run init now?\",\n initial: true\n })\n\n if (runInit) {\n await initCommand({ registry: registryType })\n\n const configAfterInit = await findConfig(registryType)\n if (configAfterInit) {\n return { isValid: true }\n }\n }\n\n return {\n isValid: false,\n message: `ui8kit is not initialized. Run: npx ui8kit@latest init --registry ${registryType}`\n }\n }\n\n return { isValid: true }\n}\n\n/**\n * Show validation error and exit\n */\nexport function handleValidationError(result: ValidationResult): never {\n console.error(chalk.red(\"❌ Registry Validation Error:\"))\n console.error(chalk.red(result.message))\n \n if (result.missingComponents && result.missingComponents.length > 0) {\n console.log(chalk.yellow(\"\\n💡 Suggestion:\"))\n console.log(`Install missing components first: ${chalk.cyan(`npx ui8kit add ${result.missingComponents.join(' ')}`)}\\n`)\n }\n \n process.exit(1)\n}\n\n/**\n * Show utility components summary\n */\nexport async function showUtilityComponentsSummary(): Promise<void> {\n // Deprecated in core/form model. No summary to show.\n} ","import chalk from \"chalk\"\nimport prompts from \"prompts\"\nimport ora, { type Ora } from \"ora\"\nimport { isViteProject, hasReact, findConfig, saveConfig, ensureDir } from \"../utils/project.js\"\nimport { Config, Component } from \"../registry/schema.js\"\nimport { SCHEMA_CONFIG, getCdnUrls, type RegistryType, type CdnResolutionOptions, type ImportStyle } from \"../utils/schema-config.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { installDependencies } from \"../utils/package-manager.js\"\nimport path from \"path\"\nimport fs from \"fs-extra\"\nimport fetch from \"node-fetch\"\nimport { logger } from \"../utils/logger.js\"\nimport { handleError } from \"../utils/errors.js\"\n\ninterface InitOptions {\n yes?: boolean\n registry?: string\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n importStyle?: ImportStyle\n}\n\nexport interface InitConfigOptions {\n yes?: boolean\n registry?: string\n globalCss?: string\n aliasComponents?: string\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n importStyle?: ImportStyle\n}\n\nconst INIT_FETCH_TIMEOUT_MS = 10_000\n\nasync function fetchJsonFromRegistry<T>(url: string): Promise<T | null> {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), INIT_FETCH_TIMEOUT_MS)\n\n try {\n const response = await fetch(url, { signal: controller.signal })\n if (!response.ok) {\n return null\n }\n return await response.json() as T\n } catch {\n return null\n } finally {\n clearTimeout(timeoutId)\n }\n}\n\nfunction resolveImportStyle(rawImportStyle?: ImportStyle): ImportStyle {\n return rawImportStyle === \"package\" ? \"package\" : \"alias\"\n}\n\nexport function buildInitConfig(options: InitConfigOptions): Config {\n const registryName = options.registry || SCHEMA_CONFIG.defaultRegistryType\n const aliases = SCHEMA_CONFIG.defaultAliases\n const globalCss = options.globalCss || \"src/index.css\"\n const aliasComponents = options.aliasComponents?.trim() || \"@/components\"\n const importStyle = resolveImportStyle(options.importStyle)\n\n if (options.yes) {\n return {\n $schema: `${SCHEMA_CONFIG.baseUrl}.json`,\n framework: \"vite-react\",\n typescript: true,\n globalCss,\n aliases,\n registry: SCHEMA_CONFIG.defaultRegistry,\n componentsDir: SCHEMA_CONFIG.defaultDirectories.components,\n libDir: SCHEMA_CONFIG.defaultDirectories.lib,\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn,\n importStyle\n }\n }\n\n return {\n $schema: `${SCHEMA_CONFIG.baseUrl}.json`,\n framework: \"vite-react\",\n typescript: true,\n globalCss,\n aliases: { ...aliases, \"@/components\": aliasComponents },\n registry: SCHEMA_CONFIG.defaultRegistry,\n componentsDir: SCHEMA_CONFIG.defaultDirectories.components,\n libDir: SCHEMA_CONFIG.defaultDirectories.lib,\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn,\n importStyle\n }\n}\n\nexport async function initCommand(options: InitOptions) {\n const registryName = options.registry || SCHEMA_CONFIG.defaultRegistryType\n const cdnOptions: CdnResolutionOptions = {\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn\n }\n \n logger.info(CLI_MESSAGES.info.initializing(registryName))\n \n // Check if it's a Vite project\n const viteDetected = await isViteProject()\n if (!viteDetected) {\n console.error(chalk.red(`❌ ${CLI_MESSAGES.errors.notViteProject}`))\n console.log(\"Please run this command in a Vite project directory.\")\n process.exit(1)\n }\n \n // Check if React is installed\n if (!(await hasReact())) {\n console.error(chalk.red(`❌ ${CLI_MESSAGES.errors.reactNotInstalled}`))\n console.log(\"Please install React first: npm install react react-dom\")\n process.exit(1)\n }\n \n // Check if already initialized (root first, then backward-compatible locations)\n const existingConfig = await findConfig(registryName)\n if (existingConfig && !options.yes) {\n const { overwrite } = await prompts({\n type: \"confirm\",\n name: \"overwrite\",\n message: CLI_MESSAGES.prompts.overwrite(registryName),\n initial: false\n })\n \n if (!overwrite) {\n logger.warn(CLI_MESSAGES.info.installationCancelled)\n return\n }\n }\n\n let config: Config\n \n if (options.yes) {\n config = buildInitConfig({ yes: true, registry: registryName, ...cdnOptions, importStyle: options.importStyle })\n } else {\n const responses = await prompts([\n {\n type: \"text\",\n name: \"globalCss\",\n message: CLI_MESSAGES.prompts.globalCss,\n initial: \"src/index.css\"\n },\n {\n type: \"text\",\n name: \"aliasComponents\",\n message: CLI_MESSAGES.prompts.aliasComponents,\n initial: \"@/components\"\n },\n {\n type: \"select\",\n name: \"importStyle\",\n message: \"Import style for installed components\",\n choices: [\n { title: \"Alias imports (recommended)\", value: \"alias\" as ImportStyle },\n { title: \"Package imports (@ui8kit/core)\", value: \"package\" as ImportStyle }\n ],\n initial: 0\n }\n ])\n\n const aliasComponents = responses.aliasComponents?.trim() || \"@/components\"\n const globalCss = responses.globalCss || \"src/index.css\"\n const importStyle = resolveImportStyle(responses.importStyle)\n config = buildInitConfig({\n yes: false,\n registry: registryName,\n globalCss,\n aliasComponents,\n importStyle,\n ...cdnOptions\n })\n }\n \n const spinner = ora(CLI_MESSAGES.info.initializing(registryName)).start()\n \n try {\n // Save configuration at project root\n await saveConfig(config)\n \n spinner.text = \"Installing core utilities and variants...\"\n \n // Install utils and all variants from registry\n await installCoreFiles(registryName as RegistryType, config, spinner, cdnOptions)\n\n spinner.succeed(CLI_MESSAGES.success.initialized(registryName))\n \n logger.success(`\\n✅ ${CLI_MESSAGES.success.setupComplete(registryName)}`)\n console.log(\"\\nDirectories created:\")\n console.log(` ${chalk.cyan(\"src/lib/\")} - Utils, helpers, functions`)\n console.log(` ${chalk.cyan(\"src/variants/\")} - CVA variant configurations`)\n console.log(` ${chalk.cyan(\"src/components/ui/\")} - UI components`)\n console.log(` ${chalk.cyan(\"src/components/\")} - Complex components`)\n console.log(` ${chalk.cyan(\"src/layouts/\")} - Page layouts and structures`)\n console.log(` ${chalk.cyan(\"src/blocks/\")} - Component blocks`)\n \n console.log(\"\\nNext steps:\")\n CLI_MESSAGES.examples.init.forEach(example => console.log(` ${chalk.cyan(example)}`))\n\n } catch (error) {\n spinner.fail(CLI_MESSAGES.errors.buildFailed)\n handleError(error)\n }\n}\n\ninterface RegistryIndex {\n components: Array<{ name: string; type: string }>\n}\n\ninterface CoreComponentRef {\n name: string\n type: string\n}\n\ninterface CoreComponentDescriptor extends CoreComponentRef {\n component: Component\n}\n\nfunction sortCoreDependencies(descriptors: CoreComponentDescriptor[]): CoreComponentDescriptor[] {\n const itemByTypeAndName = new Map<string, CoreComponentDescriptor>()\n for (const item of descriptors) {\n itemByTypeAndName.set(`${item.type}:${item.name}`, item)\n }\n\n const findDependencyByName = (name: string): CoreComponentDescriptor | undefined => {\n const dependencyByLib = itemByTypeAndName.get(`registry:lib:${name}`)\n if (dependencyByLib) {\n return dependencyByLib\n }\n return descriptors.find(item => item.name === name)\n }\n\n const indegrees = new Map<string, number>()\n const graph = new Map<string, Set<string>>()\n const queue: string[] = []\n\n for (const item of descriptors) {\n const key = `${item.type}:${item.name}`\n indegrees.set(key, 0)\n graph.set(key, new Set())\n }\n\n for (const item of descriptors) {\n const itemKey = `${item.type}:${item.name}`\n for (const registryDep of item.component.registryDependencies ?? []) {\n const targetName = registryDep.toLowerCase()\n const dependency = findDependencyByName(targetName)\n if (!dependency) {\n continue\n }\n const dependencyKey = `${dependency.type}:${dependency.name}`\n if (dependencyKey === itemKey) {\n continue\n }\n graph.get(dependencyKey)?.add(itemKey)\n indegrees.set(itemKey, (indegrees.get(itemKey) ?? 0) + 1)\n }\n }\n\n for (const [key, inDegree] of indegrees.entries()) {\n if (inDegree === 0) {\n queue.push(key)\n }\n }\n\n const result: CoreComponentDescriptor[] = []\n while (queue.length > 0) {\n const key = queue.shift()\n if (!key) break\n const item = itemByTypeAndName.get(key)\n if (!item) continue\n\n result.push(item)\n for (const dependent of graph.get(key) ?? []) {\n const nextDegree = Math.max((indegrees.get(dependent) ?? 1) - 1, 0)\n indegrees.set(dependent, nextDegree)\n if (nextDegree === 0) {\n queue.push(dependent)\n }\n }\n }\n\n if (result.length === descriptors.length) {\n return result\n }\n\n // Fallback to insertion order for unresolved/cyclic dependencies\n for (const item of descriptors) {\n if (!result.includes(item)) {\n result.push(item)\n }\n }\n return result\n}\n\nasync function fetchCoreComponent(\n name: string,\n type: string,\n cdnUrls: string[]\n): Promise<Component | null> {\n const folder = type === \"registry:lib\" ? \"lib\" : type === \"registry:variants\" ? \"components/variants\" : \"components/ui\"\n for (const baseUrl of cdnUrls) {\n const url = `${baseUrl}/${folder}/${name}.json`\n const component = await fetchJsonFromRegistry<Component>(url)\n if (component) {\n return component\n }\n }\n return null\n}\n\nfunction resolveComponentTargetDir(type: string, config: Config): string {\n if (type === \"registry:lib\") {\n return config.libDir\n }\n if (type === \"registry:variants\") {\n return SCHEMA_CONFIG.defaultDirectories.variants\n }\n return path.join(config.componentsDir, \"ui\")\n}\n\nasync function writeComponentFromDescriptor(component: Component, type: string, config: Config): Promise<void> {\n for (const file of component.files) {\n const fileName = path.basename(file.path)\n const targetDir = resolveComponentTargetDir(type, config)\n const targetPath = path.join(process.cwd(), targetDir, fileName)\n await fs.ensureDir(path.dirname(targetPath))\n await fs.writeFile(targetPath, file.content || \"\", \"utf-8\")\n }\n}\n\nasync function installCoreFiles(\n registryType: RegistryType,\n config: Config,\n spinner: Ora,\n cdnResolution: CdnResolutionOptions = {}\n): Promise<void> {\n const cdnUrls = getCdnUrls(registryType, {\n registryUrl: cdnResolution.registryUrl,\n registryVersion: cdnResolution.registryVersion,\n strictCdn: cdnResolution.strictCdn\n })\n \n // Try to fetch registry index to get list of variants and utils\n let registryIndex: RegistryIndex | null = null\n \n for (const baseUrl of cdnUrls) {\n try {\n const indexUrl = `${baseUrl}/index.json`\n const indexData = await fetchJsonFromRegistry<RegistryIndex>(indexUrl)\n if (indexData) {\n registryIndex = indexData\n break\n }\n } catch {\n continue\n }\n }\n \n if (!registryIndex) {\n spinner.text = \"⚠️ Could not fetch registry index, creating local utils...\"\n // Fallback: create utils file locally\n await createUtilsFile(config.libDir, config.typescript)\n return\n }\n \n // Filter variants and lib items\n const variantItems = registryIndex.components.filter(c => c.type === \"registry:variants\")\n const libItems = registryIndex.components.filter(c => c.type === \"registry:lib\")\n const coreItems: CoreComponentRef[] = [\n ...libItems.map(item => ({ name: item.name, type: \"registry:lib\" })),\n ...variantItems.map(item => ({ name: item.name, type: \"registry:variants\" }))\n ]\n\n if (coreItems.length === 0) {\n spinner.text = \"⚠️ Registry index has no core components; creating local utils...\"\n await createUtilsFile(config.libDir, config.typescript)\n return\n }\n\n const loadedComponents: CoreComponentDescriptor[] = []\n const coreDependencies = new Set<string>()\n for (const item of coreItems) {\n spinner.text = `Fetching ${item.name}...`\n const component = await fetchCoreComponent(item.name, item.type, cdnUrls)\n if (!component) {\n continue\n }\n loadedComponents.push({\n ...item,\n component: {\n name: component.name || item.name,\n type: item.type,\n files: component.files,\n dependencies: component.dependencies ?? [],\n devDependencies: component.devDependencies ?? [],\n registryDependencies: component.registryDependencies ?? [],\n description: component.description\n }\n })\n for (const dep of component.dependencies ?? []) {\n coreDependencies.add(dep)\n }\n }\n\n const orderedCoreComponents = sortCoreDependencies(loadedComponents)\n for (const descriptor of orderedCoreComponents) {\n spinner.text = `Installing ${descriptor.name}...`\n await writeComponentFromDescriptor(descriptor.component, descriptor.type, config)\n }\n\n if (coreDependencies.size > 0) {\n spinner.text = \"Installing core dependencies...\"\n await installDependencies(Array.from(coreDependencies), {\n useSpinner: false\n })\n }\n \n // Install variants/index.ts\n spinner.text = \"Syncing variants index...\"\n const variantsIndexStatus = await installVariantsIndex(cdnUrls)\n if (variantsIndexStatus === \"updated\") {\n spinner.text = \"Updated variants/index.ts from CDN\"\n } else if (variantsIndexStatus === \"created\") {\n spinner.text = \"Created variants/index.ts from CDN\"\n } else if (variantsIndexStatus === \"unchanged\") {\n spinner.text = \"variants/index.ts is up to date\"\n } else {\n spinner.text = \"variants/index.ts not found in registry (skipped)\"\n }\n \n spinner.text = `✅ Installed ${loadedComponents.length} core components`\n}\n\nasync function installVariantsIndex(cdnUrls: string[]): Promise<\"created\" | \"updated\" | \"unchanged\" | \"skipped\"> {\n for (const baseUrl of cdnUrls) {\n // Try to fetch index component from variants\n const url = `${baseUrl}/components/variants/index.json`\n const component = await fetchJsonFromRegistry<Component>(url)\n if (!component) {\n continue\n }\n\n for (const file of component.files) {\n const fileName = path.basename(file.path)\n if (!fileName.startsWith(\"index.\")) {\n continue\n }\n\n const targetDir = SCHEMA_CONFIG.defaultDirectories.variants\n const targetPath = path.join(process.cwd(), targetDir, fileName)\n const incomingContent = file.content || \"\"\n const exists = await fs.pathExists(targetPath)\n\n if (exists) {\n const currentContent = await fs.readFile(targetPath, \"utf-8\")\n if (currentContent === incomingContent) {\n return \"unchanged\"\n }\n }\n\n await fs.ensureDir(path.dirname(targetPath))\n await fs.writeFile(targetPath, incomingContent, \"utf-8\")\n return exists ? \"updated\" : \"created\"\n }\n }\n\n return \"skipped\"\n}\n\nasync function createUtilsFile(libDir: string, typescript: boolean): Promise<void> {\n const utilsContent = `import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}`\n\n const fileName = typescript ? \"utils.ts\" : \"utils.js\"\n const filePath = path.join(process.cwd(), libDir, fileName)\n \n await fs.writeFile(filePath, utilsContent, \"utf-8\")\n}\n","// Centralized CLI messages and user-facing strings\nexport const CLI_MESSAGES = {\n // Error messages\n errors: {\n noComponentsSpecified: \"Please specify at least one component to add.\",\n notInitialized: \"ui8kit is not initialized in this project.\",\n notViteProject: \"This doesn't appear to be a Vite project.\",\n reactNotInstalled: \"React is not installed in this project.\",\n buildFailed: \"Build failed:\",\n scanFailed: \"Scan failed:\",\n registryTempUnavailable: \"registry temporarily unavailable\",\n noCDNFound: (registryType: string) => `No working ${registryType} CDN found`,\n componentNotFound: (name: string, registryType: string) => `Component \"${name}\" not found in ${registryType} registry`,\n unknownComponentType: (type: string) => `Unknown component type: ${type}`,\n fileNotFound: (path: string) => `File not found: ${path}`,\n invalidConfig: \"Invalid ui8kit.config.json:\",\n failedToInstall: (name: string, registryType: string) => `Failed to install ${name} from ${registryType}`,\n failedToFetch: (registryType: string) => `Failed to fetch components from ${registryType}`,\n failedToFetchComponent: (name: string, registryType: string) => `Failed to fetch ${name} from ${registryType}:`,\n failedToAnalyzeDeps: (path: string) => `Warning: Could not analyze dependencies for ${path}:`,\n dependenciesFailed: \"Failed to install dependencies\",\n couldNotInstallDeps: (name: string) => `Warning: Could not install some dependencies for ${name}`,\n noLocalInstall: \"No installed local components were found in this project.\",\n invalidRegistryForDiff: \"Could not load registry data for diff check.\",\n cacheClearFailed: \"Could not clear cache.\"\n },\n\n // Success messages\n success: {\n initialized: (registryName: string) => `UI8Kit ${registryName} structure initialized successfully!`,\n setupComplete: (registryName: string) => `UI8Kit ${registryName} Setup complete!`,\n installed: (name: string, registryType: string) => `Installed ${name} from ${registryType}`,\n allInstalled: (registryType: string) => `All ${registryType} components installed successfully!`,\n componentsInstalled: \"Components installed successfully!\",\n depsInstalled: \"Dependencies installed\",\n registryBuilt: \"Registry built successfully!\",\n schemasGenerated: \"Schema files generated successfully!\",\n registryGenerated: (registryName: string) => `${registryName} registry generated successfully!`,\n depsAvailable: \"All dependencies already available\",\n cacheCleared: \"UI8Kit cache cleared successfully.\"\n },\n\n // Info messages\n info: {\n tryListComponents: (registryType: string) => `Run \"npx ui8kit@latest add --all --registry ${registryType}\" to list available components`,\n initializing: (registryName: string) => `Initializing UI8Kit in your project (${registryName} registry)...`,\n installing: (registryName: string) => `Installing from ${registryName} registry...`,\n installingAll: (registryName: string) => `Installing all available components from ${registryName} registry...`,\n retryEnabled: \"Aggressive retry mode enabled (3 attempts per request)\",\n fetchingComponentList: (registryType: string) => `Fetching component list from ${registryType}...`,\n fetchingRegistry: (registryType: string) => `Fetching ${registryType} registry index`,\n scanningComponents: (registryName: string) => `Scanning ${registryName} components...`,\n building: \"Building registry...\",\n processingComponents: \"Processing components...\",\n scanningDirectories: \"Scanning directories...\",\n analyzingDeps: \"Found {count} components, analyzing dependencies...\",\n installationCancelled: \"Initialization cancelled.\",\n workspaceDepsDetected: \"Workspace dependency detected. Installing individually...\",\n checkingConnection: \"Checking internet connection...\",\n testing: (registryType: string, baseUrl: string) => `Testing ${registryType} CDN: ${baseUrl}`,\n using: (registryType: string, baseUrl: string) => `Using ${registryType} CDN: ${baseUrl}`,\n loading: (name: string, registryType: string, folder: string, type: string) => \n `Loading ${name} from /${registryType}/${folder}/ (type: ${type})`,\n fetching: (registryType: string, url: string) => `Fetching from ${registryType}: ${url}`,\n listingComponents: \"Listing available components\",\n fetchingUrl: \"Fetching component from:\",\n fetchingUrlWithRetry: \"Fetching component from URL with retry:\",\n checkingForUpdates: \"Checking for component updates...\",\n localDiffSummary: \"Local components compared with registry.\",\n },\n\n // Prompts\n prompts: {\n globalCss: \"Where is your global CSS file?\",\n aliasComponents: \"Configure import aliases?\",\n overwrite: (registryName: string) =>\n `UI8Kit is already initialized for ${registryName} registry. Overwrite configuration?`,\n },\n\n // Examples and help text\n examples: {\n add: [\n \"Example: npx ui8kit@latest add button card\",\n \"Example: npx ui8kit@latest add button --registry ui\",\n \"Example: npx ui8kit@latest add all # Install all components\",\n 'Example: npx ui8kit@latest add --all --registry ui # Install all ui components',\n \"Example: npx ui8kit@latest add --retry # Enable retry for unreliable connections\",\n 'Example: npx ui8kit@latest add \"https://example.com/component.json\"'\n ],\n init: [\n `npx ui8kit@latest add button --registry ui - Add a button component`,\n `npx ui8kit@latest add card input --registry ui - Add multiple components`,\n `npx ui8kit@latest add --all --registry ui - Add all components`,\n `npx ui8kit@latest add \"https://example.com/component.json\" - Add from external URL`\n ],\n troubleshooting: [\n \"Check your internet connection\",\n \"Use --retry flag: npx ui8kit@latest add --all --retry\",\n \"Use VPN if available\",\n \"Install from URL: npx ui8kit@latest add 'https://...'\",\n \"Check https://ui.buildy.tw for manual download\"\n ]\n },\n\n // Directory descriptions\n directories: {\n lib: \"Utils, helpers, functions\",\n variants: \"CVA variant configurations\",\n \"components/ui\": \"UI components\",\n components: \"Complex components\",\n layouts: \"Page layouts and structures\",\n blocks: \"Component blocks\",\n },\n\n // Spinners and status\n status: {\n installing: (name: string, registryType: string) => `Installing ${name} from ${registryType}...`,\n wouldInstall: (name: string, registryType: string) => `Would install: ${name} from ${registryType}`,\n foundComponents: (count: number, registryType: string) => `Found ${count} components in ${registryType}`,\n wouldInstallFrom: (registryType: string) => `Would install from ${registryType}:`,\n builtComponents: (count: number) => `Built ${count} components`,\n scannedComponents: (count: number) => `Scanned ${count} components`,\n skipped: (fileName: string) => `Skipped ${fileName} (already exists, use --force to overwrite)`,\n }\n}\n\n// Formatted output helpers\nexport function formatInstallationSummary(registryType: string, successful: number, failed: number): string {\n return `Installation Summary:\n Registry: ${registryType}\n ✅ Successful: ${successful}\n ❌ Failed: ${failed}`\n}\n\nexport function formatComponentSummary(items: Array<{type: string}>): string {\n const summary: Record<string, number> = {}\n items.forEach(item => {\n summary[item.type] = (summary[item.type] || 0) + 1\n })\n return Object.entries(summary).map(([type, count]) => ` ${type}: ${count}`).join(\"\\n\")\n}\n","import chalk from \"chalk\"\nimport ora from \"ora\"\nimport path from \"path\"\nimport fs from \"fs-extra\"\nimport { execa } from \"execa\"\nimport { CLI_MESSAGES } from \"./cli-messages.js\"\nimport {\n checkProjectDependencies,\n showDependencyStatus,\n filterMissingDependencies,\n isWorkspaceError\n} from \"./dependency-checker.js\"\n\nexport type PackageManager = \"npm\" | \"pnpm\" | \"yarn\" | \"bun\"\n\nexport interface InstallDependenciesOptions {\n useSpinner?: boolean\n spinnerText?: string\n}\n\nexport async function installDependencies(\n dependencies: string[],\n options: InstallDependenciesOptions = {}\n): Promise<void> {\n const useSpinner = options.useSpinner ?? true\n const spinner = useSpinner\n ? ora(options.spinnerText ?? CLI_MESSAGES.status.installing(\"dependencies\", \"\")).start()\n : null\n\n try {\n const depStatus = await checkProjectDependencies(dependencies)\n const missingDependencies = await filterMissingDependencies(dependencies)\n\n if (missingDependencies.length === 0) {\n spinner?.succeed(CLI_MESSAGES.success.depsAvailable)\n if (depStatus.workspace.length > 0) {\n console.log(chalk.blue(` 🔗 Using workspace dependencies: ${depStatus.workspace.join(\", \")}`))\n }\n return\n }\n\n showDependencyStatus(depStatus)\n\n const packageManager = await detectPackageManager()\n const installCommand =\n packageManager === \"npm\"\n ? [\"install\", ...missingDependencies]\n : [\"add\", ...missingDependencies]\n\n await execa(packageManager, installCommand, {\n cwd: process.cwd(),\n stdio: \"pipe\"\n })\n\n spinner?.succeed(CLI_MESSAGES.success.depsInstalled)\n } catch (error) {\n spinner?.fail(CLI_MESSAGES.errors.dependenciesFailed)\n\n const errorMessage = (error as any).stderr || (error as Error).message\n\n if (isWorkspaceError(errorMessage)) {\n console.log(chalk.yellow(`\\n💡 ${CLI_MESSAGES.info.workspaceDepsDetected}`))\n\n const results = await installDependenciesIndividually(dependencies)\n if (results.some(result => result.success)) {\n console.log(chalk.green(\"✅ Some dependencies installed successfully\"))\n return\n }\n }\n\n throw new Error(`${CLI_MESSAGES.errors.dependenciesFailed}: ${errorMessage}`)\n }\n}\n\nexport async function installDependenciesIndividually(\n dependencies: string[]\n): Promise<Array<{ dep: string; success: boolean }>> {\n const packageManager = await detectPackageManager()\n const results: Array<{ dep: string; success: boolean }> = []\n const missingDeps = await filterMissingDependencies(dependencies)\n\n for (const dep of missingDeps) {\n try {\n const installCommand = packageManager === \"npm\" ? [\"install\", dep] : [\"add\", dep]\n\n await execa(packageManager, installCommand, {\n cwd: process.cwd(),\n stdio: \"pipe\"\n })\n\n console.log(chalk.green(` ✅ Installed ${dep}`))\n results.push({ dep, success: true })\n } catch {\n console.log(chalk.yellow(` ⚠️ Skipped ${dep} (may already be available)`))\n results.push({ dep, success: false })\n }\n }\n\n return results\n}\n\nexport async function detectPackageManager(): Promise<PackageManager> {\n let dir = process.cwd()\n while (true) {\n if (await fs.pathExists(path.join(dir, \"bun.lock\")) || await fs.pathExists(path.join(dir, \"bun.lockb\"))) {\n return \"bun\"\n }\n if (await fs.pathExists(path.join(dir, \"pnpm-lock.yaml\"))) return \"pnpm\"\n if (await fs.pathExists(path.join(dir, \"yarn.lock\"))) return \"yarn\"\n\n const packageJsonPath = path.join(dir, \"package.json\")\n if (await fs.pathExists(packageJsonPath)) {\n try {\n const packageJson = await fs.readJson(packageJsonPath)\n const packageManager = String(packageJson.packageManager ?? \"\")\n if (packageManager.startsWith(\"bun@\")) return \"bun\"\n if (packageManager.startsWith(\"pnpm@\")) return \"pnpm\"\n if (packageManager.startsWith(\"yarn@\")) return \"yarn\"\n if (packageManager.startsWith(\"npm@\")) return \"npm\"\n } catch {\n // Ignore invalid package.json and continue searching parent directories.\n }\n }\n\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n\n return \"npm\"\n}\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport chalk from \"chalk\"\n\nexport interface DependencyStatus {\n installed: string[]\n missing: string[]\n workspace: string[]\n}\n\nexport async function checkProjectDependencies(requiredDeps: string[]): Promise<DependencyStatus> {\n const packageJsonPath = path.join(process.cwd(), \"package.json\")\n \n if (!(await fs.pathExists(packageJsonPath))) {\n return {\n installed: [],\n missing: requiredDeps,\n workspace: []\n }\n }\n \n try {\n const packageJson = await fs.readJson(packageJsonPath)\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies\n }\n \n const installed: string[] = []\n const missing: string[] = []\n const workspace: string[] = []\n \n for (const dep of requiredDeps) {\n const version = allDeps[dep]\n \n if (!version) {\n missing.push(dep)\n } else if (version.startsWith(\"workspace:\")) {\n workspace.push(dep)\n } else {\n installed.push(dep)\n }\n }\n \n return { installed, missing, workspace }\n } catch (error) {\n return {\n installed: [],\n missing: requiredDeps,\n workspace: []\n }\n }\n}\n\nexport function showDependencyStatus(deps: DependencyStatus) {\n if (deps.installed.length > 0) {\n console.log(chalk.green(` ✅ Already installed: ${deps.installed.join(\", \")}`))\n }\n \n if (deps.workspace.length > 0) {\n console.log(chalk.blue(` 🔗 Workspace dependencies: ${deps.workspace.join(\", \")}`))\n }\n \n if (deps.missing.length > 0) {\n console.log(chalk.yellow(` 📦 Will install: ${deps.missing.join(\", \")}`))\n }\n}\n\nexport async function filterMissingDependencies(dependencies: string[]): Promise<string[]> {\n const status = await checkProjectDependencies(dependencies)\n \n // Return only missing dependencies (not workspace ones)\n return status.missing\n}\n\nexport function isWorkspaceError(errorMessage: string): boolean {\n return errorMessage.includes(\"EUNSUPPORTEDPROTOCOL\") || \n errorMessage.includes(\"workspace:\") ||\n errorMessage.includes(\"Unsupported URL Type \\\"workspace:\\\"\")\n} ","import { type ZodError } from \"zod\"\nimport chalk from \"chalk\"\nimport { CLI_MESSAGES } from \"./cli-messages.js\"\n\nexport type ErrorSuggestion = string\n\nexport class Ui8kitError extends Error {\n suggestion?: ErrorSuggestion\n\n constructor(message: string, suggestion?: ErrorSuggestion) {\n super(message)\n this.name = this.constructor.name\n this.suggestion = suggestion\n }\n}\n\nexport class RegistryNotFoundError extends Ui8kitError {\n constructor(name: string, registry: string) {\n super(\n `Component \"${name}\" was not found in ${registry} registry.`,\n CLI_MESSAGES.info.tryListComponents(registry)\n )\n }\n}\n\nexport class ConfigNotFoundError extends Ui8kitError {\n constructor(registry: string) {\n super(\n `ui8kit config not found for registry \"${registry}\".`,\n `Run: npx ui8kit@latest init --registry ${registry}`\n )\n }\n}\n\nexport class RegistryFetchError extends Ui8kitError {\n constructor(message: string, suggestion?: string) {\n super(message, suggestion)\n }\n}\n\nexport class ConfigParseError extends Ui8kitError {\n constructor(path: string, details?: string) {\n super(\n `Invalid ui8kit config at \"${path}\".`,\n details ? `Config parse error: ${details}` : \"Open the file and fix the JSON format.\"\n )\n }\n}\n\nexport class NetworkError extends Ui8kitError {\n constructor(url: string, statusCode?: number) {\n super(\n `Network request failed for ${url}.`,\n statusCode\n ? `HTTP status: ${statusCode}. Retry with --retry to try multiple CDN attempts.`\n : \"Check internet connection and retry.\"\n )\n }\n}\n\nexport function handleError(error: unknown): never {\n if (error instanceof Ui8kitError) {\n if (error.message) {\n console.error(chalk.red(error.message))\n }\n\n if (error.suggestion) {\n console.log(chalk.yellow(`💡 ${error.suggestion}`))\n }\n\n process.exit(1)\n }\n\n if (isZodError(error)) {\n console.error(chalk.red(\"❌ Configuration validation error:\"))\n error.errors.forEach(issue => {\n const path = issue.path.join(\".\") || \"root\"\n console.log(chalk.yellow(` - ${path}: ${issue.message}`))\n })\n process.exit(1)\n }\n\n console.error(chalk.red(\"❌ Unexpected error:\"))\n console.error(chalk.red((error as Error).message ?? String(error)))\n process.exit(1)\n}\n\nexport function isZodError(error: unknown): error is ZodError {\n return Boolean(error && typeof error === \"object\" && \"issues\" in (error as Record<string, unknown>))\n}\n","import { logger } from \"./logger.js\"\nimport { Component } from \"../registry/schema.js\"\nimport { type RegistryType } from \"../utils/schema-config.js\"\n\ntype GetComponentFn = (name: string, registryType: RegistryType) => Promise<Component | null>\n\nexport async function resolveRegistryTree(\n componentNames: string[],\n registryType: RegistryType,\n getComponent: GetComponentFn\n): Promise<Component[]> {\n const componentsByName = new Map<string, Component>()\n const state = new Map<string, \"visiting\" | \"done\">()\n const visitStack: string[] = []\n\n const normalized = componentNames.map(name => name.toLowerCase())\n\n const ensureComponent = async (name: string): Promise<Component | null> => {\n const key = name.toLowerCase()\n if (state.get(key) === \"done\") {\n return componentsByName.get(key) ?? null\n }\n\n if (state.get(key) === \"visiting\") {\n const cycle = visitStack.includes(key)\n ? [...visitStack, key].join(\" -> \")\n : key\n logger.warn(`Circular registry dependency detected: ${cycle}`)\n return componentsByName.get(key) ?? null\n }\n\n const component = await getComponent(name, registryType)\n if (!component) {\n logger.warn(`Component ${name} not found in ${registryType} registry, skipping`)\n state.set(key, \"done\")\n return null\n }\n\n componentsByName.set(key, component)\n state.set(key, \"visiting\")\n visitStack.push(key)\n\n for (const dependency of component.registryDependencies ?? []) {\n await ensureComponent(dependency)\n }\n\n visitStack.pop()\n state.set(key, \"done\")\n return component\n }\n\n for (const name of normalized) {\n await ensureComponent(name)\n }\n\n const graph = new Map<string, Set<string>>()\n const inDegree = new Map<string, number>()\n\n for (const component of componentsByName.values()) {\n const name = component.name.toLowerCase()\n if (!graph.has(name)) {\n graph.set(name, new Set())\n inDegree.set(name, 0)\n }\n }\n\n for (const component of componentsByName.values()) {\n const from = component.name.toLowerCase()\n const deps = component.registryDependencies ?? []\n for (const dep of deps) {\n const to = dep.toLowerCase()\n if (!componentsByName.has(to)) {\n continue\n }\n\n const targets = graph.get(to)\n if (targets) {\n targets.add(from)\n } else {\n graph.set(to, new Set([from]))\n }\n\n inDegree.set(from, (inDegree.get(from) ?? 0) + 1)\n }\n }\n\n const queue: string[] = []\n inDegree.forEach((value, name) => {\n if (value === 0) {\n queue.push(name)\n }\n })\n\n const orderedKeys: string[] = []\n while (queue.length > 0) {\n const current = queue.shift()\n if (!current) continue\n\n orderedKeys.push(current)\n const targets = graph.get(current) || new Set()\n for (const next of targets) {\n const degree = (inDegree.get(next) ?? 1) - 1\n inDegree.set(next, degree)\n if (degree === 0) {\n queue.push(next)\n }\n }\n }\n\n // Fall back to stable insertion order for any remaining cyclic nodes.\n for (const key of componentsByName.keys()) {\n if (!orderedKeys.includes(key)) {\n logger.warn(`Unresolved dependency cycle detected for ${key}, appending in current order`)\n orderedKeys.push(key)\n }\n }\n\n return orderedKeys\n .map(key => componentsByName.get(key))\n .filter((component): component is Component => Boolean(component))\n}\n","import { createTwoFilesPatch } from \"diff\"\n\nexport interface FileDiffResult {\n filePath: string\n changed: boolean\n patch?: string\n}\n\nexport function buildUnifiedDiff(\n oldFilePath: string,\n newFilePath: string,\n oldContent: string,\n newContent: string\n): string {\n return createTwoFilesPatch(\n oldFilePath,\n newFilePath,\n oldContent,\n newContent,\n \"local\",\n \"registry\",\n { context: 3 }\n )\n}\n\nexport function getLineDiff(oldContent: string, newContent: string): string {\n return buildUnifiedDiff(\"local\", \"registry\", oldContent, newContent)\n}\n\nexport function hasDiff(oldContent: string, newContent: string): boolean {\n return oldContent !== newContent\n}\n\nexport function formatDiffPreview(diff: string, maxLines = 80): string {\n const lines = diff.split(\"\\n\")\n if (lines.length <= maxLines) {\n return diff\n }\n\n return `${lines.slice(0, maxLines).join(\"\\n\")}\\n...`\n}\n","import path from \"path\"\nimport ts from \"typescript\"\nimport { ImportStyle, SCHEMA_CONFIG } from \"./schema-config.js\"\n\nconst IMPORT_NODE_KIND = ts.SyntaxKind.ImportDeclaration\nconst PACKAGE_STYLE_IMPORT_GROUPS = [\"components\", \"layouts\", \"blocks\", \"variants\", \"ui\"]\n\nfunction normalizeAliasKey(alias: string): string {\n return alias.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\")\n}\n\nfunction toPosix(value: string): string {\n return value.replace(/\\\\/g, \"/\")\n}\n\nfunction normalizeAliasTarget(alias: string): string {\n return toPosix(alias).replace(/\\/+$/, \"\")\n}\n\nfunction normalizeDefaultAliases(): Map<string, string> {\n const map = new Map<string, string>()\n for (const [alias, target] of Object.entries(SCHEMA_CONFIG.defaultAliases)) {\n map.set(normalizeAliasKey(alias), normalizeAliasTarget(target))\n }\n return map\n}\n\nfunction normalizeConfiguredAliases(aliasMap: Record<string, string>): Map<string, string> {\n const normalized = new Map<string, string>()\n for (const [alias, target] of Object.entries(aliasMap)) {\n normalized.set(normalizeAliasKey(alias), normalizeAliasTarget(target))\n }\n return normalized\n}\n\nfunction pickAliasForImport(\n importPath: string,\n configuredAliases: Map<string, string>\n): string | undefined {\n const pathValue = toPosix(importPath)\n if (!pathValue.startsWith(\"@/\")) {\n return undefined\n }\n\n const trimmed = pathValue.slice(2)\n const [root] = trimmed.split(\"/\")\n const rootAlias = `@/${root}`\n\n const directAlias = Array.from(configuredAliases.keys())\n .filter(alias => pathValue === alias || pathValue.startsWith(`${alias}/`))\n .sort((a, b) => b.length - a.length)[0]\n if (directAlias) {\n const aliasValue = configuredAliases.get(directAlias)\n if (!aliasValue || !aliasValue.startsWith(\"@/\")) {\n return undefined\n }\n\n const remainder = pathValue.slice(directAlias.length).replace(/^\\/+/, \"\")\n if (!remainder) {\n return aliasValue\n }\n\n const remainderParts = remainder.split(\"/\")\n const targetParts = normalizeAliasKey(aliasValue).replace(/^@\\//, \"\").split(\"/\")\n const aliasTail = targetParts[targetParts.length - 1]\n const normalizedRemainder = (remainderParts[0] === aliasTail)\n ? remainderParts.slice(1).join(\"/\")\n : remainder\n return normalizedRemainder ? `${aliasValue}/${normalizedRemainder}` : aliasValue\n }\n\n const defaultAliasCandidates = Array.from(normalizeDefaultAliases().keys())\n .filter(alias => pathValue === alias || pathValue.startsWith(`${alias}/`))\n .sort((a, b) => b.length - a.length)\n\n for (const defaultAlias of defaultAliasCandidates) {\n const defaultParts = normalizeAliasKey(defaultAlias).replace(/^@\\//, \"\").split(\"/\")\n const remainderFromDefault = trimmed.split(\"/\").slice(defaultParts.length)\n if (remainderFromDefault.length === 0) {\n continue\n }\n\n const candidateAliasTail = remainderFromDefault[0]\n const candidateAlias = `@/${candidateAliasTail}`\n if (configuredAliases.has(candidateAlias)) {\n const remainderPath = remainderFromDefault.slice(1).join(\"/\")\n return remainderPath ? `${candidateAlias}/${remainderPath}` : candidateAlias\n }\n }\n\n return undefined\n}\n\nfunction normalizeAliasImportPath(\n specifierText: string,\n aliasesMap: Map<string, string>\n): string | undefined {\n const rewritten = pickAliasForImport(specifierText, aliasesMap)\n if (!rewritten || rewritten === normalizeAliasKey(specifierText)) {\n return undefined\n }\n return rewritten\n}\n\nfunction isComponentAliasImport(aliasPath: string): boolean {\n const match = aliasPath.startsWith(\"@/\") ? aliasPath.slice(2) : \"\"\n if (!match) {\n return false\n }\n\n const firstSegment = match.split(\"/\")[0]\n return PACKAGE_STYLE_IMPORT_GROUPS.includes(firstSegment)\n}\n\nfunction rewriteModuleSpecifier(\n specifierText: string,\n configuredAliases: Record<string, string>,\n importStyle: ImportStyle = \"alias\"\n): string {\n if (!specifierText.startsWith(\"@/\")) {\n return specifierText\n }\n\n const aliasesMap = normalizeConfiguredAliases(configuredAliases)\n const rewrittenAlias = normalizeAliasImportPath(specifierText, aliasesMap)\n if (!rewrittenAlias) {\n return specifierText\n }\n\n if (importStyle === \"package\" && isComponentAliasImport(rewrittenAlias)) {\n return SCHEMA_CONFIG.packageAliases.core\n }\n\n return rewrittenAlias\n}\n\nexport function transformImports(\n content: string,\n aliases: Record<string, string>,\n importStyle: ImportStyle = \"alias\"\n): string {\n const sourceFile = ts.createSourceFile(\"component.tsx\", content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX)\n\n const importSpans: Array<{ start: number; end: number; replacement: string }> = []\n const configuredAliases = normalizeConfiguredAliases(aliases)\n\n function visit(node: ts.Node) {\n if (node.kind === IMPORT_NODE_KIND && ts.isImportDeclaration(node)) {\n const moduleSpecifier = node.moduleSpecifier\n if (ts.isStringLiteral(moduleSpecifier)) {\n const value = moduleSpecifier.text\n const rewritten = rewriteModuleSpecifier(value, Object.fromEntries(configuredAliases), importStyle)\n if (rewritten !== value) {\n importSpans.push({\n start: moduleSpecifier.getStart(sourceFile),\n end: moduleSpecifier.getEnd(),\n replacement: `\"${rewritten}\"`\n })\n }\n }\n }\n ts.forEachChild(node, visit)\n }\n\n ts.forEachChild(sourceFile, visit)\n if (importSpans.length === 0) {\n return content\n }\n\n importSpans.sort((a, b) => b.start - a.start)\n let transformed = content\n for (const span of importSpans) {\n transformed = `${transformed.slice(0, span.start)}${span.replacement}${transformed.slice(span.end)}`\n }\n\n return transformed\n}\n\nexport function transformCleanup(content: string): string {\n return content\n .replace(/\\r\\n/g, \"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trimEnd()\n + \"\\n\"\n}\n\nexport function applyTransforms(\n content: string,\n aliases: Record<string, string>,\n importStyle: ImportStyle = \"alias\"\n): string {\n const withImports = transformImports(content, aliases, importStyle)\n return transformCleanup(withImports)\n}\n\nexport function shouldTransformFile(fileName: string): boolean {\n return [\".ts\", \".tsx\"].includes(path.extname(fileName))\n}\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport chalk from \"chalk\"\nimport ora from \"ora\"\nimport * as ts from \"typescript\"\nimport { registrySchema, registryItemSchema } from \"../registry/build-schema.js\"\nimport { resetCache } from \"../registry/api.js\"\nimport { generateConfigSchema, generateRegistrySchema, generateRegistryItemSchema } from \"../utils/schema-generator.js\"\nimport { TYPE_TO_FOLDER, SCHEMA_CONFIG, isExternalDependency } from \"../utils/schema-config.js\"\nimport { generateMap } from \"../utils/map-generator.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { handleError } from \"../utils/errors.js\"\nimport { clearCache } from \"../utils/cache.js\"\n\ninterface BuildOptions {\n cwd: string\n registryFile: string\n outputDir: string\n}\n\nexport async function buildCommand(\n registryPath = \"./src/registry.json\",\n options: { output?: string; cwd?: string } = {}\n) {\n const buildOptions: BuildOptions = {\n cwd: path.resolve(options.cwd || process.cwd()),\n registryFile: path.resolve(registryPath),\n outputDir: path.resolve(options.output || \"./packages/registry/r\"),\n }\n\n console.log(chalk.blue(CLI_MESSAGES.info.building))\n \n try {\n await clearCache()\n resetCache()\n\n // Read registry.json\n const registryContent = await fs.readFile(buildOptions.registryFile, \"utf-8\")\n const registryData = JSON.parse(registryContent)\n \n // Validate schema\n const registry = registrySchema.parse(registryData)\n await ensureVariantsIndexItem(registry, buildOptions.cwd)\n \n // Create output directory\n await fs.ensureDir(buildOptions.outputDir)\n \n // Generate schema files\n await generateSchemaFiles(buildOptions.outputDir)\n \n const spinner = ora(CLI_MESSAGES.info.processingComponents).start()\n \n for (const item of registry.items) {\n spinner.text = `Building ${item.name}...`\n \n // Add schema\n item.$schema = \"https://ui.buildy.tw/schema/registry-item.json\"\n \n // Read file contents from utility structure\n for (const file of item.files) {\n const filePath = path.resolve(buildOptions.cwd, file.path)\n \n if (await fs.pathExists(filePath)) {\n file.content = await fs.readFile(filePath, \"utf-8\")\n } else {\n throw new Error(CLI_MESSAGES.errors.fileNotFound(file.path))\n }\n }\n \n // Validate final item\n const validatedItem = registryItemSchema.parse(item)\n \n // Determine output directory by type\n const typeDir = getOutputDir(validatedItem.type)\n const outputPath = path.join(buildOptions.outputDir, typeDir)\n await fs.ensureDir(outputPath)\n \n // Write file\n const outputFile = path.join(outputPath, `${validatedItem.name}.json`)\n await fs.writeFile(outputFile, JSON.stringify(validatedItem, null, 2))\n }\n \n spinner.succeed(CLI_MESSAGES.status.builtComponents(registry.items.length))\n \n // Create index file at /r/index.json\n await createIndexFile(registry, buildOptions.outputDir)\n\n // Create map file at /packages/registry/ui8kit.map.json\n const mapSourcePath = path.join(buildOptions.cwd, \"src\", \"lib\", \"utility-props.map.ts\")\n const mapOutputPath = path.join(path.dirname(buildOptions.outputDir), \"ui8kit.map.json\")\n const mapResult = await generateMap({\n sourcePath: mapSourcePath,\n outputPath: mapOutputPath,\n skipMissing: true\n })\n if (mapResult.generated) {\n console.log(chalk.green(`✅ Generated map file: ${mapResult.path}`))\n }\n \n console.log(chalk.green(`✅ ${CLI_MESSAGES.success.registryBuilt}`))\n console.log(`Output: ${buildOptions.outputDir}`)\n console.log(chalk.green(`✅ ${CLI_MESSAGES.success.schemasGenerated}`))\n \n } catch (error) {\n handleError(error)\n }\n}\n\n// Build output directories (for CDN/registry structure)\n// Note: This differs from TYPE_TO_FOLDER which is for user installation paths\nconst BUILD_OUTPUT_FOLDERS = {\n \"registry:ui\": \"components/ui\",\n \"registry:composite\": \"components\",\n \"registry:block\": \"blocks\", \n \"registry:component\": \"components\",\n \"registry:lib\": \"lib\",\n \"registry:layout\": \"layouts\",\n \"registry:variants\": \"components/variants\"\n} as const\n\nfunction getOutputDir(type: string): string {\n const folder = BUILD_OUTPUT_FOLDERS[type as keyof typeof BUILD_OUTPUT_FOLDERS]\n return folder || \"misc\"\n}\n\nasync function createIndexFile(registry: any, outputDir: string) {\n const index = {\n $schema: \"https://ui.buildy.tw/schema/registry.json\",\n components: registry.items.map((item: any) => ({\n name: item.name,\n type: item.type,\n title: item.title,\n description: item.description,\n dependencies: item.dependencies ?? [],\n registryDependencies: item.registryDependencies ?? [],\n })),\n categories: SCHEMA_CONFIG.componentCategories,\n version: \"1.0.0\",\n lastUpdated: new Date().toISOString(),\n registry: registry?.registry || SCHEMA_CONFIG.defaultRegistryType,\n }\n \n await fs.writeFile(\n path.join(outputDir, \"index.json\"),\n JSON.stringify(index, null, 2)\n )\n}\n\nasync function generateSchemaFiles(outputDir: string) {\n const registryBaseDir = path.dirname(outputDir)\n \n // Create schema directory\n const schemaDir = path.join(registryBaseDir, \"schema\")\n await fs.ensureDir(schemaDir)\n \n // Generate schemas dynamically from Zod schemas\n const configSchemaJson = generateConfigSchema()\n const registrySchemaJson = generateRegistrySchema()\n const registryItemSchemaJson = generateRegistryItemSchema()\n \n // Write schema files\n await fs.writeFile(\n path.join(registryBaseDir, \"schema.json\"),\n JSON.stringify(configSchemaJson, null, 2)\n )\n \n await fs.writeFile(\n path.join(schemaDir, \"registry.json\"),\n JSON.stringify(registrySchemaJson, null, 2)\n )\n \n await fs.writeFile(\n path.join(schemaDir, \"registry-item.json\"),\n JSON.stringify(registryItemSchemaJson, null, 2)\n )\n}\n\nasync function ensureVariantsIndexItem(registry: any, cwd: string): Promise<void> {\n const indexSourcePath = path.join(cwd, \"src/variants/index.ts\")\n\n if (!(await fs.pathExists(indexSourcePath))) {\n return\n }\n\n const sourceContent = await fs.readFile(indexSourcePath, \"utf-8\")\n const dependencies = extractFileDependencies(sourceContent)\n const exportedModules = extractExportedModules(sourceContent)\n\n const indexItem = {\n type: \"registry:variants\",\n name: \"index\",\n description: exportedModules.length > 0\n ? `Variant exports: ${exportedModules.join(\", \")}`\n : \"Variants export index\",\n dependencies,\n devDependencies: [],\n files: [\n {\n path: path.relative(cwd, indexSourcePath).replace(/\\\\/g, \"/\")\n }\n ]\n }\n\n const items = Array.isArray(registry.items) ? registry.items : []\n const existingIndexIdx = items.findIndex((item: any) =>\n item && item.type === indexItem.type && item.name === indexItem.name\n )\n\n if (existingIndexIdx >= 0) {\n items[existingIndexIdx] = {\n ...items[existingIndexIdx],\n ...indexItem\n }\n } else {\n items.push(indexItem)\n }\n}\n\nfunction extractExportedModules(content: string): string[] {\n const exports = new Set<string>()\n const starExportRegex = /export\\s+\\*\\s+from\\s+['\"]\\.\\/([^'\"]+)['\"]/g\n const namedExportRegex = /export\\s+\\{[^}]+\\}\\s+from\\s+['\"]\\.\\/([^'\"]+)['\"]/g\n\n let match: RegExpExecArray | null\n while ((match = starExportRegex.exec(content)) !== null) {\n exports.add(match[1])\n }\n while ((match = namedExportRegex.exec(content)) !== null) {\n exports.add(match[1])\n }\n\n return [...exports]\n}\n\nfunction extractFileDependencies(content: string): string[] {\n const dependencies = new Set<string>()\n const sourceFile = ts.createSourceFile(\"index.ts\", content, ts.ScriptTarget.Latest, true)\n\n function visit(node: ts.Node) {\n if (ts.isImportDeclaration(node)) {\n const moduleSpecifier = node.moduleSpecifier\n if (ts.isStringLiteral(moduleSpecifier)) {\n const moduleName = moduleSpecifier.text\n if (isExternalDependency(moduleName)) {\n dependencies.add(moduleName)\n }\n }\n }\n\n ts.forEachChild(node, visit)\n }\n\n visit(sourceFile)\n\n return [...dependencies]\n}\n","import { z } from \"zod\"\n\nexport const registryItemTypeSchema = z.enum([\n \"registry:lib\",\n \"registry:block\", \n \"registry:component\",\n \"registry:ui\",\n \"registry:composite\",\n \"registry:layout\",\n \"registry:variants\"\n])\n\nexport const registryItemFileSchema = z.object({\n path: z.string(),\n content: z.string().optional(), // Populated during build\n target: z.string().optional(),\n})\n\nexport const registryItemTailwindSchema = z.object({\n config: z.object({\n content: z.array(z.string()).optional(),\n theme: z.record(z.string(), z.any()).optional(),\n plugins: z.array(z.string()).optional(),\n }).optional(),\n})\n\nexport const registryItemCssVarsSchema = z.object({\n theme: z.record(z.string(), z.string()).optional(),\n light: z.record(z.string(), z.string()).optional(),\n dark: z.record(z.string(), z.string()).optional(),\n})\n\nexport const registryItemSchema = z.object({\n $schema: z.string().optional(),\n name: z.string(),\n type: registryItemTypeSchema,\n title: z.string().optional(),\n description: z.string().optional(),\n dependencies: z.array(z.string()).default([]),\n devDependencies: z.array(z.string()).default([]),\n registryDependencies: z.array(z.string()).optional(),\n files: z.array(registryItemFileSchema),\n tailwind: registryItemTailwindSchema.optional(),\n cssVars: registryItemCssVarsSchema.optional(),\n meta: z.record(z.string(), z.any()).optional(),\n})\n\nexport const registrySchema = z.object({\n $schema: z.string().optional(),\n items: z.array(registryItemSchema),\n})\n\nexport type RegistryItem = z.infer<typeof registryItemSchema>\nexport type Registry = z.infer<typeof registrySchema>\nexport type RegistryItemTailwind = z.infer<typeof registryItemTailwindSchema>\nexport type RegistryItemCssVars = z.infer<typeof registryItemCssVarsSchema>\n","import { zodToJsonSchema } from \"zod-to-json-schema\"\nimport { z } from \"zod\"\nimport { configSchema } from \"../registry/schema.js\"\nimport { registryItemSchema, registryItemTypeSchema } from \"../registry/build-schema.js\"\nimport { SCHEMA_CONFIG, getSchemaRef } from \"./schema-config.js\"\n\n// Extended registry schema for the full registry index\nconst fullRegistrySchema = z.object({\n $schema: z.string().optional(),\n name: z.string().optional(),\n homepage: z.string().optional(),\n registry: z.enum(SCHEMA_CONFIG.registryTypes).optional(),\n version: z.string().optional(),\n lastUpdated: z.string().optional(),\n categories: z.array(z.enum(SCHEMA_CONFIG.componentCategories)).optional(),\n components: z.array(z.object({\n name: z.string(),\n type: registryItemTypeSchema,\n description: z.string().optional(),\n })).optional(),\n items: z.array(registryItemSchema),\n})\n\nexport function generateConfigSchema() {\n const baseSchema = zodToJsonSchema(configSchema as any, {\n name: \"UI8KitConfiguration\",\n $refStrategy: \"none\",\n }) as any\n\n const actualSchema = baseSchema.definitions?.UI8KitConfiguration || baseSchema\n\n return {\n \"$schema\": SCHEMA_CONFIG.schemaVersion,\n \"title\": SCHEMA_CONFIG.descriptions.config.title,\n \"description\": SCHEMA_CONFIG.descriptions.config.description,\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.schema\n },\n \"framework\": {\n \"type\": \"string\",\n \"enum\": SCHEMA_CONFIG.supportedFrameworks,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.framework\n },\n \"typescript\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.typescript\n },\n \"globalCss\": {\n \"type\": \"string\",\n \"default\": \"src/index.css\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.globalCss\n },\n \"aliases\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n },\n \"default\": SCHEMA_CONFIG.defaultAliases,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.aliases\n },\n \"registry\": {\n \"type\": \"string\", \n \"default\": SCHEMA_CONFIG.defaultRegistry,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registry\n },\n \"componentsDir\": {\n \"type\": \"string\",\n \"default\": SCHEMA_CONFIG.defaultDirectories.components,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.componentsDir\n },\n \"libDir\": {\n \"type\": \"string\",\n \"default\": SCHEMA_CONFIG.defaultDirectories.lib,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.libDir\n },\n \"registryUrl\": {\n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryUrl\n },\n \"registryVersion\": {\n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryVersion\n },\n \"strictCdn\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.strictCdn\n },\n \"importStyle\": {\n \"type\": \"string\",\n \"enum\": Object.values(SCHEMA_CONFIG.importStyle),\n \"default\": SCHEMA_CONFIG.importStyle.alias,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.importStyle\n }\n },\n \"required\": [\"framework\"],\n \"additionalProperties\": false\n }\n}\n\nexport function generateRegistrySchema() {\n const baseSchema = zodToJsonSchema(fullRegistrySchema as any, {\n name: \"UI8KitRegistry\", \n $refStrategy: \"none\",\n }) as any\n\n const actualSchema = baseSchema.definitions?.UI8KitRegistry || baseSchema\n\n return {\n \"$schema\": SCHEMA_CONFIG.schemaVersion,\n \"title\": SCHEMA_CONFIG.descriptions.registry.title,\n \"description\": SCHEMA_CONFIG.descriptions.registry.description,\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.schema\n },\n \"name\": { \n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryName\n },\n \"homepage\": { \n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryHomepage\n },\n \"registry\": {\n \"type\": \"string\",\n \"enum\": SCHEMA_CONFIG.registryTypes,\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryType\n },\n \"version\": {\n \"type\": \"string\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.registryVersion\n },\n \"lastUpdated\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": SCHEMA_CONFIG.fieldDescriptions.lastUpdated\n },\n \"categories\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"enum\": SCHEMA_CONFIG.componentCategories\n },\n \"description\": SCHEMA_CONFIG.fieldDescriptions.categories\n },\n \"components\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"type\": { \n \"type\": \"string\",\n \"enum\": actualSchema.properties?.components?.items?.properties?.type?.enum || [\n \"registry:lib\", \"registry:block\", \"registry:component\", \"registry:ui\", \"registry:template\"\n ]\n },\n \"description\": { \"type\": \"string\" }\n },\n \"required\": [\"name\", \"type\"],\n \"additionalProperties\": false\n },\n \"description\": SCHEMA_CONFIG.fieldDescriptions.components\n },\n \"items\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": getSchemaRef(\"registry-item\") },\n \"description\": SCHEMA_CONFIG.fieldDescriptions.items\n }\n },\n \"required\": [\"items\"],\n \"additionalProperties\": false\n }\n}\n\nexport function generateRegistryItemSchema() {\n const baseSchema = zodToJsonSchema(registryItemSchema as any, {\n name: \"UI8KitRegistryItem\",\n $refStrategy: \"none\",\n }) as any\n\n const actualSchema = baseSchema.definitions?.UI8KitRegistryItem || baseSchema\n\n return {\n \"$schema\": SCHEMA_CONFIG.schemaVersion,\n \"title\": SCHEMA_CONFIG.descriptions.registryItem.title,\n \"description\": SCHEMA_CONFIG.descriptions.registryItem.description,\n \"type\": \"object\",\n \"properties\": actualSchema.properties,\n \"required\": actualSchema.required || [\"name\", \"type\", \"files\"],\n \"additionalProperties\": false\n }\n}","import fs from \"fs-extra\"\nimport path from \"path\"\nimport * as ts from \"typescript\"\n\nexport interface UtilityMap {\n [utility: string]: string[]\n}\n\nexport interface Ui8kitMapFile {\n version: string\n generatedAt: string\n map: UtilityMap\n}\n\nexport interface GenerateMapResult {\n generated: boolean\n path?: string\n}\n\nexport interface GenerateMapOptions {\n sourcePath: string\n outputPath: string\n skipMissing?: boolean\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value)\n}\n\nfunction parseJsonCandidate(content: string): unknown {\n const trimmed = content.trim()\n if (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) {\n return null\n }\n\n try {\n return JSON.parse(trimmed)\n } catch {\n return null\n }\n}\n\nfunction parseObjectValue(node: ts.Node): unknown {\n if (ts.isStringLiteral(node)) {\n return node.text\n }\n\n if (ts.isNumericLiteral(node)) {\n return node.text\n }\n\n if (ts.isNoSubstitutionTemplateLiteral(node)) {\n return node.text\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements.map(parseObjectValue)\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n const result: Record<string, unknown> = {}\n for (const property of node.properties) {\n if (!ts.isPropertyAssignment(property)) {\n continue\n }\n let key: string | null = null\n if (ts.isStringLiteralLike(property.name) || ts.isNumericLiteral(property.name)) {\n key = property.name.text\n } else if (ts.isIdentifier(property.name)) {\n key = property.name.text\n }\n if (!key) {\n continue\n }\n result[key] = parseObjectValue(property.initializer)\n }\n return result\n }\n\n if (ts.isAsExpression(node) || ts.isTypeAssertionExpression(node)) {\n return parseObjectValue(node.expression)\n }\n\n if (ts.isParenthesizedExpression(node)) {\n return parseObjectValue(node.expression)\n }\n\n return undefined\n}\n\nfunction extractExportedObject(source: string): unknown | null {\n const sourceFile = ts.createSourceFile(\n \"utility-props.map.ts\",\n source,\n ts.ScriptTarget.Latest,\n true\n )\n\n let extracted: unknown | null = null\n\n const visit = (node: ts.Node) => {\n if (extracted !== null) {\n return\n }\n\n if (ts.isVariableStatement(node)) {\n const isExported = node.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.ExportKeyword)\n if (!isExported) {\n return\n }\n\n for (const declaration of node.declarationList.declarations) {\n if (!declaration.initializer) {\n continue\n }\n extracted = parseObjectValue(declaration.initializer)\n if (extracted !== undefined) {\n return\n }\n }\n return\n }\n\n if (ts.isExportAssignment(node) && node.expression) {\n extracted = parseObjectValue(node.expression)\n return\n }\n\n ts.forEachChild(node, visit)\n }\n\n visit(sourceFile)\n return extracted\n}\n\nexport function normalizeUtilityMap(raw: unknown): UtilityMap {\n if (!isPlainObject(raw)) {\n throw new Error(\"Invalid utility map shape: expected object with utility keys\")\n }\n\n const normalized: UtilityMap = {}\n const errors: string[] = []\n\n for (const [key, value] of Object.entries(raw)) {\n if (typeof key !== \"string\" || !key.trim()) {\n errors.push(`Invalid utility key: ${String(key)}`)\n continue\n }\n\n if (!Array.isArray(value) || !value.every(item => typeof item === \"string\")) {\n errors.push(`Utility \"${key}\" expects string[]`)\n continue\n }\n\n const uniqueValues = [...new Set(value.map(item => item.trim()))]\n .filter(item => item.length > 0)\n .sort()\n normalized[key.trim()] = uniqueValues\n }\n\n if (errors.length > 0) {\n throw new Error(`Invalid utility map shape: ${errors.join(\"; \")}`)\n }\n\n const sortedKeys = Object.keys(normalized).sort()\n const ordered: UtilityMap = {}\n for (const key of sortedKeys) {\n ordered[key] = normalized[key]\n }\n return ordered\n}\n\nexport function parseUtilityMapSource(content: string): unknown {\n const fromJson = parseJsonCandidate(content)\n if (fromJson !== null) {\n return fromJson\n }\n\n const fromExport = extractExportedObject(content)\n if (fromExport !== null) {\n return fromExport\n }\n\n throw new Error(\"Could not parse utility props map source\")\n}\n\nexport async function generateMap(options: GenerateMapOptions): Promise<GenerateMapResult> {\n const { sourcePath, outputPath, skipMissing = true } = options\n\n if (!(await fs.pathExists(sourcePath))) {\n if (skipMissing) {\n return { generated: false }\n }\n throw new Error(`Utility props map source not found: ${path.resolve(sourcePath)}`)\n }\n\n const content = await fs.readFile(sourcePath, \"utf-8\")\n const rawMap = parseUtilityMapSource(content)\n const map = normalizeUtilityMap(rawMap)\n\n const mapFile: Ui8kitMapFile = {\n version: \"1.0.0\",\n generatedAt: new Date().toISOString(),\n map\n }\n\n await fs.ensureDir(path.dirname(outputPath))\n await fs.writeJson(outputPath, mapFile, { spaces: 2 })\n return { generated: true, path: outputPath }\n}\n\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport chalk from \"chalk\"\nimport ora from \"ora\"\nimport { glob } from \"glob\"\nimport * as ts from \"typescript\"\nimport { SCHEMA_CONFIG, isExternalDependency, TYPE_TO_FOLDER } from \"../utils/schema-config.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { handleError } from \"../utils/errors.js\"\n\ninterface ScanOptions {\n cwd: string\n registry: string\n outputFile: string\n sourceDir: string\n}\n\ninterface ComponentFile {\n path: string\n content?: string\n target?: string\n}\n\ninterface RegistryItem {\n name: string\n type: string\n description?: string\n dependencies: string[]\n devDependencies: string[]\n registryDependencies: string[]\n files: ComponentFile[]\n}\n\ninterface ASTAnalysis {\n dependencies: string[]\n devDependencies: string[]\n description?: string\n registryDependencies: string[]\n hasExports: boolean\n}\n\n// Dev dependency patterns\nconst DEV_PATTERNS = [\n '@types/',\n 'eslint',\n 'prettier',\n 'typescript',\n 'jest',\n 'vitest',\n 'testing-library',\n '@testing-library/',\n 'storybook',\n '@storybook/',\n 'webpack',\n 'vite',\n 'rollup',\n 'babel',\n '@babel/',\n 'postcss',\n 'tailwindcss',\n 'autoprefixer'\n] as const\n\nconst PACKAGE_CORE_PREFIX = \"@ui8kit/core\"\nconst PACKAGE_STYLE_BARS = [\n \"components\",\n \"layouts\",\n \"blocks\",\n \"variants\",\n \"ui\"\n] as const\nconst PACKAGE_STYLE_ALIASES = [\"@/components\", \"@/components/ui\", \"@/ui\", \"@/layouts\", \"@/blocks\", \"@/variants\"]\n\nconst REGISTRY_ALIAS_ROOTS = Object.keys(SCHEMA_CONFIG.defaultAliases)\n\nfunction toPosix(value: string): string {\n return value.replace(/\\\\/g, \"/\")\n}\n\nfunction toLowerOrEmpty(value: string): string {\n return value.trim().toLowerCase()\n}\n\nfunction stripImportExtension(moduleName: string): string {\n return moduleName.replace(/\\.[tj]sx?$/i, \"\")\n}\n\nfunction getAliasMatch(moduleName: string): { alias: string; remainder: string } | null {\n const normalized = toPosix(moduleName)\n if (!normalized.startsWith(\"@/\")) {\n return null\n }\n\n const directMatch = REGISTRY_ALIAS_ROOTS\n .filter(alias => normalized === alias || normalized.startsWith(`${alias}/`))\n .sort((a, b) => b.length - a.length)[0]\n\n if (!directMatch) {\n return null\n }\n\n const remainder = normalized.slice(directMatch.length).replace(/^\\/+/, \"\")\n return {\n alias: directMatch,\n remainder\n }\n}\n\nfunction shouldRewriteAsRegistryDependency(aliasImport: string): boolean {\n const match = getAliasMatch(aliasImport)\n if (!match || !match.remainder) {\n return false\n }\n if (PACKAGE_STYLE_ALIASES.includes(match.alias)) {\n return true\n }\n\n const firstSegment = match.remainder.split(\"/\")[0]\n return PACKAGE_STYLE_BARS.includes(firstSegment)\n}\n\nfunction isUi8kitCoreImport(moduleName: string): boolean {\n return moduleName === PACKAGE_CORE_PREFIX || moduleName.startsWith(`${PACKAGE_CORE_PREFIX}/`)\n}\n\nfunction extractCoreImportNames(moduleName: string, node: ts.ImportDeclaration): string[] {\n if (!isUi8kitCoreImport(moduleName)) {\n return []\n }\n\n const names: string[] = []\n const importClause = node.importClause\n if (importClause?.name) {\n names.push(importClause.name.text)\n }\n\n const namedBindings = importClause?.namedBindings\n if (namedBindings && ts.isNamedImports(namedBindings)) {\n namedBindings.elements.forEach(element => {\n names.push(element.name.text)\n })\n }\n\n if (moduleName.startsWith(`${PACKAGE_CORE_PREFIX}/`)) {\n const explicitComponent = toLowerOrEmpty(stripImportExtension(moduleName.slice(PACKAGE_CORE_PREFIX.length + 1)))\n if (explicitComponent && !names.includes(explicitComponent)) {\n names.push(explicitComponent)\n }\n }\n\n return names\n}\n\nfunction mapAliasImportToComponentName(moduleName: string): string | null {\n const aliasMatch = getAliasMatch(moduleName)\n if (!aliasMatch || !aliasMatch.remainder) {\n return null\n }\n\n if (!shouldRewriteAsRegistryDependency(moduleName)) {\n return null\n }\n\n const componentName = stripImportExtension(aliasMatch.remainder)\n .split(\"/\")\n .at(-1)\n\n return componentName ? toLowerOrEmpty(componentName) : null\n}\n\nfunction extractRegistryDependenciesFromImport(node: ts.ImportDeclaration): string[] {\n const moduleSpecifier = node.moduleSpecifier\n if (!ts.isStringLiteral(moduleSpecifier)) {\n return []\n }\n\n const moduleName = moduleSpecifier.text\n const importedNames: string[] = []\n\n if (isUi8kitCoreImport(moduleName)) {\n for (const name of extractCoreImportNames(moduleName, node)) {\n importedNames.push(toLowerOrEmpty(name))\n }\n return importedNames\n }\n\n if (moduleName.startsWith(\"@/\")) {\n const aliasName = mapAliasImportToComponentName(moduleName)\n if (aliasName) {\n importedNames.push(aliasName)\n }\n }\n\n return importedNames\n}\n\nfunction toGlobAll(dir: string): string {\n return path.join(dir, \"**/*\").replace(/\\\\/g, \"/\")\n}\n\nexport async function scanCommand(\n options: { cwd?: string; registry?: string; output?: string; source?: string } = {}\n) {\n const registryName = options.registry || SCHEMA_CONFIG.defaultRegistryType\n const registryPath = `./${registryName}`\n \n const scanOptions: ScanOptions = {\n cwd: path.resolve(options.cwd || process.cwd()),\n registry: path.resolve(registryPath),\n outputFile: path.resolve(options.output || \"./src/registry.json\"),\n sourceDir: path.resolve(options.source || \"./src\"),\n }\n\n console.log(chalk.blue(`🔍 ${CLI_MESSAGES.info.scanningComponents(registryName)}`))\n \n try {\n const spinner = ora(CLI_MESSAGES.info.scanningDirectories).start()\n \n // Resolve directories based on SCHEMA_CONFIG\n const componentsDir = path.resolve(scanOptions.cwd, normalizeDir(SCHEMA_CONFIG.defaultDirectories.components))\n const uiDir = path.join(componentsDir, \"ui\")\n const blocksDir = path.resolve(scanOptions.cwd, normalizeDir(SCHEMA_CONFIG.defaultDirectories.blocks))\n const layoutsDir = path.resolve(scanOptions.cwd, normalizeDir(SCHEMA_CONFIG.defaultDirectories.layouts))\n const libDir = path.resolve(scanOptions.cwd, normalizeDir(SCHEMA_CONFIG.defaultDirectories.lib))\n const variantsDir = path.resolve(scanOptions.cwd, normalizeDir(SCHEMA_CONFIG.defaultDirectories.variants))\n \n // Scan different component types\n const uiComponents = await scanDirectory(uiDir, \"registry:ui\")\n const compositeComponents = await scanDirectoryFlat(componentsDir, \"registry:composite\", [\"index.ts\"])\n const variantComponents = await scanDirectory(variantsDir, \"registry:variants\", [\"index.ts\"])\n const blockComponents = await scanDirectory(blocksDir, \"registry:block\")\n const layoutComponents = await scanDirectory(layoutsDir, \"registry:layout\")\n const libComponents = await scanDirectory(libDir, \"registry:lib\")\n \n // Scan index files as special items\n const variantsIndexItem = await scanSingleFile(path.join(variantsDir, \"index.ts\"), \"registry:variants\")\n const componentsIndexItem = await scanSingleFile(path.join(componentsDir, \"index.ts\"), \"registry:composite\")\n \n // Merge and deduplicate by (type,name)\n const allComponentsRaw = [\n ...uiComponents,\n ...compositeComponents,\n ...variantComponents,\n ...(variantsIndexItem ? [variantsIndexItem] : []),\n ...(componentsIndexItem ? [componentsIndexItem] : []),\n ...blockComponents,\n ...layoutComponents,\n ...libComponents\n ]\n const seen = new Set<string>()\n const allComponents: RegistryItem[] = []\n const localDependencyRefs = new Map<string, Set<string>>()\n for (const comp of allComponentsRaw) {\n const key = `${comp.type}:${comp.name}`\n if (seen.has(key)) continue\n seen.add(key)\n allComponents.push(comp)\n }\n \n spinner.text = CLI_MESSAGES.info.analyzingDeps.replace(\"{count}\", allComponents.length.toString())\n \n // Analyze each component for dependencies and devDependencies\n for (const component of allComponents) {\n const analysis = await analyzeComponentDependencies(component.files, scanOptions.cwd)\n component.dependencies = analysis.dependencies\n component.devDependencies = analysis.devDependencies\n localDependencyRefs.set(\n `${component.type}:${component.name}`,\n new Set(analysis.registryDependencies.map(toLowerOrEmpty))\n )\n \n // Update description if found during analysis\n if (analysis.description && !component.description) {\n component.description = analysis.description\n }\n }\n\n const availableComponents = new Set(allComponents.map(item => item.name.toLowerCase()))\n allComponents.forEach(item => {\n const rawDependencies = localDependencyRefs.get(`${item.type}:${item.name}`) ?? new Set<string>()\n const resolvedDependencies = new Set<string>()\n const unresolvedDependencies: string[] = []\n\n for (const candidate of rawDependencies) {\n const normalized = toLowerOrEmpty(candidate)\n if (!normalized) {\n continue\n }\n if (normalized === item.name.toLowerCase()) {\n continue\n }\n if (!availableComponents.has(normalized)) {\n unresolvedDependencies.push(normalized)\n continue\n }\n resolvedDependencies.add(normalized)\n }\n\n if (unresolvedDependencies.length > 0) {\n console.warn(`⚠️ Missing local component references in ${item.name} (${item.type}): ${unresolvedDependencies.join(\", \")}`)\n }\n\n item.registryDependencies = Array.from(resolvedDependencies).sort()\n })\n \n // Create registry with dynamic registry name\n const registry = {\n $schema: \"https://ui.buildy.tw/schema/registry.json\",\n items: allComponents,\n version: \"1.0.0\",\n lastUpdated: new Date().toISOString(),\n registry: registryName\n }\n \n // Ensure output directory exists\n await fs.ensureDir(path.dirname(scanOptions.outputFile))\n \n // Write registry file\n await fs.writeFile(scanOptions.outputFile, JSON.stringify(registry, null, 2))\n \n spinner.succeed(CLI_MESSAGES.status.scannedComponents(allComponents.length))\n \n console.log(chalk.green(`✅ ${CLI_MESSAGES.success.registryGenerated(registryName)}`))\n console.log(`Output: ${scanOptions.outputFile}`)\n \n // Show summary\n const summary = allComponents.reduce((acc, comp) => {\n acc[comp.type] = (acc[comp.type] || 0) + 1\n return acc\n }, {} as Record<string, number>)\n \n console.log(chalk.blue(\"\\n📊 Component Summary:\"))\n Object.entries(summary).forEach(([type, count]) => {\n console.log(` ${type}: ${count}`)\n })\n \n // Show dependency summary\n const allDeps = new Set<string>()\n const allDevDeps = new Set<string>()\n allComponents.forEach(comp => {\n comp.dependencies.forEach(dep => allDeps.add(dep))\n comp.devDependencies.forEach(dep => allDevDeps.add(dep))\n })\n \n console.log(chalk.blue(\"\\n📦 Dependencies Summary:\"))\n console.log(` Dependencies: ${allDeps.size} unique (${Array.from(allDeps).join(\", \") || \"none\"})`)\n console.log(` DevDependencies: ${allDevDeps.size} unique (${Array.from(allDevDeps).join(\", \") || \"none\"})`)\n \n } catch (error) {\n handleError(error)\n }\n}\n\nasync function scanDirectory(dirPath: string, type: string, ignorePatterns: string[] = []): Promise<RegistryItem[]> {\n if (!(await fs.pathExists(dirPath))) {\n return []\n }\n \n const components: RegistryItem[] = []\n \n // Find all TypeScript/JavaScript files\n const pattern = path.join(dirPath, \"**/*.{ts,tsx,js,jsx}\").replace(/\\\\/g, \"/\")\n const ignore = ignorePatterns.map(p => p.replace(/\\\\/g, \"/\"))\n const files = await glob(pattern, { windowsPathsNoEscape: true, ignore })\n \n for (const filePath of files) {\n const relativePath = path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\")\n const fileName = path.basename(filePath, path.extname(filePath))\n \n // Skip index files and files starting with underscore\n if (fileName === \"index\" || fileName.startsWith(\"_\")) {\n continue\n }\n \n try {\n const content = await fs.readFile(filePath, \"utf-8\")\n const description = extractDescription(content)\n \n // Check if file has valid exports\n if (!hasValidExports(content)) {\n continue\n }\n \n components.push({\n name: fileName,\n type,\n description,\n dependencies: [],\n devDependencies: [],\n registryDependencies: [],\n files: [{\n path: relativePath,\n target: getTargetFromType(type)\n }]\n })\n } catch (error) {\n console.warn(`Warning: Could not process ${filePath}:`, (error as Error).message)\n }\n }\n \n return components\n}\n\nasync function scanDirectoryFlat(dirPath: string, type: string, ignoreFiles: string[] = []): Promise<RegistryItem[]> {\n if (!(await fs.pathExists(dirPath))) {\n return []\n }\n \n const components: RegistryItem[] = []\n \n // Find only files in the root of the directory (no subdirectories)\n const pattern = path.join(dirPath, \"*.{ts,tsx,js,jsx}\").replace(/\\\\/g, \"/\")\n const files = await glob(pattern, { windowsPathsNoEscape: true })\n \n for (const filePath of files) {\n const relativePath = path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\")\n const fileName = path.basename(filePath, path.extname(filePath))\n \n // Skip specified files and files starting with underscore\n if (ignoreFiles.includes(fileName + path.extname(filePath)) || fileName.startsWith(\"_\")) {\n continue\n }\n \n try {\n const content = await fs.readFile(filePath, \"utf-8\")\n const description = extractDescription(content)\n \n // Check if file has valid exports\n if (!hasValidExports(content)) {\n continue\n }\n \n components.push({\n name: fileName,\n type,\n description,\n dependencies: [],\n devDependencies: [],\n registryDependencies: [],\n files: [{\n path: relativePath,\n target: getTargetFromType(type)\n }]\n })\n } catch (error) {\n console.warn(`Warning: Could not process ${filePath}:`, (error as Error).message)\n }\n }\n \n return components\n}\n\nasync function scanSingleFile(filePath: string, type: string): Promise<RegistryItem | null> {\n if (!(await fs.pathExists(filePath))) {\n return null\n }\n \n try {\n const content = await fs.readFile(filePath, \"utf-8\")\n const description = extractDescription(content)\n \n // Check if file has valid exports\n if (!hasValidExports(content)) {\n return null\n }\n \n const relativePath = path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\")\n const fileName = path.basename(filePath, path.extname(filePath))\n \n return {\n name: fileName,\n type,\n description,\n dependencies: [],\n devDependencies: [],\n registryDependencies: [],\n files: [{\n path: relativePath,\n target: getTargetFromType(type)\n }]\n }\n } catch (error) {\n console.warn(`Warning: Could not process ${filePath}:`, (error as Error).message)\n return null\n }\n}\n\nfunction extractDescription(content: string): string {\n // Look for JSDoc comment at the top of the file\n const jsdocMatch = content.match(/\\/\\*\\*\\s*\\n\\s*\\*\\s*(.+?)\\s*\\n\\s*\\*\\//s)\n if (jsdocMatch) {\n return jsdocMatch[1].trim()\n }\n \n // Look for single line comment\n const commentMatch = content.match(/^\\/\\/\\s*(.+)$/m)\n if (commentMatch) {\n return commentMatch[1].trim()\n }\n \n return \"\"\n}\n\nfunction hasValidExports(content: string): boolean {\n const sourceFile = ts.createSourceFile(\"index.ts\", content, ts.ScriptTarget.Latest, true)\n let hasExports = false\n\n function visit(node: ts.Node) {\n if (ts.isExportDeclaration(node) || ts.isExportAssignment(node) || hasExportModifier(node)) {\n hasExports = true\n return\n }\n\n ts.forEachChild(node, visit)\n }\n\n visit(sourceFile)\n return hasExports\n}\n\nasync function analyzeComponentDependencies(files: ComponentFile[], cwd: string): Promise<{\n dependencies: string[]\n devDependencies: string[]\n description?: string\n registryDependencies: string[]\n}> {\n const allDependencies = new Set<string>()\n const allDevDependencies = new Set<string>()\n const allRegistryDependencies = new Set<string>()\n let description: string | undefined\n \n for (const file of files) {\n try {\n const filePath = path.resolve(cwd, file.path)\n const content = await fs.readFile(filePath, \"utf-8\")\n \n // Parse TypeScript/JavaScript to extract imports\n const sourceFile = ts.createSourceFile(\n file.path,\n content,\n ts.ScriptTarget.Latest,\n true\n )\n \n const analysis = analyzeAST(sourceFile)\n \n // Merge dependencies\n analysis.dependencies.forEach(dep => allDependencies.add(dep))\n analysis.devDependencies.forEach(dep => allDevDependencies.add(dep))\n analysis.registryDependencies.forEach(dep => allRegistryDependencies.add(dep))\n \n // Use first found description\n if (analysis.description && !description) {\n description = analysis.description\n }\n \n } catch (error) {\n console.warn(CLI_MESSAGES.errors.failedToAnalyzeDeps(file.path), (error as Error).message)\n }\n }\n \n return {\n dependencies: Array.from(allDependencies),\n devDependencies: Array.from(allDevDependencies),\n description,\n registryDependencies: Array.from(allRegistryDependencies)\n }\n}\n\nfunction analyzeAST(sourceFile: ts.SourceFile): ASTAnalysis {\n const dependencies = new Set<string>()\n const devDependencies = new Set<string>()\n const registryDependencies = new Set<string>()\n let description: string | undefined\n let hasExports = false\n \n function visit(node: ts.Node) {\n // Analyze imports\n if (ts.isImportDeclaration(node)) {\n const moduleSpecifier = node.moduleSpecifier\n if (ts.isStringLiteral(moduleSpecifier)) {\n const moduleName = moduleSpecifier.text\n\n for (const name of extractRegistryDependenciesFromImport(node)) {\n if (name) {\n registryDependencies.add(name)\n }\n }\n \n // Add only external dependencies using the same logic as generate-registry.ts\n if (isExternalDependency(moduleName)) {\n // Determine if it's a dev dependency based on common patterns\n if (isDevDependency(moduleName)) {\n devDependencies.add(moduleName)\n } else {\n dependencies.add(moduleName)\n }\n }\n }\n }\n \n // Analyze exports\n if (ts.isExportDeclaration(node)) {\n hasExports = true\n } else if (ts.isExportAssignment(node)) {\n hasExports = true\n } else if (hasExportModifier(node)) {\n hasExports = true\n }\n \n // Search for JSDoc comments\n const jsDocComment = getJSDocComment(node)\n if (jsDocComment && !description) {\n description = jsDocComment\n }\n \n ts.forEachChild(node, visit)\n }\n \n visit(sourceFile)\n \n return {\n dependencies: Array.from(dependencies),\n devDependencies: Array.from(devDependencies),\n description,\n registryDependencies: Array.from(registryDependencies),\n hasExports\n }\n}\n\nfunction isDevDependency(moduleName: string): boolean {\n return DEV_PATTERNS.some(pattern => moduleName.includes(pattern))\n}\n\nfunction hasExportModifier(node: ts.Node): boolean {\n if ('modifiers' in node && node.modifiers) {\n return (node.modifiers as ts.NodeArray<ts.Modifier>).some(\n mod => mod.kind === ts.SyntaxKind.ExportKeyword\n )\n }\n return false\n}\n\nfunction getJSDocComment(node: ts.Node): string | undefined {\n try {\n // Get JSDoc comments\n const jsDocTags = ts.getJSDocCommentsAndTags(node)\n \n for (const tag of jsDocTags) {\n if (ts.isJSDoc(tag) && tag.comment) {\n if (typeof tag.comment === 'string') {\n return tag.comment.trim()\n } else if (Array.isArray(tag.comment)) {\n return tag.comment.map(part => part.text).join('').trim()\n }\n }\n }\n } catch (error) {\n // Ignore JSDoc parsing errors\n }\n \n return undefined\n}\n\nfunction getTargetFromType(type: string): string {\n const folder = TYPE_TO_FOLDER[type as keyof typeof TYPE_TO_FOLDER]\n return folder || \"components\"\n}\n\n// TYPE_TO_FOLDER mapping:\n// - \"registry:ui\" → \"components/ui\"\n// - \"registry:variants\" → \"variants\"\n// - \"registry:lib\" → \"lib\"\n\nfunction normalizeDir(dir: string): string {\n return dir.replace(/^\\.\\//, \"\").replace(/\\\\/g, \"/\")\n} ","import chalk from \"chalk\"\nimport { Component } from \"../registry/schema.js\"\nimport { getAllComponents } from \"../registry/api.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { logger } from \"../utils/logger.js\"\nimport { CdnResolutionOptions, SCHEMA_CONFIG, type RegistryType } from \"../utils/schema-config.js\"\n\nconst LIST_EXCLUDED_COMPONENT_TYPES = [\"registry:variants\", \"registry:lib\"]\n\ninterface ListOptions {\n registry?: string\n json?: boolean\n cache?: boolean\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n}\n\nexport async function listCommand(options: ListOptions = {}) {\n const registryType = resolveRegistryType(options.registry)\n const cdnResolution: CdnResolutionOptions = {\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn\n }\n const requestOptions = {\n excludeTypes: LIST_EXCLUDED_COMPONENT_TYPES,\n noCache: options.cache === false,\n cdn: cdnResolution\n }\n\n try {\n const components = await getAllComponents(registryType, requestOptions)\n\n if (options.json) {\n console.log(JSON.stringify(components, null, 2))\n return\n }\n\n const byType = new Map<string, Component[]>()\n for (const component of components) {\n const group = byType.get(component.type) ?? []\n group.push(component)\n byType.set(component.type, group)\n }\n\n const sortedGroups = Array.from(byType.entries()).sort((a, b) => a[0].localeCompare(b[0]))\n if (sortedGroups.length === 0) {\n logger.warn(CLI_MESSAGES.errors.registryTempUnavailable)\n return\n }\n\n logger.info(CLI_MESSAGES.info.listingComponents)\n for (const [type, group] of sortedGroups) {\n const entries = group.sort((a, b) => a.name.localeCompare(b.name))\n console.log(chalk.cyan(`${type} (${entries.length} components)`))\n for (const component of entries) {\n const description = component.description ? chalk.dim(component.description) : \"\"\n console.log(chalk.white(` ${component.name.padEnd(14)}`) + description)\n }\n console.log(\"\")\n }\n } catch (error) {\n logger.error((error as Error).message)\n }\n}\n\nfunction resolveRegistryType(registryInput?: string): RegistryType {\n if (!registryInput) {\n return SCHEMA_CONFIG.defaultRegistryType\n }\n\n if (SCHEMA_CONFIG.registryTypes.includes(registryInput as RegistryType)) {\n return registryInput as RegistryType\n }\n\n logger.warn(`⚠️ Unknown registry type: ${registryInput}`)\n logger.warn(`Available registries: ${SCHEMA_CONFIG.registryTypes.join(\", \")}`)\n return SCHEMA_CONFIG.defaultRegistryType\n}\n\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport { glob } from \"glob\"\nimport chalk from \"chalk\"\nimport { findConfig } from \"../utils/project.js\"\nimport { Component, Config } from \"../registry/schema.js\"\nimport { getAllComponents } from \"../registry/api.js\"\nimport { buildUnifiedDiff, formatDiffPreview, hasDiff } from \"../utils/diff-utils.js\"\nimport { applyTransforms } from \"../utils/transform.js\"\nimport { SCHEMA_CONFIG, type RegistryType, CdnResolutionOptions } from \"../utils/schema-config.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { logger } from \"../utils/logger.js\"\nimport { handleError } from \"../utils/errors.js\"\n\ninterface DiffOptions {\n registry?: string\n json?: boolean\n cache?: boolean\n registryUrl?: string\n registryVersion?: string\n strictCdn?: boolean\n}\n\ninterface ScannedLocalComponent {\n name: string\n filePath: string\n}\n\ninterface ComponentDiffSummary {\n component: string\n type: string\n status: \"up-to-date\" | \"update\" | \"missing-remote\" | \"missing-local\"\n files: Array<{ path: string; changed: boolean; diff?: string }>\n}\n\nexport async function diffCommand(componentName?: string, options: DiffOptions = {}) {\n try {\n const registryType = resolveRegistryType(options.registry)\n const cdnResolution: CdnResolutionOptions = {\n registryUrl: options.registryUrl,\n registryVersion: options.registryVersion,\n strictCdn: options.strictCdn\n }\n const config = await findConfig(registryType)\n const defaultConfig: Config = config ?? {\n framework: SCHEMA_CONFIG.supportedFrameworks[0],\n typescript: true,\n globalCss: \"src/index.css\",\n aliases: SCHEMA_CONFIG.defaultAliases,\n registry: SCHEMA_CONFIG.defaultRegistry,\n componentsDir: SCHEMA_CONFIG.defaultDirectories.components,\n libDir: SCHEMA_CONFIG.defaultDirectories.lib\n }\n\n const installed = await scanLocalComponents(defaultConfig)\n if (installed.length === 0) {\n logger.warn(CLI_MESSAGES.errors.noLocalInstall)\n return\n }\n\n const registryComponents = await getAllComponents(registryType, {\n noCache: options.cache === false,\n cdn: cdnResolution\n })\n const registryIndex = new Map(registryComponents.map(item => [item.name.toLowerCase(), item]))\n\n const targets = componentName\n ? installed.filter(item => item.name.toLowerCase() === componentName.toLowerCase())\n : installed\n\n if (componentName && targets.length === 0) {\n logger.warn(`Component \"${componentName}\" not found in local project structure`)\n return\n }\n\n const results: ComponentDiffSummary[] = []\n const shouldLogOutput = !options.json\n if (shouldLogOutput) {\n logger.info(CLI_MESSAGES.info.checkingForUpdates)\n }\n for (const item of targets) {\n const remoteComponent = registryIndex.get(item.name.toLowerCase())\n if (!remoteComponent) {\n results.push({\n component: item.name,\n type: \"unknown\",\n status: \"missing-remote\",\n files: [{ path: item.filePath, changed: false }]\n })\n continue\n }\n\n const fileSummary = await compareComponentFiles(item, remoteComponent, defaultConfig)\n const hasChanges = fileSummary.some(file => file.changed)\n results.push({\n component: item.name,\n type: remoteComponent.type,\n status: hasChanges ? \"update\" : \"up-to-date\",\n files: fileSummary\n })\n }\n\n if (options.json) {\n console.log(JSON.stringify(results, null, 2))\n return\n }\n\n const updates = results.filter(item => item.status === \"update\").length\n const upToDate = results.filter(item => item.status === \"up-to-date\").length\n\n for (const result of results) {\n if (result.status === \"missing-remote\") {\n logger.warn(`\\n⚠️ ${result.component}: not found in registry`)\n continue\n }\n\n const statusTitle = result.status === \"update\"\n ? `${chalk.yellow(\"UPDATE\")}`\n : chalk.green(\"UP-TO-DATE\")\n const title = `${statusTitle} ${result.component} (${result.type})`\n logger.info(title)\n\n for (const file of result.files) {\n console.log(` ${chalk.white(file.path)}`)\n if (file.changed && file.diff) {\n const preview = formatDiffPreview(file.diff, 120)\n console.log(colorDiff(preview))\n } else {\n console.log(chalk.dim(\" No changes\"))\n }\n }\n }\n\n console.log(\n `\\n${CLI_MESSAGES.info.localDiffSummary} ${chalk.yellow(updates)} component(s) have updates, ${chalk.green(upToDate)} up to date`\n )\n\n if (updates > 0) {\n console.log('Run \"ui8kit add <component> --force\" to update.')\n }\n } catch (error) {\n handleError(error)\n }\n}\n\nasync function compareComponentFiles(\n installed: ScannedLocalComponent,\n remote: Component,\n config: Config\n): Promise<Array<{ path: string; changed: boolean; diff?: string }>> {\n const localContent = await fs.readFile(installed.filePath, \"utf-8\")\n const remoteCandidate = remote.files.find(file => {\n const candidateName = path.basename(file.path)\n return candidateName.toLowerCase() === path.basename(installed.filePath).toLowerCase()\n })\n\n if (!remoteCandidate) {\n return [{ path: installed.filePath, changed: false }]\n }\n\n const remoteContent = applyTransforms(remoteCandidate.content, config.aliases, config.importStyle || \"alias\")\n const changed = hasDiff(localContent, remoteContent)\n return changed\n ? [{\n path: installed.filePath,\n changed: true,\n diff: buildUnifiedDiff(installed.filePath, `${remote.name}/${path.basename(installed.filePath)}`, localContent, remoteContent)\n }]\n : [{ path: installed.filePath, changed: false }]\n}\n\nasync function scanLocalComponents(config: Config): Promise<ScannedLocalComponent[]> {\n const componentsDir = path.resolve(process.cwd(), config.componentsDir || SCHEMA_CONFIG.defaultDirectories.components)\n const componentsUiDir = path.join(componentsDir, \"ui\")\n const blocksDir = path.resolve(process.cwd(), SCHEMA_CONFIG.defaultDirectories.blocks)\n const layoutsDir = path.resolve(process.cwd(), SCHEMA_CONFIG.defaultDirectories.layouts)\n\n const directories = [componentsUiDir, componentsDir, blocksDir, layoutsDir]\n const entries: ScannedLocalComponent[] = []\n const patterns = directories.map(dir => path.join(dir, \"*.{ts,tsx}\").replace(/\\\\/g, \"/\"))\n\n for (const pattern of patterns) {\n const baseDir = path.dirname(pattern)\n if (!(await fs.pathExists(baseDir))) {\n continue\n }\n\n const filePaths = await glob(pattern, { windowsPathsNoEscape: true })\n for (const filePath of filePaths) {\n const fileName = path.basename(filePath)\n if (fileName === \"index.tsx\" || fileName === \"index.ts\") {\n continue\n }\n entries.push({\n name: path.parse(fileName).name.toLowerCase(),\n filePath: path.resolve(process.cwd(), filePath)\n })\n }\n }\n\n const uniqueByName = new Map<string, ScannedLocalComponent>()\n for (const entry of entries) {\n if (!uniqueByName.has(entry.name)) {\n uniqueByName.set(entry.name, entry)\n }\n }\n return Array.from(uniqueByName.values())\n}\n\nfunction colorDiff(value: string): string {\n return value\n .split(\"\\n\")\n .map(line => {\n if (line.startsWith(\"+\")) {\n return chalk.green(line)\n }\n if (line.startsWith(\"-\")) {\n return chalk.red(line)\n }\n return line\n })\n .join(\"\\n\")\n}\n\nfunction resolveRegistryType(registryInput?: string): RegistryType {\n if (!registryInput) {\n return SCHEMA_CONFIG.defaultRegistryType\n }\n\n if (SCHEMA_CONFIG.registryTypes.includes(registryInput as RegistryType)) {\n return registryInput as RegistryType\n }\n\n logger.warn(`⚠️ Unknown registry type: ${registryInput}`)\n logger.warn(`Available registries: ${SCHEMA_CONFIG.registryTypes.join(\", \")}`)\n return SCHEMA_CONFIG.defaultRegistryType\n}\n\n","import { clearCache, getCacheDir } from \"../utils/cache.js\"\nimport { CLI_MESSAGES } from \"../utils/cli-messages.js\"\nimport { logger } from \"../utils/logger.js\"\nimport { handleError } from \"../utils/errors.js\"\n\nexport async function cacheClearCommand() {\n try {\n await clearCache()\n logger.success(`${CLI_MESSAGES.success.cacheCleared} (${getCacheDir()})`)\n } catch (error) {\n handleError(error)\n }\n}\n\n","import fs from \"fs-extra\"\nimport os from \"os\"\nimport path from \"path\"\nimport fetch from \"node-fetch\"\nimport chalk from \"chalk\"\nimport { SCHEMA_CONFIG, getCdnUrls } from \"../utils/schema-config.js\"\nimport { getRegistryCdnState } from \"../registry/api.js\"\nimport { detectPackageManager } from \"../utils/package-manager.js\"\nimport { getCliVersion } from \"../utils/cli-version.js\"\nimport { getCacheDir } from \"../utils/cache.js\"\n\ninterface InfoOptions {\n json?: boolean\n cdn?: boolean\n}\n\nexport async function infoCommand(options: InfoOptions = {}) {\n const version = getCliVersion()\n const pm = await detectPackageManager()\n const cwd = process.cwd()\n\n const configStatus = await readConfigStatus()\n const cache = await readCacheStatus()\n const configOptions = configStatus.found ? {\n registryUrl: configStatus.config.registryUrl,\n registryVersion: configStatus.config.registryVersion,\n strictCdn: configStatus.config.strictCdn\n } : {}\n const cdnCandidates = getCdnUrls(SCHEMA_CONFIG.defaultRegistryType, configOptions)\n const cdn = await checkPrimaryCdn(cdnCandidates)\n const cdnState = getRegistryCdnState(SCHEMA_CONFIG.defaultRegistryType, { cdn: configOptions })\n\n if (options.json) {\n console.log(JSON.stringify({\n version,\n node: process.version,\n os: `${os.platform()} ${os.arch()}`,\n packageManager: pm,\n cwd,\n config: configStatus.config,\n configFound: configStatus.found,\n cache,\n cdn,\n registry: SCHEMA_CONFIG.defaultRegistry,\n cdnResolution: {\n overrides: configOptions,\n resolvedUrls: cdnState.urls,\n workingCDN: cdnState.workingCDN\n }\n }, null, 2))\n return\n }\n\n console.log(`ui8kit v${version}`)\n console.log(`Node ${process.version}`)\n console.log(`OS ${os.platform()} ${os.arch()}`)\n console.log(`PM ${pm}`)\n console.log(`CWD ${cwd}`)\n console.log(\"\")\n if (configStatus.found) {\n console.log(chalk.green(`Config ${configStatus.path} (found)`))\n const config = configStatus.config\n console.log(` framework ${config.framework}`)\n console.log(` typescript ${config.typescript}`)\n console.log(` globalCss ${config.globalCss}`)\n console.log(` componentsDir ${config.componentsDir}`)\n console.log(` libDir ${config.libDir}`)\n } else {\n console.log(chalk.yellow(\"Config not found\"))\n }\n console.log(\"\")\n\n console.log(`Registry ${SCHEMA_CONFIG.defaultRegistry}`)\n console.log(`CDN ${cdn.url} (${cdn.ok ? \"ok\" : \"failed\"})`)\n console.log(`Cache ${cache.path} (${cache.items} items, ${cache.mb} MB)`)\n\n if (options.cdn) {\n console.log(\"\")\n console.log(\"CDN Resolution\")\n console.log(` workingCDN: ${cdnState.workingCDN || \"not resolved yet in cache\"}`\n )\n console.log(` registryUrl override: ${configOptions.registryUrl || \"not set\"}`)\n console.log(` registryVersion: ${configOptions.registryVersion || \"not set\"}`)\n console.log(` strictCdn: ${configOptions.strictCdn ? \"enabled\" : \"disabled\"}`)\n console.log(\" resolved order:\")\n cdnState.urls.forEach((item, index) => {\n console.log(` ${index + 1}. ${item}`)\n })\n }\n}\n\nasync function readConfigStatus():\n Promise<{ found: boolean; path: string | null; config: any }>{\n const candidatePaths = [\n path.join(process.cwd(), \"ui8kit.config.json\"),\n path.join(process.cwd(), \"src\", \"ui8kit.config.json\"),\n path.join(process.cwd(), SCHEMA_CONFIG.defaultRegistryType, \"ui8kit.config.json\"),\n ]\n\n for (const configPath of candidatePaths) {\n if (await fs.pathExists(configPath)) {\n try {\n const config = await fs.readJson(configPath)\n return {\n found: true,\n path: `./${path.relative(process.cwd(), configPath).replace(/\\\\/g, \"/\")}`,\n config: {\n framework: config.framework ?? \"unknown\",\n typescript: config.typescript ?? false,\n globalCss: config.globalCss ?? \"src/index.css\",\n componentsDir: config.componentsDir ?? SCHEMA_CONFIG.defaultDirectories.components,\n libDir: config.libDir ?? SCHEMA_CONFIG.defaultDirectories.lib,\n registryUrl: config.registryUrl,\n registryVersion: config.registryVersion,\n strictCdn: config.strictCdn\n }\n }\n } catch {\n continue\n }\n }\n }\n\n return {\n found: false,\n path: null,\n config: null\n }\n}\n\nasync function readCacheStatus(): Promise<{ path: string; items: number; mb: string }> {\n const cachePath = getCacheDir()\n let items = 0\n let bytes = 0\n if (await fs.pathExists(cachePath)) {\n const result = await countCacheFiles(cachePath)\n items = result.count\n bytes = result.bytes\n }\n return {\n path: cachePath.replace(/\\\\/g, \"/\"),\n items,\n mb: `${(bytes / (1024 * 1024)).toFixed(1)}`\n }\n}\n\nasync function countCacheFiles(dirPath: string): Promise<{ count: number; bytes: number }> {\n let count = 0\n let size = 0\n const entries = await fs.readdir(dirPath, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name)\n if (entry.isDirectory()) {\n const nested = await countCacheFiles(fullPath)\n count += nested.count\n size += nested.bytes\n continue\n }\n\n count += 1\n const stat = await fs.stat(fullPath)\n size += stat.size\n }\n return { count, bytes: size }\n}\n\nasync function checkPrimaryCdn(urls: string[] = SCHEMA_CONFIG.cdnBaseUrls): Promise<{ url: string; ok: boolean }> {\n const url = urls[0]\n if (!url) {\n return { url: \"not configured\", ok: false }\n }\n try {\n const response = await fetch(`${url}/index.json`, { method: \"HEAD\" })\n if (response.status >= 200 && response.status < 400) {\n return { url, ok: true }\n }\n } catch {\n // Intentionally ignore.\n }\n return { url, ok: false }\n}\n","import { existsSync, readFileSync } from \"node:fs\"\nimport { dirname, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\nfunction findPackageJsonPath(): string | null {\n const roots = [process.argv[1], __dirname]\n\n for (const rawRoot of roots) {\n if (!rawRoot) {\n continue\n }\n\n let current = rawRoot.endsWith(\".js\") ? dirname(rawRoot) : rawRoot\n for (let i = 0; i < 8; i += 1) {\n const candidate = resolve(current, \"package.json\")\n if (existsSync(candidate)) {\n return candidate\n }\n\n const parent = dirname(current)\n if (parent === current) {\n break\n }\n current = parent\n }\n }\n\n return null\n}\n\nexport function getCliVersion(): string {\n const packageJsonPath = findPackageJsonPath()\n if (!packageJsonPath) {\n return \"0.0.0\"\n }\n\n try {\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as { version?: string }\n return pkg.version ?? \"0.0.0\"\n } catch {\n return \"0.0.0\"\n }\n}\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport prompts from \"prompts\"\nimport { logger } from \"../utils/logger.js\"\nimport { handleError } from \"../utils/errors.js\"\n\nconst DEFAULT_BUILD_OUTPUT_DIR = path.join(\"packages\", \"registry\", \"r\")\nconst REGISTRY_ROOT = path.join(\"packages\", \"registry\")\n\ninterface RegistryCleanOptions {\n all?: boolean\n dryRun?: boolean\n force?: boolean\n}\n\nfunction normalizeWorkingPath(value: string): string {\n return path.resolve(value)\n}\n\nexport function getDefaultRegistryOutputDir(cwd = process.cwd()): string {\n return normalizeWorkingPath(path.resolve(cwd, DEFAULT_BUILD_OUTPUT_DIR))\n}\n\nexport function resolveRegistryBaseDir(cwd: string): string {\n return normalizeWorkingPath(path.resolve(cwd, REGISTRY_ROOT))\n}\n\nexport function getRegistryCleanTargets(cwd: string, includeManifest = false): string[] {\n const normalizedCwd = normalizeWorkingPath(cwd)\n const registryDir = resolveRegistryBaseDir(normalizedCwd)\n const outputDir = getDefaultRegistryOutputDir(normalizedCwd)\n const schemaDir = path.join(registryDir, \"schema\")\n const schemaFile = path.join(registryDir, \"schema.json\")\n const mapFile = path.join(registryDir, \"ui8kit.map.json\")\n\n const targets = [outputDir, schemaDir, schemaFile, mapFile]\n if (includeManifest) {\n targets.push(path.join(normalizedCwd, \"src\", \"registry.json\"))\n }\n\n return targets\n}\n\nexport function isSafePath(candidate: string, cwd: string): boolean {\n const resolvedCandidate = normalizeWorkingPath(candidate)\n const normalizedCwd = normalizeWorkingPath(cwd)\n return resolvedCandidate === normalizedCwd || resolvedCandidate.startsWith(`${normalizedCwd}${path.sep}`)\n}\n\nasync function confirmDeletion(paths: string[]): Promise<boolean> {\n const { ok } = await prompts({\n type: \"confirm\",\n name: \"ok\",\n message: `Delete ${paths.length} path(s)?`,\n initial: false\n })\n return Boolean(ok)\n}\n\nasync function removePath(target: string) {\n if (await fs.pathExists(target)) {\n await fs.remove(target)\n logger.info(`removed: ${target}`)\n }\n}\n\nexport async function registryCleanCommand(options: RegistryCleanOptions = {}) {\n const cwd = normalizeWorkingPath(process.cwd())\n const targets = getRegistryCleanTargets(cwd, Boolean(options.all))\n const existing = []\n for (const target of targets) {\n if (isSafePath(target, cwd) && await fs.pathExists(target)) {\n existing.push(target)\n }\n }\n\n if (existing.length === 0) {\n logger.info(\"No generated registry artifacts found.\")\n return\n }\n\n const uniqueTargets = [...new Set(existing)]\n if (options.dryRun) {\n logger.info(\"Dry run enabled. The following paths will be removed:\")\n uniqueTargets.forEach((target) => logger.info(` ${target}`))\n logger.info(`Total: ${uniqueTargets.length}`)\n return\n }\n\n if (!options.force && !await confirmDeletion(uniqueTargets)) {\n logger.warn(\"Registry cleanup was cancelled.\")\n return\n }\n\n try {\n for (const target of uniqueTargets) {\n await removePath(target)\n }\n logger.success(`Removed ${uniqueTargets.length} registry artifact path(s).`)\n } catch (error) {\n handleError(error)\n }\n}\n","import fs from \"fs-extra\"\nimport path from \"path\"\nimport prompts from \"prompts\"\nimport { logger } from \"../utils/logger.js\"\nimport { handleError } from \"../utils/errors.js\"\nimport { clearCache } from \"../utils/cache.js\"\nimport { SCHEMA_CONFIG } from \"../utils/schema-config.js\"\nimport { isSafePath, getRegistryCleanTargets } from \"./registry.js\"\n\ninterface ResetOptions {\n dryRun?: boolean\n force?: boolean\n yes?: boolean\n withCache?: boolean\n}\n\ninterface ProjectConfig {\n componentsDir?: string\n libDir?: string\n}\n\nexport async function resetCommand(options: ResetOptions = {}) {\n const cwd = path.resolve(process.cwd())\n if (options.withCache) {\n logger.info(\"Cache cleanup requested.\")\n await clearCache()\n }\n\n const targets = await gatherResetTargets(cwd)\n\n if (targets.length === 0) {\n logger.info(\"No UI8Kit state files found to reset.\")\n return\n }\n\n if (options.dryRun) {\n logger.info(\"Reset dry-run. No files were removed.\")\n targets.forEach((target) => logger.info(` ${target}`))\n logger.info(`Total: ${targets.length}`)\n return\n }\n\n if (!options.force && !options.yes) {\n const { ok } = await prompts({\n type: \"confirm\",\n name: \"ok\",\n message: \"This will remove local UI8Kit generated files and cannot be undone. Continue?\",\n initial: false\n })\n if (!ok) {\n logger.warn(\"Reset was cancelled.\")\n return\n }\n }\n\n try {\n for (const target of targets) {\n await fs.remove(target)\n logger.info(`removed: ${target}`)\n }\n logger.success(`Reset complete. Removed ${targets.length} path(s).`)\n } catch (error) {\n handleError(error)\n }\n}\n\nasync function gatherResetTargets(cwd: string): Promise<string[]> {\n const normalizedCwd = path.resolve(cwd)\n const registryTargets = getRegistryCleanTargets(normalizedCwd, true)\n\n const configPath = path.join(normalizedCwd, \"ui8kit.config.json\")\n const configCandidates = [\n configPath,\n path.join(normalizedCwd, \"src\", \"ui8kit.config.json\")\n ]\n\n const discoveredTargets: string[] = []\n\n for (const target of configCandidates) {\n if (await fs.pathExists(target)) {\n discoveredTargets.push(target)\n }\n }\n\n const config = await readConfig(discoveredTargets.at(0))\n const componentsDir = path.resolve(normalizedCwd, config?.componentsDir || SCHEMA_CONFIG.defaultDirectories.components)\n const libDir = path.resolve(normalizedCwd, config?.libDir || SCHEMA_CONFIG.defaultDirectories.lib)\n const variantsDir = path.join(normalizedCwd, SCHEMA_CONFIG.defaultDirectories.variants)\n const layoutsDir = path.join(normalizedCwd, SCHEMA_CONFIG.defaultDirectories.layouts)\n const blocksDir = path.join(normalizedCwd, SCHEMA_CONFIG.defaultDirectories.blocks)\n\n const projectTargets = [componentsDir, libDir, variantsDir, layoutsDir, blocksDir]\n\n const allTargets = [\n ...registryTargets,\n ...discoveredTargets,\n ...projectTargets\n ]\n\n const uniqueTargets = [...new Set(allTargets)]\n return uniqueTargets.filter((target) => isSafePath(target, normalizedCwd) && fs.pathExistsSync(target))\n}\n\nasync function readConfig(configPath?: string): Promise<ProjectConfig | null> {\n if (!configPath || !(await fs.pathExists(configPath))) {\n return null\n }\n\n try {\n const config = await fs.readJson(configPath)\n return {\n componentsDir: config.componentsDir,\n libDir: config.libDir\n }\n } catch {\n return null\n }\n}\n\n"],"mappings":"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","names":["chalk","ora","path","fs","fetch","prompts","path","resolve","fs","path","fs","path","fs","path","chalk","prompts","chalk","ora","path","chalk","ora","path","fs","fs","path","chalk","ora","chalk","fs","path","path","fs","fetch","chalk","chalk","path","fetch","chalk","ora","path","fs","path","fs","prompts","chalk","getComponent","path","path","ora","fs","path","prompts","fetch","fs","path","chalk","ora","ts","z","z","z","fs","path","ts","path","chalk","fs","ora","fs","path","chalk","ora","ts","toPosix","path","chalk","ora","normalizeDir","fs","chalk","resolveRegistryType","chalk","fs","path","glob","chalk","resolveRegistryType","chalk","fs","path","glob","fs","os","path","fetch","chalk","os","chalk","path","fs","fetch","fs","path","prompts","path","prompts","fs","fs","path","prompts","path","prompts","fs","resolve","chalk"]}