135 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env node
 | 
						|
 | 
						|
/**
 | 
						|
 * Component Structure Setup Script
 | 
						|
 *
 | 
						|
 * This script creates the proper folder structure for each component in the migration list
 | 
						|
 * following the React component conventions.
 | 
						|
 */
 | 
						|
 | 
						|
const fs = require('node:fs')
 | 
						|
const path = require('node:path')
 | 
						|
 | 
						|
// Base directory for components
 | 
						|
const BASE_DIR = path.join(process.cwd(), 'apps/deploy-fe/src/components')
 | 
						|
 | 
						|
// Component mappings from migration list
 | 
						|
const componentMappings = [
 | 
						|
  // Core Components
 | 
						|
  { name: 'Dropdown', targetDir: 'core/dropdown' },
 | 
						|
  { name: 'FormatMilliSecond', targetDir: 'core/format-milli-second' },
 | 
						|
  { name: 'Logo', targetDir: 'core/logo' },
 | 
						|
  { name: 'SearchBar', targetDir: 'core/search-bar' },
 | 
						|
  { name: 'Stepper', targetDir: 'core/stepper' },
 | 
						|
  { name: 'StopWatch', targetDir: 'core/stop-watch' },
 | 
						|
  { name: 'VerticalStepper', targetDir: 'core/vertical-stepper' },
 | 
						|
 | 
						|
  // Layout Components - Navigation
 | 
						|
  {
 | 
						|
    name: 'GitHubSessionButton',
 | 
						|
    targetDir: 'layout/navigation/github-session-button'
 | 
						|
  },
 | 
						|
  { name: 'LaconicIcon', targetDir: 'layout/navigation/laconic-icon' },
 | 
						|
  {
 | 
						|
    name: 'NavigationActions',
 | 
						|
    targetDir: 'layout/navigation/navigation-actions'
 | 
						|
  },
 | 
						|
  { name: 'WalletSessionId', targetDir: 'layout/navigation/wallet-session-id' },
 | 
						|
 | 
						|
  // Layout Components - Screen Header
 | 
						|
  { name: 'ActionButton', targetDir: 'layout/screen-header/action-button' },
 | 
						|
  { name: 'Header', targetDir: 'layout/screen-header/header' },
 | 
						|
 | 
						|
  // Layout Components - Screen Wrapper
 | 
						|
  { name: 'TabWrapper', targetDir: 'layout/screen-wrapper/tab-wrapper' },
 | 
						|
 | 
						|
  // Layout Components - Search
 | 
						|
  { name: 'ProjectSearchBar', targetDir: 'layout/search/project-search-bar' }
 | 
						|
]
 | 
						|
 | 
						|
/**
 | 
						|
 * Create index.ts barrel file content
 | 
						|
 */
 | 
						|
function createIndexFileContent(componentName) {
 | 
						|
  return `export * from './${componentName}';\nexport * from './types';\n`
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Create types.ts file content
 | 
						|
 */
 | 
						|
function createTypesFileContent(componentName) {
 | 
						|
  return `export interface ${componentName}Props {\n  // Define component props here\n}\n`
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Create README.md file content
 | 
						|
 */
 | 
						|
function createReadmeContent(componentName) {
 | 
						|
  return `# ${componentName} Component\n\n## Overview\nThis component was migrated from the original Laconic repository.\n\n## Usage\n\`\`\`tsx\nimport { ${componentName} } from '@/components/${componentName.toLowerCase()}';\n\n// Example usage\n<${componentName} />\n\`\`\`\n`
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Create placeholder component file content
 | 
						|
 */
 | 
						|
function createComponentFileContent(componentName) {
 | 
						|
  return `import { FC } from 'react';\nimport { ${componentName}Props } from './types';\n\n/**\n * ${componentName} component\n */\nexport const ${componentName}: FC<${componentName}Props> = (props) => {\n  return (\n    <div>\n      {/* Component implementation will be migrated here */}\n    </div>\n  );\n};\n`
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Create the folder structure for a component
 | 
						|
 */
 | 
						|
function setupComponentStructure(mapping) {
 | 
						|
  const { name, targetDir } = mapping
 | 
						|
  const componentDir = path.join(BASE_DIR, targetDir)
 | 
						|
 | 
						|
  // Create component directory
 | 
						|
  if (!fs.existsSync(componentDir)) {
 | 
						|
    fs.mkdirSync(componentDir, { recursive: true })
 | 
						|
    console.log(`Created directory: ${componentDir}`)
 | 
						|
  }
 | 
						|
 | 
						|
  // Create index.ts barrel file
 | 
						|
  const indexPath = path.join(componentDir, 'index.ts')
 | 
						|
  if (!fs.existsSync(indexPath)) {
 | 
						|
    fs.writeFileSync(indexPath, createIndexFileContent(name))
 | 
						|
    console.log(`Created file: ${indexPath}`)
 | 
						|
  }
 | 
						|
 | 
						|
  // Create types.ts file
 | 
						|
  const typesPath = path.join(componentDir, 'types.ts')
 | 
						|
  if (!fs.existsSync(typesPath)) {
 | 
						|
    fs.writeFileSync(typesPath, createTypesFileContent(name))
 | 
						|
    console.log(`Created file: ${typesPath}`)
 | 
						|
  }
 | 
						|
 | 
						|
  // Create README.md file
 | 
						|
  const readmePath = path.join(componentDir, 'README.md')
 | 
						|
  if (!fs.existsSync(readmePath)) {
 | 
						|
    fs.writeFileSync(readmePath, createReadmeContent(name))
 | 
						|
    console.log(`Created file: ${readmePath}`)
 | 
						|
  }
 | 
						|
 | 
						|
  // Create placeholder component file
 | 
						|
  const componentPath = path.join(componentDir, `${name}.tsx`)
 | 
						|
  if (!fs.existsSync(componentPath)) {
 | 
						|
    fs.writeFileSync(componentPath, createComponentFileContent(name))
 | 
						|
    console.log(`Created file: ${componentPath}`)
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Main function
 | 
						|
 */
 | 
						|
function main() {
 | 
						|
  console.log('Setting up component structure...')
 | 
						|
 | 
						|
  for (const mapping of componentMappings) {
 | 
						|
    setupComponentStructure(mapping)
 | 
						|
  }
 | 
						|
 | 
						|
  console.log('\nComponent structure setup complete!')
 | 
						|
}
 | 
						|
 | 
						|
// Run the script
 | 
						|
main()
 |