@funish/basis 0.0.6 → 0.0.8

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/README.md CHANGED
@@ -306,12 +306,6 @@ export default defineBasisConfig({
306
306
  force: false, // Force operation even if git unavailable
307
307
  },
308
308
 
309
- // Package manager configuration (auto-detected)
310
- packageManager: {
311
- autoDetect: true, // Auto-detect package manager
312
- registry: "https://registry.npmjs.org/",
313
- },
314
-
315
309
  // Version management configuration
316
310
  version: {
317
311
  tagPrefix: "v", // Git tag prefix
@@ -1 +1 @@
1
- "use strict";const citty=require("citty"),consola=require("consola"),git$1=require("../shared/basis.BJKSWIma.cjs");require("node:child_process"),require("node:fs/promises"),require("c12/update"),require("defu"),require("ini"),require("pathe"),require("../shared/basis.cvMXIHAl.cjs"),require("c12"),require("../config.cjs");const git=citty.defineCommand({meta:{name:"git",description:"Git configuration and hooks management"},subCommands:{setup:citty.defineCommand({meta:{name:"setup",description:"Setup Git configuration and hooks"},async run(){const e=process.cwd();await git$1.setupGit(e)||process.exit(1)}}),config:citty.defineCommand({meta:{name:"config",description:"Setup Git configuration only"},async run(){const e=process.cwd();await git$1.setupGitConfig(e)||(consola.consola.error("Git configuration failed"),process.exit(1))}}),hooks:citty.defineCommand({meta:{name:"hooks",description:"Setup Git hooks only"},async run(){const e=process.cwd();await git$1.setupGitHooks(e)||(consola.consola.error("Git hooks setup failed"),process.exit(1))}}),remove:citty.defineCommand({meta:{name:"remove",description:"Remove Git hooks"},args:{hooks:{type:"positional",description:"Specific hook names to remove (optional)",required:!1},"update-config":{type:"boolean",description:"Also remove hooks configuration from basis.config.ts",default:!1}},async run({args:e}){const o=process.cwd(),i=e.hooks&&typeof e.hooks=="string"?[e.hooks]:Array.isArray(e.hooks)?e.hooks.filter(s=>typeof s=="string"):void 0,t=typeof e["update-config"]=="boolean"?e["update-config"]:!1;await git$1.removeGitHooks(o,i,{updateConfig:t})||(consola.consola.error("Git hooks removal failed"),process.exit(1))}}),reset:citty.defineCommand({meta:{name:"reset",description:"Reset Git configuration (keeps user info by default)"},args:{"keep-user":{type:"boolean",description:"Keep user information (name, email)",default:!0},"update-config":{type:"boolean",description:"Also remove git config from basis.config.ts",default:!1}},async run({args:e}){const o=process.cwd(),i=typeof e["keep-user"]=="boolean"?e["keep-user"]:!0,t=typeof e["update-config"]=="boolean"?e["update-config"]:!1;await git$1.resetGitConfig(o,i,{updateConfig:t})||(consola.consola.error("Git configuration reset failed"),process.exit(1))}}),init:citty.defineCommand({meta:{name:"init",description:"Initialize Git repository with basis configuration"},async run(){const e=process.cwd();await git$1.initGitRepo(e)||(consola.consola.error("Git initialization failed"),process.exit(1))}}),"lint-commit":citty.defineCommand({meta:{name:"lint-commit",description:"Validate commit message"},async run(){const e=process.cwd();await git$1.lintCommitMessage(e)||(consola.consola.error("Commit message validation failed"),process.exit(1))}})},async run(){}});exports.git=git;
1
+ "use strict";const citty=require("citty"),consola=require("consola"),git$1=require("../shared/basis.gpPjNGLA.cjs");require("node:child_process"),require("node:fs/promises"),require("c12/update"),require("defu"),require("ini"),require("pathe"),require("../shared/basis.cvMXIHAl.cjs"),require("c12"),require("../config.cjs");const git=citty.defineCommand({meta:{name:"git",description:"Git configuration and hooks management"},subCommands:{setup:citty.defineCommand({meta:{name:"setup",description:"Setup Git configuration and hooks"},async run(){const e=process.cwd();await git$1.setupGit(e)||process.exit(1)}}),config:citty.defineCommand({meta:{name:"config",description:"Setup Git configuration only"},async run(){const e=process.cwd();await git$1.setupGitConfig(e)||(consola.consola.error("Git configuration failed"),process.exit(1))}}),hooks:citty.defineCommand({meta:{name:"hooks",description:"Setup Git hooks only"},async run(){const e=process.cwd();await git$1.setupGitHooks(e)||(consola.consola.error("Git hooks setup failed"),process.exit(1))}}),remove:citty.defineCommand({meta:{name:"remove",description:"Remove Git hooks"},args:{hooks:{type:"positional",description:"Specific hook names to remove (optional)",required:!1},"update-config":{type:"boolean",description:"Also remove hooks configuration from basis.config.ts",default:!1}},async run({args:e}){const o=process.cwd(),i=e.hooks&&typeof e.hooks=="string"?[e.hooks]:Array.isArray(e.hooks)?e.hooks.filter(s=>typeof s=="string"):void 0,t=typeof e["update-config"]=="boolean"?e["update-config"]:!1;await git$1.removeGitHooks(o,i,{updateConfig:t})||(consola.consola.error("Git hooks removal failed"),process.exit(1))}}),reset:citty.defineCommand({meta:{name:"reset",description:"Reset Git configuration (keeps user info by default)"},args:{"keep-user":{type:"boolean",description:"Keep user information (name, email)",default:!0},"update-config":{type:"boolean",description:"Also remove git config from basis.config.ts",default:!1}},async run({args:e}){const o=process.cwd(),i=typeof e["keep-user"]=="boolean"?e["keep-user"]:!0,t=typeof e["update-config"]=="boolean"?e["update-config"]:!1;await git$1.resetGitConfig(o,i,{updateConfig:t})||(consola.consola.error("Git configuration reset failed"),process.exit(1))}}),init:citty.defineCommand({meta:{name:"init",description:"Initialize Git repository with basis configuration"},async run(){const e=process.cwd();await git$1.initGitRepo(e)||(consola.consola.error("Git initialization failed"),process.exit(1))}}),"lint-commit":citty.defineCommand({meta:{name:"lint-commit",description:"Validate commit message"},async run(){const e=process.cwd();await git$1.lintCommitMessage(e)||(consola.consola.error("Commit message validation failed"),process.exit(1))}})},async run(){}});exports.git=git;
@@ -1 +1 @@
1
- import{defineCommand as e}from"citty";import{consola as i}from"consola";import{l as r,i as c,b as p,d as m,c as f,a as d,s as u}from"../shared/basis.BNCGB3CO.mjs";import"node:child_process";import"node:fs/promises";import"c12/update";import"defu";import"ini";import"pathe";import"../shared/basis.BIUEmg1C.mjs";import"c12";import"../config.mjs";const l=e({meta:{name:"git",description:"Git configuration and hooks management"},subCommands:{setup:e({meta:{name:"setup",description:"Setup Git configuration and hooks"},async run(){const o=process.cwd();await u(o)||process.exit(1)}}),config:e({meta:{name:"config",description:"Setup Git configuration only"},async run(){const o=process.cwd();await d(o)||(i.error("Git configuration failed"),process.exit(1))}}),hooks:e({meta:{name:"hooks",description:"Setup Git hooks only"},async run(){const o=process.cwd();await f(o)||(i.error("Git hooks setup failed"),process.exit(1))}}),remove:e({meta:{name:"remove",description:"Remove Git hooks"},args:{hooks:{type:"positional",description:"Specific hook names to remove (optional)",required:!1},"update-config":{type:"boolean",description:"Also remove hooks configuration from basis.config.ts",default:!1}},async run({args:o}){const t=process.cwd(),s=o.hooks&&typeof o.hooks=="string"?[o.hooks]:Array.isArray(o.hooks)?o.hooks.filter(n=>typeof n=="string"):void 0,a=typeof o["update-config"]=="boolean"?o["update-config"]:!1;await m(t,s,{updateConfig:a})||(i.error("Git hooks removal failed"),process.exit(1))}}),reset:e({meta:{name:"reset",description:"Reset Git configuration (keeps user info by default)"},args:{"keep-user":{type:"boolean",description:"Keep user information (name, email)",default:!0},"update-config":{type:"boolean",description:"Also remove git config from basis.config.ts",default:!1}},async run({args:o}){const t=process.cwd(),s=typeof o["keep-user"]=="boolean"?o["keep-user"]:!0,a=typeof o["update-config"]=="boolean"?o["update-config"]:!1;await p(t,s,{updateConfig:a})||(i.error("Git configuration reset failed"),process.exit(1))}}),init:e({meta:{name:"init",description:"Initialize Git repository with basis configuration"},async run(){const o=process.cwd();await c(o)||(i.error("Git initialization failed"),process.exit(1))}}),"lint-commit":e({meta:{name:"lint-commit",description:"Validate commit message"},async run(){const o=process.cwd();await r(o)||(i.error("Commit message validation failed"),process.exit(1))}})},async run(){}});export{l as git};
1
+ import{defineCommand as e}from"citty";import{consola as i}from"consola";import{l as r,i as c,b as p,d as m,c as f,a as d,s as u}from"../shared/basis.C2jy0pwk.mjs";import"node:child_process";import"node:fs/promises";import"c12/update";import"defu";import"ini";import"pathe";import"../shared/basis.BIUEmg1C.mjs";import"c12";import"../config.mjs";const l=e({meta:{name:"git",description:"Git configuration and hooks management"},subCommands:{setup:e({meta:{name:"setup",description:"Setup Git configuration and hooks"},async run(){const o=process.cwd();await u(o)||process.exit(1)}}),config:e({meta:{name:"config",description:"Setup Git configuration only"},async run(){const o=process.cwd();await d(o)||(i.error("Git configuration failed"),process.exit(1))}}),hooks:e({meta:{name:"hooks",description:"Setup Git hooks only"},async run(){const o=process.cwd();await f(o)||(i.error("Git hooks setup failed"),process.exit(1))}}),remove:e({meta:{name:"remove",description:"Remove Git hooks"},args:{hooks:{type:"positional",description:"Specific hook names to remove (optional)",required:!1},"update-config":{type:"boolean",description:"Also remove hooks configuration from basis.config.ts",default:!1}},async run({args:o}){const t=process.cwd(),s=o.hooks&&typeof o.hooks=="string"?[o.hooks]:Array.isArray(o.hooks)?o.hooks.filter(n=>typeof n=="string"):void 0,a=typeof o["update-config"]=="boolean"?o["update-config"]:!1;await m(t,s,{updateConfig:a})||(i.error("Git hooks removal failed"),process.exit(1))}}),reset:e({meta:{name:"reset",description:"Reset Git configuration (keeps user info by default)"},args:{"keep-user":{type:"boolean",description:"Keep user information (name, email)",default:!0},"update-config":{type:"boolean",description:"Also remove git config from basis.config.ts",default:!1}},async run({args:o}){const t=process.cwd(),s=typeof o["keep-user"]=="boolean"?o["keep-user"]:!0,a=typeof o["update-config"]=="boolean"?o["update-config"]:!1;await p(t,s,{updateConfig:a})||(i.error("Git configuration reset failed"),process.exit(1))}}),init:e({meta:{name:"init",description:"Initialize Git repository with basis configuration"},async run(){const o=process.cwd();await c(o)||(i.error("Git initialization failed"),process.exit(1))}}),"lint-commit":e({meta:{name:"lint-commit",description:"Validate commit message"},async run(){const o=process.cwd();await r(o)||(i.error("Commit message validation failed"),process.exit(1))}})},async run(){}});export{l as git};
@@ -1 +1 @@
1
- "use strict";const citty=require("citty"),consola=require("consola"),init$1=require("../shared/basis.0tVAZPPb.cjs");require("c12/update"),require("magicast"),require("nypm"),require("pathe"),require("pkg-types"),require("../shared/basis.cvMXIHAl.cjs"),require("node:fs/promises"),require("c12"),require("../config.cjs"),require("../shared/basis.BJKSWIma.cjs"),require("node:child_process"),require("defu"),require("ini");const init=citty.defineCommand({meta:{name:"init",description:"Initialize basis configuration"},args:{force:{type:"boolean",alias:"f",description:"Overwrite existing configuration"},"skip-git-check":{type:"boolean",description:"Skip git directory check"},"skip-install":{type:"boolean",description:"Skip dependency installation"}},async run({args:e}){try{await init$1.init(process.cwd(),{force:e.force,skipGitCheck:e["skip-git-check"],skipInstall:e["skip-install"]})}catch(i){consola.consola.error("Init failed:",i),process.exit(1)}}});exports.default=init;
1
+ "use strict";const citty=require("citty"),consola=require("consola"),init$1=require("../shared/basis.DjCUp0ej.cjs");require("c12/update"),require("magicast"),require("nypm"),require("pathe"),require("pkg-types"),require("../shared/basis.cvMXIHAl.cjs"),require("node:fs/promises"),require("c12"),require("../config.cjs"),require("../shared/basis.gpPjNGLA.cjs"),require("node:child_process"),require("defu"),require("ini");const init=citty.defineCommand({meta:{name:"init",description:"Initialize basis configuration"},args:{force:{type:"boolean",alias:"f",description:"Overwrite existing configuration"},"skip-git-check":{type:"boolean",description:"Skip git directory check"},"skip-install":{type:"boolean",description:"Skip dependency installation"}},async run({args:e}){try{await init$1.init(process.cwd(),{force:e.force,skipGitCheck:e["skip-git-check"],skipInstall:e["skip-install"]})}catch(i){consola.consola.error("Init failed:",i),process.exit(1)}}});exports.default=init;
@@ -1 +1 @@
1
- import{defineCommand as o}from"citty";import{consola as r}from"consola";import{i as e}from"../shared/basis.C-8B63sq.mjs";import"c12/update";import"magicast";import"nypm";import"pathe";import"pkg-types";import"../shared/basis.BIUEmg1C.mjs";import"node:fs/promises";import"c12";import"../config.mjs";import"../shared/basis.BNCGB3CO.mjs";import"node:child_process";import"defu";import"ini";const p=o({meta:{name:"init",description:"Initialize basis configuration"},args:{force:{type:"boolean",alias:"f",description:"Overwrite existing configuration"},"skip-git-check":{type:"boolean",description:"Skip git directory check"},"skip-install":{type:"boolean",description:"Skip dependency installation"}},async run({args:i}){try{await e(process.cwd(),{force:i.force,skipGitCheck:i["skip-git-check"],skipInstall:i["skip-install"]})}catch(t){r.error("Init failed:",t),process.exit(1)}}});export{p as default};
1
+ import{defineCommand as o}from"citty";import{consola as r}from"consola";import{i as e}from"../shared/basis.y1NlNHFi.mjs";import"c12/update";import"magicast";import"nypm";import"pathe";import"pkg-types";import"../shared/basis.BIUEmg1C.mjs";import"node:fs/promises";import"c12";import"../config.mjs";import"../shared/basis.C2jy0pwk.mjs";import"node:child_process";import"defu";import"ini";const p=o({meta:{name:"init",description:"Initialize basis configuration"},args:{force:{type:"boolean",alias:"f",description:"Overwrite existing configuration"},"skip-git-check":{type:"boolean",description:"Skip git directory check"},"skip-install":{type:"boolean",description:"Skip dependency installation"}},async run({args:i}){try{await e(process.cwd(),{force:i.force,skipGitCheck:i["skip-git-check"],skipInstall:i["skip-install"]})}catch(t){r.error("Init failed:",t),process.exit(1)}}});export{p as default};
package/dist/config.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";function defineBasisConfig(e){return e}const defaultConfig={lint:{dependencies:{checkSecurity:!0},structure:{requiredFiles:["package.json"]},docs:{checkReadme:!0}},git:{hooks:{},config:{core:{autocrlf:"input"}},commitMsg:{types:["feat","fix","docs","style","refactor","perf","test","build","ci","chore","revert"]},autoSetup:!0,autoInitGit:!0,skipGitCheck:!1,force:!1},packageManager:{autoDetect:!0},version:{tagPrefix:"v",prereleaseId:"edge"},publish:{defaultTag:"edge",stableTag:"latest"}};exports.defaultConfig=defaultConfig,exports.defineBasisConfig=defineBasisConfig;
1
+ "use strict";function defineBasisConfig(e){return e}const defaultConfig={lint:{dependencies:{checkSecurity:!0},structure:{requiredFiles:["package.json"]}},git:{hooks:{},config:{core:{autocrlf:"input"}},commitMsg:{types:["feat","fix","docs","style","refactor","perf","test","build","ci","chore","revert"]},autoSetup:!0,autoInitGit:!0,skipGitCheck:!1,force:!1},version:{tagPrefix:"v",prereleaseId:"edge"},publish:{defaultTag:"edge",stableTag:"latest"}};exports.defaultConfig=defaultConfig,exports.defineBasisConfig=defineBasisConfig;
package/dist/config.d.cts CHANGED
@@ -1 +1 @@
1
- export { e as defaultConfig, d as defineBasisConfig } from './shared/basis.BvLeB_5F.cjs';
1
+ export { e as defaultConfig, d as defineBasisConfig } from './shared/basis.Cgn-yif_.cjs';
package/dist/config.d.mts CHANGED
@@ -1 +1 @@
1
- export { e as defaultConfig, d as defineBasisConfig } from './shared/basis.BvLeB_5F.mjs';
1
+ export { e as defaultConfig, d as defineBasisConfig } from './shared/basis.Cgn-yif_.mjs';
package/dist/config.d.ts CHANGED
@@ -1 +1 @@
1
- export { e as defaultConfig, d as defineBasisConfig } from './shared/basis.BvLeB_5F.js';
1
+ export { e as defaultConfig, d as defineBasisConfig } from './shared/basis.Cgn-yif_.js';
package/dist/config.mjs CHANGED
@@ -1 +1 @@
1
- function t(e){return e}const r={lint:{dependencies:{checkSecurity:!0},structure:{requiredFiles:["package.json"]},docs:{checkReadme:!0}},git:{hooks:{},config:{core:{autocrlf:"input"}},commitMsg:{types:["feat","fix","docs","style","refactor","perf","test","build","ci","chore","revert"]},autoSetup:!0,autoInitGit:!0,skipGitCheck:!1,force:!1},packageManager:{autoDetect:!0},version:{tagPrefix:"v",prereleaseId:"edge"},publish:{defaultTag:"edge",stableTag:"latest"}};export{r as defaultConfig,t as defineBasisConfig};
1
+ function t(e){return e}const i={lint:{dependencies:{checkSecurity:!0},structure:{requiredFiles:["package.json"]}},git:{hooks:{},config:{core:{autocrlf:"input"}},commitMsg:{types:["feat","fix","docs","style","refactor","perf","test","build","ci","chore","revert"]},autoSetup:!0,autoInitGit:!0,skipGitCheck:!1,force:!1},version:{tagPrefix:"v",prereleaseId:"edge"},publish:{defaultTag:"edge",stableTag:"latest"}};export{i as defaultConfig,t as defineBasisConfig};
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";const config=require("./config.cjs"),git=require("./shared/basis.BJKSWIma.cjs"),init=require("./shared/basis.0tVAZPPb.cjs"),lint=require("./shared/basis.CCOrCJM8.cjs"),publish=require("./shared/basis.CjDkLZ8j.cjs"),version=require("./shared/basis.CITlWl4E.cjs"),utils=require("./shared/basis.cvMXIHAl.cjs");require("node:child_process"),require("node:fs/promises"),require("c12/update"),require("consola"),require("defu"),require("ini"),require("pathe"),require("magicast"),require("nypm"),require("pkg-types"),require("fast-glob"),require("micromatch"),require("semver"),require("c12");class Basis{config=null;cwd;constructor(e=process.cwd()){this.cwd=e}getCwd(){return this.cwd}setCwd(e){this.cwd=e,this.config=null}async getConfig(){if(!this.config){const{config:e}=await utils.loadConfig({cwd:this.cwd});this.config=e}return this.config}async reloadConfig(){return this.config=null,await this.getConfig()}async setup(e={}){return await init.init(this.cwd,e)?await git.setupGit(this.cwd):!1}async release(e={},s={}){if(!await lint.lintAll(this.cwd))throw new Error("Lint checks failed. Fix issues before releasing.");const i=await version.updatePackageVersion(this.cwd,e),r=await publish.publishPackage(this.cwd,s);return{version:i,publish:r}}}function createBasis(t=process.cwd()){return new Basis(t)}const VALID_GIT_HOOKS=["applypatch-msg","pre-applypatch","post-applypatch","pre-commit","pre-merge-commit","prepare-commit-msg","commit-msg","post-commit","pre-rebase","post-checkout","post-merge","pre-push","pre-receive","update","proc-receive","post-receive","post-update","reference-transaction","push-to-checkout","pre-auto-gc","post-rewrite","sendemail-validate","fsmonitor-watchman","p4-changelist","p4-prepare-changelist","p4-post-changelist","p4-pre-submit","post-index-change"];exports.defaultConfig=config.defaultConfig,exports.defineBasisConfig=config.defineBasisConfig,exports.initGitRepo=git.initGitRepo,exports.lintCommitMessage=git.lintCommitMessage,exports.parseCommitMessage=git.parseCommitMessage,exports.readGitConfig=git.readGitConfig,exports.removeGitHooks=git.removeGitHooks,exports.resetGitConfig=git.resetGitConfig,exports.setupGit=git.setupGit,exports.setupGitConfig=git.setupGitConfig,exports.setupGitHooks=git.setupGitHooks,exports.validateCommitMessage=git.validateCommitMessage,exports.writeGitConfig=git.writeGitConfig,exports.init=init.init,exports.getProjectFiles=lint.getProjectFiles,exports.getStagedFiles=lint.getStagedFiles,exports.lintAll=lint.lintAll,exports.lintDependencies=lint.lintDependencies,exports.lintDocs=lint.lintDocs,exports.lintProject=lint.lintProject,exports.lintStaged=lint.lintStaged,exports.lintStructure=lint.lintStructure,exports.publishPackage=publish.publishPackage,exports.updatePackageVersion=version.updatePackageVersion,exports.fileExists=utils.fileExists,exports.getPackageManagerCommands=utils.getPackageManagerCommands,exports.loadConfig=utils.loadConfig,exports.Basis=Basis,exports.VALID_GIT_HOOKS=VALID_GIT_HOOKS,exports.createBasis=createBasis;
1
+ "use strict";const config=require("./config.cjs"),git=require("./shared/basis.gpPjNGLA.cjs"),init=require("./shared/basis.DjCUp0ej.cjs"),lint=require("./shared/basis.CCOrCJM8.cjs"),publish=require("./shared/basis.CjDkLZ8j.cjs"),version=require("./shared/basis.CITlWl4E.cjs"),utils=require("./shared/basis.cvMXIHAl.cjs");require("node:child_process"),require("node:fs/promises"),require("c12/update"),require("consola"),require("defu"),require("ini"),require("pathe"),require("magicast"),require("nypm"),require("pkg-types"),require("fast-glob"),require("micromatch"),require("semver"),require("c12");class Basis{config=null;cwd;constructor(e=process.cwd()){this.cwd=e}getCwd(){return this.cwd}setCwd(e){this.cwd=e,this.config=null}async getConfig(){if(!this.config){const{config:e}=await utils.loadConfig({cwd:this.cwd});this.config=e}return this.config}async reloadConfig(){return this.config=null,await this.getConfig()}async setup(e={}){return await init.init(this.cwd,e)?await git.setupGit(this.cwd):!1}async release(e={},s={}){if(!await lint.lintAll(this.cwd))throw new Error("Lint checks failed. Fix issues before releasing.");const i=await version.updatePackageVersion(this.cwd,e),r=await publish.publishPackage(this.cwd,s);return{version:i,publish:r}}}function createBasis(t=process.cwd()){return new Basis(t)}const VALID_GIT_HOOKS=["applypatch-msg","pre-applypatch","post-applypatch","pre-commit","pre-merge-commit","prepare-commit-msg","commit-msg","post-commit","pre-rebase","post-checkout","post-merge","pre-push","pre-receive","update","proc-receive","post-receive","post-update","reference-transaction","push-to-checkout","pre-auto-gc","post-rewrite","sendemail-validate","fsmonitor-watchman","p4-changelist","p4-prepare-changelist","p4-post-changelist","p4-pre-submit","post-index-change"];exports.defaultConfig=config.defaultConfig,exports.defineBasisConfig=config.defineBasisConfig,exports.initGitRepo=git.initGitRepo,exports.lintCommitMessage=git.lintCommitMessage,exports.parseCommitMessage=git.parseCommitMessage,exports.readGitConfig=git.readGitConfig,exports.removeGitHooks=git.removeGitHooks,exports.resetGitConfig=git.resetGitConfig,exports.setupGit=git.setupGit,exports.setupGitConfig=git.setupGitConfig,exports.setupGitHooks=git.setupGitHooks,exports.validateCommitMessage=git.validateCommitMessage,exports.writeGitConfig=git.writeGitConfig,exports.init=init.init,exports.getProjectFiles=lint.getProjectFiles,exports.getStagedFiles=lint.getStagedFiles,exports.lintAll=lint.lintAll,exports.lintDependencies=lint.lintDependencies,exports.lintDocs=lint.lintDocs,exports.lintProject=lint.lintProject,exports.lintStaged=lint.lintStaged,exports.lintStructure=lint.lintStructure,exports.publishPackage=publish.publishPackage,exports.updatePackageVersion=version.updatePackageVersion,exports.fileExists=utils.fileExists,exports.getPackageManagerCommands=utils.getPackageManagerCommands,exports.loadConfig=utils.loadConfig,exports.Basis=Basis,exports.VALID_GIT_HOOKS=VALID_GIT_HOOKS,exports.createBasis=createBasis;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { B as BasisConfig, I as InitOptions, V as VersionOptions, P as PublishOptions, a as VersionUpdateResult, b as PublishResult, C as CommitMessage, G as GitConfig, c as GitConfigData, L as LintConfig } from './shared/basis.BvLeB_5F.cjs';
2
- export { f as CommitMsgConfig, j as GitConfigSection, i as GitConfigValue, k as PackageManagerConfig, m as PublishConfig, g as VALID_GIT_HOOKS, h as ValidGitHook, l as VersionConfig, e as defaultConfig, d as defineBasisConfig } from './shared/basis.BvLeB_5F.cjs';
1
+ import { B as BasisConfig, I as InitOptions, V as VersionOptions, P as PublishOptions, a as VersionUpdateResult, b as PublishResult, C as CommitMessage, G as GitConfig, c as GitConfigData, L as LintConfig } from './shared/basis.Cgn-yif_.cjs';
2
+ export { f as CommitMsgConfig, j as GitConfigSection, i as GitConfigValue, l as PublishConfig, g as VALID_GIT_HOOKS, h as ValidGitHook, k as VersionConfig, e as defaultConfig, d as defineBasisConfig } from './shared/basis.Cgn-yif_.cjs';
3
3
  import * as c12 from 'c12';
4
4
  import { LoadConfigOptions } from 'c12';
5
5
 
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { B as BasisConfig, I as InitOptions, V as VersionOptions, P as PublishOptions, a as VersionUpdateResult, b as PublishResult, C as CommitMessage, G as GitConfig, c as GitConfigData, L as LintConfig } from './shared/basis.BvLeB_5F.mjs';
2
- export { f as CommitMsgConfig, j as GitConfigSection, i as GitConfigValue, k as PackageManagerConfig, m as PublishConfig, g as VALID_GIT_HOOKS, h as ValidGitHook, l as VersionConfig, e as defaultConfig, d as defineBasisConfig } from './shared/basis.BvLeB_5F.mjs';
1
+ import { B as BasisConfig, I as InitOptions, V as VersionOptions, P as PublishOptions, a as VersionUpdateResult, b as PublishResult, C as CommitMessage, G as GitConfig, c as GitConfigData, L as LintConfig } from './shared/basis.Cgn-yif_.mjs';
2
+ export { f as CommitMsgConfig, j as GitConfigSection, i as GitConfigValue, l as PublishConfig, g as VALID_GIT_HOOKS, h as ValidGitHook, k as VersionConfig, e as defaultConfig, d as defineBasisConfig } from './shared/basis.Cgn-yif_.mjs';
3
3
  import * as c12 from 'c12';
4
4
  import { LoadConfigOptions } from 'c12';
5
5
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { B as BasisConfig, I as InitOptions, V as VersionOptions, P as PublishOptions, a as VersionUpdateResult, b as PublishResult, C as CommitMessage, G as GitConfig, c as GitConfigData, L as LintConfig } from './shared/basis.BvLeB_5F.js';
2
- export { f as CommitMsgConfig, j as GitConfigSection, i as GitConfigValue, k as PackageManagerConfig, m as PublishConfig, g as VALID_GIT_HOOKS, h as ValidGitHook, l as VersionConfig, e as defaultConfig, d as defineBasisConfig } from './shared/basis.BvLeB_5F.js';
1
+ import { B as BasisConfig, I as InitOptions, V as VersionOptions, P as PublishOptions, a as VersionUpdateResult, b as PublishResult, C as CommitMessage, G as GitConfig, c as GitConfigData, L as LintConfig } from './shared/basis.Cgn-yif_.js';
2
+ export { f as CommitMsgConfig, j as GitConfigSection, i as GitConfigValue, l as PublishConfig, g as VALID_GIT_HOOKS, h as ValidGitHook, k as VersionConfig, e as defaultConfig, d as defineBasisConfig } from './shared/basis.Cgn-yif_.js';
3
3
  import * as c12 from 'c12';
4
4
  import { LoadConfigOptions } from 'c12';
5
5
 
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- export{defaultConfig,defineBasisConfig}from"./config.mjs";import{s as e}from"./shared/basis.BNCGB3CO.mjs";export{i as initGitRepo,l as lintCommitMessage,p as parseCommitMessage,r as readGitConfig,d as removeGitHooks,b as resetGitConfig,a as setupGitConfig,c as setupGitHooks,v as validateCommitMessage,w as writeGitConfig}from"./shared/basis.BNCGB3CO.mjs";import{i as s}from"./shared/basis.C-8B63sq.mjs";import{l as o}from"./shared/basis.B_nrd74H.mjs";export{a as getProjectFiles,g as getStagedFiles,d as lintDependencies,f as lintDocs,c as lintProject,b as lintStaged,e as lintStructure}from"./shared/basis.B_nrd74H.mjs";import{p as a}from"./shared/basis.CSrt7vG8.mjs";import{u as r}from"./shared/basis.1_Z0I9PT.mjs";import{l as p}from"./shared/basis.BIUEmg1C.mjs";export{f as fileExists,g as getPackageManagerCommands}from"./shared/basis.BIUEmg1C.mjs";import"node:child_process";import"node:fs/promises";import"c12/update";import"consola";import"defu";import"ini";import"pathe";import"magicast";import"nypm";import"pkg-types";import"fast-glob";import"micromatch";import"semver";import"c12";class c{config=null;cwd;constructor(t=process.cwd()){this.cwd=t}getCwd(){return this.cwd}setCwd(t){this.cwd=t,this.config=null}async getConfig(){if(!this.config){const{config:t}=await p({cwd:this.cwd});this.config=t}return this.config}async reloadConfig(){return this.config=null,await this.getConfig()}async setup(t={}){return await s(this.cwd,t)?await e(this.cwd):!1}async release(t={},n={}){if(!await o(this.cwd))throw new Error("Lint checks failed. Fix issues before releasing.");const m=await r(this.cwd,t),g=await a(this.cwd,n);return{version:m,publish:g}}}function f(i=process.cwd()){return new c(i)}const l=["applypatch-msg","pre-applypatch","post-applypatch","pre-commit","pre-merge-commit","prepare-commit-msg","commit-msg","post-commit","pre-rebase","post-checkout","post-merge","pre-push","pre-receive","update","proc-receive","post-receive","post-update","reference-transaction","push-to-checkout","pre-auto-gc","post-rewrite","sendemail-validate","fsmonitor-watchman","p4-changelist","p4-prepare-changelist","p4-post-changelist","p4-pre-submit","post-index-change"];export{c as Basis,l as VALID_GIT_HOOKS,f as createBasis,s as init,o as lintAll,p as loadConfig,a as publishPackage,e as setupGit,r as updatePackageVersion};
1
+ export{defaultConfig,defineBasisConfig}from"./config.mjs";import{s as e}from"./shared/basis.C2jy0pwk.mjs";export{i as initGitRepo,l as lintCommitMessage,p as parseCommitMessage,r as readGitConfig,d as removeGitHooks,b as resetGitConfig,a as setupGitConfig,c as setupGitHooks,v as validateCommitMessage,w as writeGitConfig}from"./shared/basis.C2jy0pwk.mjs";import{i as s}from"./shared/basis.y1NlNHFi.mjs";import{l as o}from"./shared/basis.B_nrd74H.mjs";export{a as getProjectFiles,g as getStagedFiles,d as lintDependencies,f as lintDocs,c as lintProject,b as lintStaged,e as lintStructure}from"./shared/basis.B_nrd74H.mjs";import{p as a}from"./shared/basis.CSrt7vG8.mjs";import{u as r}from"./shared/basis.1_Z0I9PT.mjs";import{l as p}from"./shared/basis.BIUEmg1C.mjs";export{f as fileExists,g as getPackageManagerCommands}from"./shared/basis.BIUEmg1C.mjs";import"node:child_process";import"node:fs/promises";import"c12/update";import"consola";import"defu";import"ini";import"pathe";import"magicast";import"nypm";import"pkg-types";import"fast-glob";import"micromatch";import"semver";import"c12";class c{config=null;cwd;constructor(t=process.cwd()){this.cwd=t}getCwd(){return this.cwd}setCwd(t){this.cwd=t,this.config=null}async getConfig(){if(!this.config){const{config:t}=await p({cwd:this.cwd});this.config=t}return this.config}async reloadConfig(){return this.config=null,await this.getConfig()}async setup(t={}){return await s(this.cwd,t)?await e(this.cwd):!1}async release(t={},n={}){if(!await o(this.cwd))throw new Error("Lint checks failed. Fix issues before releasing.");const m=await r(this.cwd,t),g=await a(this.cwd,n);return{version:m,publish:g}}}function f(i=process.cwd()){return new c(i)}const l=["applypatch-msg","pre-applypatch","post-applypatch","pre-commit","pre-merge-commit","prepare-commit-msg","commit-msg","post-commit","pre-rebase","post-checkout","post-merge","pre-push","pre-receive","update","proc-receive","post-receive","post-update","reference-transaction","push-to-checkout","pre-auto-gc","post-rewrite","sendemail-validate","fsmonitor-watchman","p4-changelist","p4-prepare-changelist","p4-post-changelist","p4-pre-submit","post-index-change"];export{c as Basis,l as VALID_GIT_HOOKS,f as createBasis,s as init,o as lintAll,p as loadConfig,a as publishPackage,e as setupGit,r as updatePackageVersion};
@@ -0,0 +1,10 @@
1
+ import{execSync as p}from"node:child_process";import{readFile as h,unlink as M,writeFile as y,copyFile as O}from"node:fs/promises";import{updateConfig as S}from"c12/update";import{consola as a}from"consola";import{defu as x}from"defu";import v from"ini";import{resolve as u}from"pathe";import{l as d,f as g}from"./basis.BIUEmg1C.mjs";function G(){try{return p("git --version",{stdio:"pipe"}),!0}catch{return!1}}async function k(e,o=!1,r=!1){try{return await S({cwd:e,configFile:"basis.config",onUpdate:t=>{t.git&&(o&&t.git.hooks&&delete t.git.hooks,r&&t.git.config&&delete t.git.config,Object.keys(t.git).length===0&&delete t.git)}}),!0}catch{return!1}}const E=["feat","fix","docs","style","refactor","perf","test","build","ci","chore","revert"];function b(e){const o=e.trim().split(`
2
+ `),r=o[0].match(/^(\w+)(\(([^)]+)\))?(!)?:\s*(.+)$/);if(!r)return null;const[,t,,i,n,s]=r,c=o.slice(1).find(l=>l.trim())?.trim(),f=o.slice(-1)[0]?.trim();return{type:t,scope:i,description:s,body:c,footer:f,isBreaking:!!n||e.includes("BREAKING CHANGE:")}}function $(e,o={}){const r=[],{types:t=E,maxLength:i=72,minLength:n=10,scopeRequired:s=!1,allowedScopes:c=[]}=o,f=b(e);if(!f)return{valid:!1,errors:["Invalid commit format. Expected: type(scope): description"]};t.includes(f.type)||r.push(`Invalid type '${f.type}'. Allowed: ${t.join(", ")}`);const l=e.split(`
3
+ `)[0];return l.length>i&&r.push(`Header too long (${l.length}). Max: ${i}`),l.length<n&&r.push(`Header too short (${l.length}). Min: ${n}`),s&&!f.scope&&r.push("Scope is required"),f.scope&&c.length>0&&!c.includes(f.scope)&&r.push(`Invalid scope '${f.scope}'. Allowed: ${c.join(", ")}`),{valid:r.length===0,errors:r}}async function H(e=process.cwd(),o){if(!G())return a.warn("Git command not available, skipping commit message linting"),!0;const{config:r}=await d({cwd:e,overrides:o?{git:{commitMsg:o}}:void 0}),t=r.git?.commitMsg||{};let i;try{const s=u(".git/COMMIT_EDITMSG");await g(s)?i=(await h(s)).toString("utf8"):i=p("git log -1 --pretty=%B",{encoding:"utf8"}).trim()}catch(s){return a.error("Failed to read commit message:",s),!1}const n=$(i,t);return n.valid?!0:(a.error("Invalid commit message:"),n.errors.forEach(s=>a.error(` ${s}`)),!1)}async function j(e){const o=u(e,".git/config");if(!await g(o))return null;const r=new Date().toISOString().replace(/[:.]/g,"-"),t=u(e,`.git/config.backup.${r}`);try{return await O(o,t),t}catch(i){return a.warn("Failed to create Git config backup:",i),null}}async function m(e=process.cwd()){const o=u(e,".git/config");if(!await g(o))return{};try{const r=await h(o,"utf8");return v.parse(r)}catch(r){return a.warn("Failed to read .git/config:",r),{}}}async function w(e,o=process.cwd()){const r=u(o,".git/config");try{let t=v.stringify(e,{whitespace:!0});t=t.split(`
4
+ `).map(i=>i&&!i.startsWith("[")&&i.includes("=")?` ${i}`:i).join(`
5
+ `),await y(r,t,"utf8")}catch(t){throw a.error("Failed to write .git/config:",t),t}}function A(e,o){if(!o)return!0;for(const[r,t]of Object.entries(o)){if(typeof t!="object"||!t)continue;const i=e[r];if(!i||typeof i!="object")return!1;for(const[n,s]of Object.entries(t))if(s!==void 0&&i[n]!==s)return!1}return!0}async function C(e=process.cwd(),o){const{config:r}=await d({cwd:e,overrides:o?{git:{config:o}}:void 0}),t=r.git?.config||{};if(Object.keys(t).length===0)return!0;try{const i=await m(e);if(A(i,t))return!0;await j(e);const n=x(i,t);return await w(n,e),!0}catch(i){return a.error("Failed to setup Git configuration:",i),!1}}async function z(e=process.cwd(),o=!0,r={}){try{await j(e);const t=await m(e);if(!t||Object.keys(t).length===0)return!0;const i={};if(o&&t.user&&(i.user=t.user),t.core){const n=["repositoryformatversion","filemode","bare","logallrefupdates"],s={};n.forEach(c=>{t.core[c]!==void 0&&(s[c]=t.core[c])}),Object.keys(s).length>0&&(i.core=s)}return await w(i,e),r.updateConfig?await k(e,!1,!0):!0}catch(t){return a.error("Failed to reset Git configuration:",t),!1}}async function F(e=process.cwd(),o){const{config:r}=await d({cwd:e,overrides:o?{git:{hooks:o}}:void 0}),t=r.git?.hooks||{},i=u(e,".git/hooks");if(!await g(i))return a.error("Git hooks directory not found. Is this a Git repository?"),!1;let n=!0;for(const[s,c]of Object.entries(t)){const f=u(i,s);try{let l=`#!/bin/sh
6
+
7
+ `;if(typeof c=="string")l+=`${c}
8
+ `;else if(c&&typeof c=="object"&&"commands"in c){const I=c.commands;l+=`${I.join(`
9
+ `)}
10
+ `}await y(f,l,{mode:493})}catch(l){a.error(`Failed to setup ${s} hook:`,l),n=!1}}return n}async function B(e=process.cwd()){if(!G())return a.warn("Git command not available, cannot initialize repository"),!1;try{try{return p("git rev-parse --git-dir",{cwd:e,stdio:"pipe"}),!0}catch{return p("git init",{cwd:e,stdio:"inherit"}),a.success("Initialized Git repository"),!0}}catch(o){return a.error("Failed to initialize Git repository:",o),!1}}async function R(e=process.cwd()){const{config:o}=await d({cwd:e}),r=o.git||{},t=(await Promise.allSettled([C(e,r.config),F(e,r.hooks)])).filter(i=>i.status==="rejected"||i.status==="fulfilled"&&!i.value);return t.length===0?(a.success("Git setup completed successfully!"),!0):(a.error(`${t.length} Git setup step(s) failed`),!1)}async function q(e=process.cwd(),o,r={}){const t=u(e,".git/hooks");if(!await g(t))return a.warn("Git hooks directory not found. Is this a Git repository?"),!0;let i=!0,n;if(o&&o.length>0)n=o;else{const{config:s}=await d({cwd:e});n=Object.keys(s.git?.hooks||{})}for(const s of n){const c=u(t,s);if(await g(c))try{await M(c)}catch(f){a.error(`Failed to remove ${s} hook:`,f),i=!1}}if(!o&&r.updateConfig){const s=await k(e,!0,!1);i=i&&s}return i}export{C as a,z as b,F as c,q as d,B as i,H as l,b as p,m as r,R as s,$ as v,w};
@@ -1,7 +1,6 @@
1
1
  interface BasisConfig {
2
2
  lint?: LintConfig;
3
3
  git?: GitConfig;
4
- packageManager?: PackageManagerConfig;
5
4
  version?: VersionConfig;
6
5
  publish?: PublishConfig;
7
6
  }
@@ -159,14 +158,6 @@ type ValidGitHook = (typeof VALID_GIT_HOOKS)[number];
159
158
  type GitConfigValue = string | number | boolean;
160
159
  type GitConfigSection = Record<string, GitConfigValue>;
161
160
  type GitConfigData = Record<string, GitConfigSection>;
162
- interface PackageManagerConfig {
163
- /** Preferred package manager (aligned with nypm support) */
164
- preferred?: "npm" | "yarn" | "pnpm" | "bun" | "deno";
165
- /** Auto-detect package manager from project */
166
- autoDetect?: boolean;
167
- /** NPM registry URL */
168
- registry?: string;
169
- }
170
161
  interface VersionConfig {
171
162
  /** Git tag prefix */
172
163
  tagPrefix?: string;
@@ -250,4 +241,4 @@ declare function defineBasisConfig(config: BasisConfig): BasisConfig;
250
241
  declare const defaultConfig: BasisConfig;
251
242
 
252
243
  export { defineBasisConfig as d, defaultConfig as e, VALID_GIT_HOOKS as g };
253
- export type { BasisConfig as B, CommitMessage as C, GitConfig as G, InitOptions as I, LintConfig as L, PublishOptions as P, VersionOptions as V, VersionUpdateResult as a, PublishResult as b, GitConfigData as c, CommitMsgConfig as f, ValidGitHook as h, GitConfigValue as i, GitConfigSection as j, PackageManagerConfig as k, VersionConfig as l, PublishConfig as m };
244
+ export type { BasisConfig as B, CommitMessage as C, GitConfig as G, InitOptions as I, LintConfig as L, PublishOptions as P, VersionOptions as V, VersionUpdateResult as a, PublishResult as b, GitConfigData as c, CommitMsgConfig as f, ValidGitHook as h, GitConfigValue as i, GitConfigSection as j, VersionConfig as k, PublishConfig as l };
@@ -1,7 +1,6 @@
1
1
  interface BasisConfig {
2
2
  lint?: LintConfig;
3
3
  git?: GitConfig;
4
- packageManager?: PackageManagerConfig;
5
4
  version?: VersionConfig;
6
5
  publish?: PublishConfig;
7
6
  }
@@ -159,14 +158,6 @@ type ValidGitHook = (typeof VALID_GIT_HOOKS)[number];
159
158
  type GitConfigValue = string | number | boolean;
160
159
  type GitConfigSection = Record<string, GitConfigValue>;
161
160
  type GitConfigData = Record<string, GitConfigSection>;
162
- interface PackageManagerConfig {
163
- /** Preferred package manager (aligned with nypm support) */
164
- preferred?: "npm" | "yarn" | "pnpm" | "bun" | "deno";
165
- /** Auto-detect package manager from project */
166
- autoDetect?: boolean;
167
- /** NPM registry URL */
168
- registry?: string;
169
- }
170
161
  interface VersionConfig {
171
162
  /** Git tag prefix */
172
163
  tagPrefix?: string;
@@ -250,4 +241,4 @@ declare function defineBasisConfig(config: BasisConfig): BasisConfig;
250
241
  declare const defaultConfig: BasisConfig;
251
242
 
252
243
  export { defineBasisConfig as d, defaultConfig as e, VALID_GIT_HOOKS as g };
253
- export type { BasisConfig as B, CommitMessage as C, GitConfig as G, InitOptions as I, LintConfig as L, PublishOptions as P, VersionOptions as V, VersionUpdateResult as a, PublishResult as b, GitConfigData as c, CommitMsgConfig as f, ValidGitHook as h, GitConfigValue as i, GitConfigSection as j, PackageManagerConfig as k, VersionConfig as l, PublishConfig as m };
244
+ export type { BasisConfig as B, CommitMessage as C, GitConfig as G, InitOptions as I, LintConfig as L, PublishOptions as P, VersionOptions as V, VersionUpdateResult as a, PublishResult as b, GitConfigData as c, CommitMsgConfig as f, ValidGitHook as h, GitConfigValue as i, GitConfigSection as j, VersionConfig as k, PublishConfig as l };
@@ -1,7 +1,6 @@
1
1
  interface BasisConfig {
2
2
  lint?: LintConfig;
3
3
  git?: GitConfig;
4
- packageManager?: PackageManagerConfig;
5
4
  version?: VersionConfig;
6
5
  publish?: PublishConfig;
7
6
  }
@@ -159,14 +158,6 @@ type ValidGitHook = (typeof VALID_GIT_HOOKS)[number];
159
158
  type GitConfigValue = string | number | boolean;
160
159
  type GitConfigSection = Record<string, GitConfigValue>;
161
160
  type GitConfigData = Record<string, GitConfigSection>;
162
- interface PackageManagerConfig {
163
- /** Preferred package manager (aligned with nypm support) */
164
- preferred?: "npm" | "yarn" | "pnpm" | "bun" | "deno";
165
- /** Auto-detect package manager from project */
166
- autoDetect?: boolean;
167
- /** NPM registry URL */
168
- registry?: string;
169
- }
170
161
  interface VersionConfig {
171
162
  /** Git tag prefix */
172
163
  tagPrefix?: string;
@@ -250,4 +241,4 @@ declare function defineBasisConfig(config: BasisConfig): BasisConfig;
250
241
  declare const defaultConfig: BasisConfig;
251
242
 
252
243
  export { defineBasisConfig as d, defaultConfig as e, VALID_GIT_HOOKS as g };
253
- export type { BasisConfig as B, CommitMessage as C, GitConfig as G, InitOptions as I, LintConfig as L, PublishOptions as P, VersionOptions as V, VersionUpdateResult as a, PublishResult as b, GitConfigData as c, CommitMsgConfig as f, ValidGitHook as h, GitConfigValue as i, GitConfigSection as j, PackageManagerConfig as k, VersionConfig as l, PublishConfig as m };
244
+ export type { BasisConfig as B, CommitMessage as C, GitConfig as G, InitOptions as I, LintConfig as L, PublishOptions as P, VersionOptions as V, VersionUpdateResult as a, PublishResult as b, GitConfigData as c, CommitMsgConfig as f, ValidGitHook as h, GitConfigValue as i, GitConfigSection as j, VersionConfig as k, PublishConfig as l };
@@ -1,4 +1,4 @@
1
- "use strict";const update=require("c12/update"),consola=require("consola"),magicast=require("magicast"),nypm=require("nypm"),pathe=require("pathe"),pkgTypes=require("pkg-types"),utils=require("./basis.cvMXIHAl.cjs"),git=require("./basis.BJKSWIma.cjs"),S={ts:{ext:"ts",label:"TypeScript"},mjs:{ext:"mjs",label:"ES Module"},cjs:{ext:"cjs",label:"CommonJS"}};function J(i,r="npm"){const o=magicast.parseModule(i==="cjs"?`const { defineBasisConfig } = require("@funish/basis");
1
+ "use strict";const update=require("c12/update"),consola=require("consola"),magicast=require("magicast"),nypm=require("nypm"),pathe=require("pathe"),pkgTypes=require("pkg-types"),utils=require("./basis.cvMXIHAl.cjs"),git=require("./basis.gpPjNGLA.cjs"),S={ts:{ext:"ts",label:"TypeScript"},mjs:{ext:"mjs",label:"ES Module"},cjs:{ext:"cjs",label:"CommonJS"}};function J(i,r="npm"){const o=magicast.parseModule(i==="cjs"?`const { defineBasisConfig } = require("@funish/basis");
2
2
 
3
3
  module.exports = defineBasisConfig({});`:`import { defineBasisConfig } from "@funish/basis";
4
4
 
@@ -0,0 +1,10 @@
1
+ "use strict";const node_child_process=require("node:child_process"),promises=require("node:fs/promises"),update=require("c12/update"),consola=require("consola"),defu=require("defu"),C=require("ini"),pathe=require("pathe"),utils=require("./basis.cvMXIHAl.cjs");function _interopDefaultCompat(e){return e&&typeof e=="object"&&"default"in e?e.default:e}const C__default=_interopDefaultCompat(C);function G(){try{return node_child_process.execSync("git --version",{stdio:"pipe"}),!0}catch{return!1}}async function b(e,i=!1,r=!1){try{return await update.updateConfig({cwd:e,configFile:"basis.config",onUpdate:t=>{t.git&&(i&&t.git.hooks&&delete t.git.hooks,r&&t.git.config&&delete t.git.config,Object.keys(t.git).length===0&&delete t.git)}}),!0}catch{return!1}}const M=["feat","fix","docs","style","refactor","perf","test","build","ci","chore","revert"];function parseCommitMessage(e){const i=e.trim().split(`
2
+ `),r=i[0].match(/^(\w+)(\(([^)]+)\))?(!)?:\s*(.+)$/);if(!r)return null;const[,t,,o,n,s]=r,c=i.slice(1).find(l=>l.trim())?.trim(),a=i.slice(-1)[0]?.trim();return{type:t,scope:o,description:s,body:c,footer:a,isBreaking:!!n||e.includes("BREAKING CHANGE:")}}function validateCommitMessage(e,i={}){const r=[],{types:t=M,maxLength:o=72,minLength:n=10,scopeRequired:s=!1,allowedScopes:c=[]}=i,a=parseCommitMessage(e);if(!a)return{valid:!1,errors:["Invalid commit format. Expected: type(scope): description"]};t.includes(a.type)||r.push(`Invalid type '${a.type}'. Allowed: ${t.join(", ")}`);const l=e.split(`
3
+ `)[0];return l.length>o&&r.push(`Header too long (${l.length}). Max: ${o}`),l.length<n&&r.push(`Header too short (${l.length}). Min: ${n}`),s&&!a.scope&&r.push("Scope is required"),a.scope&&c.length>0&&!c.includes(a.scope)&&r.push(`Invalid scope '${a.scope}'. Allowed: ${c.join(", ")}`),{valid:r.length===0,errors:r}}async function lintCommitMessage(e=process.cwd(),i){if(!G())return consola.consola.warn("Git command not available, skipping commit message linting"),!0;const{config:r}=await utils.loadConfig({cwd:e,overrides:i?{git:{commitMsg:i}}:void 0}),t=r.git?.commitMsg||{};let o;try{const s=pathe.resolve(".git/COMMIT_EDITMSG");await utils.fileExists(s)?o=(await promises.readFile(s)).toString("utf8"):o=node_child_process.execSync("git log -1 --pretty=%B",{encoding:"utf8"}).trim()}catch(s){return consola.consola.error("Failed to read commit message:",s),!1}const n=validateCommitMessage(o,t);return n.valid?!0:(consola.consola.error("Invalid commit message:"),n.errors.forEach(s=>consola.consola.error(` ${s}`)),!1)}async function w(e){const i=pathe.resolve(e,".git/config");if(!await utils.fileExists(i))return null;const r=new Date().toISOString().replace(/[:.]/g,"-"),t=pathe.resolve(e,`.git/config.backup.${r}`);try{return await promises.copyFile(i,t),t}catch(o){return consola.consola.warn("Failed to create Git config backup:",o),null}}async function readGitConfig(e=process.cwd()){const i=pathe.resolve(e,".git/config");if(!await utils.fileExists(i))return{};try{const r=await promises.readFile(i,"utf8");return C__default.parse(r)}catch(r){return consola.consola.warn("Failed to read .git/config:",r),{}}}async function writeGitConfig(e,i=process.cwd()){const r=pathe.resolve(i,".git/config");try{let t=C__default.stringify(e,{whitespace:!0});t=t.split(`
4
+ `).map(o=>o&&!o.startsWith("[")&&o.includes("=")?` ${o}`:o).join(`
5
+ `),await promises.writeFile(r,t,"utf8")}catch(t){throw consola.consola.error("Failed to write .git/config:",t),t}}function S(e,i){if(!i)return!0;for(const[r,t]of Object.entries(i)){if(typeof t!="object"||!t)continue;const o=e[r];if(!o||typeof o!="object")return!1;for(const[n,s]of Object.entries(t))if(s!==void 0&&o[n]!==s)return!1}return!0}async function setupGitConfig(e=process.cwd(),i){const{config:r}=await utils.loadConfig({cwd:e,overrides:i?{git:{config:i}}:void 0}),t=r.git?.config||{};if(Object.keys(t).length===0)return!0;try{const o=await readGitConfig(e);if(S(o,t))return!0;await w(e);const n=defu.defu(o,t);return await writeGitConfig(n,e),!0}catch(o){return consola.consola.error("Failed to setup Git configuration:",o),!1}}async function resetGitConfig(e=process.cwd(),i=!0,r={}){try{await w(e);const t=await readGitConfig(e);if(!t||Object.keys(t).length===0)return!0;const o={};if(i&&t.user&&(o.user=t.user),t.core){const n=["repositoryformatversion","filemode","bare","logallrefupdates"],s={};n.forEach(c=>{t.core[c]!==void 0&&(s[c]=t.core[c])}),Object.keys(s).length>0&&(o.core=s)}return await writeGitConfig(o,e),r.updateConfig?await b(e,!1,!0):!0}catch(t){return consola.consola.error("Failed to reset Git configuration:",t),!1}}async function setupGitHooks(e=process.cwd(),i){const{config:r}=await utils.loadConfig({cwd:e,overrides:i?{git:{hooks:i}}:void 0}),t=r.git?.hooks||{},o=pathe.resolve(e,".git/hooks");if(!await utils.fileExists(o))return consola.consola.error("Git hooks directory not found. Is this a Git repository?"),!1;let n=!0;for(const[s,c]of Object.entries(t)){const a=pathe.resolve(o,s);try{let l=`#!/bin/sh
6
+
7
+ `;if(typeof c=="string")l+=`${c}
8
+ `;else if(c&&typeof c=="object"&&"commands"in c){const f=c.commands;l+=`${f.join(`
9
+ `)}
10
+ `}await promises.writeFile(a,l,{mode:493})}catch(l){consola.consola.error(`Failed to setup ${s} hook:`,l),n=!1}}return n}async function initGitRepo(e=process.cwd()){if(!G())return consola.consola.warn("Git command not available, cannot initialize repository"),!1;try{try{return node_child_process.execSync("git rev-parse --git-dir",{cwd:e,stdio:"pipe"}),!0}catch{return node_child_process.execSync("git init",{cwd:e,stdio:"inherit"}),consola.consola.success("Initialized Git repository"),!0}}catch(i){return consola.consola.error("Failed to initialize Git repository:",i),!1}}async function setupGit(e=process.cwd()){const{config:i}=await utils.loadConfig({cwd:e}),r=i.git||{},t=(await Promise.allSettled([setupGitConfig(e,r.config),setupGitHooks(e,r.hooks)])).filter(o=>o.status==="rejected"||o.status==="fulfilled"&&!o.value);return t.length===0?(consola.consola.success("Git setup completed successfully!"),!0):(consola.consola.error(`${t.length} Git setup step(s) failed`),!1)}async function removeGitHooks(e=process.cwd(),i,r={}){const t=pathe.resolve(e,".git/hooks");if(!await utils.fileExists(t))return consola.consola.warn("Git hooks directory not found. Is this a Git repository?"),!0;let o=!0,n;if(i&&i.length>0)n=i;else{const{config:s}=await utils.loadConfig({cwd:e});n=Object.keys(s.git?.hooks||{})}for(const s of n){const c=pathe.resolve(t,s);if(await utils.fileExists(c))try{await promises.unlink(c)}catch(a){consola.consola.error(`Failed to remove ${s} hook:`,a),o=!1}}if(!i&&r.updateConfig){const s=await b(e,!0,!1);o=o&&s}return o}exports.initGitRepo=initGitRepo,exports.lintCommitMessage=lintCommitMessage,exports.parseCommitMessage=parseCommitMessage,exports.readGitConfig=readGitConfig,exports.removeGitHooks=removeGitHooks,exports.resetGitConfig=resetGitConfig,exports.setupGit=setupGit,exports.setupGitConfig=setupGitConfig,exports.setupGitHooks=setupGitHooks,exports.validateCommitMessage=validateCommitMessage,exports.writeGitConfig=writeGitConfig;
@@ -1,4 +1,4 @@
1
- import{updateConfig as S}from"c12/update";import{consola as i}from"consola";import{parseModule as z,generateCode as B}from"magicast";import{detectPackageManager as v,addDevDependency as F}from"nypm";import{resolve as c}from"pathe";import{findWorkspaceDir as P,readPackageJSON as C,writePackageJSON as D}from"pkg-types";import{f as p,g as I}from"./basis.BIUEmg1C.mjs";import{i as J,s as M}from"./basis.BNCGB3CO.mjs";const j={ts:{ext:"ts",label:"TypeScript"},mjs:{ext:"mjs",label:"ES Module"},cjs:{ext:"cjs",label:"CommonJS"}};function N(t,l="npm"){const n=z(t==="cjs"?`const { defineBasisConfig } = require("@funish/basis");
1
+ import{updateConfig as S}from"c12/update";import{consola as i}from"consola";import{parseModule as z,generateCode as B}from"magicast";import{detectPackageManager as v,addDevDependency as F}from"nypm";import{resolve as c}from"pathe";import{findWorkspaceDir as P,readPackageJSON as C,writePackageJSON as D}from"pkg-types";import{f as p,g as I}from"./basis.BIUEmg1C.mjs";import{i as J,s as M}from"./basis.C2jy0pwk.mjs";const j={ts:{ext:"ts",label:"TypeScript"},mjs:{ext:"mjs",label:"ES Module"},cjs:{ext:"cjs",label:"CommonJS"}};function N(t,l="npm"){const n=z(t==="cjs"?`const { defineBasisConfig } = require("@funish/basis");
2
2
 
3
3
  module.exports = defineBasisConfig({});`:`import { defineBasisConfig } from "@funish/basis";
4
4
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funish/basis",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "A unified development toolkit with CLI for package management, versioning, publishing, linting, and git hooks management for JavaScript/TypeScript projects.",
5
5
  "main": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
@@ -1,10 +0,0 @@
1
- "use strict";const node_child_process=require("node:child_process"),promises=require("node:fs/promises"),update=require("c12/update"),consola=require("consola"),defu=require("defu"),y=require("ini"),pathe=require("pathe"),utils=require("./basis.cvMXIHAl.cjs");function _interopDefaultCompat(e){return e&&typeof e=="object"&&"default"in e?e.default:e}const y__default=_interopDefaultCompat(y);async function G(e,i=!1,s=!1){try{return await update.updateConfig({cwd:e,configFile:"basis.config",onUpdate:t=>{t.git&&(i&&t.git.hooks&&delete t.git.hooks,s&&t.git.config&&delete t.git.config,Object.keys(t.git).length===0&&delete t.git)}}),!0}catch{return!1}}const P=["feat","fix","docs","style","refactor","perf","test","build","ci","chore","revert"];function parseCommitMessage(e){const i=e.trim().split(`
2
- `),s=i[0].match(/^(\w+)(\(([^)]+)\))?(!)?:\s*(.+)$/);if(!s)return null;const[,t,,o,n,r]=s,c=i.slice(1).find(l=>l.trim())?.trim(),a=i.slice(-1)[0]?.trim();return{type:t,scope:o,description:r,body:c,footer:a,isBreaking:!!n||e.includes("BREAKING CHANGE:")}}function validateCommitMessage(e,i={}){const s=[],{types:t=P,maxLength:o=72,minLength:n=10,scopeRequired:r=!1,allowedScopes:c=[]}=i,a=parseCommitMessage(e);if(!a)return{valid:!1,errors:["Invalid commit format. Expected: type(scope): description"]};t.includes(a.type)||s.push(`Invalid type '${a.type}'. Allowed: ${t.join(", ")}`);const l=e.split(`
3
- `)[0];return l.length>o&&s.push(`Header too long (${l.length}). Max: ${o}`),l.length<n&&s.push(`Header too short (${l.length}). Min: ${n}`),r&&!a.scope&&s.push("Scope is required"),a.scope&&c.length>0&&!c.includes(a.scope)&&s.push(`Invalid scope '${a.scope}'. Allowed: ${c.join(", ")}`),{valid:s.length===0,errors:s}}async function lintCommitMessage(e=process.cwd(),i){const{config:s}=await utils.loadConfig({cwd:e,overrides:i?{git:{commitMsg:i}}:void 0}),t=s.git?.commitMsg||{};let o;try{const r=pathe.resolve(".git/COMMIT_EDITMSG");await utils.fileExists(r)?o=(await promises.readFile(r)).toString("utf8"):o=node_child_process.execSync("git log -1 --pretty=%B",{encoding:"utf8"}).trim()}catch(r){return consola.consola.error("Failed to read commit message:",r),!1}const n=validateCommitMessage(o,t);return n.valid?!0:(consola.consola.error("Invalid commit message:"),n.errors.forEach(r=>consola.consola.error(` ${r}`)),!1)}async function w(e){const i=pathe.resolve(e,".git/config");if(!await utils.fileExists(i))return null;const s=new Date().toISOString().replace(/[:.]/g,"-"),t=pathe.resolve(e,`.git/config.backup.${s}`);try{return await promises.copyFile(i,t),t}catch(o){return consola.consola.warn("Failed to create Git config backup:",o),null}}async function readGitConfig(e=process.cwd()){const i=pathe.resolve(e,".git/config");if(!await utils.fileExists(i))return{};try{const s=await promises.readFile(i,"utf8");return y__default.parse(s)}catch(s){return consola.consola.warn("Failed to read .git/config:",s),{}}}async function writeGitConfig(e,i=process.cwd()){const s=pathe.resolve(i,".git/config");try{let t=y__default.stringify(e,{whitespace:!0});t=t.split(`
4
- `).map(o=>o&&!o.startsWith("[")&&o.includes("=")?` ${o}`:o).join(`
5
- `),await promises.writeFile(s,t,"utf8")}catch(t){throw consola.consola.error("Failed to write .git/config:",t),t}}function M(e,i){if(!i)return!0;for(const[s,t]of Object.entries(i)){if(typeof t!="object"||!t)continue;const o=e[s];if(!o||typeof o!="object")return!1;for(const[n,r]of Object.entries(t))if(r!==void 0&&o[n]!==r)return!1}return!0}async function setupGitConfig(e=process.cwd(),i){const{config:s}=await utils.loadConfig({cwd:e,overrides:i?{git:{config:i}}:void 0}),t=s.git?.config||{};if(Object.keys(t).length===0)return!0;try{const o=await readGitConfig(e);if(M(o,t))return!0;await w(e);const n=defu.defu(o,t);return await writeGitConfig(n,e),!0}catch(o){return consola.consola.error("Failed to setup Git configuration:",o),!1}}async function resetGitConfig(e=process.cwd(),i=!0,s={}){try{await w(e);const t=await readGitConfig(e);if(!t||Object.keys(t).length===0)return!0;const o={};if(i&&t.user&&(o.user=t.user),t.core){const n=["repositoryformatversion","filemode","bare","logallrefupdates"],r={};n.forEach(c=>{t.core[c]!==void 0&&(r[c]=t.core[c])}),Object.keys(r).length>0&&(o.core=r)}return await writeGitConfig(o,e),s.updateConfig?await G(e,!1,!0):!0}catch(t){return consola.consola.error("Failed to reset Git configuration:",t),!1}}async function setupGitHooks(e=process.cwd(),i){const{config:s}=await utils.loadConfig({cwd:e,overrides:i?{git:{hooks:i}}:void 0}),t=s.git?.hooks||{},o=pathe.resolve(e,".git/hooks");if(!await utils.fileExists(o))return consola.consola.error("Git hooks directory not found. Is this a Git repository?"),!1;let n=!0;for(const[r,c]of Object.entries(t)){const a=pathe.resolve(o,r);try{let l=`#!/bin/sh
6
-
7
- `;if(typeof c=="string")l+=`${c}
8
- `;else if(c&&typeof c=="object"&&"commands"in c){const f=c.commands;l+=`${f.join(`
9
- `)}
10
- `}await promises.writeFile(a,l,{mode:493})}catch(l){consola.consola.error(`Failed to setup ${r} hook:`,l),n=!1}}return n}async function initGitRepo(e=process.cwd()){try{try{return node_child_process.execSync("git rev-parse --git-dir",{cwd:e,stdio:"pipe"}),!0}catch{return node_child_process.execSync("git init",{cwd:e,stdio:"inherit"}),consola.consola.success("Initialized Git repository"),!0}}catch(i){return consola.consola.error("Failed to initialize Git repository:",i),!1}}async function setupGit(e=process.cwd()){const{config:i}=await utils.loadConfig({cwd:e}),s=i.git||{},t=(await Promise.allSettled([setupGitConfig(e,s.config),setupGitHooks(e,s.hooks)])).filter(o=>o.status==="rejected"||o.status==="fulfilled"&&!o.value);return t.length===0?(consola.consola.success("Git setup completed successfully!"),!0):(consola.consola.error(`${t.length} Git setup step(s) failed`),!1)}async function removeGitHooks(e=process.cwd(),i,s={}){const t=pathe.resolve(e,".git/hooks");if(!await utils.fileExists(t))return consola.consola.warn("Git hooks directory not found. Is this a Git repository?"),!0;let o=!0,n;if(i&&i.length>0)n=i;else{const{config:r}=await utils.loadConfig({cwd:e});n=Object.keys(r.git?.hooks||{})}for(const r of n){const c=pathe.resolve(t,r);if(await utils.fileExists(c))try{await promises.unlink(c)}catch(a){consola.consola.error(`Failed to remove ${r} hook:`,a),o=!1}}if(!i&&s.updateConfig){const r=await G(e,!0,!1);o=o&&r}return o}exports.initGitRepo=initGitRepo,exports.lintCommitMessage=lintCommitMessage,exports.parseCommitMessage=parseCommitMessage,exports.readGitConfig=readGitConfig,exports.removeGitHooks=removeGitHooks,exports.resetGitConfig=resetGitConfig,exports.setupGit=setupGit,exports.setupGitConfig=setupGitConfig,exports.setupGitHooks=setupGitHooks,exports.validateCommitMessage=validateCommitMessage,exports.writeGitConfig=writeGitConfig;
@@ -1,10 +0,0 @@
1
- import{execSync as p}from"node:child_process";import{readFile as m,unlink as I,writeFile as y,copyFile as M}from"node:fs/promises";import{updateConfig as O}from"c12/update";import{consola as a}from"consola";import{defu as S}from"defu";import v from"ini";import{resolve as u}from"pathe";import{l as g,f as d}from"./basis.BIUEmg1C.mjs";async function k(e,i=!1,r=!1){try{return await O({cwd:e,configFile:"basis.config",onUpdate:t=>{t.git&&(i&&t.git.hooks&&delete t.git.hooks,r&&t.git.config&&delete t.git.config,Object.keys(t.git).length===0&&delete t.git)}}),!0}catch{return!1}}const x=["feat","fix","docs","style","refactor","perf","test","build","ci","chore","revert"];function G(e){const i=e.trim().split(`
2
- `),r=i[0].match(/^(\w+)(\(([^)]+)\))?(!)?:\s*(.+)$/);if(!r)return null;const[,t,,o,n,s]=r,c=i.slice(1).find(l=>l.trim())?.trim(),f=i.slice(-1)[0]?.trim();return{type:t,scope:o,description:s,body:c,footer:f,isBreaking:!!n||e.includes("BREAKING CHANGE:")}}function b(e,i={}){const r=[],{types:t=x,maxLength:o=72,minLength:n=10,scopeRequired:s=!1,allowedScopes:c=[]}=i,f=G(e);if(!f)return{valid:!1,errors:["Invalid commit format. Expected: type(scope): description"]};t.includes(f.type)||r.push(`Invalid type '${f.type}'. Allowed: ${t.join(", ")}`);const l=e.split(`
3
- `)[0];return l.length>o&&r.push(`Header too long (${l.length}). Max: ${o}`),l.length<n&&r.push(`Header too short (${l.length}). Min: ${n}`),s&&!f.scope&&r.push("Scope is required"),f.scope&&c.length>0&&!c.includes(f.scope)&&r.push(`Invalid scope '${f.scope}'. Allowed: ${c.join(", ")}`),{valid:r.length===0,errors:r}}async function E(e=process.cwd(),i){const{config:r}=await g({cwd:e,overrides:i?{git:{commitMsg:i}}:void 0}),t=r.git?.commitMsg||{};let o;try{const s=u(".git/COMMIT_EDITMSG");await d(s)?o=(await m(s)).toString("utf8"):o=p("git log -1 --pretty=%B",{encoding:"utf8"}).trim()}catch(s){return a.error("Failed to read commit message:",s),!1}const n=b(o,t);return n.valid?!0:(a.error("Invalid commit message:"),n.errors.forEach(s=>a.error(` ${s}`)),!1)}async function $(e){const i=u(e,".git/config");if(!await d(i))return null;const r=new Date().toISOString().replace(/[:.]/g,"-"),t=u(e,`.git/config.backup.${r}`);try{return await M(i,t),t}catch(o){return a.warn("Failed to create Git config backup:",o),null}}async function w(e=process.cwd()){const i=u(e,".git/config");if(!await d(i))return{};try{const r=await m(i,"utf8");return v.parse(r)}catch(r){return a.warn("Failed to read .git/config:",r),{}}}async function h(e,i=process.cwd()){const r=u(i,".git/config");try{let t=v.stringify(e,{whitespace:!0});t=t.split(`
4
- `).map(o=>o&&!o.startsWith("[")&&o.includes("=")?` ${o}`:o).join(`
5
- `),await y(r,t,"utf8")}catch(t){throw a.error("Failed to write .git/config:",t),t}}function H(e,i){if(!i)return!0;for(const[r,t]of Object.entries(i)){if(typeof t!="object"||!t)continue;const o=e[r];if(!o||typeof o!="object")return!1;for(const[n,s]of Object.entries(t))if(s!==void 0&&o[n]!==s)return!1}return!0}async function j(e=process.cwd(),i){const{config:r}=await g({cwd:e,overrides:i?{git:{config:i}}:void 0}),t=r.git?.config||{};if(Object.keys(t).length===0)return!0;try{const o=await w(e);if(H(o,t))return!0;await $(e);const n=S(o,t);return await h(n,e),!0}catch(o){return a.error("Failed to setup Git configuration:",o),!1}}async function A(e=process.cwd(),i=!0,r={}){try{await $(e);const t=await w(e);if(!t||Object.keys(t).length===0)return!0;const o={};if(i&&t.user&&(o.user=t.user),t.core){const n=["repositoryformatversion","filemode","bare","logallrefupdates"],s={};n.forEach(c=>{t.core[c]!==void 0&&(s[c]=t.core[c])}),Object.keys(s).length>0&&(o.core=s)}return await h(o,e),r.updateConfig?await k(e,!1,!0):!0}catch(t){return a.error("Failed to reset Git configuration:",t),!1}}async function C(e=process.cwd(),i){const{config:r}=await g({cwd:e,overrides:i?{git:{hooks:i}}:void 0}),t=r.git?.hooks||{},o=u(e,".git/hooks");if(!await d(o))return a.error("Git hooks directory not found. Is this a Git repository?"),!1;let n=!0;for(const[s,c]of Object.entries(t)){const f=u(o,s);try{let l=`#!/bin/sh
6
-
7
- `;if(typeof c=="string")l+=`${c}
8
- `;else if(c&&typeof c=="object"&&"commands"in c){const F=c.commands;l+=`${F.join(`
9
- `)}
10
- `}await y(f,l,{mode:493})}catch(l){a.error(`Failed to setup ${s} hook:`,l),n=!1}}return n}async function B(e=process.cwd()){try{try{return p("git rev-parse --git-dir",{cwd:e,stdio:"pipe"}),!0}catch{return p("git init",{cwd:e,stdio:"inherit"}),a.success("Initialized Git repository"),!0}}catch(i){return a.error("Failed to initialize Git repository:",i),!1}}async function R(e=process.cwd()){const{config:i}=await g({cwd:e}),r=i.git||{},t=(await Promise.allSettled([j(e,r.config),C(e,r.hooks)])).filter(o=>o.status==="rejected"||o.status==="fulfilled"&&!o.value);return t.length===0?(a.success("Git setup completed successfully!"),!0):(a.error(`${t.length} Git setup step(s) failed`),!1)}async function q(e=process.cwd(),i,r={}){const t=u(e,".git/hooks");if(!await d(t))return a.warn("Git hooks directory not found. Is this a Git repository?"),!0;let o=!0,n;if(i&&i.length>0)n=i;else{const{config:s}=await g({cwd:e});n=Object.keys(s.git?.hooks||{})}for(const s of n){const c=u(t,s);if(await d(c))try{await I(c)}catch(f){a.error(`Failed to remove ${s} hook:`,f),o=!1}}if(!i&&r.updateConfig){const s=await k(e,!0,!1);o=o&&s}return o}export{j as a,A as b,C as c,q as d,B as i,E as l,G as p,w as r,R as s,b as v,h as w};