import { existsSync, readFileSync } from 'node:fs' import { spawnSync } from 'node:child_process' function option(name) { const index = process.argv.indexOf(name) return index >= 0 ? process.argv[index + 1] : '' } function normalizeOrigin(value, name) { if (!value) throw new Error(`缺少 ${name}`) const url = new URL(value) if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password || url.pathname !== '/') { throw new Error(`${name} 必须是无账号、无路径的 HTTP(S) origin`) } return url.origin } function acceptancePassword() { if (process.env.CHONGCHONG_ADMIN_ACCEPTANCE_PASSWORD) return process.env.CHONGCHONG_ADMIN_ACCEPTANCE_PASSWORD const file = 'C:/Users/BY-OY/.codex/chongchong-global-dev-acceptance.env' if (!existsSync(file)) return '' const match = readFileSync(file, 'utf8').match(/^CHONGCHONG_ADMIN_ACCEPTANCE_PASSWORD=(.*)$/m) return match?.[1]?.trim() || '' } const environment = option('--environment') if (environment !== 'development') throw new Error('本入口仅允许显式指定 --environment development') const gateway = normalizeOrigin(option('--gateway') || process.env.ADMIN_DEVELOPMENT_GATEWAY, '--gateway') const overseasGateway = normalizeOrigin(option('--overseas-gateway') || process.env.ADMIN_DEVELOPMENT_OVERSEAS_GATEWAY, '--overseas-gateway') const password = acceptancePassword() if (!password) throw new Error('缺少 CHONGCHONG_ADMIN_ACCEPTANCE_PASSWORD 或本机开发验收凭据文件') const result = spawnSync('pnpm', ['exec', 'vitest', 'run', '--config', 'vitest.phase4-development.config.ts'], { cwd: process.cwd(), stdio: 'inherit', shell: process.platform === 'win32', env: { ...process.env, ADMIN_PHASE4_LIVE: '1', ADMIN_ACCEPTANCE_USERNAME: process.env.ADMIN_ACCEPTANCE_USERNAME || 'platform_admin', ADMIN_ACCEPTANCE_PASSWORD: password, ADMIN_DEVELOPMENT_GATEWAY: gateway, ADMIN_DEVELOPMENT_OVERSEAS_GATEWAY: overseasGateway, VITE_API_BASE_URL: `${gateway}/api`, VITE_OVERSEAS_API_BASE_URL: `${overseasGateway}/api`, }, }) if (result.error) throw result.error process.exit(result.status ?? 1)