homeontour-ui 0.1.0 → 0.1.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 +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -12,7 +12,7 @@ import { execa } from "execa";
|
|
|
12
12
|
import fs from "fs-extra";
|
|
13
13
|
import path from "path";
|
|
14
14
|
import fetch from "node-fetch";
|
|
15
|
-
var REGISTRY_URL =
|
|
15
|
+
var REGISTRY_URL = "https://ui.homeontour.com/api/registry";
|
|
16
16
|
var COMPONENTS_DIR = "components/homeontour-ui";
|
|
17
17
|
var addCommand = new Command().name("add").description("Add a component to your project").argument("[components...]", "The components to add").option("-y, --yes", "Skip confirmation prompt").option("-o, --overwrite", "Overwrite existing files").action(async (components, options) => {
|
|
18
18
|
try {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/commands/add.ts","../src/commands/init.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander'\nimport { addCommand } from './commands/add.js'\nimport { initCommand } from './commands/init.js'\n\nconst program = new Command()\n\nprogram\n .name('homeontour-ui')\n .description('Add HomeOnTour UI components to your project')\n .version('0.1.0')\n\nprogram.addCommand(addCommand)\nprogram.addCommand(initCommand)\n\nprogram.parse()\n","import { Command } from 'commander'\nimport prompts from 'prompts'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { execa } from 'execa'\nimport fs from 'fs-extra'\nimport path from 'path'\nimport fetch from 'node-fetch'\n\nconst REGISTRY_URL = process.env.REGISTRY_URL || 'http://localhost:3000/api/registry'\nconst COMPONENTS_DIR = 'components/homeontour-ui'\n\nexport const addCommand = new Command()\n .name('add')\n .description('Add a component to your project')\n .argument('[components...]', 'The components to add')\n .option('-y, --yes', 'Skip confirmation prompt')\n .option('-o, --overwrite', 'Overwrite existing files')\n .action(async (components: string[], options) => {\n try {\n const cwd = process.cwd()\n \n // Check if we're in a valid project\n const packageJsonPath = path.join(cwd, 'package.json')\n if (!fs.existsSync(packageJsonPath)) {\n console.error(chalk.red('Error: No package.json found. Are you in a project directory?'))\n process.exit(1)\n }\n\n // If no components specified, show interactive selection\n if (!components || components.length === 0) {\n const spinner = ora('Fetching components...').start()\n \n try {\n const response = await fetch(REGISTRY_URL)\n if (!response.ok) {\n throw new Error('Failed to fetch components')\n }\n \n const allComponents = await response.json() as any[]\n spinner.succeed('Fetched available components')\n \n const { selectedComponents } = await prompts({\n type: 'multiselect',\n name: 'selectedComponents',\n message: 'Which components would you like to add?',\n choices: allComponents.map((c: any) => ({\n title: `${c.name} - ${c.description}`,\n value: c.name,\n })),\n min: 1,\n })\n \n if (!selectedComponents || selectedComponents.length === 0) {\n console.log(chalk.yellow('No components selected. Exiting.'))\n process.exit(0)\n }\n \n components = selectedComponents\n } catch (error) {\n spinner.fail('Failed to fetch components')\n console.error(chalk.red('Error: Could not connect to registry. Is the server running?'))\n process.exit(1)\n }\n }\n\n // Add each component\n for (const componentName of components) {\n await addComponent(componentName, { cwd, ...options })\n }\n\n console.log()\n console.log(chalk.green('✓ Done! Components added successfully.'))\n console.log()\n console.log('Import and use them in your project:')\n console.log(chalk.cyan(`import { LogoSvg } from '@/components/homeontour-ui/logo-svg'`))\n } catch (error) {\n console.error(chalk.red('Error:'), error instanceof Error ? error.message : error)\n process.exit(1)\n }\n })\n\nasync function addComponent(\n componentName: string,\n options: { cwd: string; yes?: boolean; overwrite?: boolean }\n) {\n const spinner = ora(`Adding ${componentName}...`).start()\n\n try {\n // Fetch component from registry\n const response = await fetch(`${REGISTRY_URL}/${componentName}`)\n \n if (!response.ok) {\n throw new Error(`Component \"${componentName}\" not found in registry`)\n }\n \n const component = await response.json() as any\n\n // Check if component already exists\n const componentDir = path.join(options.cwd, COMPONENTS_DIR)\n const componentPath = path.join(componentDir, component.files[0].name)\n \n if (fs.existsSync(componentPath) && !options.overwrite) {\n spinner.warn(`${componentName} already exists`)\n \n if (!options.yes) {\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `Overwrite existing ${componentName}?`,\n initial: false,\n })\n \n if (!overwrite) {\n return\n }\n } else {\n return\n }\n }\n\n // Install npm dependencies\n if (component.dependencies && component.dependencies.length > 0) {\n spinner.text = `Installing dependencies for ${componentName}...`\n const deps = component.dependencies.map((d: any) => `${d.name}@${d.version}`).join(' ')\n \n try {\n await execa('pnpm', ['add', ...deps.split(' ')], {\n cwd: options.cwd,\n })\n } catch (error) {\n // Try npm as fallback\n try {\n await execa('npm', ['install', ...deps.split(' ')], {\n cwd: options.cwd,\n })\n } catch (npmError) {\n spinner.warn(`Could not install dependencies automatically`)\n console.log(chalk.yellow(`\\nPlease install manually: pnpm add ${deps}`))\n }\n }\n }\n\n // Install shadcn/ui dependencies\n if (component.registryDependencies && component.registryDependencies.length > 0) {\n spinner.text = `Installing shadcn/ui components...`\n const shadcnDeps = component.registryDependencies.join(' ')\n \n try {\n await execa('pnpm', ['dlx', 'shadcn@latest', 'add', ...shadcnDeps.split(' '), '-y'], {\n cwd: options.cwd,\n })\n } catch (error) {\n spinner.warn(`Could not install shadcn/ui components automatically`)\n console.log(chalk.yellow(`\\nPlease install manually: pnpm dlx shadcn@latest add ${shadcnDeps}`))\n }\n }\n\n // Create component files\n spinner.text = `Creating ${componentName} files...`\n await fs.ensureDir(componentDir)\n \n for (const file of component.files) {\n const filePath = path.join(componentDir, file.name)\n await fs.writeFile(filePath, file.content, 'utf-8')\n }\n\n spinner.succeed(`Added ${componentName}`)\n } catch (error) {\n spinner.fail(`Failed to add ${componentName}`)\n throw error\n }\n}\n","import { Command } from 'commander'\nimport prompts from 'prompts'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { execa } from 'execa'\nimport fs from 'fs-extra'\nimport path from 'path'\n\nexport const initCommand = new Command()\n .name('init')\n .description('Initialize your project for HomeOnTour UI')\n .option('-y, --yes', 'Skip confirmation prompt')\n .action(async (options) => {\n try {\n const cwd = process.cwd()\n \n console.log()\n console.log(chalk.bold('Initializing HomeOnTour UI...'))\n console.log()\n\n // Check if package.json exists\n const packageJsonPath = path.join(cwd, 'package.json')\n if (!fs.existsSync(packageJsonPath)) {\n console.error(chalk.red('Error: No package.json found. Please run this in a project directory.'))\n process.exit(1)\n }\n\n // Check for required dependencies\n const requiredDeps = [\n 'class-variance-authority',\n 'clsx',\n 'tailwind-merge',\n 'lucide-react',\n ]\n\n const spinner = ora('Checking dependencies...').start()\n \n const packageJson = await fs.readJson(packageJsonPath)\n const installedDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n }\n\n const missingDeps = requiredDeps.filter((dep) => !installedDeps[dep])\n\n if (missingDeps.length > 0) {\n spinner.info('Installing required dependencies...')\n \n try {\n await execa('pnpm', ['add', ...missingDeps], { cwd })\n spinner.succeed('Dependencies installed')\n } catch (error) {\n spinner.fail('Failed to install dependencies')\n console.log(chalk.yellow(`\\nPlease install manually:`))\n console.log(chalk.cyan(`pnpm add ${missingDeps.join(' ')}`))\n }\n } else {\n spinner.succeed('All dependencies are installed')\n }\n\n // Check for utils file\n const utilsPath = path.join(cwd, 'lib', 'utils.ts')\n const srcUtilsPath = path.join(cwd, 'src', 'lib', 'utils.ts')\n const utilsExists = fs.existsSync(utilsPath) || fs.existsSync(srcUtilsPath)\n\n if (!utilsExists) {\n const { createUtils } = await prompts({\n type: 'confirm',\n name: 'createUtils',\n message: 'Create lib/utils.ts with cn helper?',\n initial: true,\n })\n\n if (createUtils) {\n const targetUtilsPath = fs.existsSync(path.join(cwd, 'src')) ? srcUtilsPath : utilsPath\n \n await fs.ensureDir(path.dirname(targetUtilsPath))\n await fs.writeFile(\n targetUtilsPath,\n `import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n`,\n 'utf-8'\n )\n console.log(chalk.green('✓ Created lib/utils.ts'))\n }\n }\n\n // Create components directory\n const componentsDir = path.join(cwd, 'components', 'homeontour-ui')\n await fs.ensureDir(componentsDir)\n console.log(chalk.green('✓ Created components/homeontour-ui directory'))\n\n console.log()\n console.log(chalk.green('✓ Initialization complete!'))\n console.log()\n console.log('You can now add components:')\n console.log(chalk.cyan(' pnpm dlx homeontour-ui@latest add logo-svg'))\n console.log()\n } catch (error) {\n console.error(chalk.red('Error:'), error instanceof Error ? error.message : error)\n process.exit(1)\n }\n })\n"],"mappings":"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","names":["Command","Command","prompts","chalk","ora","execa","fs","path","Command"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/commands/add.ts","../src/commands/init.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander'\nimport { addCommand } from './commands/add.js'\nimport { initCommand } from './commands/init.js'\n\nconst program = new Command()\n\nprogram\n .name('homeontour-ui')\n .description('Add HomeOnTour UI components to your project')\n .version('0.1.0')\n\nprogram.addCommand(addCommand)\nprogram.addCommand(initCommand)\n\nprogram.parse()\n","import { Command } from 'commander'\nimport prompts from 'prompts'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { execa } from 'execa'\nimport fs from 'fs-extra'\nimport path from 'path'\nimport fetch from 'node-fetch'\n\nconst REGISTRY_URL = 'https://ui.homeontour.com/api/registry'\nconst COMPONENTS_DIR = 'components/homeontour-ui'\n\nexport const addCommand = new Command()\n .name('add')\n .description('Add a component to your project')\n .argument('[components...]', 'The components to add')\n .option('-y, --yes', 'Skip confirmation prompt')\n .option('-o, --overwrite', 'Overwrite existing files')\n .action(async (components: string[], options) => {\n try {\n const cwd = process.cwd()\n \n // Check if we're in a valid project\n const packageJsonPath = path.join(cwd, 'package.json')\n if (!fs.existsSync(packageJsonPath)) {\n console.error(chalk.red('Error: No package.json found. Are you in a project directory?'))\n process.exit(1)\n }\n\n // If no components specified, show interactive selection\n if (!components || components.length === 0) {\n const spinner = ora('Fetching components...').start()\n \n try {\n const response = await fetch(REGISTRY_URL)\n if (!response.ok) {\n throw new Error('Failed to fetch components')\n }\n \n const allComponents = await response.json() as any[]\n spinner.succeed('Fetched available components')\n \n const { selectedComponents } = await prompts({\n type: 'multiselect',\n name: 'selectedComponents',\n message: 'Which components would you like to add?',\n choices: allComponents.map((c: any) => ({\n title: `${c.name} - ${c.description}`,\n value: c.name,\n })),\n min: 1,\n })\n \n if (!selectedComponents || selectedComponents.length === 0) {\n console.log(chalk.yellow('No components selected. Exiting.'))\n process.exit(0)\n }\n \n components = selectedComponents\n } catch (error) {\n spinner.fail('Failed to fetch components')\n console.error(chalk.red('Error: Could not connect to registry. Is the server running?'))\n process.exit(1)\n }\n }\n\n // Add each component\n for (const componentName of components) {\n await addComponent(componentName, { cwd, ...options })\n }\n\n console.log()\n console.log(chalk.green('✓ Done! Components added successfully.'))\n console.log()\n console.log('Import and use them in your project:')\n console.log(chalk.cyan(`import { LogoSvg } from '@/components/homeontour-ui/logo-svg'`))\n } catch (error) {\n console.error(chalk.red('Error:'), error instanceof Error ? error.message : error)\n process.exit(1)\n }\n })\n\nasync function addComponent(\n componentName: string,\n options: { cwd: string; yes?: boolean; overwrite?: boolean }\n) {\n const spinner = ora(`Adding ${componentName}...`).start()\n\n try {\n // Fetch component from registry\n const response = await fetch(`${REGISTRY_URL}/${componentName}`)\n \n if (!response.ok) {\n throw new Error(`Component \"${componentName}\" not found in registry`)\n }\n \n const component = await response.json() as any\n\n // Check if component already exists\n const componentDir = path.join(options.cwd, COMPONENTS_DIR)\n const componentPath = path.join(componentDir, component.files[0].name)\n \n if (fs.existsSync(componentPath) && !options.overwrite) {\n spinner.warn(`${componentName} already exists`)\n \n if (!options.yes) {\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `Overwrite existing ${componentName}?`,\n initial: false,\n })\n \n if (!overwrite) {\n return\n }\n } else {\n return\n }\n }\n\n // Install npm dependencies\n if (component.dependencies && component.dependencies.length > 0) {\n spinner.text = `Installing dependencies for ${componentName}...`\n const deps = component.dependencies.map((d: any) => `${d.name}@${d.version}`).join(' ')\n \n try {\n await execa('pnpm', ['add', ...deps.split(' ')], {\n cwd: options.cwd,\n })\n } catch (error) {\n // Try npm as fallback\n try {\n await execa('npm', ['install', ...deps.split(' ')], {\n cwd: options.cwd,\n })\n } catch (npmError) {\n spinner.warn(`Could not install dependencies automatically`)\n console.log(chalk.yellow(`\\nPlease install manually: pnpm add ${deps}`))\n }\n }\n }\n\n // Install shadcn/ui dependencies\n if (component.registryDependencies && component.registryDependencies.length > 0) {\n spinner.text = `Installing shadcn/ui components...`\n const shadcnDeps = component.registryDependencies.join(' ')\n \n try {\n await execa('pnpm', ['dlx', 'shadcn@latest', 'add', ...shadcnDeps.split(' '), '-y'], {\n cwd: options.cwd,\n })\n } catch (error) {\n spinner.warn(`Could not install shadcn/ui components automatically`)\n console.log(chalk.yellow(`\\nPlease install manually: pnpm dlx shadcn@latest add ${shadcnDeps}`))\n }\n }\n\n // Create component files\n spinner.text = `Creating ${componentName} files...`\n await fs.ensureDir(componentDir)\n \n for (const file of component.files) {\n const filePath = path.join(componentDir, file.name)\n await fs.writeFile(filePath, file.content, 'utf-8')\n }\n\n spinner.succeed(`Added ${componentName}`)\n } catch (error) {\n spinner.fail(`Failed to add ${componentName}`)\n throw error\n }\n}\n","import { Command } from 'commander'\nimport prompts from 'prompts'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { execa } from 'execa'\nimport fs from 'fs-extra'\nimport path from 'path'\n\nexport const initCommand = new Command()\n .name('init')\n .description('Initialize your project for HomeOnTour UI')\n .option('-y, --yes', 'Skip confirmation prompt')\n .action(async (options) => {\n try {\n const cwd = process.cwd()\n \n console.log()\n console.log(chalk.bold('Initializing HomeOnTour UI...'))\n console.log()\n\n // Check if package.json exists\n const packageJsonPath = path.join(cwd, 'package.json')\n if (!fs.existsSync(packageJsonPath)) {\n console.error(chalk.red('Error: No package.json found. Please run this in a project directory.'))\n process.exit(1)\n }\n\n // Check for required dependencies\n const requiredDeps = [\n 'class-variance-authority',\n 'clsx',\n 'tailwind-merge',\n 'lucide-react',\n ]\n\n const spinner = ora('Checking dependencies...').start()\n \n const packageJson = await fs.readJson(packageJsonPath)\n const installedDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n }\n\n const missingDeps = requiredDeps.filter((dep) => !installedDeps[dep])\n\n if (missingDeps.length > 0) {\n spinner.info('Installing required dependencies...')\n \n try {\n await execa('pnpm', ['add', ...missingDeps], { cwd })\n spinner.succeed('Dependencies installed')\n } catch (error) {\n spinner.fail('Failed to install dependencies')\n console.log(chalk.yellow(`\\nPlease install manually:`))\n console.log(chalk.cyan(`pnpm add ${missingDeps.join(' ')}`))\n }\n } else {\n spinner.succeed('All dependencies are installed')\n }\n\n // Check for utils file\n const utilsPath = path.join(cwd, 'lib', 'utils.ts')\n const srcUtilsPath = path.join(cwd, 'src', 'lib', 'utils.ts')\n const utilsExists = fs.existsSync(utilsPath) || fs.existsSync(srcUtilsPath)\n\n if (!utilsExists) {\n const { createUtils } = await prompts({\n type: 'confirm',\n name: 'createUtils',\n message: 'Create lib/utils.ts with cn helper?',\n initial: true,\n })\n\n if (createUtils) {\n const targetUtilsPath = fs.existsSync(path.join(cwd, 'src')) ? srcUtilsPath : utilsPath\n \n await fs.ensureDir(path.dirname(targetUtilsPath))\n await fs.writeFile(\n targetUtilsPath,\n `import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n`,\n 'utf-8'\n )\n console.log(chalk.green('✓ Created lib/utils.ts'))\n }\n }\n\n // Create components directory\n const componentsDir = path.join(cwd, 'components', 'homeontour-ui')\n await fs.ensureDir(componentsDir)\n console.log(chalk.green('✓ Created components/homeontour-ui directory'))\n\n console.log()\n console.log(chalk.green('✓ Initialization complete!'))\n console.log()\n console.log('You can now add components:')\n console.log(chalk.cyan(' pnpm dlx homeontour-ui@latest add logo-svg'))\n console.log()\n } catch (error) {\n console.error(chalk.red('Error:'), error instanceof Error ? error.message : error)\n process.exit(1)\n }\n })\n"],"mappings":"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","names":["Command","Command","prompts","chalk","ora","execa","fs","path","Command"]}
|