Add OMS WMS ERP platform
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
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
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
#!/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!`)
|
||||
@@ -0,0 +1,164 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
const storeName = process.argv[2]
|
||||
const storeType = process.argv[3] || 'default'
|
||||
|
||||
if (!storeName) {
|
||||
console.error('Usage: node scripts/generate-store.mjs StoreName [type]')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const storeDir = `src/stores/modules`
|
||||
const fileName = `${storeName.charAt(0).toLowerCase()}${storeName.slice(1)}.ts`
|
||||
|
||||
if (!fs.existsSync(storeDir)) {
|
||||
fs.mkdirSync(storeDir, { recursive: true })
|
||||
}
|
||||
|
||||
// Store templates by type
|
||||
const templates = {
|
||||
default: `/**
|
||||
* Pinia Store: ${storeName}
|
||||
* State management for ${storeName.toLowerCase()}-related data
|
||||
*/
|
||||
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, computed } from 'vue'
|
||||
|
||||
export const use${storeName}Store = defineStore('${fileName.replace('.ts', '')}', () => {
|
||||
// State
|
||||
const items = ref<any[]>([])
|
||||
const selectedItem = ref<any | null>(null)
|
||||
const loading = ref(false)
|
||||
const error = ref<string | null>(null)
|
||||
const filters = ref<Record<string, any>>({})
|
||||
|
||||
// Computed
|
||||
const itemCount = computed(() => items.value.length)
|
||||
const filteredItems = computed(() => items.value)
|
||||
|
||||
// Actions
|
||||
const fetchItems = async (limit = 100, offset = 0) => {
|
||||
loading.value = true
|
||||
error.value = null
|
||||
try {
|
||||
// TODO: Call API endpoint
|
||||
// const response = await ${fileName.replace('.ts', '')}Api.list${storeName}({ limit, offset })
|
||||
// items.value = response.data
|
||||
} catch (err) {
|
||||
error.value = (err as Error).message
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const fetchItemById = async (itemId: string) => {
|
||||
loading.value = true
|
||||
error.value = null
|
||||
try {
|
||||
// TODO: Call API endpoint
|
||||
// const response = await ${fileName.replace('.ts', '')}Api.get${storeName}(itemId)
|
||||
// selectedItem.value = response.data
|
||||
} catch (err) {
|
||||
error.value = (err as Error).message
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const createItem = async (payload: any) => {
|
||||
loading.value = true
|
||||
error.value = null
|
||||
try {
|
||||
// TODO: Call API endpoint
|
||||
// const response = await ${fileName.replace('.ts', '')}Api.create${storeName}(payload)
|
||||
// items.value.push(response.data)
|
||||
// selectedItem.value = response.data
|
||||
// return response.data
|
||||
} catch (err) {
|
||||
error.value = (err as Error).message
|
||||
throw err
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const updateItem = async (itemId: string, payload: any) => {
|
||||
loading.value = true
|
||||
error.value = null
|
||||
try {
|
||||
// TODO: Call API endpoint
|
||||
// const response = await ${fileName.replace('.ts', '')}Api.update${storeName}(itemId, payload)
|
||||
// const index = items.value.findIndex((i) => i.id === itemId)
|
||||
// if (index !== -1) items.value[index] = response.data
|
||||
// if (selectedItem.value?.id === itemId) selectedItem.value = response.data
|
||||
// return response.data
|
||||
} catch (err) {
|
||||
error.value = (err as Error).message
|
||||
throw err
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const deleteItem = async (itemId: string) => {
|
||||
loading.value = true
|
||||
error.value = null
|
||||
try {
|
||||
// TODO: Call API endpoint
|
||||
// await ${fileName.replace('.ts', '')}Api.delete${storeName}(itemId)
|
||||
// items.value = items.value.filter((i) => i.id !== itemId)
|
||||
// if (selectedItem.value?.id === itemId) selectedItem.value = null
|
||||
} catch (err) {
|
||||
error.value = (err as Error).message
|
||||
throw err
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const setFilter = (key: string, value: any) => {
|
||||
filters.value[key] = value
|
||||
}
|
||||
|
||||
const clearFilters = () => {
|
||||
filters.value = {}
|
||||
}
|
||||
|
||||
return {
|
||||
// State
|
||||
items,
|
||||
selectedItem,
|
||||
loading,
|
||||
error,
|
||||
filters,
|
||||
|
||||
// Computed
|
||||
itemCount,
|
||||
filteredItems,
|
||||
|
||||
// Actions
|
||||
fetchItems,
|
||||
fetchItemById,
|
||||
createItem,
|
||||
updateItem,
|
||||
deleteItem,
|
||||
setFilter,
|
||||
clearFilters
|
||||
}
|
||||
})
|
||||
`
|
||||
}
|
||||
|
||||
const template = templates[storeType] || templates.default
|
||||
|
||||
const storeFile = path.join(storeDir, fileName)
|
||||
if (!fs.existsSync(storeFile)) {
|
||||
fs.writeFileSync(storeFile, template)
|
||||
console.log(`✓ Created: ${storeFile}`)
|
||||
} else {
|
||||
console.log(`⚠ Already exists: ${storeFile}`)
|
||||
}
|
||||
Reference in New Issue
Block a user