| const path = require('node:path'); |
| const { spawnSync } = require('node:child_process'); |
|
|
| const { createLogger, isVerbose, startTimer } = require('../src/generator/utils/logger'); |
|
|
| const lifecycleEvent = process.env.npm_lifecycle_event |
| ? String(process.env.npm_lifecycle_event) |
| : ''; |
| const scope = |
| lifecycleEvent === 'format' || lifecycleEvent.startsWith('format:') ? lifecycleEvent : 'format'; |
| const log = createLogger(scope); |
|
|
| const PATTERNS = [ |
| 'src/**/*.js', |
| 'scripts/**/*.js', |
| 'test/**/*.js', |
| '.github/**/*.yml', |
| '*.{md,json}', |
| 'config/**/*.md', |
| 'config/**/*.yml', |
| ]; |
|
|
| function parseMode(argv) { |
| if (argv.includes('--check')) return 'check'; |
| if (argv.includes('--write')) return 'write'; |
| return 'check'; |
| } |
|
|
| async function main() { |
| const elapsedMs = startTimer(); |
| const mode = parseMode(process.argv.slice(2)); |
| log.info('开始', { mode, version: process.env.npm_package_version }); |
|
|
| const repoRoot = path.resolve(__dirname, '..'); |
| const prettierCli = path.join(repoRoot, 'node_modules', 'prettier', 'bin', 'prettier.cjs'); |
|
|
| const args = []; |
| if (mode === 'write') args.push('--write'); |
| else args.push('--check'); |
|
|
| |
| if (isVerbose()) { |
| log.info('检查范围', { patterns: PATTERNS.join(' ') }); |
| } |
|
|
| const result = spawnSync(process.execPath, [prettierCli, ...args, ...PATTERNS], { |
| cwd: repoRoot, |
| stdio: 'inherit', |
| }); |
|
|
| const exitCode = result && Number.isFinite(result.status) ? result.status : 1; |
| if (exitCode !== 0) { |
| log.error('失败', { ms: elapsedMs(), exit: exitCode }); |
| process.exitCode = exitCode; |
| return; |
| } |
|
|
| log.ok('完成', { ms: elapsedMs(), mode }); |
| } |
|
|
| if (require.main === module) { |
| main().catch((error) => { |
| log.error('执行失败', { message: error && error.message ? error.message : String(error) }); |
| if (isVerbose() && error && error.stack) console.error(error.stack); |
| process.exitCode = 1; |
| }); |
| } |
|
|