@git.zone/cli 1.19.7 → 1.19.9

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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@git.zone/cli',
6
- version: '1.19.7',
6
+ version: '1.19.9',
7
7
  description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxlQUFlO0lBQ3JCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSwrTEFBK0w7Q0FDN00sQ0FBQSJ9
@@ -10,14 +10,9 @@ export declare function detectCurrentBranch(): Promise<string>;
10
10
  * @returns The project type
11
11
  */
12
12
  export declare function detectProjectType(): Promise<ProjectType>;
13
- /**
14
- * Bumps the version in deno.json, commits the change, and creates a tag
15
- * @param versionType Type of version bump
16
- * @returns The new version string
17
- */
18
- export declare function bumpDenoVersion(versionType: VersionType): Promise<string>;
19
13
  /**
20
14
  * Bumps the project version based on project type
15
+ * Handles npm-only, deno-only, and dual projects with unified logic
21
16
  * @param projectType The detected project type
22
17
  * @param versionType The type of version bump
23
18
  * @param currentStep The current step number for progress display
@@ -80,87 +80,41 @@ function calculateNewVersion(currentVersion, versionType) {
80
80
  return `${major}.${minor}.${patch}`;
81
81
  }
82
82
  /**
83
- * Bumps the version in deno.json, commits the change, and creates a tag
84
- * @param versionType Type of version bump
85
- * @returns The new version string
83
+ * Reads the current version from package.json or deno.json
84
+ * @param projectType The project type to determine which file to read
85
+ * @returns The current version string
86
86
  */
87
- export async function bumpDenoVersion(versionType) {
88
- const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json');
89
- const smartshellInstance = new plugins.smartshell.Smartshell({
90
- executor: 'bash',
91
- sourceFilePaths: [],
92
- });
93
- try {
94
- // Read deno.json
87
+ function readCurrentVersion(projectType) {
88
+ if (projectType === 'npm' || projectType === 'both') {
89
+ const packageJsonPath = plugins.path.join(paths.cwd, 'package.json');
90
+ const packageJson = plugins.smartfile.fs.toObjectSync(packageJsonPath);
91
+ if (!packageJson.version) {
92
+ throw new Error('package.json does not contain a version field');
93
+ }
94
+ return packageJson.version;
95
+ }
96
+ else {
97
+ const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json');
95
98
  const denoConfig = plugins.smartfile.fs.toObjectSync(denoJsonPath);
96
99
  if (!denoConfig.version) {
97
100
  throw new Error('deno.json does not contain a version field');
98
101
  }
99
- const currentVersion = denoConfig.version;
100
- const newVersion = calculateNewVersion(currentVersion, versionType);
101
- logger.log('info', `Bumping deno.json version: ${currentVersion} → ${newVersion}`);
102
- // Update version
103
- denoConfig.version = newVersion;
104
- // Write back to disk
105
- await plugins.smartfile.memory.toFs(JSON.stringify(denoConfig, null, 2) + '\n', denoJsonPath);
106
- // Stage the deno.json file
107
- await smartshellInstance.exec('git add deno.json');
108
- // Commit the version bump
109
- await smartshellInstance.exec(`git commit -m "v${newVersion}"`);
110
- // Create the version tag
111
- await smartshellInstance.exec(`git tag v${newVersion} -m "v${newVersion}"`);
112
- logger.log('info', `Created commit and tag v${newVersion}`);
113
- return newVersion;
114
- }
115
- catch (error) {
116
- throw new Error(`Failed to bump deno.json version: ${error.message}`);
102
+ return denoConfig.version;
117
103
  }
118
104
  }
119
105
  /**
120
- * Bumps the version in package.json using npm version command
121
- * @param versionType Type of version bump
122
- * @returns The new version string
106
+ * Updates the version field in a JSON file (package.json or deno.json)
107
+ * @param filePath Path to the JSON file
108
+ * @param newVersion The new version to write
123
109
  */
124
- async function bumpNpmVersion(versionType) {
125
- const smartshellInstance = new plugins.smartshell.Smartshell({
126
- executor: 'bash',
127
- sourceFilePaths: [],
128
- });
129
- logger.log('info', `Bumping package.json version using npm version ${versionType}`);
130
- const result = await smartshellInstance.exec(`npm version ${versionType}`);
131
- // npm version returns the new version with a 'v' prefix, e.g., "v1.2.3"
132
- const newVersion = result.stdout.trim().replace(/^v/, '');
133
- return newVersion;
134
- }
135
- /**
136
- * Syncs the version from package.json to deno.json and amends the npm commit
137
- * @param version The version to sync
138
- */
139
- async function syncVersionToDenoJson(version) {
140
- const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json');
141
- const smartshellInstance = new plugins.smartshell.Smartshell({
142
- executor: 'bash',
143
- sourceFilePaths: [],
144
- });
145
- try {
146
- const denoConfig = plugins.smartfile.fs.toObjectSync(denoJsonPath);
147
- logger.log('info', `Syncing version to deno.json: ${version}`);
148
- denoConfig.version = version;
149
- await plugins.smartfile.memory.toFs(JSON.stringify(denoConfig, null, 2) + '\n', denoJsonPath);
150
- // Stage the deno.json file
151
- await smartshellInstance.exec('git add deno.json');
152
- // Amend the npm version commit to include deno.json
153
- await smartshellInstance.exec('git commit --amend --no-edit');
154
- // Re-create the tag with force to update it
155
- await smartshellInstance.exec(`git tag -fa v${version} -m "v${version}"`);
156
- logger.log('info', `Amended commit to include deno.json and updated tag v${version}`);
157
- }
158
- catch (error) {
159
- throw new Error(`Failed to sync version to deno.json: ${error.message}`);
160
- }
110
+ async function updateVersionFile(filePath, newVersion) {
111
+ const config = plugins.smartfile.fs.toObjectSync(filePath);
112
+ config.version = newVersion;
113
+ await plugins.smartfile.memory.toFs(JSON.stringify(config, null, 2) + '\n', filePath);
161
114
  }
162
115
  /**
163
116
  * Bumps the project version based on project type
117
+ * Handles npm-only, deno-only, and dual projects with unified logic
164
118
  * @param projectType The detected project type
165
119
  * @param versionType The type of version bump
166
120
  * @param currentStep The current step number for progress display
@@ -168,34 +122,50 @@ async function syncVersionToDenoJson(version) {
168
122
  * @returns The new version string
169
123
  */
170
124
  export async function bumpProjectVersion(projectType, versionType, currentStep, totalSteps) {
125
+ if (projectType === 'none') {
126
+ throw new Error('Cannot bump version: no package.json or deno.json found');
127
+ }
171
128
  const projectEmoji = projectType === 'npm' ? '📦' : projectType === 'deno' ? '🦕' : '🔀';
172
129
  const description = `🏷️ Bumping version (${projectEmoji} ${projectType})`;
173
130
  if (currentStep && totalSteps) {
174
131
  ui.printStep(currentStep, totalSteps, description, 'in-progress');
175
132
  }
176
- let newVersion;
177
- switch (projectType) {
178
- case 'npm':
179
- newVersion = await bumpNpmVersion(versionType);
180
- break;
181
- case 'deno':
182
- newVersion = await bumpDenoVersion(versionType);
183
- break;
184
- case 'both': {
185
- // Bump npm version first (it handles git tags)
186
- newVersion = await bumpNpmVersion(versionType);
187
- // Then sync to deno.json
188
- await syncVersionToDenoJson(newVersion);
189
- break;
133
+ const smartshellInstance = new plugins.smartshell.Smartshell({
134
+ executor: 'bash',
135
+ sourceFilePaths: [],
136
+ });
137
+ try {
138
+ // 1. Read current version
139
+ const currentVersion = readCurrentVersion(projectType);
140
+ // 2. Calculate new version (reuse existing function!)
141
+ const newVersion = calculateNewVersion(currentVersion, versionType);
142
+ logger.log('info', `Bumping version: ${currentVersion} ${newVersion}`);
143
+ // 3. Determine which files to update
144
+ const filesToUpdate = [];
145
+ const packageJsonPath = plugins.path.join(paths.cwd, 'package.json');
146
+ const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json');
147
+ if (projectType === 'npm' || projectType === 'both') {
148
+ await updateVersionFile(packageJsonPath, newVersion);
149
+ filesToUpdate.push('package.json');
150
+ }
151
+ if (projectType === 'deno' || projectType === 'both') {
152
+ await updateVersionFile(denoJsonPath, newVersion);
153
+ filesToUpdate.push('deno.json');
190
154
  }
191
- case 'none':
192
- throw new Error('Cannot bump version: no package.json or deno.json found');
193
- default:
194
- throw new Error(`Unknown project type: ${projectType}`);
155
+ // 4. Stage all updated files
156
+ await smartshellInstance.exec(`git add ${filesToUpdate.join(' ')}`);
157
+ // 5. Create version commit
158
+ await smartshellInstance.exec(`git commit -m "v${newVersion}"`);
159
+ // 6. Create version tag
160
+ await smartshellInstance.exec(`git tag v${newVersion} -m "v${newVersion}"`);
161
+ logger.log('info', `Created commit and tag v${newVersion}`);
162
+ if (currentStep && totalSteps) {
163
+ ui.printStep(currentStep, totalSteps, description, 'done');
164
+ }
165
+ return newVersion;
195
166
  }
196
- if (currentStep && totalSteps) {
197
- ui.printStep(currentStep, totalSteps, description, 'done');
167
+ catch (error) {
168
+ throw new Error(`Failed to bump project version: ${error.message}`);
198
169
  }
199
- return newVersion;
200
170
  }
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY29tbWl0L21vZC5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBS2xDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CO0lBQ3ZDLElBQUksQ0FBQztRQUNILE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUMzRCxRQUFRLEVBQUUsTUFBTTtZQUNoQixlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDJEQUEyRCxDQUFDLENBQUM7WUFDaEYsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDRCQUE0QixVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLEtBQUssQ0FBQyxPQUFPLDRCQUE0QixDQUFDLENBQUM7UUFDMUYsT0FBTyxRQUFRLENB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
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY29tbWl0L21vZC5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBS2xDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CO0lBQ3ZDLElBQUksQ0FBQztRQUNILE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUMzRCxRQUFRLEVBQUUsTUFBTTtZQUNoQixlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDJEQUEyRCxDQUFDLENBQUM7WUFDaEYsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDRCQUE0QixVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLEtBQUssQ0FBQyxPQUFPLDRCQUE0QixDQUFDLENBQUM7UUFDMUYsT0FBTyxRQUFRLENB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@git.zone/cli",
3
3
  "private": false,
4
- "version": "1.19.7",
4
+ "version": "1.19.9",
5
5
  "description": "A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.",
6
6
  "main": "dist_ts/index.ts",
7
7
  "typings": "dist_ts/index.d.ts",
@@ -50,7 +50,7 @@
50
50
  "@types/node": "^22.15.18"
51
51
  },
52
52
  "dependencies": {
53
- "@git.zone/tsdoc": "^1.9.1",
53
+ "@git.zone/tsdoc": "^1.9.2",
54
54
  "@git.zone/tspublish": "^1.10.3",
55
55
  "@push.rocks/commitinfo": "^1.0.12",
56
56
  "@push.rocks/early": "^4.0.4",
package/readme.hints.md CHANGED
@@ -89,6 +89,26 @@ The format module is responsible for project standardization:
89
89
  5. **Performance Optimizations**: Parallel execution and caching
90
90
  6. **Reporting**: Diff views, statistics, verbose logging
91
91
  7. **Architecture**: Clean separation of concerns with new classes
92
+ 8. **Unified Version Bumping**: Self-managed version updates eliminating npm warning pollution in deno.json
93
+
94
+ ### Version Bumping Refactor (Latest)
95
+
96
+ The commit module's version bumping has been refactored to eliminate npm command dependencies:
97
+
98
+ **Changes:**
99
+ - Removed `bumpNpmVersion()` - was causing npm warnings to pollute deno.json
100
+ - Removed `syncVersionToDenoJson()` - no longer needed with unified approach
101
+ - Removed separate `bumpDenoVersion()` - replaced by unified implementation
102
+ - Added `readCurrentVersion()` helper - reads from either package.json or deno.json
103
+ - Added `updateVersionFile()` helper - updates JSON files directly
104
+ - Unified `bumpProjectVersion()` - handles npm/deno/both with single clean code path
105
+
106
+ **Benefits:**
107
+ - No npm warning pollution in version fields
108
+ - Full control over version bumping process
109
+ - Simpler git history (no amending, no force-tagging)
110
+ - Same code path for all project types
111
+ - Reuses existing `calculateNewVersion()` function
92
112
 
93
113
  ## Development Tips
94
114
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@git.zone/cli',
6
- version: '1.19.7',
6
+ version: '1.19.9',
7
7
  description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
8
8
  }
@@ -91,118 +91,47 @@ function calculateNewVersion(currentVersion: string, versionType: VersionType):
91
91
  }
92
92
 
93
93
  /**
94
- * Bumps the version in deno.json, commits the change, and creates a tag
95
- * @param versionType Type of version bump
96
- * @returns The new version string
94
+ * Reads the current version from package.json or deno.json
95
+ * @param projectType The project type to determine which file to read
96
+ * @returns The current version string
97
97
  */
98
- export async function bumpDenoVersion(versionType: VersionType): Promise<string> {
99
- const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json');
100
- const smartshellInstance = new plugins.smartshell.Smartshell({
101
- executor: 'bash',
102
- sourceFilePaths: [],
103
- });
98
+ function readCurrentVersion(projectType: ProjectType): string {
99
+ if (projectType === 'npm' || projectType === 'both') {
100
+ const packageJsonPath = plugins.path.join(paths.cwd, 'package.json');
101
+ const packageJson = plugins.smartfile.fs.toObjectSync(packageJsonPath) as { version?: string };
104
102
 
105
- try {
106
- // Read deno.json
107
- const denoConfig = plugins.smartfile.fs.toObjectSync(
108
- denoJsonPath
109
- ) as { version?: string };
103
+ if (!packageJson.version) {
104
+ throw new Error('package.json does not contain a version field');
105
+ }
106
+ return packageJson.version;
107
+ } else {
108
+ const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json');
109
+ const denoConfig = plugins.smartfile.fs.toObjectSync(denoJsonPath) as { version?: string };
110
110
 
111
111
  if (!denoConfig.version) {
112
112
  throw new Error('deno.json does not contain a version field');
113
113
  }
114
-
115
- const currentVersion = denoConfig.version;
116
- const newVersion = calculateNewVersion(currentVersion, versionType);
117
-
118
- logger.log('info', `Bumping deno.json version: ${currentVersion} → ${newVersion}`);
119
-
120
- // Update version
121
- denoConfig.version = newVersion;
122
-
123
- // Write back to disk
124
- await plugins.smartfile.memory.toFs(
125
- JSON.stringify(denoConfig, null, 2) + '\n',
126
- denoJsonPath
127
- );
128
-
129
- // Stage the deno.json file
130
- await smartshellInstance.exec('git add deno.json');
131
-
132
- // Commit the version bump
133
- await smartshellInstance.exec(`git commit -m "v${newVersion}"`);
134
-
135
- // Create the version tag
136
- await smartshellInstance.exec(`git tag v${newVersion} -m "v${newVersion}"`);
137
-
138
- logger.log('info', `Created commit and tag v${newVersion}`);
139
-
140
- return newVersion;
141
- } catch (error) {
142
- throw new Error(`Failed to bump deno.json version: ${error.message}`);
114
+ return denoConfig.version;
143
115
  }
144
116
  }
145
117
 
146
118
  /**
147
- * Bumps the version in package.json using npm version command
148
- * @param versionType Type of version bump
149
- * @returns The new version string
119
+ * Updates the version field in a JSON file (package.json or deno.json)
120
+ * @param filePath Path to the JSON file
121
+ * @param newVersion The new version to write
150
122
  */
151
- async function bumpNpmVersion(versionType: VersionType): Promise<string> {
152
- const smartshellInstance = new plugins.smartshell.Smartshell({
153
- executor: 'bash',
154
- sourceFilePaths: [],
155
- });
156
-
157
- logger.log('info', `Bumping package.json version using npm version ${versionType}`);
158
- const result = await smartshellInstance.exec(`npm version ${versionType}`);
159
-
160
- // npm version returns the new version with a 'v' prefix, e.g., "v1.2.3"
161
- const newVersion = result.stdout.trim().replace(/^v/, '');
162
- return newVersion;
163
- }
164
-
165
- /**
166
- * Syncs the version from package.json to deno.json and amends the npm commit
167
- * @param version The version to sync
168
- */
169
- async function syncVersionToDenoJson(version: string): Promise<void> {
170
- const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json');
171
- const smartshellInstance = new plugins.smartshell.Smartshell({
172
- executor: 'bash',
173
- sourceFilePaths: [],
174
- });
175
-
176
- try {
177
- const denoConfig = plugins.smartfile.fs.toObjectSync(
178
- denoJsonPath
179
- ) as { version?: string };
180
-
181
- logger.log('info', `Syncing version to deno.json: ${version}`);
182
- denoConfig.version = version;
183
-
184
- await plugins.smartfile.memory.toFs(
185
- JSON.stringify(denoConfig, null, 2) + '\n',
186
- denoJsonPath
187
- );
188
-
189
- // Stage the deno.json file
190
- await smartshellInstance.exec('git add deno.json');
191
-
192
- // Amend the npm version commit to include deno.json
193
- await smartshellInstance.exec('git commit --amend --no-edit');
194
-
195
- // Re-create the tag with force to update it
196
- await smartshellInstance.exec(`git tag -fa v${version} -m "v${version}"`);
197
-
198
- logger.log('info', `Amended commit to include deno.json and updated tag v${version}`);
199
- } catch (error) {
200
- throw new Error(`Failed to sync version to deno.json: ${error.message}`);
201
- }
123
+ async function updateVersionFile(filePath: string, newVersion: string): Promise<void> {
124
+ const config = plugins.smartfile.fs.toObjectSync(filePath) as { version?: string };
125
+ config.version = newVersion;
126
+ await plugins.smartfile.memory.toFs(
127
+ JSON.stringify(config, null, 2) + '\n',
128
+ filePath
129
+ );
202
130
  }
203
131
 
204
132
  /**
205
133
  * Bumps the project version based on project type
134
+ * Handles npm-only, deno-only, and dual projects with unified logic
206
135
  * @param projectType The detected project type
207
136
  * @param versionType The type of version bump
208
137
  * @param currentStep The current step number for progress display
@@ -215,6 +144,10 @@ export async function bumpProjectVersion(
215
144
  currentStep?: number,
216
145
  totalSteps?: number
217
146
  ): Promise<string> {
147
+ if (projectType === 'none') {
148
+ throw new Error('Cannot bump version: no package.json or deno.json found');
149
+ }
150
+
218
151
  const projectEmoji = projectType === 'npm' ? '📦' : projectType === 'deno' ? '🦕' : '🔀';
219
152
  const description = `🏷️ Bumping version (${projectEmoji} ${projectType})`;
220
153
 
@@ -222,35 +155,52 @@ export async function bumpProjectVersion(
222
155
  ui.printStep(currentStep, totalSteps, description, 'in-progress');
223
156
  }
224
157
 
225
- let newVersion: string;
158
+ const smartshellInstance = new plugins.smartshell.Smartshell({
159
+ executor: 'bash',
160
+ sourceFilePaths: [],
161
+ });
226
162
 
227
- switch (projectType) {
228
- case 'npm':
229
- newVersion = await bumpNpmVersion(versionType);
230
- break;
163
+ try {
164
+ // 1. Read current version
165
+ const currentVersion = readCurrentVersion(projectType);
231
166
 
232
- case 'deno':
233
- newVersion = await bumpDenoVersion(versionType);
234
- break;
167
+ // 2. Calculate new version (reuse existing function!)
168
+ const newVersion = calculateNewVersion(currentVersion, versionType);
235
169
 
236
- case 'both': {
237
- // Bump npm version first (it handles git tags)
238
- newVersion = await bumpNpmVersion(versionType);
239
- // Then sync to deno.json
240
- await syncVersionToDenoJson(newVersion);
241
- break;
170
+ logger.log('info', `Bumping version: ${currentVersion} → ${newVersion}`);
171
+
172
+ // 3. Determine which files to update
173
+ const filesToUpdate: string[] = [];
174
+ const packageJsonPath = plugins.path.join(paths.cwd, 'package.json');
175
+ const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json');
176
+
177
+ if (projectType === 'npm' || projectType === 'both') {
178
+ await updateVersionFile(packageJsonPath, newVersion);
179
+ filesToUpdate.push('package.json');
242
180
  }
243
181
 
244
- case 'none':
245
- throw new Error('Cannot bump version: no package.json or deno.json found');
182
+ if (projectType === 'deno' || projectType === 'both') {
183
+ await updateVersionFile(denoJsonPath, newVersion);
184
+ filesToUpdate.push('deno.json');
185
+ }
246
186
 
247
- default:
248
- throw new Error(`Unknown project type: ${projectType}`);
249
- }
187
+ // 4. Stage all updated files
188
+ await smartshellInstance.exec(`git add ${filesToUpdate.join(' ')}`);
250
189
 
251
- if (currentStep && totalSteps) {
252
- ui.printStep(currentStep, totalSteps, description, 'done');
253
- }
190
+ // 5. Create version commit
191
+ await smartshellInstance.exec(`git commit -m "v${newVersion}"`);
254
192
 
255
- return newVersion;
193
+ // 6. Create version tag
194
+ await smartshellInstance.exec(`git tag v${newVersion} -m "v${newVersion}"`);
195
+
196
+ logger.log('info', `Created commit and tag v${newVersion}`);
197
+
198
+ if (currentStep && totalSteps) {
199
+ ui.printStep(currentStep, totalSteps, description, 'done');
200
+ }
201
+
202
+ return newVersion;
203
+ } catch (error) {
204
+ throw new Error(`Failed to bump project version: ${error.message}`);
205
+ }
256
206
  }