bun-git-hooks 0.2.17 → 0.2.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +55 -32
- package/dist/index.js +40 -17
- package/package.json +4 -4
package/dist/bin/cli.js
CHANGED
|
@@ -19,7 +19,7 @@ var __toESM = (mod, isNodeMode, target) => {
|
|
|
19
19
|
var __require = import.meta.require;
|
|
20
20
|
|
|
21
21
|
// bin/cli.ts
|
|
22
|
-
import
|
|
22
|
+
import process11 from "process";
|
|
23
23
|
|
|
24
24
|
// node_modules/@stacksjs/clarity/dist/index.js
|
|
25
25
|
import { join, relative, resolve as resolve2 } from "path";
|
|
@@ -2085,25 +2085,26 @@ class CAC extends EventEmitter {
|
|
|
2085
2085
|
}
|
|
2086
2086
|
}
|
|
2087
2087
|
// package.json
|
|
2088
|
-
var version = "0.2.
|
|
2088
|
+
var version = "0.2.19";
|
|
2089
2089
|
|
|
2090
2090
|
// src/git-hooks.ts
|
|
2091
2091
|
import fs from "fs";
|
|
2092
2092
|
import path from "path";
|
|
2093
|
-
import
|
|
2093
|
+
import process10 from "process";
|
|
2094
2094
|
|
|
2095
2095
|
// src/config.ts
|
|
2096
2096
|
import process9 from "process";
|
|
2097
2097
|
|
|
2098
2098
|
// node_modules/bunfig/dist/index.js
|
|
2099
2099
|
import { existsSync as existsSync3, mkdirSync as mkdirSync2, readdirSync as readdirSync2, writeFileSync as writeFileSync3 } from "fs";
|
|
2100
|
+
import { homedir } from "os";
|
|
2100
2101
|
import { dirname as dirname2, resolve as resolve3 } from "path";
|
|
2101
|
-
import
|
|
2102
|
+
import process6 from "process";
|
|
2102
2103
|
import { join as join3, relative as relative2, resolve as resolve22 } from "path";
|
|
2103
2104
|
import process22 from "process";
|
|
2104
2105
|
import { existsSync as existsSync4, mkdirSync as mkdirSync3, readdirSync as readdirSync3, writeFileSync as writeFileSync4 } from "fs";
|
|
2105
2106
|
import { dirname as dirname3, resolve as resolve4 } from "path";
|
|
2106
|
-
import
|
|
2107
|
+
import process7 from "process";
|
|
2107
2108
|
import { Buffer as Buffer2 } from "buffer";
|
|
2108
2109
|
import { createCipheriv as createCipheriv2, createDecipheriv as createDecipheriv2, randomBytes as randomBytes2 } from "crypto";
|
|
2109
2110
|
import { closeSync as closeSync2, createReadStream as createReadStream2, createWriteStream as createWriteStream2, existsSync as existsSync22, fsyncSync as fsyncSync2, openSync as openSync2, writeFileSync as writeFileSync22 } from "fs";
|
|
@@ -2261,7 +2262,7 @@ async function loadConfig3({
|
|
|
2261
2262
|
cwd,
|
|
2262
2263
|
defaultConfig: defaultConfig2
|
|
2263
2264
|
}) {
|
|
2264
|
-
const baseDir = cwd ||
|
|
2265
|
+
const baseDir = cwd || process7.cwd();
|
|
2265
2266
|
const extensions = [".ts", ".js", ".mjs", ".cjs", ".json"];
|
|
2266
2267
|
const configPaths = [
|
|
2267
2268
|
`${name}.config`,
|
|
@@ -2292,8 +2293,8 @@ async function loadConfig3({
|
|
|
2292
2293
|
} catch {}
|
|
2293
2294
|
return defaultConfig2;
|
|
2294
2295
|
}
|
|
2295
|
-
var defaultConfigDir2 = resolve4(
|
|
2296
|
-
var defaultGeneratedDir2 = resolve4(
|
|
2296
|
+
var defaultConfigDir2 = resolve4(process7.cwd(), "config");
|
|
2297
|
+
var defaultGeneratedDir2 = resolve4(process7.cwd(), "src/generated");
|
|
2297
2298
|
function getProjectRoot2(filePath, options = {}) {
|
|
2298
2299
|
let path = process22.cwd();
|
|
2299
2300
|
while (path.includes("storage"))
|
|
@@ -3724,7 +3725,7 @@ function applyEnvVarsToConfig(name, config3, verbose = false) {
|
|
|
3724
3725
|
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
3725
3726
|
result2[key] = processObject(value, envPath);
|
|
3726
3727
|
} else {
|
|
3727
|
-
const envValue =
|
|
3728
|
+
const envValue = process6.env[envKey] || process6.env[oldEnvKey];
|
|
3728
3729
|
if (envValue !== undefined) {
|
|
3729
3730
|
if (verbose) {
|
|
3730
3731
|
log.info(`Using environment variable ${envValue ? envKey : oldEnvKey} for config ${name}.${envPath.join(".")}`);
|
|
@@ -3763,7 +3764,7 @@ async function loadConfig32({
|
|
|
3763
3764
|
checkEnv = true
|
|
3764
3765
|
}) {
|
|
3765
3766
|
const configWithEnvVars = checkEnv && typeof defaultConfig22 === "object" && defaultConfig22 !== null && !Array.isArray(defaultConfig22) ? applyEnvVarsToConfig(name, defaultConfig22, verbose) : defaultConfig22;
|
|
3766
|
-
const baseDir = cwd ||
|
|
3767
|
+
const baseDir = cwd || process6.cwd();
|
|
3767
3768
|
const extensions = [".ts", ".js", ".mjs", ".cjs", ".json"];
|
|
3768
3769
|
if (verbose) {
|
|
3769
3770
|
log.info(`Loading configuration for "${name}"${alias ? ` (alias: "${alias}")` : ""} from ${baseDir}`);
|
|
@@ -3791,6 +3792,28 @@ async function loadConfig32({
|
|
|
3791
3792
|
}
|
|
3792
3793
|
}
|
|
3793
3794
|
}
|
|
3795
|
+
if (name) {
|
|
3796
|
+
const homeConfigDir = resolve3(homedir(), ".config", name);
|
|
3797
|
+
const homeConfigPatterns = ["config", `${name}.config`];
|
|
3798
|
+
if (alias) {
|
|
3799
|
+
homeConfigPatterns.push(`${alias}.config`);
|
|
3800
|
+
}
|
|
3801
|
+
if (verbose) {
|
|
3802
|
+
log.info(`Checking user config directory: ${homeConfigDir}`);
|
|
3803
|
+
}
|
|
3804
|
+
for (const configPath of homeConfigPatterns) {
|
|
3805
|
+
for (const ext of extensions) {
|
|
3806
|
+
const fullPath = resolve3(homeConfigDir, `${configPath}${ext}`);
|
|
3807
|
+
const config3 = await tryLoadConfig22(fullPath, configWithEnvVars);
|
|
3808
|
+
if (config3 !== null) {
|
|
3809
|
+
if (verbose) {
|
|
3810
|
+
log.success(`Configuration loaded from user config directory: ${fullPath}`);
|
|
3811
|
+
}
|
|
3812
|
+
return config3;
|
|
3813
|
+
}
|
|
3814
|
+
}
|
|
3815
|
+
}
|
|
3816
|
+
}
|
|
3794
3817
|
try {
|
|
3795
3818
|
const pkgPath = resolve3(baseDir, "package.json");
|
|
3796
3819
|
if (existsSync3(pkgPath)) {
|
|
@@ -3825,8 +3848,8 @@ async function loadConfig32({
|
|
|
3825
3848
|
}
|
|
3826
3849
|
return configWithEnvVars;
|
|
3827
3850
|
}
|
|
3828
|
-
var defaultConfigDir22 = resolve3(
|
|
3829
|
-
var defaultGeneratedDir22 = resolve3(
|
|
3851
|
+
var defaultConfigDir22 = resolve3(process6.cwd(), "config");
|
|
3852
|
+
var defaultGeneratedDir22 = resolve3(process6.cwd(), "src/generated");
|
|
3830
3853
|
|
|
3831
3854
|
// git-hooks.config.ts
|
|
3832
3855
|
var config3 = {
|
|
@@ -3900,7 +3923,7 @@ if [ -f "$BUN_GIT_HOOKS_RC" ]; then
|
|
|
3900
3923
|
fi
|
|
3901
3924
|
|
|
3902
3925
|
`;
|
|
3903
|
-
function getGitProjectRoot(directory =
|
|
3926
|
+
function getGitProjectRoot(directory = process10.cwd()) {
|
|
3904
3927
|
if (directory.endsWith(".git")) {
|
|
3905
3928
|
return path.normalize(directory);
|
|
3906
3929
|
}
|
|
@@ -3931,7 +3954,7 @@ function getGitProjectRoot(directory = process11.cwd()) {
|
|
|
3931
3954
|
}
|
|
3932
3955
|
return getGitProjectRoot(parentDir);
|
|
3933
3956
|
}
|
|
3934
|
-
function setHooksFromConfig(projectRootPath =
|
|
3957
|
+
function setHooksFromConfig(projectRootPath = process10.cwd(), options) {
|
|
3935
3958
|
if (!config4 || Object.keys(config4).length === 0)
|
|
3936
3959
|
throw new Error("[ERROR] Config was not found! Please add `.git-hooks.config.{ts,js,mjs,cjs,json}` or `git-hooks.config.{ts,js,mjs,cjs,json}` or the `git-hooks` entry in package.json.\r\nCheck README for details");
|
|
3937
3960
|
const configFile = options?.configFile || { ...config4 };
|
|
@@ -3953,7 +3976,7 @@ function setHooksFromConfig(projectRootPath = process11.cwd(), options) {
|
|
|
3953
3976
|
}
|
|
3954
3977
|
}
|
|
3955
3978
|
}
|
|
3956
|
-
async function getStagedFiles(projectRoot =
|
|
3979
|
+
async function getStagedFiles(projectRoot = process10.cwd()) {
|
|
3957
3980
|
try {
|
|
3958
3981
|
const { stdout } = await execAsync("git diff --cached --name-only --diff-filter=ACMR", { cwd: projectRoot });
|
|
3959
3982
|
const files = stdout.trim().split(`
|
|
@@ -4003,7 +4026,7 @@ function filterFilesByPattern(files, pattern) {
|
|
|
4003
4026
|
return isIncluded && !isExcluded;
|
|
4004
4027
|
});
|
|
4005
4028
|
}
|
|
4006
|
-
async function runCommandOnStagedFiles(command, files, projectRoot =
|
|
4029
|
+
async function runCommandOnStagedFiles(command, files, projectRoot = process10.cwd(), verbose = false) {
|
|
4007
4030
|
if (files.length === 0) {
|
|
4008
4031
|
if (verbose)
|
|
4009
4032
|
console.info("[INFO] No matching files for pattern");
|
|
@@ -4055,7 +4078,7 @@ async function processStagedLint(stagedLintConfig, projectRoot, verbose = false)
|
|
|
4055
4078
|
}
|
|
4056
4079
|
return success;
|
|
4057
4080
|
}
|
|
4058
|
-
function _setHook(hook, commandOrConfig, projectRoot =
|
|
4081
|
+
function _setHook(hook, commandOrConfig, projectRoot = process10.cwd()) {
|
|
4059
4082
|
const gitRoot = getGitProjectRoot(projectRoot);
|
|
4060
4083
|
if (!gitRoot) {
|
|
4061
4084
|
console.info("[INFO] No `.git` root folder found, skipping");
|
|
@@ -4079,11 +4102,11 @@ function _setHook(hook, commandOrConfig, projectRoot = process11.cwd()) {
|
|
|
4079
4102
|
log2.debug(`${addOrModify} ${italic(hook)} hook`);
|
|
4080
4103
|
fs.writeFileSync(hookPath, hookCommand, { mode: 493 });
|
|
4081
4104
|
}
|
|
4082
|
-
function removeHooks(projectRoot =
|
|
4105
|
+
function removeHooks(projectRoot = process10.cwd(), verbose = false) {
|
|
4083
4106
|
for (const configEntry of VALID_GIT_HOOKS)
|
|
4084
4107
|
_removeHook(configEntry, projectRoot, verbose);
|
|
4085
4108
|
}
|
|
4086
|
-
function _removeHook(hook, projectRoot =
|
|
4109
|
+
function _removeHook(hook, projectRoot = process10.cwd(), verbose = false) {
|
|
4087
4110
|
const gitRoot = getGitProjectRoot(projectRoot);
|
|
4088
4111
|
const hookPath = path.normalize(`${gitRoot}/hooks/${hook}`);
|
|
4089
4112
|
if (fs.existsSync(hookPath)) {
|
|
@@ -4094,7 +4117,7 @@ function _removeHook(hook, projectRoot = process11.cwd(), verbose = false) {
|
|
|
4094
4117
|
log2.success(`Successfully removed the ${hook} hook`);
|
|
4095
4118
|
}
|
|
4096
4119
|
async function runStagedLint(hook) {
|
|
4097
|
-
const projectRoot =
|
|
4120
|
+
const projectRoot = process10.cwd();
|
|
4098
4121
|
const configFile = config4;
|
|
4099
4122
|
if (!configFile) {
|
|
4100
4123
|
console.error(`[ERROR] No configuration found`);
|
|
@@ -4131,57 +4154,57 @@ var cli = new CAC("git-hooks");
|
|
|
4131
4154
|
var log3 = new Logger("git-hooks", {
|
|
4132
4155
|
showTags: true
|
|
4133
4156
|
});
|
|
4134
|
-
var { SKIP_INSTALL_GIT_HOOKS } =
|
|
4157
|
+
var { SKIP_INSTALL_GIT_HOOKS } = process11.env;
|
|
4135
4158
|
if (["1", "true"].includes(SKIP_INSTALL_GIT_HOOKS || "")) {
|
|
4136
4159
|
log3.info(`SKIP_INSTALL_GIT_HOOKS is set to "${SKIP_INSTALL_GIT_HOOKS}", skipping installing hooks.`);
|
|
4137
|
-
|
|
4160
|
+
process11.exit(0);
|
|
4138
4161
|
}
|
|
4139
4162
|
cli.command("[configPath]", "Install git hooks, optionally from specified config file").option("--verbose", "Enable verbose logging").example("git-hooks").example("git-hooks ../src/config.ts").example("git-hooks --verbose").action(async (configPath, options) => {
|
|
4140
4163
|
try {
|
|
4141
4164
|
if (options?.verbose) {
|
|
4142
4165
|
log3.debug(`Config path: ${configPath || "using default"}`);
|
|
4143
|
-
log3.debug(`Working directory: ${
|
|
4166
|
+
log3.debug(`Working directory: ${process11.cwd()}`);
|
|
4144
4167
|
}
|
|
4145
4168
|
if (configPath) {
|
|
4146
4169
|
const config5 = await import(configPath);
|
|
4147
|
-
setHooksFromConfig(
|
|
4170
|
+
setHooksFromConfig(process11.cwd(), { configFile: config5 });
|
|
4148
4171
|
} else {
|
|
4149
|
-
setHooksFromConfig(
|
|
4172
|
+
setHooksFromConfig(process11.cwd());
|
|
4150
4173
|
}
|
|
4151
4174
|
log3.success("Successfully set all git hooks");
|
|
4152
4175
|
} catch (err) {
|
|
4153
4176
|
log3.error(err);
|
|
4154
|
-
|
|
4177
|
+
process11.exit(1);
|
|
4155
4178
|
}
|
|
4156
4179
|
});
|
|
4157
4180
|
cli.command("uninstall", "Remove all git hooks").alias("remove").option("--verbose", "Enable verbose logging").example("git-hooks uninstall").example("git-hooks remove").example("git-hooks uninstall --verbose").action(async (options) => {
|
|
4158
4181
|
try {
|
|
4159
4182
|
if (options?.verbose) {
|
|
4160
|
-
log3.debug(`Removing hooks from: ${
|
|
4183
|
+
log3.debug(`Removing hooks from: ${process11.cwd()}`);
|
|
4161
4184
|
}
|
|
4162
|
-
removeHooks(
|
|
4185
|
+
removeHooks(process11.cwd(), options?.verbose);
|
|
4163
4186
|
log3.success("Successfully removed all git hooks");
|
|
4164
4187
|
} catch (err) {
|
|
4165
4188
|
log3.error("Was not able to remove git hooks. Error:", err);
|
|
4166
|
-
|
|
4189
|
+
process11.exit(1);
|
|
4167
4190
|
}
|
|
4168
4191
|
});
|
|
4169
4192
|
cli.command("run-staged-lint <hook>", "Run staged lint for a specific git hook").option("--verbose", "Enable verbose logging").example("git-hooks run-staged-lint pre-commit").example("git-hooks run-staged-lint pre-push --verbose").action(async (hook, options) => {
|
|
4170
4193
|
try {
|
|
4171
4194
|
if (options?.verbose) {
|
|
4172
4195
|
log3.debug(`Running staged lint for hook: ${hook}`);
|
|
4173
|
-
log3.debug(`Working directory: ${
|
|
4196
|
+
log3.debug(`Working directory: ${process11.cwd()}`);
|
|
4174
4197
|
}
|
|
4175
4198
|
const success = await runStagedLint(hook);
|
|
4176
4199
|
if (success) {
|
|
4177
4200
|
log3.success("Staged lint completed successfully");
|
|
4178
4201
|
} else {
|
|
4179
4202
|
log3.error("Staged lint failed");
|
|
4180
|
-
|
|
4203
|
+
process11.exit(1);
|
|
4181
4204
|
}
|
|
4182
4205
|
} catch (err) {
|
|
4183
4206
|
log3.error("Was not able to run staged lint. Error:", err);
|
|
4184
|
-
|
|
4207
|
+
process11.exit(1);
|
|
4185
4208
|
}
|
|
4186
4209
|
});
|
|
4187
4210
|
cli.version(version);
|
package/dist/index.js
CHANGED
|
@@ -18,12 +18,13 @@ var __toESM = (mod, isNodeMode, target) => {
|
|
|
18
18
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
19
19
|
|
|
20
20
|
// src/config.ts
|
|
21
|
-
import
|
|
21
|
+
import process7 from "node:process";
|
|
22
22
|
|
|
23
23
|
// node_modules/bunfig/dist/index.js
|
|
24
24
|
import { existsSync as existsSync3, mkdirSync as mkdirSync2, readdirSync as readdirSync2, writeFileSync as writeFileSync3 } from "fs";
|
|
25
|
+
import { homedir } from "os";
|
|
25
26
|
import { dirname as dirname2, resolve as resolve3 } from "path";
|
|
26
|
-
import
|
|
27
|
+
import process6 from "process";
|
|
27
28
|
import { join, relative, resolve as resolve2 } from "path";
|
|
28
29
|
import process2 from "process";
|
|
29
30
|
import { existsSync, mkdirSync, readdirSync, writeFileSync } from "fs";
|
|
@@ -1649,7 +1650,7 @@ function applyEnvVarsToConfig(name, config3, verbose = false) {
|
|
|
1649
1650
|
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
1650
1651
|
result2[key] = processObject(value, envPath);
|
|
1651
1652
|
} else {
|
|
1652
|
-
const envValue =
|
|
1653
|
+
const envValue = process6.env[envKey] || process6.env[oldEnvKey];
|
|
1653
1654
|
if (envValue !== undefined) {
|
|
1654
1655
|
if (verbose) {
|
|
1655
1656
|
log.info(`Using environment variable ${envValue ? envKey : oldEnvKey} for config ${name}.${envPath.join(".")}`);
|
|
@@ -1688,7 +1689,7 @@ async function loadConfig3({
|
|
|
1688
1689
|
checkEnv = true
|
|
1689
1690
|
}) {
|
|
1690
1691
|
const configWithEnvVars = checkEnv && typeof defaultConfig2 === "object" && defaultConfig2 !== null && !Array.isArray(defaultConfig2) ? applyEnvVarsToConfig(name, defaultConfig2, verbose) : defaultConfig2;
|
|
1691
|
-
const baseDir = cwd ||
|
|
1692
|
+
const baseDir = cwd || process6.cwd();
|
|
1692
1693
|
const extensions = [".ts", ".js", ".mjs", ".cjs", ".json"];
|
|
1693
1694
|
if (verbose) {
|
|
1694
1695
|
log.info(`Loading configuration for "${name}"${alias ? ` (alias: "${alias}")` : ""} from ${baseDir}`);
|
|
@@ -1716,6 +1717,28 @@ async function loadConfig3({
|
|
|
1716
1717
|
}
|
|
1717
1718
|
}
|
|
1718
1719
|
}
|
|
1720
|
+
if (name) {
|
|
1721
|
+
const homeConfigDir = resolve3(homedir(), ".config", name);
|
|
1722
|
+
const homeConfigPatterns = ["config", `${name}.config`];
|
|
1723
|
+
if (alias) {
|
|
1724
|
+
homeConfigPatterns.push(`${alias}.config`);
|
|
1725
|
+
}
|
|
1726
|
+
if (verbose) {
|
|
1727
|
+
log.info(`Checking user config directory: ${homeConfigDir}`);
|
|
1728
|
+
}
|
|
1729
|
+
for (const configPath of homeConfigPatterns) {
|
|
1730
|
+
for (const ext of extensions) {
|
|
1731
|
+
const fullPath = resolve3(homeConfigDir, `${configPath}${ext}`);
|
|
1732
|
+
const config3 = await tryLoadConfig2(fullPath, configWithEnvVars);
|
|
1733
|
+
if (config3 !== null) {
|
|
1734
|
+
if (verbose) {
|
|
1735
|
+
log.success(`Configuration loaded from user config directory: ${fullPath}`);
|
|
1736
|
+
}
|
|
1737
|
+
return config3;
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
}
|
|
1741
|
+
}
|
|
1719
1742
|
try {
|
|
1720
1743
|
const pkgPath = resolve3(baseDir, "package.json");
|
|
1721
1744
|
if (existsSync3(pkgPath)) {
|
|
@@ -1750,8 +1773,8 @@ async function loadConfig3({
|
|
|
1750
1773
|
}
|
|
1751
1774
|
return configWithEnvVars;
|
|
1752
1775
|
}
|
|
1753
|
-
var defaultConfigDir2 = resolve3(
|
|
1754
|
-
var defaultGeneratedDir2 = resolve3(
|
|
1776
|
+
var defaultConfigDir2 = resolve3(process6.cwd(), "config");
|
|
1777
|
+
var defaultGeneratedDir2 = resolve3(process6.cwd(), "src/generated");
|
|
1755
1778
|
|
|
1756
1779
|
// git-hooks.config.ts
|
|
1757
1780
|
var config2 = {
|
|
@@ -1771,13 +1794,13 @@ var git_hooks_config_default = config2;
|
|
|
1771
1794
|
// src/config.ts
|
|
1772
1795
|
var config3 = await loadConfig3({
|
|
1773
1796
|
name: "git-hooks",
|
|
1774
|
-
cwd:
|
|
1797
|
+
cwd: process7.cwd(),
|
|
1775
1798
|
defaultConfig: git_hooks_config_default
|
|
1776
1799
|
});
|
|
1777
1800
|
// src/git-hooks.ts
|
|
1778
1801
|
import fs from "node:fs";
|
|
1779
1802
|
import path from "node:path";
|
|
1780
|
-
import
|
|
1803
|
+
import process10 from "node:process";
|
|
1781
1804
|
import { exec } from "node:child_process";
|
|
1782
1805
|
import { promisify } from "node:util";
|
|
1783
1806
|
|
|
@@ -3293,7 +3316,7 @@ if [ -f "$BUN_GIT_HOOKS_RC" ]; then
|
|
|
3293
3316
|
fi
|
|
3294
3317
|
|
|
3295
3318
|
`;
|
|
3296
|
-
function getGitProjectRoot(directory =
|
|
3319
|
+
function getGitProjectRoot(directory = process10.cwd()) {
|
|
3297
3320
|
if (directory.endsWith(".git")) {
|
|
3298
3321
|
return path.normalize(directory);
|
|
3299
3322
|
}
|
|
@@ -3355,7 +3378,7 @@ function checkBunGitHooksInDependencies(projectRootPath) {
|
|
|
3355
3378
|
}
|
|
3356
3379
|
return "bun-git-hooks" in packageJsonContent.devDependencies;
|
|
3357
3380
|
}
|
|
3358
|
-
function _getPackageJson(projectPath =
|
|
3381
|
+
function _getPackageJson(projectPath = process10.cwd()) {
|
|
3359
3382
|
if (typeof projectPath !== "string") {
|
|
3360
3383
|
throw new TypeError("projectPath is not a string");
|
|
3361
3384
|
}
|
|
@@ -3366,7 +3389,7 @@ function _getPackageJson(projectPath = process11.cwd()) {
|
|
|
3366
3389
|
const packageJsonDataRaw = fs.readFileSync(targetPackageJson, { encoding: "utf-8" });
|
|
3367
3390
|
return { packageJsonContent: JSON.parse(packageJsonDataRaw), packageJsonPath: targetPackageJson };
|
|
3368
3391
|
}
|
|
3369
|
-
function setHooksFromConfig(projectRootPath =
|
|
3392
|
+
function setHooksFromConfig(projectRootPath = process10.cwd(), options) {
|
|
3370
3393
|
if (!config3 || Object.keys(config3).length === 0)
|
|
3371
3394
|
throw new Error("[ERROR] Config was not found! Please add `.git-hooks.config.{ts,js,mjs,cjs,json}` or `git-hooks.config.{ts,js,mjs,cjs,json}` or the `git-hooks` entry in package.json.\r\nCheck README for details");
|
|
3372
3395
|
const configFile = options?.configFile || { ...config3 };
|
|
@@ -3388,7 +3411,7 @@ function setHooksFromConfig(projectRootPath = process11.cwd(), options) {
|
|
|
3388
3411
|
}
|
|
3389
3412
|
}
|
|
3390
3413
|
}
|
|
3391
|
-
async function getStagedFiles(projectRoot =
|
|
3414
|
+
async function getStagedFiles(projectRoot = process10.cwd()) {
|
|
3392
3415
|
try {
|
|
3393
3416
|
const { stdout } = await execAsync("git diff --cached --name-only --diff-filter=ACMR", { cwd: projectRoot });
|
|
3394
3417
|
const files = stdout.trim().split(`
|
|
@@ -3438,7 +3461,7 @@ function filterFilesByPattern(files, pattern) {
|
|
|
3438
3461
|
return isIncluded && !isExcluded;
|
|
3439
3462
|
});
|
|
3440
3463
|
}
|
|
3441
|
-
async function runCommandOnStagedFiles(command, files, projectRoot =
|
|
3464
|
+
async function runCommandOnStagedFiles(command, files, projectRoot = process10.cwd(), verbose = false) {
|
|
3442
3465
|
if (files.length === 0) {
|
|
3443
3466
|
if (verbose)
|
|
3444
3467
|
console.info("[INFO] No matching files for pattern");
|
|
@@ -3490,7 +3513,7 @@ async function processStagedLint(stagedLintConfig, projectRoot, verbose = false)
|
|
|
3490
3513
|
}
|
|
3491
3514
|
return success;
|
|
3492
3515
|
}
|
|
3493
|
-
function _setHook(hook, commandOrConfig, projectRoot =
|
|
3516
|
+
function _setHook(hook, commandOrConfig, projectRoot = process10.cwd()) {
|
|
3494
3517
|
const gitRoot = getGitProjectRoot(projectRoot);
|
|
3495
3518
|
if (!gitRoot) {
|
|
3496
3519
|
console.info("[INFO] No `.git` root folder found, skipping");
|
|
@@ -3514,11 +3537,11 @@ function _setHook(hook, commandOrConfig, projectRoot = process11.cwd()) {
|
|
|
3514
3537
|
log2.debug(`${addOrModify} ${italic2(hook)} hook`);
|
|
3515
3538
|
fs.writeFileSync(hookPath, hookCommand, { mode: 493 });
|
|
3516
3539
|
}
|
|
3517
|
-
function removeHooks(projectRoot =
|
|
3540
|
+
function removeHooks(projectRoot = process10.cwd(), verbose = false) {
|
|
3518
3541
|
for (const configEntry of VALID_GIT_HOOKS)
|
|
3519
3542
|
_removeHook(configEntry, projectRoot, verbose);
|
|
3520
3543
|
}
|
|
3521
|
-
function _removeHook(hook, projectRoot =
|
|
3544
|
+
function _removeHook(hook, projectRoot = process10.cwd(), verbose = false) {
|
|
3522
3545
|
const gitRoot = getGitProjectRoot(projectRoot);
|
|
3523
3546
|
const hookPath = path.normalize(`${gitRoot}/hooks/${hook}`);
|
|
3524
3547
|
if (fs.existsSync(hookPath)) {
|
|
@@ -3529,7 +3552,7 @@ function _removeHook(hook, projectRoot = process11.cwd(), verbose = false) {
|
|
|
3529
3552
|
log2.success(`Successfully removed the ${hook} hook`);
|
|
3530
3553
|
}
|
|
3531
3554
|
async function runStagedLint(hook) {
|
|
3532
|
-
const projectRoot =
|
|
3555
|
+
const projectRoot = process10.cwd();
|
|
3533
3556
|
const configFile = config3;
|
|
3534
3557
|
if (!configFile) {
|
|
3535
3558
|
console.error(`[ERROR] No configuration found`);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bun-git-hooks",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.19",
|
|
5
5
|
"description": "A modern, zero dependency tool for managing git hooks in Bun projects.",
|
|
6
6
|
"author": "Chris Breuer <chris@stacksjs.org>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -77,12 +77,12 @@
|
|
|
77
77
|
"@stacksjs/docs": "^0.70.23",
|
|
78
78
|
"@stacksjs/eslint-config": "^4.10.2-beta.3",
|
|
79
79
|
"@stacksjs/gitlint": "^0.1.5",
|
|
80
|
-
"@types/bun": "^1.2.
|
|
80
|
+
"@types/bun": "^1.2.19",
|
|
81
81
|
"bumpp": "^10.2.0",
|
|
82
82
|
"bun-plugin-dtsx": "^0.21.12",
|
|
83
|
-
"bunfig": "^0.10.
|
|
83
|
+
"bunfig": "^0.10.1",
|
|
84
84
|
"cac": "^6.7.14",
|
|
85
|
-
"changelogen": "^0.6.
|
|
85
|
+
"changelogen": "^0.6.2",
|
|
86
86
|
"typescript": "^5.8.3"
|
|
87
87
|
},
|
|
88
88
|
"overrides": {
|