# EXAMPLE USAGE:
#
#   Refer for explanation to following link:
#   https://lefthook.dev/configuration/
#
# pre-push:
#   jobs:
#     - name: packages audit
#       tags:
#         - frontend
#         - security
#       run: yarn audit
#
#     - name: gems audit
#       tags:
#         - backend
#         - security
#       run: bundle audit
#
# pre-commit:
#   parallel: true
#   jobs:
#     - run: yarn eslint {staged_files}
#       glob: "*.{js,ts,jsx,tsx}"
#
#     - name: rubocop
#       glob: "*.rb"
#       exclude:
#         - config/application.rb
#         - config/routes.rb
#       run: bundle exec rubocop --force-exclusion {all_files}
#
#     - name: govet
#       files: git ls-files -m
#       glob: "*.go"
#       run: go vet {files}
#
#     - script: "hello.js"
#       runner: node
#
#     - script: "hello.go"
#       runner: go run

pre-commit:
  # 串行执行（不设 parallel），避免与 check:type 同时运行导致低配机内存/CPU 瞬时飙升。
  # lint 仅检查暂存文件并自动修复后回填，大幅降低负载；check:type 仍需全量。
  jobs:
    - name: oxlint
      glob: '*.{js,jsx,ts,tsx,vue,cjs,mjs,cts,mts}'
      run: pnpm exec oxlint --fix --type-aware --threads=4 --no-error-on-unmatched-pattern {staged_files}
      stage_fixed: true
    - name: oxfmt
      glob: '*.{js,jsx,ts,tsx,vue,cjs,mjs,cts,mts,json,jsonc}'
      run: pnpm exec oxfmt --threads=4 --no-error-on-unmatched-pattern {staged_files}
      stage_fixed: true
    - name: eslint
      glob: '*.{js,jsx,ts,tsx,vue,cjs,mjs,cts,mts}'
      run: pnpm exec eslint --fix {staged_files}
      stage_fixed: true
    - name: stylelint
      glob: '*.{vue,css,less,scss}'
      run: pnpm exec stylelint --fix {staged_files}
      stage_fixed: true
    - name: checkType
      run: pnpm check:type

post-merge:
  commands:
    install:
      run: pnpm install

commit-msg:
  commands:
    commitlint:
      run: pnpm exec commitlint --edit $1
