@codluv/versionguard 0.2.0 → 0.4.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 (47) hide show
  1. package/dist/calver.d.ts +65 -22
  2. package/dist/calver.d.ts.map +1 -1
  3. package/dist/chunks/{index-BwE_OaV3.js → index-B3R60bYJ.js} +913 -138
  4. package/dist/chunks/index-B3R60bYJ.js.map +1 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +258 -22
  7. package/dist/cli.js.map +1 -1
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/feedback/index.d.ts +1 -1
  10. package/dist/feedback/index.d.ts.map +1 -1
  11. package/dist/fix/index.d.ts +7 -2
  12. package/dist/fix/index.d.ts.map +1 -1
  13. package/dist/guard.d.ts +45 -1
  14. package/dist/guard.d.ts.map +1 -1
  15. package/dist/hooks.d.ts.map +1 -1
  16. package/dist/index.d.ts +3 -2
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +33 -23
  19. package/dist/init-wizard.d.ts +49 -0
  20. package/dist/init-wizard.d.ts.map +1 -0
  21. package/dist/project.d.ts +54 -10
  22. package/dist/project.d.ts.map +1 -1
  23. package/dist/sources/git-tag.d.ts +52 -0
  24. package/dist/sources/git-tag.d.ts.map +1 -0
  25. package/dist/sources/index.d.ts +15 -0
  26. package/dist/sources/index.d.ts.map +1 -0
  27. package/dist/sources/json.d.ts +53 -0
  28. package/dist/sources/json.d.ts.map +1 -0
  29. package/dist/sources/provider.d.ts +25 -0
  30. package/dist/sources/provider.d.ts.map +1 -0
  31. package/dist/sources/regex.d.ts +56 -0
  32. package/dist/sources/regex.d.ts.map +1 -0
  33. package/dist/sources/resolve.d.ts +54 -0
  34. package/dist/sources/resolve.d.ts.map +1 -0
  35. package/dist/sources/toml.d.ts +60 -0
  36. package/dist/sources/toml.d.ts.map +1 -0
  37. package/dist/sources/utils.d.ts +73 -0
  38. package/dist/sources/utils.d.ts.map +1 -0
  39. package/dist/sources/version-file.d.ts +51 -0
  40. package/dist/sources/version-file.d.ts.map +1 -0
  41. package/dist/sources/yaml.d.ts +53 -0
  42. package/dist/sources/yaml.d.ts.map +1 -0
  43. package/dist/tag/index.d.ts.map +1 -1
  44. package/dist/types.d.ts +138 -5
  45. package/dist/types.d.ts.map +1 -1
  46. package/package.json +4 -2
  47. package/dist/chunks/index-BwE_OaV3.js.map +0 -1
package/dist/cli.js CHANGED
@@ -4,7 +4,219 @@ import * as path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import chalk from "chalk";
6
6
  import { Command } from "commander";
7
- import { i as initConfig, g as getConfig, a as getPackageVersion, b as getVersionFeedback, v as validate, h as handlePostTag, r as runGuardChecks, c as getSyncFeedback, d as getChangelogFeedback, e as doctor, f as fixAll, j as fixSyncIssues, s as suggestNextVersion, k as setPackageVersion, l as createTag, m as installHooks, u as uninstallHooks, n as areHooksInstalled } from "./chunks/index-BwE_OaV3.js";
7
+ import { i as isValidCalVerFormat, g as getConfig, a as installHooks, b as getPackageVersion, c as getVersionFeedback, v as validate, h as handlePostTag, r as runGuardChecks, d as getSyncFeedback, e as getChangelogFeedback, f as doctor, j as fixAll, k as fixSyncIssues, s as suggestNextVersion, l as setPackageVersion, m as createTag, u as uninstallHooks, n as areHooksInstalled } from "./chunks/index-B3R60bYJ.js";
8
+ import * as p from "@clack/prompts";
9
+ import * as yaml from "js-yaml";
10
+ async function runWizard(cwd) {
11
+ p.intro("VersionGuard Setup");
12
+ const existingConfig = findExistingConfig(cwd);
13
+ if (existingConfig) {
14
+ p.log.warning(`Config already exists: ${path.relative(cwd, existingConfig)}`);
15
+ const overwrite = await p.confirm({ message: "Overwrite existing config?" });
16
+ if (p.isCancel(overwrite) || !overwrite) {
17
+ p.outro("Setup cancelled.");
18
+ return null;
19
+ }
20
+ }
21
+ const type = await p.select({
22
+ message: "Versioning strategy",
23
+ options: [
24
+ { value: "semver", label: "SemVer", hint: "MAJOR.MINOR.PATCH (e.g., 1.2.3)" },
25
+ { value: "calver", label: "CalVer", hint: "Calendar-based (e.g., 2026.3.0)" }
26
+ ]
27
+ });
28
+ if (p.isCancel(type)) {
29
+ p.outro("Setup cancelled.");
30
+ return null;
31
+ }
32
+ let format;
33
+ if (type === "calver") {
34
+ const selected = await selectCalVerFormat();
35
+ if (!selected) {
36
+ p.outro("Setup cancelled.");
37
+ return null;
38
+ }
39
+ format = selected;
40
+ }
41
+ const manifest = await selectManifest(cwd);
42
+ if (manifest === null) {
43
+ p.outro("Setup cancelled.");
44
+ return null;
45
+ }
46
+ const hooks = await p.confirm({
47
+ message: "Install git hooks? (pre-commit, pre-push, post-tag)",
48
+ initialValue: true
49
+ });
50
+ if (p.isCancel(hooks)) {
51
+ p.outro("Setup cancelled.");
52
+ return null;
53
+ }
54
+ const changelog = await p.confirm({
55
+ message: "Enable changelog validation?",
56
+ initialValue: true
57
+ });
58
+ if (p.isCancel(changelog)) {
59
+ p.outro("Setup cancelled.");
60
+ return null;
61
+ }
62
+ const config = buildConfig({
63
+ type,
64
+ format,
65
+ manifest: manifest === "auto" ? void 0 : manifest,
66
+ hooks,
67
+ changelog
68
+ });
69
+ const configPath = writeConfig(cwd, config);
70
+ p.log.success(`Created ${path.relative(cwd, configPath)}`);
71
+ p.outro("Run `versionguard validate` to verify your setup.");
72
+ return configPath;
73
+ }
74
+ function runHeadless(options) {
75
+ const existingConfig = findExistingConfig(options.cwd);
76
+ if (existingConfig && !options.yes) {
77
+ throw new Error(`Config already exists: ${existingConfig}. Use --yes to overwrite.`);
78
+ }
79
+ const config = buildConfig({
80
+ type: options.type ?? "semver",
81
+ format: options.format,
82
+ manifest: options.manifest,
83
+ hooks: options.hooks ?? true,
84
+ changelog: options.changelog ?? true
85
+ });
86
+ return writeConfig(options.cwd, config);
87
+ }
88
+ async function selectCalVerFormat() {
89
+ const preset = await p.select({
90
+ message: "CalVer format",
91
+ options: [
92
+ { value: "YYYY.M.MICRO", label: "YYYY.M.MICRO", hint: "calver.org standard — 2026.3.0" },
93
+ { value: "YYYY.MM.MICRO", label: "YYYY.MM.MICRO", hint: "padded month — 2026.03.0" },
94
+ { value: "YY.0M.MICRO", label: "YY.0M.MICRO", hint: "Twisted/pip style — 26.03.0" },
95
+ { value: "YYYY.0M.0D", label: "YYYY.0M.0D", hint: "date-based — 2026.03.25" },
96
+ {
97
+ value: "YYYY.0M.0D.MICRO",
98
+ label: "YYYY.0M.0D.MICRO",
99
+ hint: "youtube-dl style — 2026.03.25.0"
100
+ },
101
+ { value: "YY.0M", label: "YY.0M", hint: "Ubuntu style — 26.03" },
102
+ { value: "custom", label: "Custom...", hint: "enter your own token format" }
103
+ ]
104
+ });
105
+ if (p.isCancel(preset)) return null;
106
+ if (preset === "custom") {
107
+ const custom = await p.text({
108
+ message: "Enter CalVer format (dot-separated tokens)",
109
+ placeholder: "YYYY.MM.MICRO",
110
+ validate(value) {
111
+ if (!value || !isValidCalVerFormat(value)) {
112
+ return "Invalid format. Use tokens: YYYY|YY|0Y, MM|M|0M, WW|0W, DD|D|0D, MICRO|PATCH";
113
+ }
114
+ }
115
+ });
116
+ if (p.isCancel(custom)) return null;
117
+ return custom;
118
+ }
119
+ return preset;
120
+ }
121
+ async function selectManifest(cwd) {
122
+ const detected = [];
123
+ const checks = [
124
+ { file: "package.json", label: "package.json", hint: "Node.js / Bun" },
125
+ { file: "Cargo.toml", label: "Cargo.toml", hint: "Rust" },
126
+ { file: "pyproject.toml", label: "pyproject.toml", hint: "Python" },
127
+ { file: "pubspec.yaml", label: "pubspec.yaml", hint: "Dart / Flutter" },
128
+ { file: "composer.json", label: "composer.json", hint: "PHP" },
129
+ { file: "pom.xml", label: "pom.xml", hint: "Java / Maven" },
130
+ { file: "VERSION", label: "VERSION", hint: "Plain text file" }
131
+ ];
132
+ for (const check of checks) {
133
+ if (fs.existsSync(path.join(cwd, check.file))) {
134
+ detected.push({ value: check.file, label: `${check.label} (detected)`, hint: check.hint });
135
+ }
136
+ }
137
+ const options = [
138
+ { value: "auto", label: "Auto-detect", hint: "scan for known manifests at runtime" },
139
+ ...detected,
140
+ ...checks.filter((c) => !detected.some((d) => d.value === c.file)).map((c) => ({ value: c.file, label: c.label, hint: c.hint })),
141
+ { value: "git-tag", label: "Git tags", hint: "Go / Swift — version from tags" }
142
+ ];
143
+ const result = await p.select({
144
+ message: "Version source",
145
+ options,
146
+ initialValue: detected.length === 1 ? detected[0].value : "auto"
147
+ });
148
+ if (p.isCancel(result)) return null;
149
+ return result;
150
+ }
151
+ function buildConfig(input) {
152
+ const config = {
153
+ versioning: {
154
+ type: input.type,
155
+ ...input.type === "calver" && input.format ? {
156
+ calver: {
157
+ format: input.format,
158
+ preventFutureDates: true
159
+ }
160
+ } : {}
161
+ }
162
+ };
163
+ if (input.manifest) {
164
+ config.manifest = { source: input.manifest };
165
+ }
166
+ config.sync = {
167
+ files: ["README.md", "CHANGELOG.md"],
168
+ patterns: [
169
+ {
170
+ regex: `(version\\s*[=:]\\s*["'])(.+?)(["'])`,
171
+ template: "$1{{version}}$3"
172
+ },
173
+ {
174
+ regex: "(##\\s*\\[)(.+?)(\\])",
175
+ template: "$1{{version}}$3"
176
+ }
177
+ ]
178
+ };
179
+ config.changelog = {
180
+ enabled: input.changelog,
181
+ file: "CHANGELOG.md",
182
+ strict: true,
183
+ requireEntry: input.changelog
184
+ };
185
+ config.git = {
186
+ hooks: {
187
+ "pre-commit": input.hooks,
188
+ "pre-push": input.hooks,
189
+ "post-tag": input.hooks
190
+ },
191
+ enforceHooks: input.hooks
192
+ };
193
+ config.ignore = ["node_modules/**", "dist/**", ".git/**", "*.lock", ".changeset/**"];
194
+ return config;
195
+ }
196
+ function writeConfig(cwd, config) {
197
+ const configPath = path.join(cwd, ".versionguard.yml");
198
+ const content = yaml.dump(config, {
199
+ indent: 2,
200
+ lineWidth: 120,
201
+ noRefs: true,
202
+ quotingType: '"',
203
+ forceQuotes: false
204
+ });
205
+ fs.writeFileSync(configPath, content, "utf-8");
206
+ return configPath;
207
+ }
208
+ function findExistingConfig(cwd) {
209
+ for (const name of [
210
+ ".versionguard.yml",
211
+ ".versionguard.yaml",
212
+ "versionguard.yml",
213
+ "versionguard.yaml"
214
+ ]) {
215
+ const full = path.join(cwd, name);
216
+ if (fs.existsSync(full)) return full;
217
+ }
218
+ return null;
219
+ }
8
220
  const CLI_DIR = path.dirname(fileURLToPath(import.meta.url));
9
221
  const CLI_VERSION = JSON.parse(fs.readFileSync(path.join(CLI_DIR, "..", "package.json"), "utf-8")).version;
10
222
  const styles = {
@@ -18,24 +230,48 @@ const styles = {
18
230
  function createProgram() {
19
231
  const program = new Command();
20
232
  program.name("versionguard").description("Strict versioning enforcement for SemVer and CalVer").version(CLI_VERSION);
21
- program.command("init").description("Initialize VersionGuard configuration").option("-c, --cwd <path>", "Working directory", process.cwd()).action((options) => {
22
- try {
23
- const configPath = initConfig(options.cwd);
24
- console.log(styles.success(`✓ Created ${path.relative(options.cwd, configPath)}`));
25
- console.log("");
26
- console.log(styles.info("Next steps:"));
27
- console.log(" 1. Edit .versionguard.yml to set your versioning type");
28
- console.log(" 2. Run: npx versionguard hooks install");
29
- console.log(" 3. Run: npx versionguard check");
30
- } catch (error) {
31
- console.error(styles.error(`✗ ${error.message}`));
32
- process.exit(1);
233
+ program.command("init").description("Initialize VersionGuard configuration (interactive wizard or headless)").option("-c, --cwd <path>", "Working directory", process.cwd()).option("-t, --type <type>", "Versioning type: semver or calver").option("-f, --format <format>", "CalVer format tokens (e.g., YYYY.M.MICRO)").option("--manifest <source>", "Manifest source (e.g., Cargo.toml, pyproject.toml, auto)").option("--hooks", "Install git hooks (default: true)").option("--no-hooks", "Skip git hooks").option("--changelog", "Enable changelog validation (default: true)").option("--no-changelog", "Disable changelog validation").option("-y, --yes", "Accept all defaults, no prompts").action(
234
+ async (options) => {
235
+ try {
236
+ const isHeadless = options.yes || options.type || options.format || options.manifest;
237
+ let configPath;
238
+ if (isHeadless) {
239
+ configPath = runHeadless({
240
+ cwd: options.cwd,
241
+ type: options.type,
242
+ format: options.format,
243
+ manifest: options.manifest,
244
+ hooks: options.hooks,
245
+ changelog: options.changelog,
246
+ yes: options.yes
247
+ });
248
+ console.log(styles.success(`✓ Created ${path.relative(options.cwd, configPath)}`));
249
+ } else {
250
+ configPath = await runWizard(options.cwd);
251
+ if (!configPath) {
252
+ process.exit(0);
253
+ return;
254
+ }
255
+ }
256
+ try {
257
+ const config = getConfig(options.cwd);
258
+ if (config.git.enforceHooks) {
259
+ installHooks(config.git, options.cwd);
260
+ console.log(styles.success("✓ Git hooks installed"));
261
+ }
262
+ } catch {
263
+ console.log(styles.info("ℹ Skipped hooks install (not a git repository)"));
264
+ }
265
+ } catch (error) {
266
+ console.error(styles.error(`✗ ${error.message}`));
267
+ process.exit(1);
268
+ }
33
269
  }
34
- });
270
+ );
35
271
  program.command("check").description("Check the current version with actionable feedback").option("-c, --cwd <path>", "Working directory", process.cwd()).option("--prev <version>", "Previous version for comparison").option("--json", "Print machine-readable JSON output").action((options) => {
36
272
  try {
37
273
  const config = getConfig(options.cwd);
38
- const version = getPackageVersion(options.cwd);
274
+ const version = getPackageVersion(options.cwd, config.manifest);
39
275
  const result = getVersionFeedback(version, config, options.prev);
40
276
  if (options.json) {
41
277
  console.log(
@@ -87,7 +323,7 @@ function createProgram() {
87
323
  program.command("validate").description("Run full validation with smart feedback").option("-c, --cwd <path>", "Working directory", process.cwd()).option("--hook <name>", "Running as git hook").option("--json", "Print machine-readable JSON output").option("--strict", "Run guard checks and fail on any policy gap or bypass").action((options) => {
88
324
  try {
89
325
  const config = getConfig(options.cwd);
90
- const version = getPackageVersion(options.cwd);
326
+ const version = getPackageVersion(options.cwd, config.manifest);
91
327
  const result = validate(config, options.cwd);
92
328
  let postTagResult;
93
329
  let guardReport;
@@ -229,7 +465,7 @@ function createProgram() {
229
465
  program.command("fix").description("Auto-fix detected issues").option("-c, --cwd <path>", "Working directory", process.cwd()).action((options) => {
230
466
  try {
231
467
  const config = getConfig(options.cwd);
232
- const version = getPackageVersion(options.cwd);
468
+ const version = getPackageVersion(options.cwd, config.manifest);
233
469
  const results = fixAll(config, version, options.cwd);
234
470
  console.log(styles.bold(`Fixing issues for version ${version}...`));
235
471
  console.log("");
@@ -245,7 +481,7 @@ function createProgram() {
245
481
  program.command("sync").description("Sync version to all configured files").option("-c, --cwd <path>", "Working directory", process.cwd()).action((options) => {
246
482
  try {
247
483
  const config = getConfig(options.cwd);
248
- const version = getPackageVersion(options.cwd);
484
+ const version = getPackageVersion(options.cwd, config.manifest);
249
485
  const results = fixSyncIssues(config, options.cwd);
250
486
  console.log(styles.bold(`Syncing version ${version}...`));
251
487
  for (const result of results) {
@@ -261,7 +497,7 @@ function createProgram() {
261
497
  (options) => {
262
498
  try {
263
499
  const config = getConfig(options.cwd);
264
- const currentVersion = getPackageVersion(options.cwd);
500
+ const currentVersion = getPackageVersion(options.cwd, config.manifest);
265
501
  const suggestions = suggestNextVersion(currentVersion, config, options.type);
266
502
  console.log(styles.bold(`Current version: ${currentVersion}`));
267
503
  console.log("");
@@ -274,7 +510,7 @@ function createProgram() {
274
510
  if (!nextVersion) {
275
511
  throw new Error("No version suggestion available");
276
512
  }
277
- setPackageVersion(nextVersion, options.cwd);
513
+ setPackageVersion(nextVersion, options.cwd, config.manifest);
278
514
  fixAll(config, nextVersion, options.cwd);
279
515
  console.log(styles.success(`✓ Updated to ${nextVersion}`));
280
516
  }
@@ -284,11 +520,11 @@ function createProgram() {
284
520
  }
285
521
  }
286
522
  );
287
- program.command("tag").description("Create a git tag with automation").argument("[version]", "Version to tag (defaults to package.json version)").option("-c, --cwd <path>", "Working directory", process.cwd()).option("-m, --message <msg>", "Tag message").option("--no-fix", "Skip auto-fixing files before tagging").action(
523
+ program.command("tag").description("Create a git tag with automation").argument("[version]", "Version to tag (defaults to manifest version)").option("-c, --cwd <path>", "Working directory", process.cwd()).option("-m, --message <msg>", "Tag message").option("--no-fix", "Skip auto-fixing files before tagging").action(
288
524
  (version, options) => {
289
525
  try {
290
526
  const config = getConfig(options.cwd);
291
- const tagVersion = version || getPackageVersion(options.cwd);
527
+ const tagVersion = version || getPackageVersion(options.cwd, config.manifest);
292
528
  const result = createTag(
293
529
  tagVersion,
294
530
  options.message,
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport chalk from 'chalk';\nimport { Command } from 'commander';\n\nconst CLI_DIR = path.dirname(fileURLToPath(import.meta.url));\nconst CLI_VERSION: string = (\n JSON.parse(fs.readFileSync(path.join(CLI_DIR, '..', 'package.json'), 'utf-8')) as {\n version: string;\n }\n).version;\n\nimport * as feedback from './feedback';\nimport * as fix from './fix';\nimport * as guard from './guard';\nimport * as versionguard from './index';\nimport * as project from './project';\nimport * as tag from './tag';\n\nconst styles = {\n error: chalk.red,\n warning: chalk.yellow,\n success: chalk.green,\n info: chalk.blue,\n dim: chalk.gray,\n bold: chalk.bold,\n};\n\n/**\n * Creates the VersionGuard CLI program definition.\n *\n * @public\n * @since 0.1.0\n * @remarks\n * This function wires all commands, options, and handlers onto a fresh Commander\n * program instance without parsing arguments yet.\n *\n * @returns A configured Commander program for the VersionGuard CLI.\n *\n * @example\n * ```typescript\n * const program = createProgram();\n * console.log(program.name());\n * ```\n */\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name('versionguard')\n .description('Strict versioning enforcement for SemVer and CalVer')\n .version(CLI_VERSION);\n\n program\n .command('init')\n .description('Initialize VersionGuard configuration')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action((options: { cwd: string }) => {\n try {\n const configPath = versionguard.initConfig(options.cwd);\n console.log(styles.success(`✓ Created ${path.relative(options.cwd, configPath)}`));\n console.log('');\n console.log(styles.info('Next steps:'));\n console.log(' 1. Edit .versionguard.yml to set your versioning type');\n console.log(' 2. Run: npx versionguard hooks install');\n console.log(' 3. Run: npx versionguard check');\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n program\n .command('check')\n .description('Check the current version with actionable feedback')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('--prev <version>', 'Previous version for comparison')\n .option('--json', 'Print machine-readable JSON output')\n .action((options: { cwd: string; prev?: string; json?: boolean }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const version = versionguard.getPackageVersion(options.cwd);\n const result = feedback.getVersionFeedback(version, config, options.prev);\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n version,\n versioningType: config.versioning.type,\n valid: result.valid,\n errors: result.errors,\n suggestions: result.suggestions,\n },\n null,\n 2,\n ),\n );\n if (!result.valid) {\n process.exit(1);\n }\n return;\n }\n\n console.log(styles.bold(`Current version: ${version}`));\n console.log(styles.dim(`Versioning type: ${config.versioning.type}`));\n console.log('');\n\n if (result.valid) {\n console.log(styles.success('✓ Version is valid'));\n return;\n }\n\n console.log(styles.error('✗ Version has issues:'));\n console.log('');\n for (const error of result.errors) {\n console.log(styles.error(` ✗ ${error.message}`));\n }\n if (result.suggestions.length > 0) {\n console.log('');\n console.log(styles.info('How to fix:'));\n for (const suggestion of result.suggestions) {\n console.log(` → ${suggestion.message}`);\n if (suggestion.fix) {\n console.log(styles.dim(` Run: ${suggestion.fix}`));\n }\n }\n }\n process.exit(1);\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n program\n .command('validate')\n .description('Run full validation with smart feedback')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('--hook <name>', 'Running as git hook')\n .option('--json', 'Print machine-readable JSON output')\n .option('--strict', 'Run guard checks and fail on any policy gap or bypass')\n .action((options: { cwd: string; hook?: string; json?: boolean; strict?: boolean }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const version = versionguard.getPackageVersion(options.cwd);\n const result = versionguard.validate(config, options.cwd);\n\n let postTagResult: { success: boolean; message: string; actions: string[] } | undefined;\n let guardReport: guard.GuardReport | undefined;\n\n if (options.hook === 'post-tag') {\n postTagResult = tag.handlePostTag(config, options.cwd);\n }\n\n if (options.strict) {\n guardReport = guard.runGuardChecks(config, options.cwd);\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n ...result,\n hook: options.hook ?? null,\n postTag: postTagResult ?? null,\n guard: guardReport ?? null,\n },\n null,\n 2,\n ),\n );\n\n if (\n !result.valid ||\n (postTagResult && !postTagResult.success) ||\n (guardReport && !guardReport.safe)\n ) {\n process.exit(1);\n }\n\n return;\n }\n\n console.log(styles.bold(`Validating version ${version}...`));\n console.log('');\n\n if (!result.syncValid) {\n console.log(styles.error('Sync Issues:'));\n for (const error of result.errors.filter((item) => item.includes('mismatch'))) {\n const parts = error.match(\n /Version mismatch in (.+):(\\d+) - found \"(.+?)\" but expected \"(.+?)\"/,\n );\n if (!parts) {\n continue;\n }\n const suggestions = feedback.getSyncFeedback(parts[1], parts[3], parts[4]);\n console.log(styles.error(` ✗ ${parts[1]} has wrong version`));\n console.log(styles.dim(` Found: \"${parts[3]}\" Expected: \"${parts[4]}\"`));\n if (suggestions[0]?.fix) {\n console.log(styles.info(` Fix: ${suggestions[0].fix}`));\n }\n }\n console.log('');\n }\n\n if (config.changelog.enabled && !result.changelogValid) {\n console.log(styles.error('Changelog Issues:'));\n for (const error of result.errors.filter((item) =>\n item.toLowerCase().includes('changelog'),\n )) {\n console.log(styles.error(` ✗ ${error}`));\n }\n const suggestions = feedback.getChangelogFeedback(false, version);\n if (suggestions[0]?.fix) {\n console.log(styles.info(`Fix: ${suggestions[0].fix}`));\n }\n console.log('');\n }\n\n if (postTagResult) {\n if (!postTagResult.success) {\n console.log(styles.error(`✗ ${postTagResult.message}`));\n process.exit(1);\n }\n }\n\n if (guardReport && guardReport.warnings.length > 0) {\n console.log(styles.bold('Guard Checks:'));\n for (const warning of guardReport.warnings) {\n const icon = warning.severity === 'error' ? styles.error('✗') : styles.warning('⚠');\n console.log(` ${icon} [${warning.code}] ${warning.message}`);\n if (warning.fix) {\n console.log(styles.dim(` Fix: ${warning.fix}`));\n }\n }\n console.log('');\n }\n\n if (!result.valid || (guardReport && !guardReport.safe)) {\n console.log(styles.error('✗ Validation failed'));\n process.exit(1);\n }\n\n console.log(styles.success('✓ All validations passed'));\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n program\n .command('doctor')\n .description('Report repository readiness in one pass')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('--json', 'Print machine-readable JSON output')\n .option('--strict', 'Include guard checks for bypass detection')\n .action((options: { cwd: string; json?: boolean; strict?: boolean }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const report = versionguard.doctor(config, options.cwd);\n const guardReport = options.strict ? guard.runGuardChecks(config, options.cwd) : undefined;\n\n if (options.json) {\n console.log(JSON.stringify({ ...report, guard: guardReport ?? null }, null, 2));\n if (!report.ready || (guardReport && !guardReport.safe)) {\n process.exit(1);\n }\n return;\n }\n\n console.log(styles.bold('VersionGuard Doctor'));\n console.log(` Version: ${report.version || '(missing)'}`);\n console.log(` Version valid: ${report.versionValid ? 'yes' : 'no'}`);\n console.log(` Files in sync: ${report.syncValid ? 'yes' : 'no'}`);\n console.log(` Changelog ready: ${report.changelogValid ? 'yes' : 'no'}`);\n console.log(` Git repository: ${report.gitRepository ? 'yes' : 'no'}`);\n console.log(\n ` Hooks installed: ${report.gitRepository ? (report.hooksInstalled ? 'yes' : 'no') : 'n/a'}`,\n );\n console.log(\n ` Worktree clean: ${report.gitRepository ? (report.worktreeClean ? 'yes' : 'no') : 'n/a'}`,\n );\n\n if (guardReport) {\n console.log(` Guard safe: ${guardReport.safe ? 'yes' : 'no'}`);\n }\n\n if (!report.ready || (guardReport && !guardReport.safe)) {\n console.log('');\n console.log(styles.error('Issues:'));\n for (const error of report.errors) {\n console.log(styles.error(` ✗ ${error}`));\n }\n if (guardReport) {\n for (const warning of guardReport.warnings) {\n const icon = warning.severity === 'error' ? '✗' : '⚠';\n console.log(styles.error(` ${icon} [${warning.code}] ${warning.message}`));\n if (warning.fix) {\n console.log(styles.dim(` Fix: ${warning.fix}`));\n }\n }\n }\n process.exit(1);\n }\n\n console.log('');\n console.log(styles.success('✓ Repository is ready'));\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n program\n .command('fix')\n .description('Auto-fix detected issues')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action((options: { cwd: string }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const version = versionguard.getPackageVersion(options.cwd);\n const results = fix.fixAll(config, version, options.cwd);\n\n console.log(styles.bold(`Fixing issues for version ${version}...`));\n console.log('');\n\n for (const result of results) {\n const printer = result.fixed ? styles.success : styles.dim;\n console.log(printer(`${result.fixed ? '✓' : '•'} ${result.message}`));\n }\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n program\n .command('sync')\n .description('Sync version to all configured files')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action((options: { cwd: string }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const version = versionguard.getPackageVersion(options.cwd);\n const results = fix.fixSyncIssues(config, options.cwd);\n\n console.log(styles.bold(`Syncing version ${version}...`));\n for (const result of results) {\n const printer = result.fixed ? styles.success : styles.dim;\n console.log(printer(`${result.fixed ? '✓' : '•'} ${result.message}`));\n }\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n program\n .command('bump')\n .description('Suggest and optionally apply the next version')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('-t, --type <type>', 'Bump type (major, minor, patch, auto)')\n .option('--apply', 'Apply the first suggested version')\n .action(\n (options: { cwd: string; type?: 'major' | 'minor' | 'patch' | 'auto'; apply?: boolean }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const currentVersion = versionguard.getPackageVersion(options.cwd);\n const suggestions = fix.suggestNextVersion(currentVersion, config, options.type);\n\n console.log(styles.bold(`Current version: ${currentVersion}`));\n console.log('');\n for (const [index, suggestion] of suggestions.entries()) {\n console.log(` ${index + 1}. ${styles.bold(suggestion.version)}`);\n console.log(` ${styles.dim(suggestion.reason)}`);\n }\n\n if (options.apply) {\n const nextVersion = suggestions[0]?.version;\n if (!nextVersion) {\n throw new Error('No version suggestion available');\n }\n project.setPackageVersion(nextVersion, options.cwd);\n fix.fixAll(config, nextVersion, options.cwd);\n console.log(styles.success(`✓ Updated to ${nextVersion}`));\n }\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n },\n );\n\n program\n .command('tag')\n .description('Create a git tag with automation')\n .argument('[version]', 'Version to tag (defaults to package.json version)')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('-m, --message <msg>', 'Tag message')\n .option('--no-fix', 'Skip auto-fixing files before tagging')\n .action(\n (version: string | undefined, options: { cwd: string; message?: string; fix?: boolean }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const tagVersion = version || versionguard.getPackageVersion(options.cwd);\n const result = tag.createTag(\n tagVersion,\n options.message,\n options.fix !== false,\n config,\n options.cwd,\n );\n\n if (!result.success) {\n console.log(styles.error(`✗ ${result.message}`));\n process.exit(1);\n }\n\n console.log(styles.success(`✓ ${result.message}`));\n for (const action of result.actions) {\n console.log(` • ${action}`);\n }\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n },\n );\n\n const hooksCommand = program.command('hooks').description('Manage git hooks');\n\n hooksCommand\n .command('install')\n .description('Install git hooks')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action((options: { cwd: string }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n versionguard.installHooks(config.git, options.cwd);\n console.log(styles.success('✓ Git hooks installed'));\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n hooksCommand\n .command('uninstall')\n .description('Uninstall git hooks')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action((options: { cwd: string }) => {\n try {\n versionguard.uninstallHooks(options.cwd);\n console.log(styles.success('✓ Git hooks uninstalled'));\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n hooksCommand\n .command('status')\n .description('Check if hooks are installed')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action((options: { cwd: string }) => {\n try {\n if (versionguard.areHooksInstalled(options.cwd)) {\n console.log(styles.success('✓ VersionGuard hooks are installed'));\n return;\n }\n\n console.log(styles.warning('✗ VersionGuard hooks are not installed'));\n process.exit(1);\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n return program;\n}\n\n/**\n * Parses CLI arguments and executes the matching command.\n *\n * @public\n * @since 0.1.0\n * @remarks\n * This helper delegates argument parsing to the Commander program created by\n * {@link createProgram}. It resolves when the selected command finishes.\n *\n * @param argv - Full argument vector to parse.\n * @see {@link createProgram}\n *\n * @example\n * ```typescript\n * const argv = ['node', 'versionguard', 'check'];\n * await runCli(argv);\n * ```\n */\nexport async function runCli(argv: string[] = process.argv): Promise<void> {\n await createProgram().parseAsync(argv);\n}\n\n/**\n * Determines whether the current module is the invoked CLI entry point.\n *\n * @public\n * @since 0.1.0\n * @remarks\n * This helper compares the resolved script path from `argv` with the current\n * module URL so the CLI runs only during direct execution.\n *\n * @param argv - Full process argument vector.\n * @param metaUrl - Module URL to compare against the invoked entry path.\n * @returns `true` when the current module should launch the CLI.\n *\n * @example\n * ```typescript\n * const shouldRun = shouldRunCli(process.argv, import.meta.url);\n * console.log(shouldRun);\n * ```\n */\nexport function shouldRunCli(\n argv: string[] = process.argv,\n metaUrl: string = import.meta.url,\n): boolean {\n const entryPath = argv[1] ? path.resolve(argv[1]) : null;\n return entryPath === fileURLToPath(metaUrl);\n}\n\n/* v8 ignore start -- exercised only by direct CLI execution */\nif (shouldRunCli()) {\n void runCli();\n}\n/* v8 ignore stop */\n"],"names":["versionguard.initConfig","versionguard.getConfig","versionguard.getPackageVersion","feedback.getVersionFeedback","versionguard.validate","tag.handlePostTag","guard.runGuardChecks","feedback.getSyncFeedback","feedback.getChangelogFeedback","versionguard.doctor","fix.fixAll","fix.fixSyncIssues","fix.suggestNextVersion","project.setPackageVersion","tag.createTag","versionguard.installHooks","versionguard.uninstallHooks","versionguard.areHooksInstalled"],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sources":["../src/init-wizard.ts","../src/cli.ts"],"sourcesContent":["/**\n * Interactive setup wizard and headless init for VersionGuard.\n *\n * @packageDocumentation\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport * as p from '@clack/prompts';\nimport * as yaml from 'js-yaml';\n\nimport { isValidCalVerFormat } from './calver';\nimport type { VersionGuardConfig } from './types';\n\n/**\n * Options for headless (non-interactive) initialization.\n *\n * @public\n * @since 0.3.0\n */\nexport interface InitOptions {\n cwd: string;\n type?: 'semver' | 'calver';\n format?: string;\n manifest?: string;\n hooks?: boolean;\n changelog?: boolean;\n yes?: boolean;\n}\n\n/**\n * Runs the interactive setup wizard.\n *\n * @remarks\n * Walks the user through versioning type, CalVer format, manifest source,\n * git hooks, and changelog configuration. Writes `.versionguard.yml` when done.\n *\n * @param cwd - Project directory to initialize.\n * @returns The path to the created config file, or `null` if cancelled.\n *\n * @public\n * @since 0.3.0\n */\nexport async function runWizard(cwd: string): Promise<string | null> {\n p.intro('VersionGuard Setup');\n\n const existingConfig = findExistingConfig(cwd);\n if (existingConfig) {\n p.log.warning(`Config already exists: ${path.relative(cwd, existingConfig)}`);\n const overwrite = await p.confirm({ message: 'Overwrite existing config?' });\n if (p.isCancel(overwrite) || !overwrite) {\n p.outro('Setup cancelled.');\n return null;\n }\n }\n\n // Step 1: Versioning type\n const type = await p.select({\n message: 'Versioning strategy',\n options: [\n { value: 'semver', label: 'SemVer', hint: 'MAJOR.MINOR.PATCH (e.g., 1.2.3)' },\n { value: 'calver', label: 'CalVer', hint: 'Calendar-based (e.g., 2026.3.0)' },\n ],\n });\n if (p.isCancel(type)) {\n p.outro('Setup cancelled.');\n return null;\n }\n\n // Step 2: CalVer format (if calver)\n let format: string | undefined;\n if (type === 'calver') {\n const selected = await selectCalVerFormat();\n if (!selected) {\n p.outro('Setup cancelled.');\n return null;\n }\n format = selected;\n }\n\n // Step 3: Manifest source\n const manifest = await selectManifest(cwd);\n if (manifest === null) {\n p.outro('Setup cancelled.');\n return null;\n }\n\n // Step 4: Git hooks\n const hooks = await p.confirm({\n message: 'Install git hooks? (pre-commit, pre-push, post-tag)',\n initialValue: true,\n });\n if (p.isCancel(hooks)) {\n p.outro('Setup cancelled.');\n return null;\n }\n\n // Step 5: Changelog\n const changelog = await p.confirm({\n message: 'Enable changelog validation?',\n initialValue: true,\n });\n if (p.isCancel(changelog)) {\n p.outro('Setup cancelled.');\n return null;\n }\n\n // Build and write config\n const config = buildConfig({\n type: type,\n format,\n manifest: manifest === 'auto' ? undefined : manifest,\n hooks: hooks,\n changelog: changelog,\n });\n\n const configPath = writeConfig(cwd, config);\n\n p.log.success(`Created ${path.relative(cwd, configPath)}`);\n p.outro('Run `versionguard validate` to verify your setup.');\n\n return configPath;\n}\n\n/**\n * Initializes VersionGuard non-interactively using CLI flags.\n *\n * @remarks\n * When `--yes` is passed, all defaults are used without prompting.\n * Individual flags override specific defaults.\n *\n * @param options - Headless initialization options.\n * @returns The path to the created config file.\n *\n * @public\n * @since 0.3.0\n */\nexport function runHeadless(options: InitOptions): string {\n const existingConfig = findExistingConfig(options.cwd);\n if (existingConfig && !options.yes) {\n throw new Error(`Config already exists: ${existingConfig}. Use --yes to overwrite.`);\n }\n\n const config = buildConfig({\n type: options.type ?? 'semver',\n format: options.format,\n manifest: options.manifest,\n hooks: options.hooks ?? true,\n changelog: options.changelog ?? true,\n });\n\n return writeConfig(options.cwd, config);\n}\n\nasync function selectCalVerFormat(): Promise<string | null> {\n const preset = await p.select({\n message: 'CalVer format',\n options: [\n { value: 'YYYY.M.MICRO', label: 'YYYY.M.MICRO', hint: 'calver.org standard — 2026.3.0' },\n { value: 'YYYY.MM.MICRO', label: 'YYYY.MM.MICRO', hint: 'padded month — 2026.03.0' },\n { value: 'YY.0M.MICRO', label: 'YY.0M.MICRO', hint: 'Twisted/pip style — 26.03.0' },\n { value: 'YYYY.0M.0D', label: 'YYYY.0M.0D', hint: 'date-based — 2026.03.25' },\n {\n value: 'YYYY.0M.0D.MICRO',\n label: 'YYYY.0M.0D.MICRO',\n hint: 'youtube-dl style — 2026.03.25.0',\n },\n { value: 'YY.0M', label: 'YY.0M', hint: 'Ubuntu style — 26.03' },\n { value: 'custom', label: 'Custom...', hint: 'enter your own token format' },\n ],\n });\n if (p.isCancel(preset)) return null;\n\n if (preset === 'custom') {\n const custom = await p.text({\n message: 'Enter CalVer format (dot-separated tokens)',\n placeholder: 'YYYY.MM.MICRO',\n validate(value: string | undefined) {\n if (!value || !isValidCalVerFormat(value)) {\n return 'Invalid format. Use tokens: YYYY|YY|0Y, MM|M|0M, WW|0W, DD|D|0D, MICRO|PATCH';\n }\n },\n });\n if (p.isCancel(custom)) return null;\n return custom;\n }\n\n return preset as string;\n}\n\nasync function selectManifest(cwd: string): Promise<string | null> {\n // Detect what exists\n const detected: { value: string; label: string; hint?: string }[] = [];\n const checks = [\n { file: 'package.json', label: 'package.json', hint: 'Node.js / Bun' },\n { file: 'Cargo.toml', label: 'Cargo.toml', hint: 'Rust' },\n { file: 'pyproject.toml', label: 'pyproject.toml', hint: 'Python' },\n { file: 'pubspec.yaml', label: 'pubspec.yaml', hint: 'Dart / Flutter' },\n { file: 'composer.json', label: 'composer.json', hint: 'PHP' },\n { file: 'pom.xml', label: 'pom.xml', hint: 'Java / Maven' },\n { file: 'VERSION', label: 'VERSION', hint: 'Plain text file' },\n ];\n\n for (const check of checks) {\n if (fs.existsSync(path.join(cwd, check.file))) {\n detected.push({ value: check.file, label: `${check.label} (detected)`, hint: check.hint });\n }\n }\n\n const options = [\n { value: 'auto', label: 'Auto-detect', hint: 'scan for known manifests at runtime' },\n ...detected,\n ...checks\n .filter((c) => !detected.some((d) => d.value === c.file))\n .map((c) => ({ value: c.file, label: c.label, hint: c.hint })),\n { value: 'git-tag', label: 'Git tags', hint: 'Go / Swift — version from tags' },\n ];\n\n const result = await p.select({\n message: 'Version source',\n options,\n initialValue: detected.length === 1 ? detected[0].value : 'auto',\n });\n\n if (p.isCancel(result)) return null;\n return result;\n}\n\ninterface ConfigInput {\n type: 'semver' | 'calver';\n format?: string;\n manifest?: string;\n hooks: boolean;\n changelog: boolean;\n}\n\nfunction buildConfig(input: ConfigInput): Partial<VersionGuardConfig> {\n const config: Record<string, unknown> = {\n versioning: {\n type: input.type,\n ...(input.type === 'calver' && input.format\n ? {\n calver: {\n format: input.format,\n preventFutureDates: true,\n },\n }\n : {}),\n },\n };\n\n if (input.manifest) {\n config.manifest = { source: input.manifest };\n }\n\n config.sync = {\n files: ['README.md', 'CHANGELOG.md'],\n patterns: [\n {\n regex: '(version\\\\s*[=:]\\\\s*[\"\\'])(.+?)([\"\\'])',\n template: '$1{{version}}$3',\n },\n {\n regex: '(##\\\\s*\\\\[)(.+?)(\\\\])',\n template: '$1{{version}}$3',\n },\n ],\n };\n\n config.changelog = {\n enabled: input.changelog,\n file: 'CHANGELOG.md',\n strict: true,\n requireEntry: input.changelog,\n };\n\n config.git = {\n hooks: {\n 'pre-commit': input.hooks,\n 'pre-push': input.hooks,\n 'post-tag': input.hooks,\n },\n enforceHooks: input.hooks,\n };\n\n config.ignore = ['node_modules/**', 'dist/**', '.git/**', '*.lock', '.changeset/**'];\n\n return config;\n}\n\nfunction writeConfig(cwd: string, config: Partial<VersionGuardConfig>): string {\n const configPath = path.join(cwd, '.versionguard.yml');\n const content = yaml.dump(config, {\n indent: 2,\n lineWidth: 120,\n noRefs: true,\n quotingType: '\"',\n forceQuotes: false,\n });\n fs.writeFileSync(configPath, content, 'utf-8');\n return configPath;\n}\n\nfunction findExistingConfig(cwd: string): string | null {\n for (const name of [\n '.versionguard.yml',\n '.versionguard.yaml',\n 'versionguard.yml',\n 'versionguard.yaml',\n ]) {\n const full = path.join(cwd, name);\n if (fs.existsSync(full)) return full;\n }\n return null;\n}\n","#!/usr/bin/env node\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport chalk from 'chalk';\nimport { Command } from 'commander';\n\nconst CLI_DIR = path.dirname(fileURLToPath(import.meta.url));\nconst CLI_VERSION: string = (\n JSON.parse(fs.readFileSync(path.join(CLI_DIR, '..', 'package.json'), 'utf-8')) as {\n version: string;\n }\n).version;\n\nimport * as feedback from './feedback';\nimport * as fix from './fix';\nimport * as guard from './guard';\nimport * as versionguard from './index';\nimport { runHeadless, runWizard } from './init-wizard';\nimport * as project from './project';\nimport * as tag from './tag';\n\nconst styles = {\n error: chalk.red,\n warning: chalk.yellow,\n success: chalk.green,\n info: chalk.blue,\n dim: chalk.gray,\n bold: chalk.bold,\n};\n\n/**\n * Creates the VersionGuard CLI program definition.\n *\n * @public\n * @since 0.1.0\n * @remarks\n * This function wires all commands, options, and handlers onto a fresh Commander\n * program instance without parsing arguments yet.\n *\n * @returns A configured Commander program for the VersionGuard CLI.\n *\n * @example\n * ```typescript\n * const program = createProgram();\n * console.log(program.name());\n * ```\n */\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name('versionguard')\n .description('Strict versioning enforcement for SemVer and CalVer')\n .version(CLI_VERSION);\n\n program\n .command('init')\n .description('Initialize VersionGuard configuration (interactive wizard or headless)')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('-t, --type <type>', 'Versioning type: semver or calver')\n .option('-f, --format <format>', 'CalVer format tokens (e.g., YYYY.M.MICRO)')\n .option('--manifest <source>', 'Manifest source (e.g., Cargo.toml, pyproject.toml, auto)')\n .option('--hooks', 'Install git hooks (default: true)')\n .option('--no-hooks', 'Skip git hooks')\n .option('--changelog', 'Enable changelog validation (default: true)')\n .option('--no-changelog', 'Disable changelog validation')\n .option('-y, --yes', 'Accept all defaults, no prompts')\n .action(\n async (options: {\n cwd: string;\n type?: string;\n format?: string;\n manifest?: string;\n hooks?: boolean;\n changelog?: boolean;\n yes?: boolean;\n }) => {\n try {\n const isHeadless = options.yes || options.type || options.format || options.manifest;\n\n let configPath: string | null;\n\n if (isHeadless) {\n // Headless mode: use flags, no prompts\n configPath = runHeadless({\n cwd: options.cwd,\n type: options.type as 'semver' | 'calver' | undefined,\n format: options.format,\n manifest: options.manifest,\n hooks: options.hooks,\n changelog: options.changelog,\n yes: options.yes,\n });\n console.log(styles.success(`✓ Created ${path.relative(options.cwd, configPath)}`));\n } else {\n // Interactive wizard\n configPath = await runWizard(options.cwd);\n if (!configPath) {\n process.exit(0);\n return;\n }\n }\n\n // Auto-install hooks if enabled\n try {\n const config = versionguard.getConfig(options.cwd);\n if (config.git.enforceHooks) {\n versionguard.installHooks(config.git, options.cwd);\n console.log(styles.success('✓ Git hooks installed'));\n }\n } catch {\n console.log(styles.info('ℹ Skipped hooks install (not a git repository)'));\n }\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n },\n );\n\n program\n .command('check')\n .description('Check the current version with actionable feedback')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('--prev <version>', 'Previous version for comparison')\n .option('--json', 'Print machine-readable JSON output')\n .action((options: { cwd: string; prev?: string; json?: boolean }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const version = versionguard.getPackageVersion(options.cwd, config.manifest);\n const result = feedback.getVersionFeedback(version, config, options.prev);\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n version,\n versioningType: config.versioning.type,\n valid: result.valid,\n errors: result.errors,\n suggestions: result.suggestions,\n },\n null,\n 2,\n ),\n );\n if (!result.valid) {\n process.exit(1);\n }\n return;\n }\n\n console.log(styles.bold(`Current version: ${version}`));\n console.log(styles.dim(`Versioning type: ${config.versioning.type}`));\n console.log('');\n\n if (result.valid) {\n console.log(styles.success('✓ Version is valid'));\n return;\n }\n\n console.log(styles.error('✗ Version has issues:'));\n console.log('');\n for (const error of result.errors) {\n console.log(styles.error(` ✗ ${error.message}`));\n }\n if (result.suggestions.length > 0) {\n console.log('');\n console.log(styles.info('How to fix:'));\n for (const suggestion of result.suggestions) {\n console.log(` → ${suggestion.message}`);\n if (suggestion.fix) {\n console.log(styles.dim(` Run: ${suggestion.fix}`));\n }\n }\n }\n process.exit(1);\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n program\n .command('validate')\n .description('Run full validation with smart feedback')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('--hook <name>', 'Running as git hook')\n .option('--json', 'Print machine-readable JSON output')\n .option('--strict', 'Run guard checks and fail on any policy gap or bypass')\n .action((options: { cwd: string; hook?: string; json?: boolean; strict?: boolean }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const version = versionguard.getPackageVersion(options.cwd, config.manifest);\n const result = versionguard.validate(config, options.cwd);\n\n let postTagResult: { success: boolean; message: string; actions: string[] } | undefined;\n let guardReport: guard.GuardReport | undefined;\n\n if (options.hook === 'post-tag') {\n postTagResult = tag.handlePostTag(config, options.cwd);\n }\n\n if (options.strict) {\n guardReport = guard.runGuardChecks(config, options.cwd);\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n ...result,\n hook: options.hook ?? null,\n postTag: postTagResult ?? null,\n guard: guardReport ?? null,\n },\n null,\n 2,\n ),\n );\n\n if (\n !result.valid ||\n (postTagResult && !postTagResult.success) ||\n (guardReport && !guardReport.safe)\n ) {\n process.exit(1);\n }\n\n return;\n }\n\n console.log(styles.bold(`Validating version ${version}...`));\n console.log('');\n\n if (!result.syncValid) {\n console.log(styles.error('Sync Issues:'));\n for (const error of result.errors.filter((item) => item.includes('mismatch'))) {\n const parts = error.match(\n /Version mismatch in (.+):(\\d+) - found \"(.+?)\" but expected \"(.+?)\"/,\n );\n if (!parts) {\n continue;\n }\n const suggestions = feedback.getSyncFeedback(parts[1], parts[3], parts[4]);\n console.log(styles.error(` ✗ ${parts[1]} has wrong version`));\n console.log(styles.dim(` Found: \"${parts[3]}\" Expected: \"${parts[4]}\"`));\n if (suggestions[0]?.fix) {\n console.log(styles.info(` Fix: ${suggestions[0].fix}`));\n }\n }\n console.log('');\n }\n\n if (config.changelog.enabled && !result.changelogValid) {\n console.log(styles.error('Changelog Issues:'));\n for (const error of result.errors.filter((item) =>\n item.toLowerCase().includes('changelog'),\n )) {\n console.log(styles.error(` ✗ ${error}`));\n }\n const suggestions = feedback.getChangelogFeedback(false, version);\n if (suggestions[0]?.fix) {\n console.log(styles.info(`Fix: ${suggestions[0].fix}`));\n }\n console.log('');\n }\n\n if (postTagResult) {\n if (!postTagResult.success) {\n console.log(styles.error(`✗ ${postTagResult.message}`));\n process.exit(1);\n }\n }\n\n if (guardReport && guardReport.warnings.length > 0) {\n console.log(styles.bold('Guard Checks:'));\n for (const warning of guardReport.warnings) {\n const icon = warning.severity === 'error' ? styles.error('✗') : styles.warning('⚠');\n console.log(` ${icon} [${warning.code}] ${warning.message}`);\n if (warning.fix) {\n console.log(styles.dim(` Fix: ${warning.fix}`));\n }\n }\n console.log('');\n }\n\n if (!result.valid || (guardReport && !guardReport.safe)) {\n console.log(styles.error('✗ Validation failed'));\n process.exit(1);\n }\n\n console.log(styles.success('✓ All validations passed'));\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n program\n .command('doctor')\n .description('Report repository readiness in one pass')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('--json', 'Print machine-readable JSON output')\n .option('--strict', 'Include guard checks for bypass detection')\n .action((options: { cwd: string; json?: boolean; strict?: boolean }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const report = versionguard.doctor(config, options.cwd);\n const guardReport = options.strict ? guard.runGuardChecks(config, options.cwd) : undefined;\n\n if (options.json) {\n console.log(JSON.stringify({ ...report, guard: guardReport ?? null }, null, 2));\n if (!report.ready || (guardReport && !guardReport.safe)) {\n process.exit(1);\n }\n return;\n }\n\n console.log(styles.bold('VersionGuard Doctor'));\n console.log(` Version: ${report.version || '(missing)'}`);\n console.log(` Version valid: ${report.versionValid ? 'yes' : 'no'}`);\n console.log(` Files in sync: ${report.syncValid ? 'yes' : 'no'}`);\n console.log(` Changelog ready: ${report.changelogValid ? 'yes' : 'no'}`);\n console.log(` Git repository: ${report.gitRepository ? 'yes' : 'no'}`);\n console.log(\n ` Hooks installed: ${report.gitRepository ? (report.hooksInstalled ? 'yes' : 'no') : 'n/a'}`,\n );\n console.log(\n ` Worktree clean: ${report.gitRepository ? (report.worktreeClean ? 'yes' : 'no') : 'n/a'}`,\n );\n\n if (guardReport) {\n console.log(` Guard safe: ${guardReport.safe ? 'yes' : 'no'}`);\n }\n\n if (!report.ready || (guardReport && !guardReport.safe)) {\n console.log('');\n console.log(styles.error('Issues:'));\n for (const error of report.errors) {\n console.log(styles.error(` ✗ ${error}`));\n }\n if (guardReport) {\n for (const warning of guardReport.warnings) {\n const icon = warning.severity === 'error' ? '✗' : '⚠';\n console.log(styles.error(` ${icon} [${warning.code}] ${warning.message}`));\n if (warning.fix) {\n console.log(styles.dim(` Fix: ${warning.fix}`));\n }\n }\n }\n process.exit(1);\n }\n\n console.log('');\n console.log(styles.success('✓ Repository is ready'));\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n program\n .command('fix')\n .description('Auto-fix detected issues')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action((options: { cwd: string }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const version = versionguard.getPackageVersion(options.cwd, config.manifest);\n const results = fix.fixAll(config, version, options.cwd);\n\n console.log(styles.bold(`Fixing issues for version ${version}...`));\n console.log('');\n\n for (const result of results) {\n const printer = result.fixed ? styles.success : styles.dim;\n console.log(printer(`${result.fixed ? '✓' : '•'} ${result.message}`));\n }\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n program\n .command('sync')\n .description('Sync version to all configured files')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action((options: { cwd: string }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const version = versionguard.getPackageVersion(options.cwd, config.manifest);\n const results = fix.fixSyncIssues(config, options.cwd);\n\n console.log(styles.bold(`Syncing version ${version}...`));\n for (const result of results) {\n const printer = result.fixed ? styles.success : styles.dim;\n console.log(printer(`${result.fixed ? '✓' : '•'} ${result.message}`));\n }\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n program\n .command('bump')\n .description('Suggest and optionally apply the next version')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('-t, --type <type>', 'Bump type (major, minor, patch, auto)')\n .option('--apply', 'Apply the first suggested version')\n .action(\n (options: { cwd: string; type?: 'major' | 'minor' | 'patch' | 'auto'; apply?: boolean }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const currentVersion = versionguard.getPackageVersion(options.cwd, config.manifest);\n const suggestions = fix.suggestNextVersion(currentVersion, config, options.type);\n\n console.log(styles.bold(`Current version: ${currentVersion}`));\n console.log('');\n for (const [index, suggestion] of suggestions.entries()) {\n console.log(` ${index + 1}. ${styles.bold(suggestion.version)}`);\n console.log(` ${styles.dim(suggestion.reason)}`);\n }\n\n if (options.apply) {\n const nextVersion = suggestions[0]?.version;\n if (!nextVersion) {\n throw new Error('No version suggestion available');\n }\n project.setPackageVersion(nextVersion, options.cwd, config.manifest);\n fix.fixAll(config, nextVersion, options.cwd);\n console.log(styles.success(`✓ Updated to ${nextVersion}`));\n }\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n },\n );\n\n program\n .command('tag')\n .description('Create a git tag with automation')\n .argument('[version]', 'Version to tag (defaults to manifest version)')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('-m, --message <msg>', 'Tag message')\n .option('--no-fix', 'Skip auto-fixing files before tagging')\n .action(\n (version: string | undefined, options: { cwd: string; message?: string; fix?: boolean }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n const tagVersion =\n version || versionguard.getPackageVersion(options.cwd, config.manifest);\n const result = tag.createTag(\n tagVersion,\n options.message,\n options.fix !== false,\n config,\n options.cwd,\n );\n\n if (!result.success) {\n console.log(styles.error(`✗ ${result.message}`));\n process.exit(1);\n }\n\n console.log(styles.success(`✓ ${result.message}`));\n for (const action of result.actions) {\n console.log(` • ${action}`);\n }\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n },\n );\n\n const hooksCommand = program.command('hooks').description('Manage git hooks');\n\n hooksCommand\n .command('install')\n .description('Install git hooks')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action((options: { cwd: string }) => {\n try {\n const config = versionguard.getConfig(options.cwd);\n versionguard.installHooks(config.git, options.cwd);\n console.log(styles.success('✓ Git hooks installed'));\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n hooksCommand\n .command('uninstall')\n .description('Uninstall git hooks')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action((options: { cwd: string }) => {\n try {\n versionguard.uninstallHooks(options.cwd);\n console.log(styles.success('✓ Git hooks uninstalled'));\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n hooksCommand\n .command('status')\n .description('Check if hooks are installed')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action((options: { cwd: string }) => {\n try {\n if (versionguard.areHooksInstalled(options.cwd)) {\n console.log(styles.success('✓ VersionGuard hooks are installed'));\n return;\n }\n\n console.log(styles.warning('✗ VersionGuard hooks are not installed'));\n process.exit(1);\n } catch (error) {\n console.error(styles.error(`✗ ${(error as Error).message}`));\n process.exit(1);\n }\n });\n\n return program;\n}\n\n/**\n * Parses CLI arguments and executes the matching command.\n *\n * @public\n * @since 0.1.0\n * @remarks\n * This helper delegates argument parsing to the Commander program created by\n * {@link createProgram}. It resolves when the selected command finishes.\n *\n * @param argv - Full argument vector to parse.\n * @see {@link createProgram}\n *\n * @example\n * ```typescript\n * const argv = ['node', 'versionguard', 'check'];\n * await runCli(argv);\n * ```\n */\nexport async function runCli(argv: string[] = process.argv): Promise<void> {\n await createProgram().parseAsync(argv);\n}\n\n/**\n * Determines whether the current module is the invoked CLI entry point.\n *\n * @public\n * @since 0.1.0\n * @remarks\n * This helper compares the resolved script path from `argv` with the current\n * module URL so the CLI runs only during direct execution.\n *\n * @param argv - Full process argument vector.\n * @param metaUrl - Module URL to compare against the invoked entry path.\n * @returns `true` when the current module should launch the CLI.\n *\n * @example\n * ```typescript\n * const shouldRun = shouldRunCli(process.argv, import.meta.url);\n * console.log(shouldRun);\n * ```\n */\nexport function shouldRunCli(\n argv: string[] = process.argv,\n metaUrl: string = import.meta.url,\n): boolean {\n const entryPath = argv[1] ? path.resolve(argv[1]) : null;\n return entryPath === fileURLToPath(metaUrl);\n}\n\n/* v8 ignore start -- exercised only by direct CLI execution */\nif (shouldRunCli()) {\n void runCli();\n}\n/* v8 ignore stop */\n"],"names":["versionguard.getConfig","versionguard.installHooks","versionguard.getPackageVersion","feedback.getVersionFeedback","versionguard.validate","tag.handlePostTag","guard.runGuardChecks","feedback.getSyncFeedback","feedback.getChangelogFeedback","versionguard.doctor","fix.fixAll","fix.fixSyncIssues","fix.suggestNextVersion","project.setPackageVersion","tag.createTag","versionguard.uninstallHooks","versionguard.areHooksInstalled"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAiDlD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,CAErD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CASrE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,CAajE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,GAAG,GAAE,MAAsB,GAAG,kBAAkB,CAGzE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAe9D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAyDlD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,CAErD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CASrE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,CAajE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,GAAG,GAAE,MAAsB,GAAG,kBAAkB,CAGzE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAe9D"}
@@ -1,4 +1,4 @@
1
- import type { ValidationError, VersionGuardConfig } from '../types';
1
+ import { type ValidationError, type VersionGuardConfig } from '../types';
2
2
  /**
3
3
  * Feedback helpers that turn validation failures into actionable suggestions.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/feedback/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAwB,eAAe,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE1F;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,eAAe,EAAE,CAAC;IAE1B;;OAEG;IACH,WAAW,EAAE,UAAU,EAAE,CAAC;IAE1B;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,cAAc,CAMhB;AA+PD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,UAAU,EAAE,CAyBd;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,MAAM,EACf,sBAAsB,CAAC,EAAE,MAAM,GAC9B,UAAU,EAAE,CAyBd;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,OAAO,GACxB,UAAU,EAAE,CAoBd"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/feedback/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;AAElB;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,eAAe,EAAE,CAAC;IAE1B;;OAEG;IACH,WAAW,EAAE,UAAU,EAAE,CAAC;IAE1B;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,cAAc,CAMhB;AAuPD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,UAAU,EAAE,CAyBd;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,MAAM,EACf,sBAAsB,CAAC,EAAE,MAAM,GAC9B,UAAU,EAAE,CAyBd;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,OAAO,GACxB,UAAU,EAAE,CAoBd"}
@@ -1,4 +1,4 @@
1
- import type { VersionGuardConfig } from '../types';
1
+ import { type ManifestConfig, type VersionGuardConfig } from '../types';
2
2
  /**
3
3
  * Auto-fix helpers for package versions, synced files, and changelog entries.
4
4
  *
@@ -40,15 +40,20 @@ export interface FixResult {
40
40
  *
41
41
  * @param targetVersion - Version that should be written to `package.json`.
42
42
  * @param cwd - Repository directory containing `package.json`.
43
+ * @param manifest - Optional manifest configuration for language-agnostic support.
43
44
  * @returns The result of the package version fix attempt.
44
45
  *
45
46
  * @example
46
47
  * ```typescript
48
+ * // Fix using legacy package.json fallback
47
49
  * const result = fixPackageVersion('1.2.3', process.cwd());
48
50
  * console.log(result.fixed);
51
+ *
52
+ * // Fix using a configured manifest source
53
+ * const result2 = fixPackageVersion('1.2.3', process.cwd(), { source: 'Cargo.toml' });
49
54
  * ```
50
55
  */
51
- export declare function fixPackageVersion(targetVersion: string, cwd?: string): FixResult;
56
+ export declare function fixPackageVersion(targetVersion: string, cwd?: string, manifest?: ManifestConfig): FixResult;
52
57
  /**
53
58
  * Synchronizes configured files to the package version.
54
59
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fix/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAgB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEjE;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,SAAS,CAqB/F;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,kBAAkB,EAC1B,GAAG,GAAE,MAAsB,GAC1B,SAAS,EAAE,CAeb;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAC1B,GAAG,GAAE,MAAsB,GAC1B,SAAS,CA0BX;AA6BD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CACpB,MAAM,EAAE,kBAAkB,EAC1B,aAAa,CAAC,EAAE,MAAM,EACtB,GAAG,GAAE,MAAsB,GAC1B,SAAS,EAAE,CAmBb;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAChD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,CA2CvC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fix/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEzF;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,GAAG,GAAE,MAAsB,EAC3B,QAAQ,CAAC,EAAE,cAAc,GACxB,SAAS,CA8CX;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,kBAAkB,EAC1B,GAAG,GAAE,MAAsB,GAC1B,SAAS,EAAE,CAeb;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAC1B,GAAG,GAAE,MAAsB,GAC1B,SAAS,CA0BX;AA6BD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CACpB,MAAM,EAAE,kBAAkB,EAC1B,aAAa,CAAC,EAAE,MAAM,EACtB,GAAG,GAAE,MAAsB,GAC1B,SAAS,EAAE,CAmBb;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAChD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,CA2CvC"}