Files
BIPMaterialManager/scripts/migrate-env-to-yaml.ts

126 lines
4.2 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 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()