@zanminkian/git-hooks
Version:
A bundle of opinionated git hooks. All in one!
52 lines (42 loc) • 1.48 kB
JavaScript
import fs from 'node:fs'
import process from 'node:process'
import { spawnSync } from 'node:child_process'
import { dirname, join, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
import linter from 'git-commit-msg-linter'
const __dirname = dirname(fileURLToPath(import.meta.url))
function writePreCommit() {
const content = [
'#!/bin/sh',
`echo '{"*":["npx eslint --config ${join(__dirname, 'eslint.config.cjs')} --fix"]}' | npx lint-staged -c -`,
].join('\n')
const path = resolve(process.cwd(), '.git', 'hooks', 'pre-commit')
fs.writeFileSync(path, content)
fs.chmodSync(path, '777')
}
function writeCommitMsg() {
linter.install({ silent: true })
}
function writePrePush(cmd) {
const content = [
'#!/bin/sh',
cmd,
].join('\n')
const path = resolve(process.cwd(), '.git', 'hooks', 'pre-push')
fs.writeFileSync(path, content)
fs.chmodSync(path, '777')
}
export function install({ preCommit, commitMsg, prePush }) {
if (preCommit)
writePreCommit()
if (commitMsg)
writeCommitMsg()
if (prePush)
writePrePush(prePush)
}
export function format(dir = process.cwd()) {
return spawnSync('npx', ['eslint', resolve(process.cwd(), dir), '--config', join(__dirname, 'eslint.config.cjs'), '--fix'], { stdio: 'inherit' })
}
export function lint(dir = process.cwd()) {
return spawnSync('npx', ['eslint', resolve(process.cwd(), dir), '--config', join(__dirname, 'eslint.config.cjs')], { stdio: 'inherit' })
}