UNPKG

ddc-commit-hooks

Version:
104 lines (103 loc) 4.11 kB
"use strict"; var fs = require("fs"); var path = require("path"); var chalk = require("chalk"); var filename = process.cwd(); var simpleGit = require("simple-git")(filename); var preCommit = { handleDiffResult: function (err, result, config) { var overSizedFiles = 0; for (var _i = 0, _a = result.files; _i < _a.length; _i++) { var file = _a[_i]; try { var stats = fs.statSync(file.file); var fileSizeInBytes = stats.size; var fileSizeInMegabytes = fileSizeInBytes / 1000000.0; if (fileSizeInMegabytes > config.preCommit.maxFileSize) { console.log(chalk.red(file.file + ": File size is too big")); ++overSizedFiles; } } catch (error) { continue; } } if (overSizedFiles) { console.log(chalk.red("Please un-stage " + overSizedFiles + " oversized file" + (overSizedFiles > 1 ? "s" : "") + " before committing")); process.exit(1); return; } if (config.preCommit.dotOnlyCheck) { var _loop_1 = function (file) { fs.readFile(file.file, "utf8", function (err, data) { if (data && data.indexOf(".only") >= 0) { console.log(chalk.red(file.file + ": Contains a '.only', please remove")); process.exit(1); } }); }; for (var _b = 0, _c = result.files; _b < _c.length; _b++) { var file = _c[_b]; _loop_1(file); } } if (config.preCommit.gitlabCi) { if (!this.fileExists("/.gitlab-ci.yml")) { console.log(chalk.red("No Gitlab config detected, aborting pre-commit checks")); process.exit(1); return; } console.log(chalk.cyan(".gitlab-ci.yml file detected")); } if (config.preCommit.circleCi) { if (!this.fileExists("/.circleci")) { console.log(chalk.red("No CircleCi config detected, aborting pre-commit checks")); process.exit(1); return; } } if (config.preCommit.esLintCheck) { if (!this.fileExists("/.eslintrc")) { console.log(chalk.red("No esLint config detected, aborting pre-commit checks")); process.exit(1); return; } console.log(chalk.cyan(".esLint file detected")); } if (config.preCommit.cypress && config.preCommit.cypress.length) { if (!this.fileExists(config.preCommit.cypress)) { console.log(chalk.red("No Cypress directory detected, aborting pre-commit checks")); process.exit(1); return; } console.log(chalk.cyan("Cypress directory detected")); } if (config.preCommit.robot && config.preCommit.robot.length) { if (!this.fileExists(config.preCommit.robot)) { console.log(chalk.red("No Robot directory detected, aborting pre-commit checks")); process.exit(1); return; } console.log(chalk.cyan("Cypress directory detected")); } console.log(chalk.green("All pre-commit checks passed")); }, fileExists: function (filePath) { if (fs.existsSync(path.join(process.env.PWD, filePath))) { console.log(chalk.cyan(filePath + " file found")); return true; } else { console.log(chalk.red(filePath + " - file not detected")); return false; } }, check: function (config) { var _this = this; console.log(chalk.cyan("Beginning pre-commit checks")); simpleGit.diffSummary(["--cached"], function (err, result) { _this.handleDiffResult(err, result, config); }); } }; module.exports = preCommit;