@funish/basis 0.0.7 → 0.1.0

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.
Files changed (43) hide show
  1. package/README.md +71 -6
  2. package/dist/chunks/config.cjs +1 -1
  3. package/dist/chunks/config.mjs +1 -1
  4. package/dist/chunks/git.cjs +1 -1
  5. package/dist/chunks/git.mjs +1 -1
  6. package/dist/chunks/init.cjs +1 -1
  7. package/dist/chunks/init.mjs +1 -1
  8. package/dist/chunks/lint.cjs +1 -1
  9. package/dist/chunks/lint.mjs +1 -1
  10. package/dist/chunks/publish.cjs +1 -1
  11. package/dist/chunks/publish.mjs +1 -1
  12. package/dist/chunks/version.cjs +1 -1
  13. package/dist/chunks/version.mjs +1 -1
  14. package/dist/config.cjs +1 -1
  15. package/dist/config.d.cts +1 -1
  16. package/dist/config.d.mts +1 -1
  17. package/dist/config.d.ts +1 -1
  18. package/dist/config.mjs +1 -1
  19. package/dist/index.cjs +1 -1
  20. package/dist/index.d.cts +15 -6
  21. package/dist/index.d.mts +15 -6
  22. package/dist/index.d.ts +15 -6
  23. package/dist/index.mjs +1 -1
  24. package/dist/shared/{basis.DjCUp0ej.cjs → basis.1-2-e6uu.cjs} +1 -1
  25. package/dist/shared/{basis.1_Z0I9PT.mjs → basis.4m3-erzm.mjs} +1 -1
  26. package/dist/shared/{basis.C2jy0pwk.mjs → basis.BDhrNAQD.mjs} +1 -1
  27. package/dist/shared/basis.Bd1FyPZU.mjs +3 -0
  28. package/dist/shared/{basis.CITlWl4E.cjs → basis.Bqr6BGbD.cjs} +1 -1
  29. package/dist/shared/basis.BrlVPuDi.mjs +1 -0
  30. package/dist/shared/{basis.CjDkLZ8j.cjs → basis.Bz4YLlJG.cjs} +1 -1
  31. package/dist/shared/{basis.y1NlNHFi.mjs → basis.C4FYR2wo.mjs} +1 -1
  32. package/dist/shared/basis.CRtpAFNR.cjs +3 -0
  33. package/dist/shared/{basis.CSrt7vG8.mjs → basis.CYJFGkEy.mjs} +1 -1
  34. package/dist/shared/basis.D3fInv-P.cjs +1 -0
  35. package/dist/shared/{basis.BvLeB_5F.d.mts → basis.DoHZYvYm.d.cts} +32 -10
  36. package/dist/shared/{basis.BvLeB_5F.d.ts → basis.DoHZYvYm.d.mts} +32 -10
  37. package/dist/shared/{basis.BvLeB_5F.d.cts → basis.DoHZYvYm.d.ts} +32 -10
  38. package/dist/shared/{basis.gpPjNGLA.cjs → basis.DuZo2uz1.cjs} +1 -1
  39. package/package.json +1 -1
  40. package/dist/shared/basis.BIUEmg1C.mjs +0 -1
  41. package/dist/shared/basis.B_nrd74H.mjs +0 -3
  42. package/dist/shared/basis.CCOrCJM8.cjs +0 -3
  43. package/dist/shared/basis.cvMXIHAl.cjs +0 -1
package/README.md CHANGED
@@ -19,6 +19,7 @@ Basis is your **unified development toolkit** for modern JavaScript/TypeScript p
19
19
  - 🏷️ **Version Management**: Semantic versioning with automated git tagging and releases
20
20
  - 🚀 **Publishing**: Multi-tag publishing strategy with edge version tracking
21
21
  - 🔧 **Tool Agnostic Linting**: Not tied to specific linters - use ESLint, Oxlint, Biome, or any tool you prefer
22
+ - 🛠️ **Auto-fix Issues**: Automatically fix dependencies, structure, and documentation issues
22
23
  - 🪝 **Smart Git Hooks**: Automatic git repository initialization and hook management
23
24
  - 💻 **Modern Stack**: Built on the unjs ecosystem (citty, consola, c12, nypm, semver)
24
25
  - 💪 **TypeScript First**: Full TypeScript support with excellent DX
@@ -155,6 +156,57 @@ basis lint --docs
155
156
 
156
157
  # Run all lint checks
157
158
  basis lint --all
159
+
160
+ # Auto-fix issues (can be combined with any check)
161
+ basis lint --deps --fix # Check and fix dependency issues
162
+ basis lint --structure --fix # Check and fix structure issues
163
+ basis lint --docs --fix # Check and fix documentation issues
164
+ basis lint --all --fix # Check and fix all issues
165
+ basis lint --staged --fix # Note: --fix only works with --deps, --structure, --docs, --all
166
+ ```
167
+
168
+ #### Auto-fix Features
169
+
170
+ The `--fix` flag enables automatic fixing of common issues:
171
+
172
+ **🔧 Dependency Fixes**:
173
+
174
+ - **Remove blocked packages**: Automatically uninstall packages listed in `blockedPackages`
175
+ - **Update outdated dependencies**: Use package manager's update command to fix outdated packages
176
+ - **Fix security vulnerabilities**: Attempt to fix security issues using `npm audit fix` or equivalent
177
+
178
+ **📁 Structure Fixes**:
179
+
180
+ - **Create missing files**: Generate empty files for items in `requiredFiles`
181
+ - **Create missing directories**: Generate directories for items in `requiredDirs`
182
+
183
+ **📝 Documentation Fixes**:
184
+
185
+ - **Generate README.md**: Create an empty README.md if missing
186
+ - **Generate CHANGELOG.md**: Create an empty CHANGELOG.md if missing
187
+
188
+ **Configuration**: All fix behaviors are controlled by the `lint.fix` configuration in your `basis.config.ts`:
189
+
190
+ ```ts
191
+ export default defineBasisConfig({
192
+ lint: {
193
+ fix: {
194
+ dependencies: {
195
+ removeBlocked: true, // Enable automatic removal of blocked packages
196
+ updateOutdated: false, // Disable automatic updates (manual control)
197
+ fixSecurity: true, // Enable security fix attempts
198
+ },
199
+ structure: {
200
+ createMissingFiles: true, // Enable file creation
201
+ createMissingDirs: true, // Enable directory creation
202
+ },
203
+ docs: {
204
+ generateReadme: true, // Enable README generation
205
+ generateChangelog: false, // Disable CHANGELOG generation
206
+ },
207
+ },
208
+ },
209
+ });
158
210
  ```
159
211
 
160
212
  ### Git Hooks Management
@@ -270,6 +322,25 @@ export default defineBasisConfig({
270
322
  typecheck: "pnpm tsc --noEmit",
271
323
  "format-check": "pnpm prettier --check .",
272
324
  },
325
+ // Auto-fix configuration
326
+ fix: {
327
+ // Dependency fix options
328
+ dependencies: {
329
+ removeBlocked: true, // Auto-remove blocked packages
330
+ updateOutdated: true, // Auto-update outdated dependencies
331
+ fixSecurity: true, // Auto-fix security vulnerabilities
332
+ },
333
+ // Structure fix options
334
+ structure: {
335
+ createMissingFiles: true, // Auto-create missing required files
336
+ createMissingDirs: true, // Auto-create missing required directories
337
+ },
338
+ // Documentation fix options
339
+ docs: {
340
+ generateReadme: true, // Auto-create README.md if missing
341
+ generateChangelog: true, // Auto-create CHANGELOG.md if missing
342
+ },
343
+ },
273
344
  },
274
345
 
275
346
  // Git configuration
@@ -306,12 +377,6 @@ export default defineBasisConfig({
306
377
  force: false, // Force operation even if git unavailable
307
378
  },
308
379
 
309
- // Package manager configuration (auto-detected)
310
- packageManager: {
311
- autoDetect: true, // Auto-detect package manager
312
- registry: "https://registry.npmjs.org/",
313
- },
314
-
315
380
  // Version management configuration
316
381
  version: {
317
382
  tagPrefix: "v", // Git tag prefix
@@ -1 +1 @@
1
- "use strict";const citty=require("citty"),consola=require("consola"),utils=require("../shared/basis.cvMXIHAl.cjs");require("node:fs/promises"),require("c12"),require("../config.cjs");const config=citty.defineCommand({meta:{name:"config",description:"View current basis configuration"},args:{json:{type:"boolean",description:"Output configuration as JSON"},path:{type:"boolean",description:"Show configuration file path"}},async run({args:e}){try{const s=process.cwd(),{config:o,configFile:t}=await utils.loadConfig({cwd:s});if(e.path){t?consola.consola.info(`Configuration file: ${t}`):(consola.consola.warn("No configuration file found"),consola.consola.info("Run `basis init` to create one"));return}if(Object.keys(o).length===0){consola.consola.warn("No configuration found"),consola.consola.info("Run `basis init` to create a basis.config.ts file");return}if(e.json)consola.consola.log(JSON.stringify(o,null,2));else{if(consola.consola.info("Current basis configuration:"),t&&consola.consola.log(`\u{1F4C1} Config file: ${t}`),o.lint){if(consola.consola.log(""),consola.consola.log("\u{1F4DD} Lint:"),o.lint.staged){consola.consola.log(" Staged files:");for(const[n,i]of Object.entries(o.lint.staged))consola.consola.log(` ${n}: ${i}`)}if(o.lint.project){consola.consola.log(" Project:");for(const[n,i]of Object.entries(o.lint.project))consola.consola.log(` ${n}: ${i}`)}}if(o.git&&(consola.consola.log(""),consola.consola.log("\u{1F527} Git:"),o.git.commitMsg&&(consola.consola.log(" Commit message:"),o.git.commitMsg.types&&consola.consola.log(` Types: ${o.git.commitMsg.types.join(", ")}`),o.git.commitMsg.maxLength&&consola.consola.log(` Max length: ${o.git.commitMsg.maxLength}`),o.git.commitMsg.minLength&&consola.consola.log(` Min length: ${o.git.commitMsg.minLength}`)),o.git.hooks)){consola.consola.log(" Hooks:");for(const[n,i]of Object.entries(o.git.hooks))consola.consola.log(` ${n}: ${i}`)}}}catch(s){consola.consola.error("Failed to load configuration:",s),process.exit(1)}}});exports.default=config;
1
+ "use strict";const citty=require("citty"),consola=require("consola"),utils=require("../shared/basis.D3fInv-P.cjs");require("node:fs/promises"),require("c12"),require("../config.cjs");const config=citty.defineCommand({meta:{name:"config",description:"View current basis configuration"},args:{json:{type:"boolean",description:"Output configuration as JSON"},path:{type:"boolean",description:"Show configuration file path"}},async run({args:e}){try{const s=process.cwd(),{config:o,configFile:t}=await utils.loadConfig({cwd:s});if(e.path){t?consola.consola.info(`Configuration file: ${t}`):(consola.consola.warn("No configuration file found"),consola.consola.info("Run `basis init` to create one"));return}if(Object.keys(o).length===0){consola.consola.warn("No configuration found"),consola.consola.info("Run `basis init` to create a basis.config.ts file");return}if(e.json)consola.consola.log(JSON.stringify(o,null,2));else{if(consola.consola.info("Current basis configuration:"),t&&consola.consola.log(`\u{1F4C1} Config file: ${t}`),o.lint){if(consola.consola.log(""),consola.consola.log("\u{1F4DD} Lint:"),o.lint.staged){consola.consola.log(" Staged files:");for(const[n,i]of Object.entries(o.lint.staged))consola.consola.log(` ${n}: ${i}`)}if(o.lint.project){consola.consola.log(" Project:");for(const[n,i]of Object.entries(o.lint.project))consola.consola.log(` ${n}: ${i}`)}}if(o.git&&(consola.consola.log(""),consola.consola.log("\u{1F527} Git:"),o.git.commitMsg&&(consola.consola.log(" Commit message:"),o.git.commitMsg.types&&consola.consola.log(` Types: ${o.git.commitMsg.types.join(", ")}`),o.git.commitMsg.maxLength&&consola.consola.log(` Max length: ${o.git.commitMsg.maxLength}`),o.git.commitMsg.minLength&&consola.consola.log(` Min length: ${o.git.commitMsg.minLength}`)),o.git.hooks)){consola.consola.log(" Hooks:");for(const[n,i]of Object.entries(o.git.hooks))consola.consola.log(` ${n}: ${i}`)}}}catch(s){consola.consola.error("Failed to load configuration:",s),process.exit(1)}}});exports.default=config;
@@ -1 +1 @@
1
- import{defineCommand as r}from"citty";import{consola as o}from"consola";import{l as a}from"../shared/basis.BIUEmg1C.mjs";import"node:fs/promises";import"c12";import"../config.mjs";const f=r({meta:{name:"config",description:"View current basis configuration"},args:{json:{type:"boolean",description:"Output configuration as JSON"},path:{type:"boolean",description:"Show configuration file path"}},async run({args:s}){try{const g=process.cwd(),{config:i,configFile:e}=await a({cwd:g});if(s.path){e?o.info(`Configuration file: ${e}`):(o.warn("No configuration file found"),o.info("Run `basis init` to create one"));return}if(Object.keys(i).length===0){o.warn("No configuration found"),o.info("Run `basis init` to create a basis.config.ts file");return}if(s.json)o.log(JSON.stringify(i,null,2));else{if(o.info("Current basis configuration:"),e&&o.log(`\u{1F4C1} Config file: ${e}`),i.lint){if(o.log(""),o.log("\u{1F4DD} Lint:"),i.lint.staged){o.log(" Staged files:");for(const[t,n]of Object.entries(i.lint.staged))o.log(` ${t}: ${n}`)}if(i.lint.project){o.log(" Project:");for(const[t,n]of Object.entries(i.lint.project))o.log(` ${t}: ${n}`)}}if(i.git&&(o.log(""),o.log("\u{1F527} Git:"),i.git.commitMsg&&(o.log(" Commit message:"),i.git.commitMsg.types&&o.log(` Types: ${i.git.commitMsg.types.join(", ")}`),i.git.commitMsg.maxLength&&o.log(` Max length: ${i.git.commitMsg.maxLength}`),i.git.commitMsg.minLength&&o.log(` Min length: ${i.git.commitMsg.minLength}`)),i.git.hooks)){o.log(" Hooks:");for(const[t,n]of Object.entries(i.git.hooks))o.log(` ${t}: ${n}`)}}}catch(g){o.error("Failed to load configuration:",g),process.exit(1)}}});export{f as default};
1
+ import{defineCommand as r}from"citty";import{consola as o}from"consola";import{l as a}from"../shared/basis.BrlVPuDi.mjs";import"node:fs/promises";import"c12";import"../config.mjs";const f=r({meta:{name:"config",description:"View current basis configuration"},args:{json:{type:"boolean",description:"Output configuration as JSON"},path:{type:"boolean",description:"Show configuration file path"}},async run({args:s}){try{const g=process.cwd(),{config:i,configFile:e}=await a({cwd:g});if(s.path){e?o.info(`Configuration file: ${e}`):(o.warn("No configuration file found"),o.info("Run `basis init` to create one"));return}if(Object.keys(i).length===0){o.warn("No configuration found"),o.info("Run `basis init` to create a basis.config.ts file");return}if(s.json)o.log(JSON.stringify(i,null,2));else{if(o.info("Current basis configuration:"),e&&o.log(`\u{1F4C1} Config file: ${e}`),i.lint){if(o.log(""),o.log("\u{1F4DD} Lint:"),i.lint.staged){o.log(" Staged files:");for(const[t,n]of Object.entries(i.lint.staged))o.log(` ${t}: ${n}`)}if(i.lint.project){o.log(" Project:");for(const[t,n]of Object.entries(i.lint.project))o.log(` ${t}: ${n}`)}}if(i.git&&(o.log(""),o.log("\u{1F527} Git:"),i.git.commitMsg&&(o.log(" Commit message:"),i.git.commitMsg.types&&o.log(` Types: ${i.git.commitMsg.types.join(", ")}`),i.git.commitMsg.maxLength&&o.log(` Max length: ${i.git.commitMsg.maxLength}`),i.git.commitMsg.minLength&&o.log(` Min length: ${i.git.commitMsg.minLength}`)),i.git.hooks)){o.log(" Hooks:");for(const[t,n]of Object.entries(i.git.hooks))o.log(` ${t}: ${n}`)}}}catch(g){o.error("Failed to load configuration:",g),process.exit(1)}}});export{f as default};
@@ -1 +1 @@
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
+ "use strict";const citty=require("citty"),consola=require("consola"),git$1=require("../shared/basis.DuZo2uz1.cjs");require("node:child_process"),require("node:fs/promises"),require("c12/update"),require("defu"),require("ini"),require("pathe"),require("../shared/basis.D3fInv-P.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.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
+ 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.BDhrNAQD.mjs";import"node:child_process";import"node:fs/promises";import"c12/update";import"defu";import"ini";import"pathe";import"../shared/basis.BrlVPuDi.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.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
+ "use strict";const citty=require("citty"),consola=require("consola"),init$1=require("../shared/basis.1-2-e6uu.cjs");require("c12/update"),require("magicast"),require("nypm"),require("pathe"),require("pkg-types"),require("../shared/basis.D3fInv-P.cjs"),require("node:fs/promises"),require("c12"),require("../config.cjs"),require("../shared/basis.DuZo2uz1.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.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};
1
+ import{defineCommand as o}from"citty";import{consola as r}from"consola";import{i as e}from"../shared/basis.C4FYR2wo.mjs";import"c12/update";import"magicast";import"nypm";import"pathe";import"pkg-types";import"../shared/basis.BrlVPuDi.mjs";import"node:fs/promises";import"c12";import"../config.mjs";import"../shared/basis.BDhrNAQD.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 +1 @@
1
- "use strict";const citty=require("citty"),consola=require("consola"),lint$1=require("../shared/basis.CCOrCJM8.cjs");require("node:child_process"),require("fast-glob"),require("micromatch"),require("nypm"),require("pathe"),require("pkg-types"),require("../shared/basis.cvMXIHAl.cjs"),require("node:fs/promises"),require("c12"),require("../config.cjs");const lint=citty.defineCommand({meta:{name:"lint",description:"Run comprehensive project linting and quality checks"},args:{staged:{type:"boolean",description:"Lint only staged files using configured commands",default:!1},project:{type:"boolean",description:"Run project-wide lint commands",default:!1},deps:{type:"boolean",description:"Check dependencies (outdated, security, blocked packages)",default:!1},structure:{type:"boolean",description:"Check project structure (required files/dirs, naming conventions)",default:!1},docs:{type:"boolean",description:"Check documentation (README, CHANGELOG)",default:!1},all:{type:"boolean",description:"Run all lint checks",default:!1}},async run({args:e}){const t=process.cwd();let i=!0;if(!e.staged&&!e.project&&!e.deps&&!e.structure&&!e.docs&&!e.all&&(e.staged=!0),e.all)i=await lint$1.lintAll(t);else{const s=[];e.staged&&s.push(()=>lint$1.lintStaged(t)),e.project&&s.push(()=>lint$1.lintProject(t)),e.deps&&s.push(()=>lint$1.lintDependencies(t)),e.structure&&s.push(()=>lint$1.lintStructure(t)),e.docs&&s.push(()=>lint$1.lintDocs(t));for(const r of s)await r()||(i=!1)}i||(consola.consola.error("Some lint checks failed"),process.exit(1))}});exports.lint=lint;
1
+ "use strict";const citty=require("citty"),consola=require("consola"),lint$1=require("../shared/basis.CRtpAFNR.cjs");require("node:child_process"),require("node:fs/promises"),require("fast-glob"),require("micromatch"),require("nypm"),require("pathe"),require("pkg-types"),require("../shared/basis.D3fInv-P.cjs"),require("c12"),require("../config.cjs");const lint=citty.defineCommand({meta:{name:"lint",description:"Run comprehensive project linting and quality checks"},args:{staged:{type:"boolean",description:"Lint only staged files using configured commands",default:!1},project:{type:"boolean",description:"Run project-wide lint commands",default:!1},deps:{type:"boolean",description:"Check dependencies (outdated, security, blocked packages)",default:!1},structure:{type:"boolean",description:"Check project structure (required files/dirs, naming conventions)",default:!1},docs:{type:"boolean",description:"Check documentation (README, CHANGELOG)",default:!1},all:{type:"boolean",description:"Run all lint checks",default:!1},fix:{type:"boolean",description:"Automatically fix issues where possible",default:!1}},async run({args:e}){const t=process.cwd();let i=!0;if(!e.staged&&!e.project&&!e.deps&&!e.structure&&!e.docs&&!e.all&&(e.staged=!0),e.all)i=await lint$1.lintAll(t,e.fix);else{const s=[];e.staged&&s.push(()=>lint$1.lintStaged(t)),e.project&&s.push(()=>lint$1.lintProject(t)),e.deps&&s.push(()=>lint$1.lintDependencies(t,void 0,e.fix)),e.structure&&s.push(()=>lint$1.lintStructure(t,void 0,e.fix)),e.docs&&s.push(()=>lint$1.lintDocs(t,void 0,e.fix));for(const o of s)await o()||(i=!1)}i||(consola.consola.error("Some lint checks failed"),process.exit(1))}});exports.lint=lint;
@@ -1 +1 @@
1
- import{defineCommand as n}from"citty";import{consola as r}from"consola";import{l as a,b as c,c as l,d as p,e as d,f as u}from"../shared/basis.B_nrd74H.mjs";import"node:child_process";import"fast-glob";import"micromatch";import"nypm";import"pathe";import"pkg-types";import"../shared/basis.BIUEmg1C.mjs";import"node:fs/promises";import"c12";import"../config.mjs";const m=n({meta:{name:"lint",description:"Run comprehensive project linting and quality checks"},args:{staged:{type:"boolean",description:"Lint only staged files using configured commands",default:!1},project:{type:"boolean",description:"Run project-wide lint commands",default:!1},deps:{type:"boolean",description:"Check dependencies (outdated, security, blocked packages)",default:!1},structure:{type:"boolean",description:"Check project structure (required files/dirs, naming conventions)",default:!1},docs:{type:"boolean",description:"Check documentation (README, CHANGELOG)",default:!1},all:{type:"boolean",description:"Run all lint checks",default:!1}},async run({args:t}){const e=process.cwd();let s=!0;if(!t.staged&&!t.project&&!t.deps&&!t.structure&&!t.docs&&!t.all&&(t.staged=!0),t.all)s=await a(e);else{const o=[];t.staged&&o.push(()=>c(e)),t.project&&o.push(()=>l(e)),t.deps&&o.push(()=>p(e)),t.structure&&o.push(()=>d(e)),t.docs&&o.push(()=>u(e));for(const i of o)await i()||(s=!1)}s||(r.error("Some lint checks failed"),process.exit(1))}});export{m as lint};
1
+ import{defineCommand as a}from"citty";import{consola as n}from"consola";import{l as r,b as l,c,d as p,e as d,f as u}from"../shared/basis.Bd1FyPZU.mjs";import"node:child_process";import"node:fs/promises";import"fast-glob";import"micromatch";import"nypm";import"pathe";import"pkg-types";import"../shared/basis.BrlVPuDi.mjs";import"c12";import"../config.mjs";const f=a({meta:{name:"lint",description:"Run comprehensive project linting and quality checks"},args:{staged:{type:"boolean",description:"Lint only staged files using configured commands",default:!1},project:{type:"boolean",description:"Run project-wide lint commands",default:!1},deps:{type:"boolean",description:"Check dependencies (outdated, security, blocked packages)",default:!1},structure:{type:"boolean",description:"Check project structure (required files/dirs, naming conventions)",default:!1},docs:{type:"boolean",description:"Check documentation (README, CHANGELOG)",default:!1},all:{type:"boolean",description:"Run all lint checks",default:!1},fix:{type:"boolean",description:"Automatically fix issues where possible",default:!1}},async run({args:t}){const e=process.cwd();let i=!0;if(!t.staged&&!t.project&&!t.deps&&!t.structure&&!t.docs&&!t.all&&(t.staged=!0),t.all)i=await r(e,t.fix);else{const o=[];t.staged&&o.push(()=>l(e)),t.project&&o.push(()=>c(e)),t.deps&&o.push(()=>p(e,void 0,t.fix)),t.structure&&o.push(()=>d(e,void 0,t.fix)),t.docs&&o.push(()=>u(e,void 0,t.fix));for(const s of o)await s()||(i=!1)}i||(n.error("Some lint checks failed"),process.exit(1))}});export{f as lint};
@@ -1 +1 @@
1
- "use strict";const citty=require("citty"),consola=require("consola"),publish$1=require("../shared/basis.CjDkLZ8j.cjs");require("node:child_process"),require("nypm"),require("pkg-types"),require("semver"),require("../shared/basis.cvMXIHAl.cjs"),require("node:fs/promises"),require("c12"),require("../config.cjs");const publish=citty.defineCommand({meta:{name:"publish",description:"Publish package to npm registry"},args:{tag:{type:"string",description:"Specific npm tag to publish to",alias:"t"},stable:{type:"boolean",description:"Publish as stable release (latest tag)",alias:"s"},latest:{type:"boolean",description:"Publish to latest tag",alias:"l"},dryRun:{type:"boolean",description:"Perform a dry run without actually publishing",alias:"d"},access:{type:"string",description:"Package access level (public/private)",alias:"a"},registry:{type:"string",description:"NPM registry URL",alias:"r"},skipBuild:{type:"boolean",description:"Skip build step"},skipTests:{type:"boolean",description:"Skip test step"}},async run({args:e}){try{const i=process.cwd(),t={tag:e.tag,stable:e.stable,latest:e.latest,dryRun:e.dryRun,access:e.access,registry:e.registry,skipBuild:e.skipBuild,skipTests:e.skipTests},s=await publish$1.publishPackage(i,t);s.dryRun?consola.consola.success("Dry run completed successfully"):consola.consola.success(`Published ${s.packageName}@${s.version} to ${s.publishTag}`)}catch(i){consola.consola.error("Failed to publish:",i),process.exit(1)}}});exports.default=publish;
1
+ "use strict";const citty=require("citty"),consola=require("consola"),publish$1=require("../shared/basis.Bz4YLlJG.cjs");require("node:child_process"),require("nypm"),require("pkg-types"),require("semver"),require("../shared/basis.D3fInv-P.cjs"),require("node:fs/promises"),require("c12"),require("../config.cjs");const publish=citty.defineCommand({meta:{name:"publish",description:"Publish package to npm registry"},args:{tag:{type:"string",description:"Specific npm tag to publish to",alias:"t"},stable:{type:"boolean",description:"Publish as stable release (latest tag)",alias:"s"},latest:{type:"boolean",description:"Publish to latest tag",alias:"l"},dryRun:{type:"boolean",description:"Perform a dry run without actually publishing",alias:"d"},access:{type:"string",description:"Package access level (public/private)",alias:"a"},registry:{type:"string",description:"NPM registry URL",alias:"r"},skipBuild:{type:"boolean",description:"Skip build step"},skipTests:{type:"boolean",description:"Skip test step"}},async run({args:e}){try{const i=process.cwd(),t={tag:e.tag,stable:e.stable,latest:e.latest,dryRun:e.dryRun,access:e.access,registry:e.registry,skipBuild:e.skipBuild,skipTests:e.skipTests},s=await publish$1.publishPackage(i,t);s.dryRun?consola.consola.success("Dry run completed successfully"):consola.consola.success(`Published ${s.packageName}@${s.version} to ${s.publishTag}`)}catch(i){consola.consola.error("Failed to publish:",i),process.exit(1)}}});exports.default=publish;
@@ -1 +1 @@
1
- import{defineCommand as r}from"citty";import{consola as i}from"consola";import{p}from"../shared/basis.CSrt7vG8.mjs";import"node:child_process";import"nypm";import"pkg-types";import"semver";import"../shared/basis.BIUEmg1C.mjs";import"node:fs/promises";import"c12";import"../config.mjs";const o=r({meta:{name:"publish",description:"Publish package to npm registry"},args:{tag:{type:"string",description:"Specific npm tag to publish to",alias:"t"},stable:{type:"boolean",description:"Publish as stable release (latest tag)",alias:"s"},latest:{type:"boolean",description:"Publish to latest tag",alias:"l"},dryRun:{type:"boolean",description:"Perform a dry run without actually publishing",alias:"d"},access:{type:"string",description:"Package access level (public/private)",alias:"a"},registry:{type:"string",description:"NPM registry URL",alias:"r"},skipBuild:{type:"boolean",description:"Skip build step"},skipTests:{type:"boolean",description:"Skip test step"}},async run({args:t}){try{const e=process.cwd(),a={tag:t.tag,stable:t.stable,latest:t.latest,dryRun:t.dryRun,access:t.access,registry:t.registry,skipBuild:t.skipBuild,skipTests:t.skipTests},s=await p(e,a);s.dryRun?i.success("Dry run completed successfully"):i.success(`Published ${s.packageName}@${s.version} to ${s.publishTag}`)}catch(e){i.error("Failed to publish:",e),process.exit(1)}}});export{o as default};
1
+ import{defineCommand as r}from"citty";import{consola as i}from"consola";import{p}from"../shared/basis.CYJFGkEy.mjs";import"node:child_process";import"nypm";import"pkg-types";import"semver";import"../shared/basis.BrlVPuDi.mjs";import"node:fs/promises";import"c12";import"../config.mjs";const o=r({meta:{name:"publish",description:"Publish package to npm registry"},args:{tag:{type:"string",description:"Specific npm tag to publish to",alias:"t"},stable:{type:"boolean",description:"Publish as stable release (latest tag)",alias:"s"},latest:{type:"boolean",description:"Publish to latest tag",alias:"l"},dryRun:{type:"boolean",description:"Perform a dry run without actually publishing",alias:"d"},access:{type:"string",description:"Package access level (public/private)",alias:"a"},registry:{type:"string",description:"NPM registry URL",alias:"r"},skipBuild:{type:"boolean",description:"Skip build step"},skipTests:{type:"boolean",description:"Skip test step"}},async run({args:t}){try{const e=process.cwd(),a={tag:t.tag,stable:t.stable,latest:t.latest,dryRun:t.dryRun,access:t.access,registry:t.registry,skipBuild:t.skipBuild,skipTests:t.skipTests},s=await p(e,a);s.dryRun?i.success("Dry run completed successfully"):i.success(`Published ${s.packageName}@${s.version} to ${s.publishTag}`)}catch(e){i.error("Failed to publish:",e),process.exit(1)}}});export{o as default};
@@ -1 +1 @@
1
- "use strict";const citty=require("citty"),consola=require("consola"),n=require("semver"),version$1=require("../shared/basis.CITlWl4E.cjs");require("node:child_process"),require("pkg-types"),require("../shared/basis.cvMXIHAl.cjs"),require("node:fs/promises"),require("c12"),require("../config.cjs");function _interopDefaultCompat(e){return e&&typeof e=="object"&&"default"in e?e.default:e}const n__default=_interopDefaultCompat(n),version=citty.defineCommand({meta:{name:"version",description:"Update package version"},args:{version:{type:"positional",description:"Version to set (patch, minor, major, prerelease, or specific version like 1.2.3)",required:!1},preid:{type:"string",description:"Prerelease identifier (alpha, beta, rc)"},tag:{type:"string",description:"Git tag name"},message:{type:"string",description:"Commit message template",alias:"m"}},async run({args:e}){try{const i=process.cwd(),r=e.version,o={preid:e.preid,message:e.message,tag:e.tag};r&&(["patch","minor","major","prerelease"].includes(r)?o[r]=!0:n__default.valid(r)?o.version=r:(consola.consola.error(`Invalid version argument: ${r}`),consola.consola.info("Valid options: patch, minor, major, prerelease, or specific version (e.g., 1.2.3)"),process.exit(1)));const s=await version$1.updatePackageVersion(i,o);consola.consola.success(`Version updated: ${s.oldVersion} \u2192 ${s.newVersion}`),s.tagName&&consola.consola.info(`Git tag created: ${s.tagName}`)}catch(i){consola.consola.error("Failed to update version:",i),process.exit(1)}}});exports.default=version;
1
+ "use strict";const citty=require("citty"),consola=require("consola"),n=require("semver"),version$1=require("../shared/basis.Bqr6BGbD.cjs");require("node:child_process"),require("pkg-types"),require("../shared/basis.D3fInv-P.cjs"),require("node:fs/promises"),require("c12"),require("../config.cjs");function _interopDefaultCompat(e){return e&&typeof e=="object"&&"default"in e?e.default:e}const n__default=_interopDefaultCompat(n),version=citty.defineCommand({meta:{name:"version",description:"Update package version"},args:{version:{type:"positional",description:"Version to set (patch, minor, major, prerelease, or specific version like 1.2.3)",required:!1},preid:{type:"string",description:"Prerelease identifier (alpha, beta, rc)"},tag:{type:"string",description:"Git tag name"},message:{type:"string",description:"Commit message template",alias:"m"}},async run({args:e}){try{const i=process.cwd(),r=e.version,o={preid:e.preid,message:e.message,tag:e.tag};r&&(["patch","minor","major","prerelease"].includes(r)?o[r]=!0:n__default.valid(r)?o.version=r:(consola.consola.error(`Invalid version argument: ${r}`),consola.consola.info("Valid options: patch, minor, major, prerelease, or specific version (e.g., 1.2.3)"),process.exit(1)));const s=await version$1.updatePackageVersion(i,o);consola.consola.success(`Version updated: ${s.oldVersion} \u2192 ${s.newVersion}`),s.tagName&&consola.consola.info(`Git tag created: ${s.tagName}`)}catch(i){consola.consola.error("Failed to update version:",i),process.exit(1)}}});exports.default=version;
@@ -1 +1 @@
1
- import{defineCommand as a}from"citty";import{consola as r}from"consola";import n from"semver";import{u as p}from"../shared/basis.1_Z0I9PT.mjs";import"node:child_process";import"pkg-types";import"../shared/basis.BIUEmg1C.mjs";import"node:fs/promises";import"c12";import"../config.mjs";const m=a({meta:{name:"version",description:"Update package version"},args:{version:{type:"positional",description:"Version to set (patch, minor, major, prerelease, or specific version like 1.2.3)",required:!1},preid:{type:"string",description:"Prerelease identifier (alpha, beta, rc)"},tag:{type:"string",description:"Git tag name"},message:{type:"string",description:"Commit message template",alias:"m"}},async run({args:i}){try{const s=process.cwd(),e=i.version,t={preid:i.preid,message:i.message,tag:i.tag};e&&(["patch","minor","major","prerelease"].includes(e)?t[e]=!0:n.valid(e)?t.version=e:(r.error(`Invalid version argument: ${e}`),r.info("Valid options: patch, minor, major, prerelease, or specific version (e.g., 1.2.3)"),process.exit(1)));const o=await p(s,t);r.success(`Version updated: ${o.oldVersion} \u2192 ${o.newVersion}`),o.tagName&&r.info(`Git tag created: ${o.tagName}`)}catch(s){r.error("Failed to update version:",s),process.exit(1)}}});export{m as default};
1
+ import{defineCommand as a}from"citty";import{consola as r}from"consola";import n from"semver";import{u as p}from"../shared/basis.4m3-erzm.mjs";import"node:child_process";import"pkg-types";import"../shared/basis.BrlVPuDi.mjs";import"node:fs/promises";import"c12";import"../config.mjs";const m=a({meta:{name:"version",description:"Update package version"},args:{version:{type:"positional",description:"Version to set (patch, minor, major, prerelease, or specific version like 1.2.3)",required:!1},preid:{type:"string",description:"Prerelease identifier (alpha, beta, rc)"},tag:{type:"string",description:"Git tag name"},message:{type:"string",description:"Commit message template",alias:"m"}},async run({args:i}){try{const s=process.cwd(),e=i.version,t={preid:i.preid,message:i.message,tag:i.tag};e&&(["patch","minor","major","prerelease"].includes(e)?t[e]=!0:n.valid(e)?t.version=e:(r.error(`Invalid version argument: ${e}`),r.info("Valid options: patch, minor, major, prerelease, or specific version (e.g., 1.2.3)"),process.exit(1)));const o=await p(s,t);r.success(`Version updated: ${o.oldVersion} \u2192 ${o.newVersion}`),o.tagName&&r.info(`Git tag created: ${o.tagName}`)}catch(s){r.error("Failed to update version:",s),process.exit(1)}}});export{m 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.DoHZYvYm.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.DoHZYvYm.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.DoHZYvYm.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.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;
1
+ "use strict";const config=require("./config.cjs"),git=require("./shared/basis.DuZo2uz1.cjs"),init=require("./shared/basis.1-2-e6uu.cjs"),lint=require("./shared/basis.CRtpAFNR.cjs"),publish=require("./shared/basis.Bz4YLlJG.cjs"),version=require("./shared/basis.Bqr6BGbD.cjs"),utils=require("./shared/basis.D3fInv-P.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.DoHZYvYm.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.DoHZYvYm.cjs';
3
3
  import * as c12 from 'c12';
4
4
  import { LoadConfigOptions } from 'c12';
5
5
 
@@ -120,19 +120,19 @@ declare function lintProject(cwd?: string, config?: LintConfig["project"]): Prom
120
120
  /**
121
121
  * Check dependencies
122
122
  */
123
- declare function lintDependencies(cwd?: string, config?: LintConfig["dependencies"]): Promise<boolean>;
123
+ declare function lintDependencies(cwd?: string, config?: LintConfig["dependencies"], fix?: boolean): Promise<boolean>;
124
124
  /**
125
125
  * Check project structure
126
126
  */
127
- declare function lintStructure(cwd?: string, config?: LintConfig["structure"]): Promise<boolean>;
127
+ declare function lintStructure(cwd?: string, config?: LintConfig["structure"], fix?: boolean): Promise<boolean>;
128
128
  /**
129
129
  * Check documentation
130
130
  */
131
- declare function lintDocs(cwd?: string, config?: LintConfig["docs"]): Promise<boolean>;
131
+ declare function lintDocs(cwd?: string, config?: LintConfig["docs"], fix?: boolean): Promise<boolean>;
132
132
  /**
133
133
  * Run all lint checks
134
134
  */
135
- declare function lintAll(cwd?: string): Promise<boolean>;
135
+ declare function lintAll(cwd?: string, fix?: boolean): Promise<boolean>;
136
136
 
137
137
  /**
138
138
  * Publish package to npm registry
@@ -156,14 +156,23 @@ declare function getPackageManagerCommands(packageManager: string): {
156
156
  outdated: string;
157
157
  audit: string;
158
158
  execPrefix: string;
159
+ remove: string;
160
+ update: string;
161
+ auditFix: string;
159
162
  } | {
160
163
  outdated: string;
161
164
  audit: null;
162
165
  execPrefix: string;
166
+ remove: string;
167
+ update: string;
168
+ auditFix: null;
163
169
  } | {
164
170
  outdated: null;
165
171
  audit: null;
166
172
  execPrefix: string;
173
+ remove: null;
174
+ update: null;
175
+ auditFix: null;
167
176
  };
168
177
 
169
178
  export { Basis, BasisConfig, CommitMessage, GitConfig, GitConfigData, InitOptions, LintConfig, PublishOptions, PublishResult, VersionOptions, VersionUpdateResult, createBasis, fileExists, getPackageManagerCommands, getProjectFiles, getStagedFiles, init, initGitRepo, lintAll, lintCommitMessage, lintDependencies, lintDocs, lintProject, lintStaged, lintStructure, loadConfig, parseCommitMessage, publishPackage, readGitConfig, removeGitHooks, resetGitConfig, setupGit, setupGitConfig, setupGitHooks, updatePackageVersion, validateCommitMessage, writeGitConfig };
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.DoHZYvYm.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.DoHZYvYm.mjs';
3
3
  import * as c12 from 'c12';
4
4
  import { LoadConfigOptions } from 'c12';
5
5
 
@@ -120,19 +120,19 @@ declare function lintProject(cwd?: string, config?: LintConfig["project"]): Prom
120
120
  /**
121
121
  * Check dependencies
122
122
  */
123
- declare function lintDependencies(cwd?: string, config?: LintConfig["dependencies"]): Promise<boolean>;
123
+ declare function lintDependencies(cwd?: string, config?: LintConfig["dependencies"], fix?: boolean): Promise<boolean>;
124
124
  /**
125
125
  * Check project structure
126
126
  */
127
- declare function lintStructure(cwd?: string, config?: LintConfig["structure"]): Promise<boolean>;
127
+ declare function lintStructure(cwd?: string, config?: LintConfig["structure"], fix?: boolean): Promise<boolean>;
128
128
  /**
129
129
  * Check documentation
130
130
  */
131
- declare function lintDocs(cwd?: string, config?: LintConfig["docs"]): Promise<boolean>;
131
+ declare function lintDocs(cwd?: string, config?: LintConfig["docs"], fix?: boolean): Promise<boolean>;
132
132
  /**
133
133
  * Run all lint checks
134
134
  */
135
- declare function lintAll(cwd?: string): Promise<boolean>;
135
+ declare function lintAll(cwd?: string, fix?: boolean): Promise<boolean>;
136
136
 
137
137
  /**
138
138
  * Publish package to npm registry
@@ -156,14 +156,23 @@ declare function getPackageManagerCommands(packageManager: string): {
156
156
  outdated: string;
157
157
  audit: string;
158
158
  execPrefix: string;
159
+ remove: string;
160
+ update: string;
161
+ auditFix: string;
159
162
  } | {
160
163
  outdated: string;
161
164
  audit: null;
162
165
  execPrefix: string;
166
+ remove: string;
167
+ update: string;
168
+ auditFix: null;
163
169
  } | {
164
170
  outdated: null;
165
171
  audit: null;
166
172
  execPrefix: string;
173
+ remove: null;
174
+ update: null;
175
+ auditFix: null;
167
176
  };
168
177
 
169
178
  export { Basis, BasisConfig, CommitMessage, GitConfig, GitConfigData, InitOptions, LintConfig, PublishOptions, PublishResult, VersionOptions, VersionUpdateResult, createBasis, fileExists, getPackageManagerCommands, getProjectFiles, getStagedFiles, init, initGitRepo, lintAll, lintCommitMessage, lintDependencies, lintDocs, lintProject, lintStaged, lintStructure, loadConfig, parseCommitMessage, publishPackage, readGitConfig, removeGitHooks, resetGitConfig, setupGit, setupGitConfig, setupGitHooks, updatePackageVersion, validateCommitMessage, writeGitConfig };
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.DoHZYvYm.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.DoHZYvYm.js';
3
3
  import * as c12 from 'c12';
4
4
  import { LoadConfigOptions } from 'c12';
5
5
 
@@ -120,19 +120,19 @@ declare function lintProject(cwd?: string, config?: LintConfig["project"]): Prom
120
120
  /**
121
121
  * Check dependencies
122
122
  */
123
- declare function lintDependencies(cwd?: string, config?: LintConfig["dependencies"]): Promise<boolean>;
123
+ declare function lintDependencies(cwd?: string, config?: LintConfig["dependencies"], fix?: boolean): Promise<boolean>;
124
124
  /**
125
125
  * Check project structure
126
126
  */
127
- declare function lintStructure(cwd?: string, config?: LintConfig["structure"]): Promise<boolean>;
127
+ declare function lintStructure(cwd?: string, config?: LintConfig["structure"], fix?: boolean): Promise<boolean>;
128
128
  /**
129
129
  * Check documentation
130
130
  */
131
- declare function lintDocs(cwd?: string, config?: LintConfig["docs"]): Promise<boolean>;
131
+ declare function lintDocs(cwd?: string, config?: LintConfig["docs"], fix?: boolean): Promise<boolean>;
132
132
  /**
133
133
  * Run all lint checks
134
134
  */
135
- declare function lintAll(cwd?: string): Promise<boolean>;
135
+ declare function lintAll(cwd?: string, fix?: boolean): Promise<boolean>;
136
136
 
137
137
  /**
138
138
  * Publish package to npm registry
@@ -156,14 +156,23 @@ declare function getPackageManagerCommands(packageManager: string): {
156
156
  outdated: string;
157
157
  audit: string;
158
158
  execPrefix: string;
159
+ remove: string;
160
+ update: string;
161
+ auditFix: string;
159
162
  } | {
160
163
  outdated: string;
161
164
  audit: null;
162
165
  execPrefix: string;
166
+ remove: string;
167
+ update: string;
168
+ auditFix: null;
163
169
  } | {
164
170
  outdated: null;
165
171
  audit: null;
166
172
  execPrefix: string;
173
+ remove: null;
174
+ update: null;
175
+ auditFix: null;
167
176
  };
168
177
 
169
178
  export { Basis, BasisConfig, CommitMessage, GitConfig, GitConfigData, InitOptions, LintConfig, PublishOptions, PublishResult, VersionOptions, VersionUpdateResult, createBasis, fileExists, getPackageManagerCommands, getProjectFiles, getStagedFiles, init, initGitRepo, lintAll, lintCommitMessage, lintDependencies, lintDocs, lintProject, lintStaged, lintStructure, loadConfig, parseCommitMessage, publishPackage, readGitConfig, removeGitHooks, resetGitConfig, setupGit, setupGitConfig, setupGitHooks, updatePackageVersion, validateCommitMessage, writeGitConfig };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
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};
1
+ export{defaultConfig,defineBasisConfig}from"./config.mjs";import{s as e}from"./shared/basis.BDhrNAQD.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.BDhrNAQD.mjs";import{i as s}from"./shared/basis.C4FYR2wo.mjs";import{l as o}from"./shared/basis.Bd1FyPZU.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.Bd1FyPZU.mjs";import{p as a}from"./shared/basis.CYJFGkEy.mjs";import{u as r}from"./shared/basis.4m3-erzm.mjs";import{l as p}from"./shared/basis.BrlVPuDi.mjs";export{f as fileExists,g as getPackageManagerCommands}from"./shared/basis.BrlVPuDi.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,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.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");
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.D3fInv-P.cjs"),git=require("./basis.DuZo2uz1.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
 
@@ -1 +1 @@
1
- import{execSync as t}from"node:child_process";import{consola as l}from"consola";import{readPackageJSON as d,resolvePackageJSON as w,writePackageJSON as v}from"pkg-types";import s from"semver";import{l as u}from"./basis.BIUEmg1C.mjs";function h(e,o,m){if(o.version){if(s.valid(o.version))return o.version;throw new Error(`Invalid version format: ${o.version}. Please use semantic versioning format (e.g., 1.0.0, 2.1.0-alpha.1)`)}if(!s.valid(e))throw new Error(`Invalid current version format: ${e}. Please fix version in package.json to use semantic versioning format (e.g., 1.0.0)`);const r=s.prerelease(e),c=o.preid||(r&&typeof r[0]=="string"?r[0]:null)||m.prereleaseId||"edge";let a;o.major?a="major":o.minor?a="minor":o.prerelease?a=r?"prerelease":"prepatch":a=r?"prerelease":"patch";const i=a==="prerelease"||a.startsWith("pre")?s.inc(e,a,c):s.inc(e,a);if(!i)throw new Error(`Failed to calculate new version from ${e}. Please check your version increment options.`);return i}async function P(e,o={}){const{config:m}=await u({cwd:e}),r=m.version||{},c=await d(e),a=c.version;if(!a)throw new Error("No version found in package.json");const i=h(a,o,r),f=await w(e);await v(f,{...c,version:i});const p={oldVersion:a,newVersion:i};if(r.autoCommit){const n=o.message||r.commitMessage?.replace("{version}",i)||`chore: release v${i}`;try{t("git add package.json",{cwd:e}),t(`git commit -m "${n}"`,{cwd:e})}catch(g){l.warn("Failed to commit changes:",g)}}if(r.autoTag){const n=`${r.tagPrefix||"v"}${i}`;try{t(`git tag ${n}`,{cwd:e}),p.tagName=n}catch(g){l.warn("Failed to create git tag:",g)}}if(r.autoPush)try{t("git push",{cwd:e}),r.autoTag&&t("git push --tags",{cwd:e})}catch(n){l.warn("Failed to push changes:",n)}return p}export{P as u};
1
+ import{execSync as t}from"node:child_process";import{consola as l}from"consola";import{readPackageJSON as d,resolvePackageJSON as w,writePackageJSON as v}from"pkg-types";import s from"semver";import{l as u}from"./basis.BrlVPuDi.mjs";function h(e,o,m){if(o.version){if(s.valid(o.version))return o.version;throw new Error(`Invalid version format: ${o.version}. Please use semantic versioning format (e.g., 1.0.0, 2.1.0-alpha.1)`)}if(!s.valid(e))throw new Error(`Invalid current version format: ${e}. Please fix version in package.json to use semantic versioning format (e.g., 1.0.0)`);const r=s.prerelease(e),c=o.preid||(r&&typeof r[0]=="string"?r[0]:null)||m.prereleaseId||"edge";let a;o.major?a="major":o.minor?a="minor":o.prerelease?a=r?"prerelease":"prepatch":a=r?"prerelease":"patch";const i=a==="prerelease"||a.startsWith("pre")?s.inc(e,a,c):s.inc(e,a);if(!i)throw new Error(`Failed to calculate new version from ${e}. Please check your version increment options.`);return i}async function P(e,o={}){const{config:m}=await u({cwd:e}),r=m.version||{},c=await d(e),a=c.version;if(!a)throw new Error("No version found in package.json");const i=h(a,o,r),f=await w(e);await v(f,{...c,version:i});const p={oldVersion:a,newVersion:i};if(r.autoCommit){const n=o.message||r.commitMessage?.replace("{version}",i)||`chore: release v${i}`;try{t("git add package.json",{cwd:e}),t(`git commit -m "${n}"`,{cwd:e})}catch(g){l.warn("Failed to commit changes:",g)}}if(r.autoTag){const n=`${r.tagPrefix||"v"}${i}`;try{t(`git tag ${n}`,{cwd:e}),p.tagName=n}catch(g){l.warn("Failed to create git tag:",g)}}if(r.autoPush)try{t("git push",{cwd:e}),r.autoTag&&t("git push --tags",{cwd:e})}catch(n){l.warn("Failed to push changes:",n)}return p}export{P as u};
@@ -1,4 +1,4 @@
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(`
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.BrlVPuDi.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
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
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
4
  `).map(i=>i&&!i.startsWith("[")&&i.includes("=")?` ${i}`:i).join(`
@@ -0,0 +1,3 @@
1
+ import{execSync as g}from"node:child_process";import{writeFile as v,mkdir as R}from"node:fs/promises";import{consola as i}from"consola";import j from"fast-glob";import S from"micromatch";import{detectPackageManager as A}from"nypm";import{resolve as h}from"pathe";import{readPackageJSON as b}from"pkg-types";import{l as m,f as y,g as D}from"./basis.BrlVPuDi.mjs";function x(){try{const t=g("git diff --cached --name-only",{encoding:"utf8"}).trim().split(`
2
+ `).filter(Boolean),n=g("git diff --cached --name-only --diff-filter=D",{encoding:"utf8"}),a=new Set(n.trim().split(`
3
+ `).filter(Boolean));return t.filter(r=>!a.has(r))}catch{return[]}}async function $(t,n=["**/*"],a=["node_modules/**","dist/**","build/**",".git/**"]){try{return await j(n,{cwd:t,ignore:a,onlyFiles:!0,dot:!1,absolute:!1})}catch(r){return i.warn("Failed to scan project files:",r),[]}}async function O(t=process.cwd(),n){const{config:a}=await m({cwd:t,overrides:n?{lint:{staged:n}}:void 0}),r=a.lint?.staged||{},e=x();if(e.length===0)return!0;if(Object.keys(r).length===0)return i.warn("No staged lint configuration found. Add lint.staged section to your basis.config.ts"),!0;let c=!1;const s=new Set;for(const[o,p]of Object.entries(r)){const u=e.filter(d=>!s.has(d)&&S.isMatch(d.split("/").pop()||d,o));if(u.length!==0){i.start(`Linting ${u.length} files: ${o}`);try{const d=`${p} ${u.join(" ")}`;g(d,{stdio:"inherit",cwd:t});const f=[];for(const l of u)await y(h(t,l))&&f.push(l);f.length>0&&g(`git add ${f.join(" ")}`,{stdio:"inherit",cwd:t}),u.forEach(l=>s.add(l))}catch(d){c=!0,i.error(`Lint pattern '${o}' failed. Please fix the issues and try again:`,d)}}}return!c}async function E(t=process.cwd(),n){const{config:a}=await m({cwd:t,overrides:n?{lint:{project:n}}:void 0}),r=a.lint?.project||{};if(Object.keys(r).length===0)return i.warn("No project lint configuration found. Add lint.project section to your basis.config.ts"),!0;i.start("Running project-wide linting...");let e=!1;for(const[c,s]of Object.entries(r)){i.start(`Running project lint: ${c}`);try{g(s,{stdio:"inherit",cwd:t})}catch(o){e=!0,i.error(`Project lint pattern '${c}' failed. Please fix the issues and try again:`,o)}}return!e}async function F(t=process.cwd(),n,a=!1){const{config:r}=await m({cwd:t,overrides:n?{lint:{dependencies:n}}:void 0}),e=r.lint?.dependencies||{},c=r.lint?.fix?.dependencies||{};let s=!1;try{const o=await b(t),p={...o.dependencies,...o.devDependencies},u=(await A(t))?.name||"npm",d=D(u);if(i.start("Checking dependencies..."),e.blockedPackages&&e.blockedPackages.length>0){const f=Object.keys(p).filter(l=>e.blockedPackages?.includes(l));if(f.length>0)if(a&&c.removeBlocked&&d.remove){i.start(`Removing blocked packages: ${f.join(", ")}`);try{for(const l of f)g(`${d.remove} ${l}`,{cwd:t,stdio:"inherit"});i.success(`Removed ${f.length} blocked packages`)}catch(l){i.error("Failed to remove blocked packages:",l),s=!0}}else i.error(`Blocked packages found: ${f.join(", ")}. Please remove these packages from your dependencies.`),s=!0}if(e.checkOutdated)if(d.outdated)try{g(d.outdated,{cwd:t,stdio:"pipe"})}catch(f){if(a&&c.updateOutdated&&d.update){i.start("Updating outdated dependencies...");try{g(d.update,{cwd:t,stdio:"inherit"}),i.success("Dependencies updated")}catch(l){i.error("Failed to update dependencies:",l),s=!0}}else i.warn("Some dependencies are outdated:",f)}else i.warn(`Outdated check not available for ${u}`);if(e.checkSecurity)if(d.audit)try{g(d.audit,{cwd:t,stdio:"pipe"})}catch(f){if(a&&c.fixSecurity&&d.auditFix){i.start("Fixing security vulnerabilities...");try{g(d.auditFix,{cwd:t,stdio:"inherit"}),i.success("Security fixes applied")}catch(l){i.error("Failed to fix security issues:",l),s=!0}}else i.error("Security vulnerabilities detected:",f),s=!0}else i.warn(`Security audit not available for ${u}`);if(e.allowedLicenses&&e.allowedLicenses.length>0){const{hasIssues:f,invalidLicenses:l}=await B(t,e.allowedLicenses);f&&(i.error("Packages with invalid licenses found:"),l.forEach(k=>i.error(` ${k}`)),s=!0)}}catch(o){i.error("Failed to check dependencies:",o),s=!0}return!s}async function L(t,n,a=!1){if(n.length===0)return!0;const r=(await Promise.all(n.map(async e=>({file:e,exists:await y(h(t,e))})))).filter(e=>!e.exists);if(r.length>0)if(a){i.start(`Creating missing files: ${r.map(e=>e.file).join(", ")}`);try{for(const{file:e}of r)await v(h(t,e),"","utf8");i.success(`Created ${r.length} missing files`)}catch(e){return i.error("Failed to create missing files:",e),!1}}else return r.forEach(({file:e})=>{i.error(`Required file missing: ${e}`)}),!1;return!0}async function M(t,n,a=!1){if(n.length===0)return!0;const r=(await Promise.all(n.map(async e=>({dir:e,exists:await y(h(t,e))})))).filter(e=>!e.exists);if(r.length>0)if(a){i.start(`Creating missing directories: ${r.map(e=>e.dir).join(", ")}`);try{for(const{dir:e}of r)await R(h(t,e),{recursive:!0});i.success(`Created ${r.length} missing directories`)}catch(e){return i.error("Failed to create missing directories:",e),!1}}else return r.forEach(({dir:e})=>{i.error(`Required directory missing: ${e}`)}),!1;return!0}async function q(t,n,a){const r=new RegExp(a),e=(await $(t,[n])).filter(c=>{const s=c.split("/").pop()||"";return!r.test(s)});return e.length>0?(i.error(`Files with invalid naming in ${n}: ${e.slice(0,3).join(", ")}${e.length>3?"...":""}`),!1):!0}async function G(t,n,a){const r=new RegExp(a),e=new Set,c=(await $(t,[n.replace(/\/\*\*?$/,"")])).filter(async s=>{const o=h(t,s);try{return(await import("node:fs/promises").then(p=>p.stat(o))).isDirectory()}catch{return!1}});for(const s of await Promise.all(c))if(s){const o=s.split("/").pop()||"";r.test(o)||e.add(s)}return e.size>0?(i.error(`Directories with invalid naming in ${n}: ${Array.from(e).slice(0,3).join(", ")}`),!1):!0}async function N(t,n){let a=!1;for(const r of n){const{path:e,files:c,directories:s,description:o}=r;i.start(`Checking naming rule: ${o||e}`),c&&(await q(t,e,c)||(a=!0)),s&&(await G(t,e,s)||(a=!0))}return!a}async function P(t=process.cwd(),n,a=!1){const{config:r}=await m({cwd:t,overrides:n?{lint:{structure:n}}:void 0}),e=r.lint?.structure||{},c=r.lint?.fix?.structure||{};let s=!1;return i.start("Checking project structure..."),e.requiredFiles&&(await L(t,e.requiredFiles,a&&c.createMissingFiles)||(s=!0)),e.requiredDirs&&(await M(t,e.requiredDirs,a&&c.createMissingDirs)||(s=!0)),e.naming&&e.naming.length>0&&(await N(t,e.naming)||(s=!0)),!s}async function C(t=process.cwd(),n,a=!1){const{config:r}=await m({cwd:t,overrides:n?{lint:{docs:n}}:void 0}),e=r.lint?.docs||{},c=r.lint?.fix?.docs||{};let s=!1;i.start("Checking documentation...");const o=[];e.checkReadme!==!1&&o.push({type:"README",files:["README.md","README.rst","README.txt","readme.md"],required:!0,fixEnabled:a&&(c.generateReadme??!1),createFile:"README.md"}),e.checkChangelog&&o.push({type:"CHANGELOG",files:["CHANGELOG.md","CHANGELOG.rst","HISTORY.md","changelog.md"],required:!0,fixEnabled:a&&(c.generateChangelog??!1),createFile:"CHANGELOG.md"});for(const{type:p,files:u,required:d,fixEnabled:f,createFile:l}of o){const k=(await Promise.all(u.map(w=>y(h(t,w))))).some(w=>w);if(d&&!k)if(f&&l){i.start(`Creating ${l}...`);try{await v(h(t,l),"","utf8"),i.success(`Created ${l}`)}catch(w){i.error(`Failed to create ${l}:`,w),s=!0}}else i.error(`No ${p} file found`),s=!0}return!s}async function H(t=process.cwd(),n=!1){const{config:a}=await m({cwd:t}),r=a.lint||{};i.start("Running comprehensive project lint...");const e=(await Promise.allSettled([E(t,r.project),F(t,r.dependencies,n),P(t,r.structure,n),C(t,r.docs,n)])).filter(c=>c.status==="rejected"||c.status==="fulfilled"&&!c.value);return e.length===0?!0:(i.error(`${e.length} lint check(s) failed`),!1)}async function B(t,n){try{const a=await j(["node_modules/*/package.json","node_modules/@*/*/package.json"],{cwd:t,onlyFiles:!0,absolute:!0}),r=[],e=new Set;for(const c of a)try{const s=await b(c);if(!s.name||e.has(s.name))continue;if(e.add(s.name),s.license){const o=Array.isArray(s.license)?s.license.join(", "):s.license;n.some(p=>o.includes(p))||r.push(`${s.name}: ${o}`)}}catch{}return{hasIssues:r.length>0,invalidLicenses:r}}catch(a){return i.warn("Failed to check licenses:",a),{hasIssues:!1,invalidLicenses:[]}}}export{$ as a,O as b,E as c,F as d,P as e,C as f,x as g,H as l};
@@ -1 +1 @@
1
- "use strict";const node_child_process=require("node:child_process"),consola=require("consola"),pkgTypes=require("pkg-types"),n=require("semver"),utils=require("./basis.cvMXIHAl.cjs");function _interopDefaultCompat(e){return e&&typeof e=="object"&&"default"in e?e.default:e}const n__default=_interopDefaultCompat(n);function P(e,a,c){if(a.version){if(n__default.valid(a.version))return a.version;throw new Error(`Invalid version format: ${a.version}. Please use semantic versioning format (e.g., 1.0.0, 2.1.0-alpha.1)`)}if(!n__default.valid(e))throw new Error(`Invalid current version format: ${e}. Please fix version in package.json to use semantic versioning format (e.g., 1.0.0)`);const r=n__default.prerelease(e),t=a.preid||(r&&typeof r[0]=="string"?r[0]:null)||c.prereleaseId||"edge";let o;a.major?o="major":a.minor?o="minor":a.prerelease?o=r?"prerelease":"prepatch":o=r?"prerelease":"patch";const i=o==="prerelease"||o.startsWith("pre")?n__default.inc(e,o,t):n__default.inc(e,o);if(!i)throw new Error(`Failed to calculate new version from ${e}. Please check your version increment options.`);return i}async function updatePackageVersion(e,a={}){const{config:c}=await utils.loadConfig({cwd:e}),r=c.version||{},t=await pkgTypes.readPackageJSON(e),o=t.version;if(!o)throw new Error("No version found in package.json");const i=P(o,a,r),u=await pkgTypes.resolvePackageJSON(e);await pkgTypes.writePackageJSON(u,{...t,version:i});const g={oldVersion:o,newVersion:i};if(r.autoCommit){const s=a.message||r.commitMessage?.replace("{version}",i)||`chore: release v${i}`;try{node_child_process.execSync("git add package.json",{cwd:e}),node_child_process.execSync(`git commit -m "${s}"`,{cwd:e})}catch(l){consola.consola.warn("Failed to commit changes:",l)}}if(r.autoTag){const s=`${r.tagPrefix||"v"}${i}`;try{node_child_process.execSync(`git tag ${s}`,{cwd:e}),g.tagName=s}catch(l){consola.consola.warn("Failed to create git tag:",l)}}if(r.autoPush)try{node_child_process.execSync("git push",{cwd:e}),r.autoTag&&node_child_process.execSync("git push --tags",{cwd:e})}catch(s){consola.consola.warn("Failed to push changes:",s)}return g}exports.updatePackageVersion=updatePackageVersion;
1
+ "use strict";const node_child_process=require("node:child_process"),consola=require("consola"),pkgTypes=require("pkg-types"),n=require("semver"),utils=require("./basis.D3fInv-P.cjs");function _interopDefaultCompat(e){return e&&typeof e=="object"&&"default"in e?e.default:e}const n__default=_interopDefaultCompat(n);function P(e,a,c){if(a.version){if(n__default.valid(a.version))return a.version;throw new Error(`Invalid version format: ${a.version}. Please use semantic versioning format (e.g., 1.0.0, 2.1.0-alpha.1)`)}if(!n__default.valid(e))throw new Error(`Invalid current version format: ${e}. Please fix version in package.json to use semantic versioning format (e.g., 1.0.0)`);const r=n__default.prerelease(e),t=a.preid||(r&&typeof r[0]=="string"?r[0]:null)||c.prereleaseId||"edge";let o;a.major?o="major":a.minor?o="minor":a.prerelease?o=r?"prerelease":"prepatch":o=r?"prerelease":"patch";const i=o==="prerelease"||o.startsWith("pre")?n__default.inc(e,o,t):n__default.inc(e,o);if(!i)throw new Error(`Failed to calculate new version from ${e}. Please check your version increment options.`);return i}async function updatePackageVersion(e,a={}){const{config:c}=await utils.loadConfig({cwd:e}),r=c.version||{},t=await pkgTypes.readPackageJSON(e),o=t.version;if(!o)throw new Error("No version found in package.json");const i=P(o,a,r),u=await pkgTypes.resolvePackageJSON(e);await pkgTypes.writePackageJSON(u,{...t,version:i});const g={oldVersion:o,newVersion:i};if(r.autoCommit){const s=a.message||r.commitMessage?.replace("{version}",i)||`chore: release v${i}`;try{node_child_process.execSync("git add package.json",{cwd:e}),node_child_process.execSync(`git commit -m "${s}"`,{cwd:e})}catch(l){consola.consola.warn("Failed to commit changes:",l)}}if(r.autoTag){const s=`${r.tagPrefix||"v"}${i}`;try{node_child_process.execSync(`git tag ${s}`,{cwd:e}),g.tagName=s}catch(l){consola.consola.warn("Failed to create git tag:",l)}}if(r.autoPush)try{node_child_process.execSync("git push",{cwd:e}),r.autoTag&&node_child_process.execSync("git push --tags",{cwd:e})}catch(s){consola.consola.warn("Failed to push changes:",s)}return g}exports.updatePackageVersion=updatePackageVersion;
@@ -0,0 +1 @@
1
+ import{access as a}from"node:fs/promises";import{loadConfig as t}from"c12";import{defaultConfig as u}from"../config.mjs";async function n(e={}){return await t({name:"basis",cwd:process.cwd(),...e,defaults:{...u,...e.defaults}})}async function d(e){try{return await a(e),!0}catch{return!1}}function r(e){switch(e){case"yarn":return{outdated:"yarn outdated --json",audit:"yarn audit --level moderate",execPrefix:"yarn exec",remove:"yarn remove",update:"yarn upgrade",auditFix:"yarn upgrade"};case"pnpm":return{outdated:"pnpm outdated --format table",audit:"pnpm audit --audit-level moderate",execPrefix:"pnpm exec",remove:"pnpm remove",update:"pnpm update",auditFix:"pnpm audit --fix"};case"bun":return{outdated:"bun outdated",audit:null,execPrefix:"bunx",remove:"bun remove",update:"bun update",auditFix:null};case"deno":return{outdated:null,audit:null,execPrefix:"deno task",remove:null,update:null,auditFix:null};default:return{outdated:"npm outdated --json",audit:"npm audit --audit-level moderate",execPrefix:"npx",remove:"npm uninstall",update:"npm update",auditFix:"npm audit fix"}}}export{d as f,r as g,n as l};
@@ -1 +1 @@
1
- "use strict";const node_child_process=require("node:child_process"),consola=require("consola"),nypm=require("nypm"),pkgTypes=require("pkg-types"),n=require("semver"),utils=require("./basis.cvMXIHAl.cjs");function _interopDefaultCompat(a){return a&&typeof a=="object"&&"default"in a?a.default:a}const n__default=_interopDefaultCompat(n);function C(a,e,s){if(e.tag)return e.tag;if(e.stable||e.latest)return s.stableTag||"latest";if(n__default.prerelease(a)){const t=n__default.prerelease(a);return t&&t[0]||s.defaultTag||"edge"}return s.stableTag||"latest"}async function T(a,e,s){if(e.checkGitClean&&!s.skipTests)try{if(node_child_process.execSync("git status --porcelain",{cwd:a,encoding:"utf8"}).trim())throw new Error("Working directory is not clean. Commit your changes first.")}catch(t){consola.consola.warn("Could not check git status:",t)}if(e.checkTests&&!s.skipTests){consola.consola.start("Running tests...");try{e.testCommand?node_child_process.execSync(e.testCommand,{cwd:a,stdio:"inherit"}):await nypm.runScript("test",{cwd:a,silent:!1})}catch(t){throw consola.consola.error("Tests failed"),t}}if(e.buildCommand&&!s.skipBuild){consola.consola.start("Building package...");try{e.buildCommand.includes(" ")?node_child_process.execSync(e.buildCommand,{cwd:a,stdio:"inherit"}):await nypm.runScript(e.buildCommand,{cwd:a,silent:!1})}catch(t){throw consola.consola.error("Build failed"),t}}}async function $(a,e){if(e.autoGitPush)try{node_child_process.execSync("git push",{cwd:a}),e.createGitTag&&node_child_process.execSync("git push --tags",{cwd:a})}catch(s){consola.consola.warn("Failed to push changes:",s)}}async function publishPackage(a,e={}){const{config:s}=await utils.loadConfig({cwd:a}),t=s.publish||{},p=await pkgTypes.readPackageJSON(a),{name:o,version:r}=p;if(!o||!r)throw new Error("Missing name or version in package.json. Please ensure your package.json contains valid 'name' and 'version' fields.");if(!n__default.valid(r))throw new Error(`Invalid version format in package.json: ${r}. Please use semantic versioning format (e.g., 1.0.0, 2.1.0-alpha.1)`);const g=await nypm.detectPackageManager(a),d=g?.command||"npm";await T(a,t,e);const l=C(r,e,t),u=["publish","--tag",l,"--access",e.access||t.access||"public"];(e.registry||t.registry)&&u.push("--registry",e.registry||t.registry||""),e.dryRun&&u.push("--dry-run");const h=`${d} ${u.join(" ")}`;consola.consola.start("Publishing package...");try{if(node_child_process.execSync(h,{cwd:a,stdio:"inherit"}),!e.dryRun){const i=t.defaultTag||"edge";if(l!==i){consola.consola.start(`Also publishing to ${i} tag...`);try{let c;g?.name==="yarn"?c=`${d} tag add ${o}@${r} ${i}`:c=`${d} dist-tag add ${o}@${r} ${i}`,node_child_process.execSync(c,{cwd:a,stdio:"inherit"})}catch(c){consola.consola.warn(`Failed to add ${i} tag:`,c)}}await $(a,t)}return{packageName:o,version:r,publishTag:l,dryRun:e.dryRun||!1}}catch(i){throw consola.consola.error("Failed to publish package:",i),i}}exports.publishPackage=publishPackage;
1
+ "use strict";const node_child_process=require("node:child_process"),consola=require("consola"),nypm=require("nypm"),pkgTypes=require("pkg-types"),n=require("semver"),utils=require("./basis.D3fInv-P.cjs");function _interopDefaultCompat(a){return a&&typeof a=="object"&&"default"in a?a.default:a}const n__default=_interopDefaultCompat(n);function C(a,e,s){if(e.tag)return e.tag;if(e.stable||e.latest)return s.stableTag||"latest";if(n__default.prerelease(a)){const t=n__default.prerelease(a);return t&&t[0]||s.defaultTag||"edge"}return s.stableTag||"latest"}async function T(a,e,s){if(e.checkGitClean&&!s.skipTests)try{if(node_child_process.execSync("git status --porcelain",{cwd:a,encoding:"utf8"}).trim())throw new Error("Working directory is not clean. Commit your changes first.")}catch(t){consola.consola.warn("Could not check git status:",t)}if(e.checkTests&&!s.skipTests){consola.consola.start("Running tests...");try{e.testCommand?node_child_process.execSync(e.testCommand,{cwd:a,stdio:"inherit"}):await nypm.runScript("test",{cwd:a,silent:!1})}catch(t){throw consola.consola.error("Tests failed"),t}}if(e.buildCommand&&!s.skipBuild){consola.consola.start("Building package...");try{e.buildCommand.includes(" ")?node_child_process.execSync(e.buildCommand,{cwd:a,stdio:"inherit"}):await nypm.runScript(e.buildCommand,{cwd:a,silent:!1})}catch(t){throw consola.consola.error("Build failed"),t}}}async function $(a,e){if(e.autoGitPush)try{node_child_process.execSync("git push",{cwd:a}),e.createGitTag&&node_child_process.execSync("git push --tags",{cwd:a})}catch(s){consola.consola.warn("Failed to push changes:",s)}}async function publishPackage(a,e={}){const{config:s}=await utils.loadConfig({cwd:a}),t=s.publish||{},p=await pkgTypes.readPackageJSON(a),{name:o,version:r}=p;if(!o||!r)throw new Error("Missing name or version in package.json. Please ensure your package.json contains valid 'name' and 'version' fields.");if(!n__default.valid(r))throw new Error(`Invalid version format in package.json: ${r}. Please use semantic versioning format (e.g., 1.0.0, 2.1.0-alpha.1)`);const g=await nypm.detectPackageManager(a),d=g?.command||"npm";await T(a,t,e);const l=C(r,e,t),u=["publish","--tag",l,"--access",e.access||t.access||"public"];(e.registry||t.registry)&&u.push("--registry",e.registry||t.registry||""),e.dryRun&&u.push("--dry-run");const h=`${d} ${u.join(" ")}`;consola.consola.start("Publishing package...");try{if(node_child_process.execSync(h,{cwd:a,stdio:"inherit"}),!e.dryRun){const i=t.defaultTag||"edge";if(l!==i){consola.consola.start(`Also publishing to ${i} tag...`);try{let c;g?.name==="yarn"?c=`${d} tag add ${o}@${r} ${i}`:c=`${d} dist-tag add ${o}@${r} ${i}`,node_child_process.execSync(c,{cwd:a,stdio:"inherit"})}catch(c){consola.consola.warn(`Failed to add ${i} tag:`,c)}}await $(a,t)}return{packageName:o,version:r,publishTag:l,dryRun:e.dryRun||!1}}catch(i){throw consola.consola.error("Failed to publish package:",i),i}}exports.publishPackage=publishPackage;
@@ -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.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");
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.BrlVPuDi.mjs";import{i as J,s as M}from"./basis.BDhrNAQD.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
 
@@ -0,0 +1,3 @@
1
+ "use strict";const node_child_process=require("node:child_process"),promises=require("node:fs/promises"),consola=require("consola"),P=require("fast-glob"),x=require("micromatch"),nypm=require("nypm"),pathe=require("pathe"),pkgTypes=require("pkg-types"),utils=require("./basis.D3fInv-P.cjs");function _interopDefaultCompat(t){return t&&typeof t=="object"&&"default"in t?t.default:t}const P__default=_interopDefaultCompat(P),x__default=_interopDefaultCompat(x);function getStagedFiles(){try{const t=node_child_process.execSync("git diff --cached --name-only",{encoding:"utf8"}).trim().split(`
2
+ `).filter(Boolean),i=node_child_process.execSync("git diff --cached --name-only --diff-filter=D",{encoding:"utf8"}),o=new Set(i.trim().split(`
3
+ `).filter(Boolean));return t.filter(s=>!o.has(s))}catch{return[]}}async function getProjectFiles(t,i=["**/*"],o=["node_modules/**","dist/**","build/**",".git/**"]){try{return await P__default(i,{cwd:t,ignore:o,onlyFiles:!0,dot:!1,absolute:!1})}catch(s){return consola.consola.warn("Failed to scan project files:",s),[]}}async function lintStaged(t=process.cwd(),i){const{config:o}=await utils.loadConfig({cwd:t,overrides:i?{lint:{staged:i}}:void 0}),s=o.lint?.staged||{},e=getStagedFiles();if(e.length===0)return!0;if(Object.keys(s).length===0)return consola.consola.warn("No staged lint configuration found. Add lint.staged section to your basis.config.ts"),!0;let r=!1;const n=new Set;for(const[a,f]of Object.entries(s)){const u=e.filter(l=>!n.has(l)&&x__default.isMatch(l.split("/").pop()||l,a));if(u.length!==0){consola.consola.start(`Linting ${u.length} files: ${a}`);try{const l=`${f} ${u.join(" ")}`;node_child_process.execSync(l,{stdio:"inherit",cwd:t});const d=[];for(const c of u)await utils.fileExists(pathe.resolve(t,c))&&d.push(c);d.length>0&&node_child_process.execSync(`git add ${d.join(" ")}`,{stdio:"inherit",cwd:t}),u.forEach(c=>n.add(c))}catch(l){r=!0,consola.consola.error(`Lint pattern '${a}' failed. Please fix the issues and try again:`,l)}}}return!r}async function lintProject(t=process.cwd(),i){const{config:o}=await utils.loadConfig({cwd:t,overrides:i?{lint:{project:i}}:void 0}),s=o.lint?.project||{};if(Object.keys(s).length===0)return consola.consola.warn("No project lint configuration found. Add lint.project section to your basis.config.ts"),!0;consola.consola.start("Running project-wide linting...");let e=!1;for(const[r,n]of Object.entries(s)){consola.consola.start(`Running project lint: ${r}`);try{node_child_process.execSync(n,{stdio:"inherit",cwd:t})}catch(a){e=!0,consola.consola.error(`Project lint pattern '${r}' failed. Please fix the issues and try again:`,a)}}return!e}async function lintDependencies(t=process.cwd(),i,o=!1){const{config:s}=await utils.loadConfig({cwd:t,overrides:i?{lint:{dependencies:i}}:void 0}),e=s.lint?.dependencies||{},r=s.lint?.fix?.dependencies||{};let n=!1;try{const a=await pkgTypes.readPackageJSON(t),f={...a.dependencies,...a.devDependencies},u=(await nypm.detectPackageManager(t))?.name||"npm",l=utils.getPackageManagerCommands(u);if(consola.consola.start("Checking dependencies..."),e.blockedPackages&&e.blockedPackages.length>0){const d=Object.keys(f).filter(c=>e.blockedPackages?.includes(c));if(d.length>0)if(o&&r.removeBlocked&&l.remove){consola.consola.start(`Removing blocked packages: ${d.join(", ")}`);try{for(const c of d)node_child_process.execSync(`${l.remove} ${c}`,{cwd:t,stdio:"inherit"});consola.consola.success(`Removed ${d.length} blocked packages`)}catch(c){consola.consola.error("Failed to remove blocked packages:",c),n=!0}}else consola.consola.error(`Blocked packages found: ${d.join(", ")}. Please remove these packages from your dependencies.`),n=!0}if(e.checkOutdated)if(l.outdated)try{node_child_process.execSync(l.outdated,{cwd:t,stdio:"pipe"})}catch(d){if(o&&r.updateOutdated&&l.update){consola.consola.start("Updating outdated dependencies...");try{node_child_process.execSync(l.update,{cwd:t,stdio:"inherit"}),consola.consola.success("Dependencies updated")}catch(c){consola.consola.error("Failed to update dependencies:",c),n=!0}}else consola.consola.warn("Some dependencies are outdated:",d)}else consola.consola.warn(`Outdated check not available for ${u}`);if(e.checkSecurity)if(l.audit)try{node_child_process.execSync(l.audit,{cwd:t,stdio:"pipe"})}catch(d){if(o&&r.fixSecurity&&l.auditFix){consola.consola.start("Fixing security vulnerabilities...");try{node_child_process.execSync(l.auditFix,{cwd:t,stdio:"inherit"}),consola.consola.success("Security fixes applied")}catch(c){consola.consola.error("Failed to fix security issues:",c),n=!0}}else consola.consola.error("Security vulnerabilities detected:",d),n=!0}else consola.consola.warn(`Security audit not available for ${u}`);if(e.allowedLicenses&&e.allowedLicenses.length>0){const{hasIssues:d,invalidLicenses:c}=await S(t,e.allowedLicenses);d&&(consola.consola.error("Packages with invalid licenses found:"),c.forEach(p=>consola.consola.error(` ${p}`)),n=!0)}}catch(a){consola.consola.error("Failed to check dependencies:",a),n=!0}return!n}async function v(t,i,o=!1){if(i.length===0)return!0;const s=(await Promise.all(i.map(async e=>({file:e,exists:await utils.fileExists(pathe.resolve(t,e))})))).filter(e=>!e.exists);if(s.length>0)if(o){consola.consola.start(`Creating missing files: ${s.map(e=>e.file).join(", ")}`);try{for(const{file:e}of s)await promises.writeFile(pathe.resolve(t,e),"","utf8");consola.consola.success(`Created ${s.length} missing files`)}catch(e){return consola.consola.error("Failed to create missing files:",e),!1}}else return s.forEach(({file:e})=>{consola.consola.error(`Required file missing: ${e}`)}),!1;return!0}async function R(t,i,o=!1){if(i.length===0)return!0;const s=(await Promise.all(i.map(async e=>({dir:e,exists:await utils.fileExists(pathe.resolve(t,e))})))).filter(e=>!e.exists);if(s.length>0)if(o){consola.consola.start(`Creating missing directories: ${s.map(e=>e.dir).join(", ")}`);try{for(const{dir:e}of s)await promises.mkdir(pathe.resolve(t,e),{recursive:!0});consola.consola.success(`Created ${s.length} missing directories`)}catch(e){return consola.consola.error("Failed to create missing directories:",e),!1}}else return s.forEach(({dir:e})=>{consola.consola.error(`Required directory missing: ${e}`)}),!1;return!0}async function D(t,i,o){const s=new RegExp(o),e=(await getProjectFiles(t,[i])).filter(r=>{const n=r.split("/").pop()||"";return!s.test(n)});return e.length>0?(consola.consola.error(`Files with invalid naming in ${i}: ${e.slice(0,3).join(", ")}${e.length>3?"...":""}`),!1):!0}async function L(t,i,o){const s=new RegExp(o),e=new Set,r=(await getProjectFiles(t,[i.replace(/\/\*\*?$/,"")])).filter(async n=>{const a=pathe.resolve(t,n);try{return(await import("node:fs/promises").then(f=>f.stat(a))).isDirectory()}catch{return!1}});for(const n of await Promise.all(r))if(n){const a=n.split("/").pop()||"";s.test(a)||e.add(n)}return e.size>0?(consola.consola.error(`Directories with invalid naming in ${i}: ${Array.from(e).slice(0,3).join(", ")}`),!1):!0}async function A(t,i){let o=!1;for(const s of i){const{path:e,files:r,directories:n,description:a}=s;consola.consola.start(`Checking naming rule: ${a||e}`),r&&(await D(t,e,r)||(o=!0)),n&&(await L(t,e,n)||(o=!0))}return!o}async function lintStructure(t=process.cwd(),i,o=!1){const{config:s}=await utils.loadConfig({cwd:t,overrides:i?{lint:{structure:i}}:void 0}),e=s.lint?.structure||{},r=s.lint?.fix?.structure||{};let n=!1;return consola.consola.start("Checking project structure..."),e.requiredFiles&&(await v(t,e.requiredFiles,o&&r.createMissingFiles)||(n=!0)),e.requiredDirs&&(await R(t,e.requiredDirs,o&&r.createMissingDirs)||(n=!0)),e.naming&&e.naming.length>0&&(await A(t,e.naming)||(n=!0)),!n}async function lintDocs(t=process.cwd(),i,o=!1){const{config:s}=await utils.loadConfig({cwd:t,overrides:i?{lint:{docs:i}}:void 0}),e=s.lint?.docs||{},r=s.lint?.fix?.docs||{};let n=!1;consola.consola.start("Checking documentation...");const a=[];e.checkReadme!==!1&&a.push({type:"README",files:["README.md","README.rst","README.txt","readme.md"],required:!0,fixEnabled:o&&(r.generateReadme??!1),createFile:"README.md"}),e.checkChangelog&&a.push({type:"CHANGELOG",files:["CHANGELOG.md","CHANGELOG.rst","HISTORY.md","changelog.md"],required:!0,fixEnabled:o&&(r.generateChangelog??!1),createFile:"CHANGELOG.md"});for(const{type:f,files:u,required:l,fixEnabled:d,createFile:c}of a){const p=(await Promise.all(u.map(g=>utils.fileExists(pathe.resolve(t,g))))).some(g=>g);if(l&&!p)if(d&&c){consola.consola.start(`Creating ${c}...`);try{await promises.writeFile(pathe.resolve(t,c),"","utf8"),consola.consola.success(`Created ${c}`)}catch(g){consola.consola.error(`Failed to create ${c}:`,g),n=!0}}else consola.consola.error(`No ${f} file found`),n=!0}return!n}async function lintAll(t=process.cwd(),i=!1){const{config:o}=await utils.loadConfig({cwd:t}),s=o.lint||{};consola.consola.start("Running comprehensive project lint...");const e=(await Promise.allSettled([lintProject(t,s.project),lintDependencies(t,s.dependencies,i),lintStructure(t,s.structure,i),lintDocs(t,s.docs,i)])).filter(r=>r.status==="rejected"||r.status==="fulfilled"&&!r.value);return e.length===0?!0:(consola.consola.error(`${e.length} lint check(s) failed`),!1)}async function S(t,i){try{const o=await P__default(["node_modules/*/package.json","node_modules/@*/*/package.json"],{cwd:t,onlyFiles:!0,absolute:!0}),s=[],e=new Set;for(const r of o)try{const n=await pkgTypes.readPackageJSON(r);if(!n.name||e.has(n.name))continue;if(e.add(n.name),n.license){const a=Array.isArray(n.license)?n.license.join(", "):n.license;i.some(f=>a.includes(f))||s.push(`${n.name}: ${a}`)}}catch{}return{hasIssues:s.length>0,invalidLicenses:s}}catch(o){return consola.consola.warn("Failed to check licenses:",o),{hasIssues:!1,invalidLicenses:[]}}}exports.getProjectFiles=getProjectFiles,exports.getStagedFiles=getStagedFiles,exports.lintAll=lintAll,exports.lintDependencies=lintDependencies,exports.lintDocs=lintDocs,exports.lintProject=lintProject,exports.lintStaged=lintStaged,exports.lintStructure=lintStructure;
@@ -1 +1 @@
1
- import{execSync as o}from"node:child_process";import{consola as s}from"consola";import{detectPackageManager as y,runScript as h}from"nypm";import{readPackageJSON as k}from"pkg-types";import m from"semver";import{l as b}from"./basis.BIUEmg1C.mjs";function $(t,a,r){if(a.tag)return a.tag;if(a.stable||a.latest)return r.stableTag||"latest";if(m.prerelease(t)){const i=m.prerelease(t);return i&&i[0]||r.defaultTag||"edge"}return r.stableTag||"latest"}async function C(t,a,r){if(a.checkGitClean&&!r.skipTests)try{if(o("git status --porcelain",{cwd:t,encoding:"utf8"}).trim())throw new Error("Working directory is not clean. Commit your changes first.")}catch(i){s.warn("Could not check git status:",i)}if(a.checkTests&&!r.skipTests){s.start("Running tests...");try{a.testCommand?o(a.testCommand,{cwd:t,stdio:"inherit"}):await h("test",{cwd:t,silent:!1})}catch(i){throw s.error("Tests failed"),i}}if(a.buildCommand&&!r.skipBuild){s.start("Building package...");try{a.buildCommand.includes(" ")?o(a.buildCommand,{cwd:t,stdio:"inherit"}):await h(a.buildCommand,{cwd:t,silent:!1})}catch(i){throw s.error("Build failed"),i}}}async function T(t,a){if(a.autoGitPush)try{o("git push",{cwd:t}),a.createGitTag&&o("git push --tags",{cwd:t})}catch(r){s.warn("Failed to push changes:",r)}}async function v(t,a={}){const{config:r}=await b({cwd:t}),i=r.publish||{},f=await k(t),{name:d,version:n}=f;if(!d||!n)throw new Error("Missing name or version in package.json. Please ensure your package.json contains valid 'name' and 'version' fields.");if(!m.valid(n))throw new Error(`Invalid version format in package.json: ${n}. Please use semantic versioning format (e.g., 1.0.0, 2.1.0-alpha.1)`);const p=await y(t),l=p?.command||"npm";await C(t,i,a);const g=$(n,a,i),u=["publish","--tag",g,"--access",a.access||i.access||"public"];(a.registry||i.registry)&&u.push("--registry",a.registry||i.registry||""),a.dryRun&&u.push("--dry-run");const w=`${l} ${u.join(" ")}`;s.start("Publishing package...");try{if(o(w,{cwd:t,stdio:"inherit"}),!a.dryRun){const e=i.defaultTag||"edge";if(g!==e){s.start(`Also publishing to ${e} tag...`);try{let c;p?.name==="yarn"?c=`${l} tag add ${d}@${n} ${e}`:c=`${l} dist-tag add ${d}@${n} ${e}`,o(c,{cwd:t,stdio:"inherit"})}catch(c){s.warn(`Failed to add ${e} tag:`,c)}}await T(t,i)}return{packageName:d,version:n,publishTag:g,dryRun:a.dryRun||!1}}catch(e){throw s.error("Failed to publish package:",e),e}}export{v as p};
1
+ import{execSync as o}from"node:child_process";import{consola as s}from"consola";import{detectPackageManager as y,runScript as h}from"nypm";import{readPackageJSON as k}from"pkg-types";import m from"semver";import{l as b}from"./basis.BrlVPuDi.mjs";function $(t,a,r){if(a.tag)return a.tag;if(a.stable||a.latest)return r.stableTag||"latest";if(m.prerelease(t)){const i=m.prerelease(t);return i&&i[0]||r.defaultTag||"edge"}return r.stableTag||"latest"}async function C(t,a,r){if(a.checkGitClean&&!r.skipTests)try{if(o("git status --porcelain",{cwd:t,encoding:"utf8"}).trim())throw new Error("Working directory is not clean. Commit your changes first.")}catch(i){s.warn("Could not check git status:",i)}if(a.checkTests&&!r.skipTests){s.start("Running tests...");try{a.testCommand?o(a.testCommand,{cwd:t,stdio:"inherit"}):await h("test",{cwd:t,silent:!1})}catch(i){throw s.error("Tests failed"),i}}if(a.buildCommand&&!r.skipBuild){s.start("Building package...");try{a.buildCommand.includes(" ")?o(a.buildCommand,{cwd:t,stdio:"inherit"}):await h(a.buildCommand,{cwd:t,silent:!1})}catch(i){throw s.error("Build failed"),i}}}async function T(t,a){if(a.autoGitPush)try{o("git push",{cwd:t}),a.createGitTag&&o("git push --tags",{cwd:t})}catch(r){s.warn("Failed to push changes:",r)}}async function v(t,a={}){const{config:r}=await b({cwd:t}),i=r.publish||{},f=await k(t),{name:d,version:n}=f;if(!d||!n)throw new Error("Missing name or version in package.json. Please ensure your package.json contains valid 'name' and 'version' fields.");if(!m.valid(n))throw new Error(`Invalid version format in package.json: ${n}. Please use semantic versioning format (e.g., 1.0.0, 2.1.0-alpha.1)`);const p=await y(t),l=p?.command||"npm";await C(t,i,a);const g=$(n,a,i),u=["publish","--tag",g,"--access",a.access||i.access||"public"];(a.registry||i.registry)&&u.push("--registry",a.registry||i.registry||""),a.dryRun&&u.push("--dry-run");const w=`${l} ${u.join(" ")}`;s.start("Publishing package...");try{if(o(w,{cwd:t,stdio:"inherit"}),!a.dryRun){const e=i.defaultTag||"edge";if(g!==e){s.start(`Also publishing to ${e} tag...`);try{let c;p?.name==="yarn"?c=`${l} tag add ${d}@${n} ${e}`:c=`${l} dist-tag add ${d}@${n} ${e}`,o(c,{cwd:t,stdio:"inherit"})}catch(c){s.warn(`Failed to add ${e} tag:`,c)}}await T(t,i)}return{packageName:d,version:n,publishTag:g,dryRun:a.dryRun||!1}}catch(e){throw s.error("Failed to publish package:",e),e}}export{v as p};
@@ -0,0 +1 @@
1
+ "use strict";const promises=require("node:fs/promises"),c12=require("c12"),config=require("../config.cjs");async function loadConfig(e={}){return await c12.loadConfig({name:"basis",cwd:process.cwd(),...e,defaults:{...config.defaultConfig,...e.defaults}})}async function fileExists(e){try{return await promises.access(e),!0}catch{return!1}}function getPackageManagerCommands(e){switch(e){case"yarn":return{outdated:"yarn outdated --json",audit:"yarn audit --level moderate",execPrefix:"yarn exec",remove:"yarn remove",update:"yarn upgrade",auditFix:"yarn upgrade"};case"pnpm":return{outdated:"pnpm outdated --format table",audit:"pnpm audit --audit-level moderate",execPrefix:"pnpm exec",remove:"pnpm remove",update:"pnpm update",auditFix:"pnpm audit --fix"};case"bun":return{outdated:"bun outdated",audit:null,execPrefix:"bunx",remove:"bun remove",update:"bun update",auditFix:null};case"deno":return{outdated:null,audit:null,execPrefix:"deno task",remove:null,update:null,auditFix:null};default:return{outdated:"npm outdated --json",audit:"npm audit --audit-level moderate",execPrefix:"npx",remove:"npm uninstall",update:"npm update",auditFix:"npm audit fix"}}}exports.fileExists=fileExists,exports.getPackageManagerCommands=getPackageManagerCommands,exports.loadConfig=loadConfig;
@@ -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
  }
@@ -28,6 +27,37 @@ interface LintConfig {
28
27
  checkReadme?: boolean;
29
28
  checkChangelog?: boolean;
30
29
  };
30
+ fix?: {
31
+ /** Enable automatic fixing for all supported issues */
32
+ autoFix?: boolean;
33
+ /** Dependency fix options */
34
+ dependencies?: {
35
+ /** Automatically remove blocked packages */
36
+ removeBlocked?: boolean;
37
+ /** Automatically update outdated dependencies */
38
+ updateOutdated?: boolean;
39
+ /** Attempt to fix security vulnerabilities */
40
+ fixSecurity?: boolean;
41
+ /** Ask for confirmation before making changes */
42
+ interactive?: boolean;
43
+ };
44
+ /** Structure fix options */
45
+ structure?: {
46
+ /** Automatically create missing required files */
47
+ createMissingFiles?: boolean;
48
+ /** Automatically create missing required directories */
49
+ createMissingDirs?: boolean;
50
+ /** Generate file templates for missing files */
51
+ generateTemplates?: boolean;
52
+ };
53
+ /** Documentation fix options */
54
+ docs?: {
55
+ /** Generate README.md template if missing */
56
+ generateReadme?: boolean;
57
+ /** Generate CHANGELOG.md template if missing */
58
+ generateChangelog?: boolean;
59
+ };
60
+ };
31
61
  }
32
62
  interface GitConfig {
33
63
  hooks?: Partial<Record<ValidGitHook, string>>;
@@ -159,14 +189,6 @@ type ValidGitHook = (typeof VALID_GIT_HOOKS)[number];
159
189
  type GitConfigValue = string | number | boolean;
160
190
  type GitConfigSection = Record<string, GitConfigValue>;
161
191
  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
192
  interface VersionConfig {
171
193
  /** Git tag prefix */
172
194
  tagPrefix?: string;
@@ -250,4 +272,4 @@ declare function defineBasisConfig(config: BasisConfig): BasisConfig;
250
272
  declare const defaultConfig: BasisConfig;
251
273
 
252
274
  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 };
275
+ 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
  }
@@ -28,6 +27,37 @@ interface LintConfig {
28
27
  checkReadme?: boolean;
29
28
  checkChangelog?: boolean;
30
29
  };
30
+ fix?: {
31
+ /** Enable automatic fixing for all supported issues */
32
+ autoFix?: boolean;
33
+ /** Dependency fix options */
34
+ dependencies?: {
35
+ /** Automatically remove blocked packages */
36
+ removeBlocked?: boolean;
37
+ /** Automatically update outdated dependencies */
38
+ updateOutdated?: boolean;
39
+ /** Attempt to fix security vulnerabilities */
40
+ fixSecurity?: boolean;
41
+ /** Ask for confirmation before making changes */
42
+ interactive?: boolean;
43
+ };
44
+ /** Structure fix options */
45
+ structure?: {
46
+ /** Automatically create missing required files */
47
+ createMissingFiles?: boolean;
48
+ /** Automatically create missing required directories */
49
+ createMissingDirs?: boolean;
50
+ /** Generate file templates for missing files */
51
+ generateTemplates?: boolean;
52
+ };
53
+ /** Documentation fix options */
54
+ docs?: {
55
+ /** Generate README.md template if missing */
56
+ generateReadme?: boolean;
57
+ /** Generate CHANGELOG.md template if missing */
58
+ generateChangelog?: boolean;
59
+ };
60
+ };
31
61
  }
32
62
  interface GitConfig {
33
63
  hooks?: Partial<Record<ValidGitHook, string>>;
@@ -159,14 +189,6 @@ type ValidGitHook = (typeof VALID_GIT_HOOKS)[number];
159
189
  type GitConfigValue = string | number | boolean;
160
190
  type GitConfigSection = Record<string, GitConfigValue>;
161
191
  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
192
  interface VersionConfig {
171
193
  /** Git tag prefix */
172
194
  tagPrefix?: string;
@@ -250,4 +272,4 @@ declare function defineBasisConfig(config: BasisConfig): BasisConfig;
250
272
  declare const defaultConfig: BasisConfig;
251
273
 
252
274
  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 };
275
+ 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
  }
@@ -28,6 +27,37 @@ interface LintConfig {
28
27
  checkReadme?: boolean;
29
28
  checkChangelog?: boolean;
30
29
  };
30
+ fix?: {
31
+ /** Enable automatic fixing for all supported issues */
32
+ autoFix?: boolean;
33
+ /** Dependency fix options */
34
+ dependencies?: {
35
+ /** Automatically remove blocked packages */
36
+ removeBlocked?: boolean;
37
+ /** Automatically update outdated dependencies */
38
+ updateOutdated?: boolean;
39
+ /** Attempt to fix security vulnerabilities */
40
+ fixSecurity?: boolean;
41
+ /** Ask for confirmation before making changes */
42
+ interactive?: boolean;
43
+ };
44
+ /** Structure fix options */
45
+ structure?: {
46
+ /** Automatically create missing required files */
47
+ createMissingFiles?: boolean;
48
+ /** Automatically create missing required directories */
49
+ createMissingDirs?: boolean;
50
+ /** Generate file templates for missing files */
51
+ generateTemplates?: boolean;
52
+ };
53
+ /** Documentation fix options */
54
+ docs?: {
55
+ /** Generate README.md template if missing */
56
+ generateReadme?: boolean;
57
+ /** Generate CHANGELOG.md template if missing */
58
+ generateChangelog?: boolean;
59
+ };
60
+ };
31
61
  }
32
62
  interface GitConfig {
33
63
  hooks?: Partial<Record<ValidGitHook, string>>;
@@ -159,14 +189,6 @@ type ValidGitHook = (typeof VALID_GIT_HOOKS)[number];
159
189
  type GitConfigValue = string | number | boolean;
160
190
  type GitConfigSection = Record<string, GitConfigValue>;
161
191
  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
192
  interface VersionConfig {
171
193
  /** Git tag prefix */
172
194
  tagPrefix?: string;
@@ -250,4 +272,4 @@ declare function defineBasisConfig(config: BasisConfig): BasisConfig;
250
272
  declare const defaultConfig: BasisConfig;
251
273
 
252
274
  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 };
275
+ 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 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(`
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.D3fInv-P.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
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
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
4
  `).map(o=>o&&!o.startsWith("[")&&o.includes("=")?` ${o}`:o).join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funish/basis",
3
- "version": "0.0.7",
3
+ "version": "0.1.0",
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 +0,0 @@
1
- import{access as a}from"node:fs/promises";import{loadConfig as t}from"c12";import{defaultConfig as n}from"../config.mjs";async function d(e={}){return await t({name:"basis",cwd:process.cwd(),...e,defaults:{...n,...e.defaults}})}async function u(e){try{return await a(e),!0}catch{return!1}}function r(e){switch(e){case"yarn":return{outdated:"yarn outdated --json",audit:"yarn audit --level moderate",execPrefix:"yarn exec"};case"pnpm":return{outdated:"pnpm outdated --format table",audit:"pnpm audit --audit-level moderate",execPrefix:"pnpm exec"};case"bun":return{outdated:"bun outdated",audit:null,execPrefix:"bunx"};case"deno":return{outdated:null,audit:null,execPrefix:"deno task"};default:return{outdated:"npm outdated --json",audit:"npm audit --audit-level moderate",execPrefix:"npx"}}}export{u as f,r as g,d as l};
@@ -1,3 +0,0 @@
1
- import{execSync as f}from"node:child_process";import{consola as a}from"consola";import k from"fast-glob";import S from"micromatch";import{detectPackageManager as x}from"nypm";import{resolve as h}from"pathe";import{readPackageJSON as j}from"pkg-types";import{l as g,f as m,g as A}from"./basis.BIUEmg1C.mjs";function $(){try{const t=f("git diff --cached --name-only",{encoding:"utf8"}).trim().split(`
2
- `).filter(Boolean),r=f("git diff --cached --name-only --diff-filter=D",{encoding:"utf8"}),i=new Set(r.trim().split(`
3
- `).filter(Boolean));return t.filter(e=>!i.has(e))}catch{return[]}}async function y(t,r=["**/*"],i=["node_modules/**","dist/**","build/**",".git/**"]){try{return await k(r,{cwd:t,ignore:i,onlyFiles:!0,dot:!1,absolute:!1})}catch(e){return a.warn("Failed to scan project files:",e),[]}}async function R(t=process.cwd(),r){const{config:i}=await g({cwd:t,overrides:r?{lint:{staged:r}}:void 0}),e=i.lint?.staged||{},n=$();if(n.length===0)return!0;if(Object.keys(e).length===0)return a.warn("No staged lint configuration found. Add lint.staged section to your basis.config.ts"),!0;let c=!1;const s=new Set;for(const[o,u]of Object.entries(e)){const l=n.filter(d=>!s.has(d)&&S.isMatch(d.split("/").pop()||d,o));if(l.length!==0){a.start(`Linting ${l.length} files: ${o}`);try{const d=`${u} ${l.join(" ")}`;f(d,{stdio:"inherit",cwd:t});const p=[];for(const w of l)await m(h(t,w))&&p.push(w);p.length>0&&f(`git add ${p.join(" ")}`,{stdio:"inherit",cwd:t}),l.forEach(w=>s.add(w))}catch(d){c=!0,a.error(`Lint pattern '${o}' failed. Please fix the issues and try again:`,d)}}}return!c}async function v(t=process.cwd(),r){const{config:i}=await g({cwd:t,overrides:r?{lint:{project:r}}:void 0}),e=i.lint?.project||{};if(Object.keys(e).length===0)return a.warn("No project lint configuration found. Add lint.project section to your basis.config.ts"),!0;a.start("Running project-wide linting...");let n=!1;for(const[c,s]of Object.entries(e)){a.start(`Running project lint: ${c}`);try{f(s,{stdio:"inherit",cwd:t})}catch(o){n=!0,a.error(`Project lint pattern '${c}' failed. Please fix the issues and try again:`,o)}}return!n}async function E(t=process.cwd(),r){const{config:i}=await g({cwd:t,overrides:r?{lint:{dependencies:r}}:void 0}),e=i.lint?.dependencies||{};let n=!1;try{const c=await j(t),s={...c.dependencies,...c.devDependencies},o=(await x(t))?.name||"npm",u=A(o);if(a.start("Checking dependencies..."),e.blockedPackages&&e.blockedPackages.length>0){const l=Object.keys(s).filter(d=>e.blockedPackages?.includes(d));l.length>0&&(a.error(`Blocked packages found: ${l.join(", ")}. Please remove these packages from your dependencies.`),n=!0)}if(e.checkOutdated)if(u.outdated)try{f(u.outdated,{cwd:t,stdio:"pipe"})}catch(l){a.warn("Some dependencies are outdated:",l)}else a.warn(`Outdated check not available for ${o}`);if(e.checkSecurity)if(u.audit)try{f(u.audit,{cwd:t,stdio:"pipe"})}catch(l){a.error("Security vulnerabilities detected:",l),n=!0}else a.warn(`Security audit not available for ${o}`);if(e.allowedLicenses&&e.allowedLicenses.length>0){const{hasIssues:l,invalidLicenses:d}=await M(t,e.allowedLicenses);l&&(a.error("Packages with invalid licenses found:"),d.forEach(p=>a.error(` ${p}`)),n=!0)}}catch(c){a.error("Failed to check dependencies:",c),n=!0}return!n}async function D(t,r){if(r.length===0)return!0;const i=(await Promise.all(r.map(async e=>({file:e,exists:await m(h(t,e))})))).filter(e=>!e.exists);return i.length>0?(i.forEach(({file:e})=>{a.error(`Required file missing: ${e}`)}),!1):!0}async function O(t,r){if(r.length===0)return!0;const i=(await Promise.all(r.map(async e=>({dir:e,exists:await m(h(t,e))})))).filter(e=>!e.exists);return i.length>0?(i.forEach(({dir:e})=>{a.error(`Required directory missing: ${e}`)}),!1):!0}async function F(t,r,i){const e=new RegExp(i),n=(await y(t,[r])).filter(c=>{const s=c.split("/").pop()||"";return!e.test(s)});return n.length>0?(a.error(`Files with invalid naming in ${r}: ${n.slice(0,3).join(", ")}${n.length>3?"...":""}`),!1):!0}async function L(t,r,i){const e=new RegExp(i),n=new Set,c=(await y(t,[r.replace(/\/\*\*?$/,"")])).filter(async s=>{const o=h(t,s);try{return(await import("node:fs/promises").then(u=>u.stat(o))).isDirectory()}catch{return!1}});for(const s of await Promise.all(c))if(s){const o=s.split("/").pop()||"";e.test(o)||n.add(s)}return n.size>0?(a.error(`Directories with invalid naming in ${r}: ${Array.from(n).slice(0,3).join(", ")}`),!1):!0}async function C(t,r){let i=!1;for(const e of r){const{path:n,files:c,directories:s,description:o}=e;a.start(`Checking naming rule: ${o||n}`),c&&(await F(t,n,c)||(i=!0)),s&&(await L(t,n,s)||(i=!0))}return!i}async function P(t=process.cwd(),r){const{config:i}=await g({cwd:t,overrides:r?{lint:{structure:r}}:void 0}),e=i.lint?.structure||{};let n=!1;return a.start("Checking project structure..."),e.requiredFiles&&(await D(t,e.requiredFiles)||(n=!0)),e.requiredDirs&&(await O(t,e.requiredDirs)||(n=!0)),e.naming&&e.naming.length>0&&(await C(t,e.naming)||(n=!0)),!n}async function b(t=process.cwd(),r){const{config:i}=await g({cwd:t,overrides:r?{lint:{docs:r}}:void 0}),e=i.lint?.docs||{};let n=!1;a.start("Checking documentation...");const c=[];e.checkReadme!==!1&&c.push({type:"README",files:["README.md","README.rst","README.txt","readme.md"],required:!0}),e.checkChangelog&&c.push({type:"CHANGELOG",files:["CHANGELOG.md","CHANGELOG.rst","HISTORY.md","changelog.md"],required:!0});for(const{type:s,files:o,required:u}of c){const l=(await Promise.all(o.map(d=>m(h(t,d))))).some(d=>d);u&&!l&&(a.error(`No ${s} file found`),n=!0)}return!n}async function q(t=process.cwd()){const{config:r}=await g({cwd:t}),i=r.lint||{};a.start("Running comprehensive project lint...");const e=(await Promise.allSettled([v(t,i.project),E(t,i.dependencies),P(t,i.structure),b(t,i.docs)])).filter(n=>n.status==="rejected"||n.status==="fulfilled"&&!n.value);return e.length===0?!0:(a.error(`${e.length} lint check(s) failed`),!1)}async function M(t,r){try{const i=await k(["node_modules/*/package.json","node_modules/@*/*/package.json"],{cwd:t,onlyFiles:!0,absolute:!0}),e=[],n=new Set;for(const c of i)try{const s=await j(c);if(!s.name||n.has(s.name))continue;if(n.add(s.name),s.license){const o=Array.isArray(s.license)?s.license.join(", "):s.license;r.some(u=>o.includes(u))||e.push(`${s.name}: ${o}`)}}catch{}return{hasIssues:e.length>0,invalidLicenses:e}}catch(i){return a.warn("Failed to check licenses:",i),{hasIssues:!1,invalidLicenses:[]}}}export{y as a,R as b,v as c,E as d,P as e,b as f,$ as g,q as l};
@@ -1,3 +0,0 @@
1
- "use strict";const node_child_process=require("node:child_process"),consola=require("consola"),y=require("fast-glob"),w=require("micromatch"),nypm=require("nypm"),pathe=require("pathe"),pkgTypes=require("pkg-types"),utils=require("./basis.cvMXIHAl.cjs");function _interopDefaultCompat(t){return t&&typeof t=="object"&&"default"in t?t.default:t}const y__default=_interopDefaultCompat(y),w__default=_interopDefaultCompat(w);function getStagedFiles(){try{const t=node_child_process.execSync("git diff --cached --name-only",{encoding:"utf8"}).trim().split(`
2
- `).filter(Boolean),s=node_child_process.execSync("git diff --cached --name-only --diff-filter=D",{encoding:"utf8"}),o=new Set(s.trim().split(`
3
- `).filter(Boolean));return t.filter(e=>!o.has(e))}catch{return[]}}async function getProjectFiles(t,s=["**/*"],o=["node_modules/**","dist/**","build/**",".git/**"]){try{return await y__default(s,{cwd:t,ignore:o,onlyFiles:!0,dot:!1,absolute:!1})}catch(e){return consola.consola.warn("Failed to scan project files:",e),[]}}async function lintStaged(t=process.cwd(),s){const{config:o}=await utils.loadConfig({cwd:t,overrides:s?{lint:{staged:s}}:void 0}),e=o.lint?.staged||{},n=getStagedFiles();if(n.length===0)return!0;if(Object.keys(e).length===0)return consola.consola.warn("No staged lint configuration found. Add lint.staged section to your basis.config.ts"),!0;let r=!1;const i=new Set;for(const[c,d]of Object.entries(e)){const a=n.filter(l=>!i.has(l)&&w__default.isMatch(l.split("/").pop()||l,c));if(a.length!==0){consola.consola.start(`Linting ${a.length} files: ${c}`);try{const l=`${d} ${a.join(" ")}`;node_child_process.execSync(l,{stdio:"inherit",cwd:t});const u=[];for(const f of a)await utils.fileExists(pathe.resolve(t,f))&&u.push(f);u.length>0&&node_child_process.execSync(`git add ${u.join(" ")}`,{stdio:"inherit",cwd:t}),a.forEach(f=>i.add(f))}catch(l){r=!0,consola.consola.error(`Lint pattern '${c}' failed. Please fix the issues and try again:`,l)}}}return!r}async function lintProject(t=process.cwd(),s){const{config:o}=await utils.loadConfig({cwd:t,overrides:s?{lint:{project:s}}:void 0}),e=o.lint?.project||{};if(Object.keys(e).length===0)return consola.consola.warn("No project lint configuration found. Add lint.project section to your basis.config.ts"),!0;consola.consola.start("Running project-wide linting...");let n=!1;for(const[r,i]of Object.entries(e)){consola.consola.start(`Running project lint: ${r}`);try{node_child_process.execSync(i,{stdio:"inherit",cwd:t})}catch(c){n=!0,consola.consola.error(`Project lint pattern '${r}' failed. Please fix the issues and try again:`,c)}}return!n}async function lintDependencies(t=process.cwd(),s){const{config:o}=await utils.loadConfig({cwd:t,overrides:s?{lint:{dependencies:s}}:void 0}),e=o.lint?.dependencies||{};let n=!1;try{const r=await pkgTypes.readPackageJSON(t),i={...r.dependencies,...r.devDependencies},c=(await nypm.detectPackageManager(t))?.name||"npm",d=utils.getPackageManagerCommands(c);if(consola.consola.start("Checking dependencies..."),e.blockedPackages&&e.blockedPackages.length>0){const a=Object.keys(i).filter(l=>e.blockedPackages?.includes(l));a.length>0&&(consola.consola.error(`Blocked packages found: ${a.join(", ")}. Please remove these packages from your dependencies.`),n=!0)}if(e.checkOutdated)if(d.outdated)try{node_child_process.execSync(d.outdated,{cwd:t,stdio:"pipe"})}catch(a){consola.consola.warn("Some dependencies are outdated:",a)}else consola.consola.warn(`Outdated check not available for ${c}`);if(e.checkSecurity)if(d.audit)try{node_child_process.execSync(d.audit,{cwd:t,stdio:"pipe"})}catch(a){consola.consola.error("Security vulnerabilities detected:",a),n=!0}else consola.consola.warn(`Security audit not available for ${c}`);if(e.allowedLicenses&&e.allowedLicenses.length>0){const{hasIssues:a,invalidLicenses:l}=await E(t,e.allowedLicenses);a&&(consola.consola.error("Packages with invalid licenses found:"),l.forEach(u=>consola.consola.error(` ${u}`)),n=!0)}}catch(r){consola.consola.error("Failed to check dependencies:",r),n=!0}return!n}async function j(t,s){if(s.length===0)return!0;const o=(await Promise.all(s.map(async e=>({file:e,exists:await utils.fileExists(pathe.resolve(t,e))})))).filter(e=>!e.exists);return o.length>0?(o.forEach(({file:e})=>{consola.consola.error(`Required file missing: ${e}`)}),!1):!0}async function $(t,s){if(s.length===0)return!0;const o=(await Promise.all(s.map(async e=>({dir:e,exists:await utils.fileExists(pathe.resolve(t,e))})))).filter(e=>!e.exists);return o.length>0?(o.forEach(({dir:e})=>{consola.consola.error(`Required directory missing: ${e}`)}),!1):!0}async function x(t,s,o){const e=new RegExp(o),n=(await getProjectFiles(t,[s])).filter(r=>{const i=r.split("/").pop()||"";return!e.test(i)});return n.length>0?(consola.consola.error(`Files with invalid naming in ${s}: ${n.slice(0,3).join(", ")}${n.length>3?"...":""}`),!1):!0}async function F(t,s,o){const e=new RegExp(o),n=new Set,r=(await getProjectFiles(t,[s.replace(/\/\*\*?$/,"")])).filter(async i=>{const c=pathe.resolve(t,i);try{return(await import("node:fs/promises").then(d=>d.stat(c))).isDirectory()}catch{return!1}});for(const i of await Promise.all(r))if(i){const c=i.split("/").pop()||"";e.test(c)||n.add(i)}return n.size>0?(consola.consola.error(`Directories with invalid naming in ${s}: ${Array.from(n).slice(0,3).join(", ")}`),!1):!0}async function v(t,s){let o=!1;for(const e of s){const{path:n,files:r,directories:i,description:c}=e;consola.consola.start(`Checking naming rule: ${c||n}`),r&&(await x(t,n,r)||(o=!0)),i&&(await F(t,n,i)||(o=!0))}return!o}async function lintStructure(t=process.cwd(),s){const{config:o}=await utils.loadConfig({cwd:t,overrides:s?{lint:{structure:s}}:void 0}),e=o.lint?.structure||{};let n=!1;return consola.consola.start("Checking project structure..."),e.requiredFiles&&(await j(t,e.requiredFiles)||(n=!0)),e.requiredDirs&&(await $(t,e.requiredDirs)||(n=!0)),e.naming&&e.naming.length>0&&(await v(t,e.naming)||(n=!0)),!n}async function lintDocs(t=process.cwd(),s){const{config:o}=await utils.loadConfig({cwd:t,overrides:s?{lint:{docs:s}}:void 0}),e=o.lint?.docs||{};let n=!1;consola.consola.start("Checking documentation...");const r=[];e.checkReadme!==!1&&r.push({type:"README",files:["README.md","README.rst","README.txt","readme.md"],required:!0}),e.checkChangelog&&r.push({type:"CHANGELOG",files:["CHANGELOG.md","CHANGELOG.rst","HISTORY.md","changelog.md"],required:!0});for(const{type:i,files:c,required:d}of r){const a=(await Promise.all(c.map(l=>utils.fileExists(pathe.resolve(t,l))))).some(l=>l);d&&!a&&(consola.consola.error(`No ${i} file found`),n=!0)}return!n}async function lintAll(t=process.cwd()){const{config:s}=await utils.loadConfig({cwd:t}),o=s.lint||{};consola.consola.start("Running comprehensive project lint...");const e=(await Promise.allSettled([lintProject(t,o.project),lintDependencies(t,o.dependencies),lintStructure(t,o.structure),lintDocs(t,o.docs)])).filter(n=>n.status==="rejected"||n.status==="fulfilled"&&!n.value);return e.length===0?!0:(consola.consola.error(`${e.length} lint check(s) failed`),!1)}async function E(t,s){try{const o=await y__default(["node_modules/*/package.json","node_modules/@*/*/package.json"],{cwd:t,onlyFiles:!0,absolute:!0}),e=[],n=new Set;for(const r of o)try{const i=await pkgTypes.readPackageJSON(r);if(!i.name||n.has(i.name))continue;if(n.add(i.name),i.license){const c=Array.isArray(i.license)?i.license.join(", "):i.license;s.some(d=>c.includes(d))||e.push(`${i.name}: ${c}`)}}catch{}return{hasIssues:e.length>0,invalidLicenses:e}}catch(o){return consola.consola.warn("Failed to check licenses:",o),{hasIssues:!1,invalidLicenses:[]}}}exports.getProjectFiles=getProjectFiles,exports.getStagedFiles=getStagedFiles,exports.lintAll=lintAll,exports.lintDependencies=lintDependencies,exports.lintDocs=lintDocs,exports.lintProject=lintProject,exports.lintStaged=lintStaged,exports.lintStructure=lintStructure;
@@ -1 +0,0 @@
1
- "use strict";const promises=require("node:fs/promises"),c12=require("c12"),config=require("../config.cjs");async function loadConfig(e={}){return await c12.loadConfig({name:"basis",cwd:process.cwd(),...e,defaults:{...config.defaultConfig,...e.defaults}})}async function fileExists(e){try{return await promises.access(e),!0}catch{return!1}}function getPackageManagerCommands(e){switch(e){case"yarn":return{outdated:"yarn outdated --json",audit:"yarn audit --level moderate",execPrefix:"yarn exec"};case"pnpm":return{outdated:"pnpm outdated --format table",audit:"pnpm audit --audit-level moderate",execPrefix:"pnpm exec"};case"bun":return{outdated:"bun outdated",audit:null,execPrefix:"bunx"};case"deno":return{outdated:null,audit:null,execPrefix:"deno task"};default:return{outdated:"npm outdated --json",audit:"npm audit --audit-level moderate",execPrefix:"npx"}}}exports.fileExists=fileExists,exports.getPackageManagerCommands=getPackageManagerCommands,exports.loadConfig=loadConfig;