/**
 * 提交信息校验
 * @link https://github.com/toplenboren/simple-git-hooks
 * @see 参考:https://github.com/vuejs/vue-next/blob/master/.github/commit-convention.md
 */
import { readFileSync } from 'node:fs';
import path from 'node:path';
import process from 'node:process';
import pico from 'picocolors';

const msgPath = path.resolve('.git/COMMIT_EDITMSG');
const msg = readFileSync(msgPath, 'utf-8').trim();

const commitRE
    = /^(?:revert: )?(?:feat|fix|docs|dx|style|refactor|perf|test|workflow|build|ci|chore|types|wip|mod|release|strengthen)(?:\(.+\))?: .{1,50}/;

if (!commitRE.test(msg)) {
  console.log(pico.yellow(`\n提交的信息: ${msg}\n`));
  console.error(
    `  ${pico.white(pico.bgRed(' 格式错误 '))} ${pico.red(
      '无效的提交信息格式.',
    )}\n\n${
      pico.red('  正确的提交消息格式. 例如:\n\n')
    }    ${pico.green('feat: add a new feature')}\n`
    + `    ${pico.green('fix: fixed an bug')}`,
  );
  process.exit(1);
}