b34b0dd7d6
Validators (Pushes and Pull Requests) / UI & Storage Validation (pull_request) Failing after 12s
Validators (Pushes and Pull Requests) / Database & Schema Validation (pull_request) Successful in 13s
Validators (Pushes and Pull Requests) / Core Validators & Database Setup (pull_request) Failing after 28s
Validators (Pushes and Pull Requests) / WBS & Audit Validations (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / .NET Contracts (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / Calibration & Performance (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / Operational Report & Decision Packet (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / CI Workflow Lint (pull_request) Failing after 10s
Validators (Pushes and Pull Requests) / Security & Secrets (pull_request) Successful in 12s
Validators (Pushes and Pull Requests) / Notify PR Results (pull_request) Successful in 2s
Frontend CI Pipeline / ci-frontend-8-steps (pull_request) Failing after 2m50s
96 lines
2.2 KiB
JavaScript
96 lines
2.2 KiB
JavaScript
#!/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 = `<template>
|
|
<div class="component-root">
|
|
<slot />
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
interface Props {
|
|
// Add props here
|
|
}
|
|
|
|
withDefaults(defineProps<Props>(), {})
|
|
|
|
defineEmits<{
|
|
// Add emits here
|
|
}>()
|
|
</script>
|
|
|
|
<style scoped>
|
|
.component-root {
|
|
/* Add styles here */
|
|
}
|
|
</style>
|
|
`
|
|
|
|
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<typeof ${componentName}>
|
|
|
|
export default meta
|
|
type Story = StoryObj<typeof meta>
|
|
|
|
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!`)
|