build: replace husky with lefthook

This commit is contained in:
2026-04-07 00:09:58 +03:00
parent 48dc35ff41
commit af61dc369b
5 changed files with 1308 additions and 836 deletions

View File

@@ -1,3 +0,0 @@
#!/usr/bin/env bash
export PHP_CS_FIXER_IGNORE_ENV=1
pnpm lint-staged -- --relative

View File

@@ -1,17 +0,0 @@
module.exports = {
'*.{ts,vue}': ['eslint --fix'],
'*.{scss,vue,ts,md}': ['prettier --write'],
'*.json': (files) => {
const filtered = files.filter(file => !file.includes('openapi.json'))
return filtered.length > 0 ? `prettier --write ${filtered.join(' ')}` : []
},
'*.php': (files) => {
const nonGenFiles = files.filter(file => !file.includes('/gen/'))
const commands = []
if (nonGenFiles.length > 0) {
commands.push('make php-cs-fixer', 'make test')
}
return commands
},
'*Controller.php': [() => 'make openapi', () => 'git add openapi.json'],
}

22
lefthook.yml Normal file
View File

@@ -0,0 +1,22 @@
pre-commit:
parallel: true
commands:
eslint:
glob: "*.{ts,vue}"
run: pnpm eslint --fix {staged_files} && git add {staged_files}
prettier:
glob: "*.{scss,vue,ts,md}"
run: pnpm prettier --write {staged_files} && git add {staged_files}
prettier-json:
glob: "*.json"
exclude: "openapi.json"
run: pnpm prettier --write {staged_files} && git add {staged_files}
php-cs-fixer:
glob: "*.php"
exclude: "/gen/"
env:
PHP_CS_FIXER_IGNORE_ENV: "1"
run: make php-cs-fixer && make test
openapi:
glob: "*Controller.php"
run: make openapi && git add openapi.json

View File

@@ -7,12 +7,13 @@
"node": "^22.19.0", "node": "^22.19.0",
"pnpm": "^10.17.0" "pnpm": "^10.17.0"
}, },
"packageManager": "pnpm@10.28.0",
"scripts": { "scripts": {
"dev": "vite build --watch", "dev": "vite build --watch",
"build": "vite build", "build": "vite build",
"lint": "eslint src", "lint": "eslint src",
"format": "eslint --fix src && prettier --write {vite.config.ts,src/,README.md}", "format": "eslint --fix src && prettier --write {vite.config.ts,src/,README.md}",
"prepare": "husky", "prepare": "lefthook install",
"gen": "simple-scaffold -c . -k", "gen": "simple-scaffold -c . -k",
"test": "vitest", "test": "vitest",
"test:run": "vitest run" "test:run": "vitest run"
@@ -22,37 +23,41 @@
], ],
"dependencies": { "dependencies": {
"@nextcloud/axios": "^2.5.2", "@nextcloud/axios": "^2.5.2",
"@nextcloud/dialogs": "^7.3.0",
"@nextcloud/l10n": "^3.4.1", "@nextcloud/l10n": "^3.4.1",
"@nextcloud/router": "^3.1.0", "@nextcloud/router": "^3.1.0",
"@nextcloud/vite-config": "^2.5.2", "@nextcloud/vite-config": "^2.5.2",
"@nextcloud/vue": "^9.5.0", "@nextcloud/vue": "^9.6.0",
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"linkifyjs": "^4.3.2", "linkifyjs": "^4.3.2",
"vue": "^3.5.28", "rrule": "^2.8.1",
"vue": "^3.5.32",
"vue-material-design-icons": "^5.3.1" "vue-material-design-icons": "^5.3.1"
}, },
"pnpm": {
"onlyBuiltDependencies": ["lefthook"]
},
"devDependencies": { "devDependencies": {
"@eslint/js": "^10.0.1", "@eslint/js": "^10.0.1",
"@nextcloud/browserslist-config": "^3.1.2", "@nextcloud/browserslist-config": "^3.1.2",
"@nextcloud/eslint-config": "^8.4.2", "@nextcloud/eslint-config": "^8.4.2",
"@nextcloud/stylelint-config": "^3.2.1", "@nextcloud/stylelint-config": "^3.2.1",
"@vitejs/plugin-vue": "^6.0.4", "@vitejs/plugin-vue": "^6.0.5",
"@vue/test-utils": "^2.4.6", "@vue/test-utils": "^2.4.6",
"@vue/tsconfig": "^0.8.1", "@vue/tsconfig": "^0.9.1",
"eslint": "^10.0.2", "eslint": "^10.2.0",
"happy-dom": "^20.7.0", "happy-dom": "^20.8.9",
"husky": "^9.1.7", "lefthook": "^1.12.5",
"lint-staged": "^16.2.7",
"prettier": "^3.8.1", "prettier": "^3.8.1",
"rollup-plugin-visualizer": "^7.0.0", "rollup-plugin-visualizer": "^7.0.1",
"sass": "^1.97.3", "sass": "^1.99.0",
"sass-embedded": "^1.97.3", "sass-embedded": "^1.99.0",
"typescript": "^5.9.3", "typescript": "^6.0.2",
"typescript-eslint": "^8.56.1", "typescript-eslint": "^8.58.0",
"vite": "^7.3.1", "vite": "^8.0.3",
"vite-plugin-checker": "^0.12.0", "vite-plugin-checker": "^0.12.0",
"vitest": "^4.0.18", "vitest": "^4.1.2",
"vue-router": "^5.0.3", "vue-router": "^5.0.4",
"vue-tsc": "^3.2.5" "vue-tsc": "^3.2.6"
} }
} }

2061
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff