#!/usr/bin/env node import fs from 'fs' import path from 'path' const componentName = process.argv[2] const componentDir = `src/components/primitives/${componentName}` if (!componentName) { console.error('Usage: node scripts/generate-primitive.mjs ComponentName') process.exit(1) } // Create directory if (!fs.existsSync(componentDir)) { fs.mkdirSync(componentDir, { recursive: true }) console.log(`✓ Created directory: ${componentDir}`) } // Create Vue component const vueTemplate = ` ` const vueFile = path.join(componentDir, `${componentName}.vue`) if (!fs.existsSync(vueFile)) { fs.writeFileSync(vueFile, vueTemplate) console.log(`✓ Created: ${vueFile}`) } // Create Storybook stories const storiesTemplate = `import type { Meta, StoryObj } from '@storybook/vue3' import ${componentName} from './${componentName}.vue' const meta = { title: 'Primitives/${componentName}', component: ${componentName}, tags: ['autodocs'] } satisfies Meta export default meta type Story = StoryObj export const Default: Story = { args: {} } ` const storiesFile = path.join(componentDir, `${componentName}.stories.ts`) if (!fs.existsSync(storiesFile)) { fs.writeFileSync(storiesFile, storiesTemplate) console.log(`✓ Created: ${storiesFile}`) } // Create unit tests const specTemplate = `import { describe, it, expect } from 'vitest' import { mount } from '@vue/test-utils' import ${componentName} from './${componentName}.vue' describe('${componentName}', () => { it('renders', () => { const wrapper = mount(${componentName}) expect(wrapper.exists()).toBe(true) }) }) ` const specFile = path.join(componentDir, `${componentName}.spec.ts`) if (!fs.existsSync(specFile)) { fs.writeFileSync(specFile, specTemplate) console.log(`✓ Created: ${specFile}`) } console.log(`✓ Component "${componentName}" generated successfully!`)