126 lines
4.2 KiB
TypeScript
126 lines
4.2 KiB
TypeScript
/**
|
||
* Migration Script: .env to config.yaml
|
||
*
|
||
* Usage: npx tsx scripts/migrate-env-to-yaml.ts
|
||
*
|
||
* This script migrates the old .env configuration to the new YAML format.
|
||
* ERP configuration is NOT migrated as it's now stored in the database per user.
|
||
*/
|
||
|
||
import * as fs from 'fs'
|
||
import * as path from 'path'
|
||
import yaml from 'js-yaml'
|
||
|
||
const ENV_PATH = path.resolve(process.cwd(), '.env')
|
||
const YAML_PATH = path.resolve(process.cwd(), 'config.yaml')
|
||
const BACKUP_PATH = path.resolve(process.cwd(), '.env.backup')
|
||
|
||
interface EnvConfig {
|
||
[key: string]: string
|
||
}
|
||
|
||
function parseEnvFile(content: string): EnvConfig {
|
||
const result: EnvConfig = {}
|
||
const lines = content.split('\n')
|
||
|
||
for (const line of lines) {
|
||
const trimmed = line.trim()
|
||
if (!trimmed || trimmed.startsWith('#')) continue
|
||
|
||
const [key, ...valueParts] = trimmed.split('=')
|
||
if (key && valueParts.length > 0) {
|
||
result[key.trim()] = valueParts.join('=').trim()
|
||
}
|
||
}
|
||
|
||
return result
|
||
}
|
||
|
||
function migrate() {
|
||
console.log('🔄 Starting migration from .env to config.yaml...\n')
|
||
|
||
if (!fs.existsSync(ENV_PATH)) {
|
||
console.error('❌ .env file not found at:', ENV_PATH)
|
||
process.exit(1)
|
||
}
|
||
|
||
const envContent = fs.readFileSync(ENV_PATH, 'utf-8')
|
||
const env = parseEnvFile(envContent)
|
||
|
||
// Build configuration object (without ERP)
|
||
const config = {
|
||
database: {
|
||
activeType: (env.DB_TYPE || 'mysql').toLowerCase() as 'mysql' | 'sqlserver',
|
||
mysql: {
|
||
host: env.DB_MYSQL_HOST || 'localhost',
|
||
port: parseInt(env.DB_MYSQL_PORT || '3306', 10),
|
||
database: env.DB_NAME || '',
|
||
username: env.DB_USERNAME || '',
|
||
password: env.DB_PASSWORD || '',
|
||
charset: env.DB_MYSQL_CHARSET || 'utf8mb4'
|
||
},
|
||
sqlserver: {
|
||
server: env.DB_SERVER || 'localhost',
|
||
port: parseInt(env.DB_SQLSERVER_PORT || '1433', 10),
|
||
database: env.DB_NAME || '',
|
||
username: env.DB_USERNAME || '',
|
||
password: env.DB_PASSWORD || '',
|
||
driver: env.DB_SQLSERVER_DRIVER || 'ODBC Driver 18 for SQL Server',
|
||
trustServerCertificate: env.DB_TRUST_SERVER_CERTIFICATE === 'yes'
|
||
}
|
||
},
|
||
paths: {
|
||
dataDir: env.PATH_DATA_DIR || './data/',
|
||
defaultOutput: env.PATH_DEFAULT_OUTPUT || 'output.xlsx',
|
||
validationOutput: env.PATH_VALIDATION_OUTPUT || 'validation-result.xlsx'
|
||
},
|
||
extraction: {
|
||
batchSize: parseInt(env.EXTRACTION_BATCH_SIZE || '100', 10),
|
||
verbose: env.EXTRACTION_VERBOSE !== 'false',
|
||
autoConvert: env.EXTRACTION_AUTO_CONVERT !== 'false',
|
||
mergeBatches: env.EXTRACTION_MERGE_BATCHES !== 'false',
|
||
enableDbPersistence: env.EXTRACTION_ENABLE_DB_PERSISTENCE !== 'false'
|
||
},
|
||
validation: {
|
||
dataSource: env.VALIDATION_DATA_SOURCE || 'database_full',
|
||
batchSize: parseInt(env.VALIDATION_BATCH_SIZE || '2000', 10),
|
||
matchMode: env.VALIDATION_MATCH_MODE || 'substring',
|
||
enableCrud: env.VALIDATION_ENABLE_CRUD === 'true',
|
||
defaultManager: env.VALIDATION_DEFAULT_MANAGER || ''
|
||
},
|
||
orderResolution: {
|
||
tableName: env.DB_TABLE_NAME || '',
|
||
productionIdField: env.DB_FIELD_PRODUCTION_ID || '',
|
||
orderNumberField: env.DB_FIELD_ORDER_NUMBER || ''
|
||
}
|
||
}
|
||
|
||
// Backup .env
|
||
if (fs.existsSync(ENV_PATH)) {
|
||
fs.copyFileSync(ENV_PATH, BACKUP_PATH)
|
||
console.log('📁 Backed up .env to .env.backup')
|
||
}
|
||
|
||
// Write YAML with header comments
|
||
const header = `# ================================\n# ERPAuto 配置文件\n# ================================\n# 由 .env 迁移生成\n# 迁移时间:${new Date().toISOString()}\n# 注意:ERP 配置已迁移到数据库 (dbo_BIPUsers 表)\n# ================================\n\n`
|
||
|
||
const yamlContent = yaml.dump(config, {
|
||
indent: 2,
|
||
lineWidth: -1,
|
||
noRefs: true,
|
||
quotingType: '"',
|
||
forceQuotes: false
|
||
})
|
||
|
||
fs.writeFileSync(YAML_PATH, header + yamlContent, 'utf-8')
|
||
|
||
console.log('✅ Migration completed successfully!')
|
||
console.log(`📁 Config saved to: ${YAML_PATH}`)
|
||
console.log('\n📋 Next steps:')
|
||
console.log(' 1. Review config.yaml and verify all values')
|
||
console.log(' 2. Test the application thoroughly')
|
||
console.log(' 3. Remove .env file when confident (optional)\n')
|
||
}
|
||
|
||
migrate()
|