@bernierllc/changeset-manager 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ /*
2
+ Copyright (c) 2025 Bernier LLC
3
+
4
+ This file is licensed to the client under a limited-use license.
5
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
6
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
7
+ */
package/README.md ADDED
@@ -0,0 +1,320 @@
1
+ # @bernierllc/changeset-manager
2
+
3
+ Pure changeset management utilities for versioning and changelog generation in monorepos.
4
+
5
+ ## Features
6
+
7
+ - **Changeset Creation**: Create and manage changeset files with proper formatting
8
+ - **Version Bump Calculation**: Calculate appropriate version bumps based on changesets
9
+ - **Changelog Generation**: Generate comprehensive changelogs from changeset data
10
+ - **Workspace Integration**: Read package versions from npm workspaces
11
+ - **Breaking Changes Support**: Handle breaking changes with proper versioning
12
+ - **Real Filesystem Operations**: No mocks - uses real filesystem for testing
13
+ - **TypeScript Support**: Full TypeScript support with strict typing
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ npm install @bernierllc/changeset-manager
19
+ ```
20
+
21
+ ## Quick Start
22
+
23
+ ```typescript
24
+ import { ChangesetManager } from '@bernierllc/changeset-manager';
25
+
26
+ // Initialize with custom changesets directory
27
+ const changesetManager = new ChangesetManager('.changeset');
28
+
29
+ // Create a new changeset
30
+ const result = changesetManager.createChangeset({
31
+ packages: ['@myorg/package-1', '@myorg/package-2'],
32
+ bumpType: 'minor',
33
+ summary: 'Add new feature to both packages'
34
+ });
35
+
36
+ // Read existing changesets
37
+ const changesets = changesetManager.readChangesets();
38
+
39
+ // Generate changelog
40
+ const changelog = changesetManager.generateChangelog(
41
+ changesets.changesets,
42
+ changesetManager.getPackageVersions('./')
43
+ );
44
+ ```
45
+
46
+ ## API Reference
47
+
48
+ ### ChangesetManager
49
+
50
+ #### Constructor
51
+
52
+ ```typescript
53
+ new ChangesetManager(changesetsDir?: string, config?: Partial<ChangesetConfig>)
54
+ ```
55
+
56
+ - `changesetsDir`: Directory to store changeset files (default: `.changeset`)
57
+ - `config`: Optional configuration object
58
+
59
+ #### Methods
60
+
61
+ ##### createChangeset(options: ChangesetOptions): ChangesetResult
62
+
63
+ Create a new changeset entry.
64
+
65
+ ```typescript
66
+ const result = changesetManager.createChangeset({
67
+ packages: ['@myorg/package-1'],
68
+ bumpType: 'patch',
69
+ summary: 'Fix critical bug',
70
+ breaking: false,
71
+ dependencies: ['@myorg/other-package'],
72
+ dryRun: false
73
+ });
74
+ ```
75
+
76
+ ##### readChangesets(): ChangesetResult
77
+
78
+ Read all existing changeset files.
79
+
80
+ ```typescript
81
+ const result = changesetManager.readChangesets();
82
+ console.log(result.changesets); // Array of ChangesetEntry objects
83
+ ```
84
+
85
+ ##### deleteChangeset(changesetId: string): boolean
86
+
87
+ Delete a specific changeset file.
88
+
89
+ ```typescript
90
+ const deleted = changesetManager.deleteChangeset('changeset-id');
91
+ ```
92
+
93
+ ##### getPackageVersions(workspaceRoot: string): PackageVersion[]
94
+
95
+ Read package versions from npm workspace.
96
+
97
+ ```typescript
98
+ const packages = changesetManager.getPackageVersions('./');
99
+ console.log(packages); // Array of package information
100
+ ```
101
+
102
+ ##### calculateVersionBumps(changesets: ChangesetEntry[], packages: PackageVersion[]): Map<string, VersionBumpType>
103
+
104
+ Calculate version bumps for packages based on changesets.
105
+
106
+ ```typescript
107
+ const versionBumps = changesetManager.calculateVersionBumps(changesets, packages);
108
+ console.log(versionBumps.get('@myorg/package-1')); // 'major' | 'minor' | 'patch' | 'none'
109
+ ```
110
+
111
+ ##### generateChangelog(changesets: ChangesetEntry[], packages: PackageVersion[]): string
112
+
113
+ Generate changelog content from changesets and package information.
114
+
115
+ ```typescript
116
+ const changelog = changesetManager.generateChangelog(changesets, packages);
117
+ console.log(changelog); // Markdown formatted changelog
118
+ ```
119
+
120
+ ##### getConfig(): ChangesetConfig
121
+
122
+ Get current configuration.
123
+
124
+ ```typescript
125
+ const config = changesetManager.getConfig();
126
+ ```
127
+
128
+ ##### updateConfig(newConfig: Partial<ChangesetConfig>): void
129
+
130
+ Update configuration.
131
+
132
+ ```typescript
133
+ changesetManager.updateConfig({
134
+ changelog: {
135
+ title: 'Custom Changelog'
136
+ }
137
+ });
138
+ ```
139
+
140
+ ## Types
141
+
142
+ ### ChangesetOptions
143
+
144
+ ```typescript
145
+ interface ChangesetOptions {
146
+ packages?: string[]; // Package names to include
147
+ bumpType?: VersionBumpType; // Version bump type
148
+ summary?: string; // Changeset summary
149
+ breaking?: boolean; // Is this a breaking change?
150
+ dependencies?: string[]; // Dependent packages
151
+ dryRun?: boolean; // Don't write files
152
+ }
153
+ ```
154
+
155
+ ### ChangesetEntry
156
+
157
+ ```typescript
158
+ interface ChangesetEntry {
159
+ id: string; // Unique identifier
160
+ summary: string; // Changeset summary
161
+ packages: string[]; // Affected packages
162
+ bumpType: VersionBumpType; // Version bump type
163
+ timestamp: Date; // Creation timestamp
164
+ author?: string; // Author information
165
+ breaking?: boolean; // Breaking change flag
166
+ dependencies?: string[]; // Dependent packages
167
+ }
168
+ ```
169
+
170
+ ### VersionBumpType
171
+
172
+ ```typescript
173
+ type VersionBumpType = 'major' | 'minor' | 'patch' | 'none';
174
+ ```
175
+
176
+ ## Configuration
177
+
178
+ ### ChangesetConfig
179
+
180
+ ```typescript
181
+ interface ChangesetConfig {
182
+ baseBranch: string; // Git base branch
183
+ access: 'public' | 'restricted'; // Package access level
184
+ ignore: string[]; // Patterns to ignore
185
+ changelog: {
186
+ repo: string; // Repository URL
187
+ title: string; // Changelog title
188
+ };
189
+ commit: {
190
+ message: string; // Commit message template
191
+ };
192
+ linked: string[][]; // Linked packages
193
+ updateInternalDependencies: 'patch' | 'minor'; // Internal dependency updates
194
+ ___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH: {
195
+ onlyUpdatePeerDependentsWhenOutOfRange: boolean;
196
+ updateInternalDependents: 'always' | 'out-of-range';
197
+ };
198
+ }
199
+ ```
200
+
201
+ ## Examples
202
+
203
+ ### Basic Usage
204
+
205
+ ```typescript
206
+ import { ChangesetManager } from '@bernierllc/changeset-manager';
207
+
208
+ const manager = new ChangesetManager();
209
+
210
+ // Create a simple changeset
211
+ const result = manager.createChangeset({
212
+ packages: ['@myorg/core'],
213
+ bumpType: 'patch',
214
+ summary: 'Fix authentication bug'
215
+ });
216
+
217
+ if (result.success) {
218
+ console.log('Changeset created successfully');
219
+ }
220
+ ```
221
+
222
+ ### Breaking Changes
223
+
224
+ ```typescript
225
+ // Create a breaking changeset
226
+ const breakingResult = manager.createChangeset({
227
+ packages: ['@myorg/api'],
228
+ bumpType: 'major',
229
+ summary: 'Remove deprecated API methods',
230
+ breaking: true
231
+ });
232
+ ```
233
+
234
+ ### Multiple Packages
235
+
236
+ ```typescript
237
+ // Update multiple packages
238
+ const multiResult = manager.createChangeset({
239
+ packages: ['@myorg/core', '@myorg/utils', '@myorg/types'],
240
+ bumpType: 'minor',
241
+ summary: 'Add new utility functions to all packages'
242
+ });
243
+ ```
244
+
245
+ ### Changelog Generation
246
+
247
+ ```typescript
248
+ // Generate a complete changelog
249
+ const changesets = manager.readChangesets();
250
+ const packages = manager.getPackageVersions('./');
251
+
252
+ const changelog = manager.generateChangelog(changesets.changesets, packages);
253
+ console.log(changelog);
254
+ ```
255
+
256
+ ### Custom Configuration
257
+
258
+ ```typescript
259
+ const customManager = new ChangesetManager('.changeset', {
260
+ changelog: {
261
+ title: 'Release Notes',
262
+ repo: 'https://github.com/myorg/myrepo'
263
+ },
264
+ commit: {
265
+ message: 'chore: release packages'
266
+ }
267
+ });
268
+ ```
269
+
270
+ ## Testing
271
+
272
+ The package includes comprehensive tests that use real filesystem operations:
273
+
274
+ ```bash
275
+ npm test
276
+ ```
277
+
278
+ Tests cover:
279
+ - Changeset creation and validation
280
+ - File parsing and formatting
281
+ - Version bump calculations
282
+ - Changelog generation
283
+ - Configuration management
284
+ - Error handling
285
+
286
+ ## Error Handling
287
+
288
+ All methods return structured results with success flags and error arrays:
289
+
290
+ ```typescript
291
+ const result = manager.createChangeset({
292
+ packages: [],
293
+ summary: 'Test'
294
+ });
295
+
296
+ if (!result.success) {
297
+ console.error('Errors:', result.errors);
298
+ console.warn('Warnings:', result.warnings);
299
+ }
300
+ ```
301
+
302
+ ## Best Practices
303
+
304
+ 1. **Use Descriptive Summaries**: Write clear, concise summaries that explain the change
305
+ 2. **Group Related Changes**: Include multiple packages in a single changeset when changes are related
306
+ 3. **Mark Breaking Changes**: Always set `breaking: true` for API changes that require major version bumps
307
+ 4. **Review Before Publishing**: Use `dryRun: true` to preview changes before applying them
308
+ 5. **Keep Changesets Focused**: Each changeset should represent a single logical change
309
+
310
+ ## Contributing
311
+
312
+ This package follows the project's development standards:
313
+ - No mocks in tests - use real filesystem operations
314
+ - Comprehensive TypeScript typing
315
+ - Clear documentation and examples
316
+ - Proper error handling and validation
317
+
318
+ ## License
319
+
320
+ This package is licensed under the same terms as the parent project.
@@ -0,0 +1,47 @@
1
+ import { ChangesetEntry, ChangesetConfig, PackageVersion, ChangesetResult, ChangesetOptions, VersionBumpType } from './types';
2
+ export declare class ChangesetManager {
3
+ private config;
4
+ private changesetsDir;
5
+ constructor(changesetsDir?: string, config?: Partial<ChangesetConfig>);
6
+ private initializeConfig;
7
+ /**
8
+ * Create a new changeset entry
9
+ */
10
+ createChangeset(options: ChangesetOptions): ChangesetResult;
11
+ /**
12
+ * Read all changeset files
13
+ */
14
+ readChangesets(): ChangesetResult;
15
+ /**
16
+ * Delete a changeset file
17
+ */
18
+ deleteChangeset(changesetId: string): boolean;
19
+ /**
20
+ * Get package versions from workspace
21
+ */
22
+ getPackageVersions(workspaceRoot: string): PackageVersion[];
23
+ /**
24
+ * Calculate version bumps based on changesets
25
+ */
26
+ calculateVersionBumps(changesets: ChangesetEntry[], packages: PackageVersion[]): Map<string, VersionBumpType>;
27
+ /**
28
+ * Generate changelog content
29
+ */
30
+ generateChangelog(changesets: ChangesetEntry[], packages: PackageVersion[]): string;
31
+ /**
32
+ * Get configuration
33
+ */
34
+ getConfig(): ChangesetConfig;
35
+ /**
36
+ * Update configuration
37
+ */
38
+ updateConfig(newConfig: Partial<ChangesetConfig>): void;
39
+ private ensureChangesetsDirectory;
40
+ private writeChangesetFile;
41
+ private formatChangesetContent;
42
+ private parseChangesetFile;
43
+ private readWorkspaceConfig;
44
+ private getHighestBumpType;
45
+ private groupChangesByPackage;
46
+ }
47
+ //# sourceMappingURL=changeset-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeset-manager.d.ts","sourceRoot":"","sources":["../src/changeset-manager.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,gBAAgB,EAGhB,eAAe,EAChB,MAAM,SAAS,CAAC;AAEjB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,GAAE,MAAqB,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAKnF,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe;IAyDlE;;OAEG;IACI,cAAc,IAAI,eAAe;IAgDxC;;OAEG;IACI,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAcpD;;OAEG;IACI,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,EAAE;IA4DlE;;OAEG;IACI,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;IAcpH;;OAEG;IACI,iBAAiB,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM;IAiC1F;;OAEG;IACI,SAAS,IAAI,eAAe;IAInC;;OAEG;IACI,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAI9D,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,qBAAqB;CAc9B"}
@@ -0,0 +1,387 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.ChangesetManager = void 0;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const uuid_1 = require("uuid");
47
+ class ChangesetManager {
48
+ constructor(changesetsDir = '.changeset', config) {
49
+ this.changesetsDir = changesetsDir;
50
+ this.config = this.initializeConfig(config);
51
+ }
52
+ initializeConfig(config) {
53
+ const defaultConfig = {
54
+ baseBranch: 'main',
55
+ access: 'public',
56
+ ignore: [],
57
+ changelog: {
58
+ repo: '',
59
+ title: 'Changelog'
60
+ },
61
+ commit: {
62
+ message: 'chore: update changelog'
63
+ },
64
+ linked: [],
65
+ updateInternalDependencies: 'patch',
66
+ ___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH: {
67
+ onlyUpdatePeerDependentsWhenOutOfRange: false,
68
+ updateInternalDependents: 'always'
69
+ }
70
+ };
71
+ return { ...defaultConfig, ...config };
72
+ }
73
+ /**
74
+ * Create a new changeset entry
75
+ */
76
+ createChangeset(options) {
77
+ try {
78
+ const { packages = [], bumpType = 'patch', summary = '', breaking = false, dependencies = [], dryRun = false } = options;
79
+ if (!packages.length) {
80
+ return {
81
+ success: false,
82
+ changesets: [],
83
+ packages: [],
84
+ errors: ['No packages specified for changeset'],
85
+ warnings: []
86
+ };
87
+ }
88
+ if (!summary.trim()) {
89
+ return {
90
+ success: false,
91
+ changesets: [],
92
+ packages: [],
93
+ errors: ['Changeset summary is required'],
94
+ warnings: []
95
+ };
96
+ }
97
+ const changesetEntry = {
98
+ id: (0, uuid_1.v4)(),
99
+ summary: summary.trim(),
100
+ packages,
101
+ bumpType,
102
+ timestamp: new Date(),
103
+ breaking,
104
+ dependencies
105
+ };
106
+ if (!dryRun) {
107
+ this.ensureChangesetsDirectory();
108
+ this.writeChangesetFile(changesetEntry);
109
+ }
110
+ return {
111
+ success: true,
112
+ changesets: [changesetEntry],
113
+ packages: [],
114
+ errors: [],
115
+ warnings: []
116
+ };
117
+ }
118
+ catch (error) {
119
+ return {
120
+ success: false,
121
+ changesets: [],
122
+ packages: [],
123
+ errors: [`Failed to create changeset: ${error instanceof Error ? error.message : 'Unknown error'}`],
124
+ warnings: []
125
+ };
126
+ }
127
+ }
128
+ /**
129
+ * Read all changeset files
130
+ */
131
+ readChangesets() {
132
+ try {
133
+ if (!fs.existsSync(this.changesetsDir)) {
134
+ return {
135
+ success: true,
136
+ changesets: [],
137
+ packages: [],
138
+ errors: [],
139
+ warnings: ['Changesets directory does not exist']
140
+ };
141
+ }
142
+ const changesetFiles = fs.readdirSync(this.changesetsDir)
143
+ .filter(file => file.endsWith('.md') && file !== 'README.md');
144
+ const changesets = [];
145
+ const errors = [];
146
+ const warnings = [];
147
+ for (const file of changesetFiles) {
148
+ try {
149
+ const filePath = path.join(this.changesetsDir, file);
150
+ const content = fs.readFileSync(filePath, 'utf8');
151
+ const changeset = this.parseChangesetFile(content, file);
152
+ changesets.push(changeset);
153
+ }
154
+ catch (error) {
155
+ errors.push(`Failed to parse changeset file ${file}: ${error instanceof Error ? error.message : 'Unknown error'}`);
156
+ }
157
+ }
158
+ return {
159
+ success: errors.length === 0,
160
+ changesets,
161
+ packages: [],
162
+ errors,
163
+ warnings
164
+ };
165
+ }
166
+ catch (error) {
167
+ return {
168
+ success: false,
169
+ changesets: [],
170
+ packages: [],
171
+ errors: [`Failed to read changesets: ${error instanceof Error ? error.message : 'Unknown error'}`],
172
+ warnings: []
173
+ };
174
+ }
175
+ }
176
+ /**
177
+ * Delete a changeset file
178
+ */
179
+ deleteChangeset(changesetId) {
180
+ try {
181
+ const filePath = path.join(this.changesetsDir, `${changesetId}.md`);
182
+ if (fs.existsSync(filePath)) {
183
+ fs.unlinkSync(filePath);
184
+ return true;
185
+ }
186
+ return false;
187
+ }
188
+ catch (error) {
189
+ console.error(`Failed to delete changeset ${changesetId}:`, error);
190
+ return false;
191
+ }
192
+ }
193
+ /**
194
+ * Get package versions from workspace
195
+ */
196
+ getPackageVersions(workspaceRoot) {
197
+ try {
198
+ const packages = [];
199
+ const workspaceConfig = this.readWorkspaceConfig(workspaceRoot);
200
+ for (const packagePath of workspaceConfig.workspaces || []) {
201
+ // Handle glob patterns like 'packages/*'
202
+ if (packagePath.includes('*')) {
203
+ const basePath = packagePath.replace(/\*.*$/, '');
204
+ const fullBasePath = path.join(workspaceRoot, basePath);
205
+ if (fs.existsSync(fullBasePath)) {
206
+ const items = fs.readdirSync(fullBasePath);
207
+ for (const item of items) {
208
+ const itemPath = path.join(fullBasePath, item);
209
+ const stat = fs.statSync(itemPath);
210
+ if (stat.isDirectory()) {
211
+ const packageJsonPath = path.join(itemPath, 'package.json');
212
+ if (fs.existsSync(packageJsonPath)) {
213
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
214
+ packages.push({
215
+ name: packageJson.name,
216
+ version: packageJson.version,
217
+ private: packageJson.private || false,
218
+ dependencies: packageJson.dependencies,
219
+ devDependencies: packageJson.devDependencies,
220
+ peerDependencies: packageJson.peerDependencies
221
+ });
222
+ }
223
+ }
224
+ }
225
+ }
226
+ }
227
+ else {
228
+ // Handle direct paths
229
+ const fullPath = path.join(workspaceRoot, packagePath);
230
+ if (fs.existsSync(fullPath)) {
231
+ const packageJsonPath = path.join(fullPath, 'package.json');
232
+ if (fs.existsSync(packageJsonPath)) {
233
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
234
+ packages.push({
235
+ name: packageJson.name,
236
+ version: packageJson.version,
237
+ private: packageJson.private || false,
238
+ dependencies: packageJson.dependencies,
239
+ devDependencies: packageJson.devDependencies,
240
+ peerDependencies: packageJson.peerDependencies
241
+ });
242
+ }
243
+ }
244
+ }
245
+ }
246
+ return packages;
247
+ }
248
+ catch (error) {
249
+ console.error('Failed to get package versions:', error);
250
+ return [];
251
+ }
252
+ }
253
+ /**
254
+ * Calculate version bumps based on changesets
255
+ */
256
+ calculateVersionBumps(changesets, packages) {
257
+ const versionBumps = new Map();
258
+ for (const changeset of changesets) {
259
+ for (const packageName of changeset.packages) {
260
+ const currentBump = versionBumps.get(packageName) || 'none';
261
+ const newBump = this.getHighestBumpType(currentBump, changeset.bumpType);
262
+ versionBumps.set(packageName, newBump);
263
+ }
264
+ }
265
+ return versionBumps;
266
+ }
267
+ /**
268
+ * Generate changelog content
269
+ */
270
+ generateChangelog(changesets, packages) {
271
+ const groupedChanges = this.groupChangesByPackage(changesets);
272
+ let changelog = `# ${this.config.changelog.title}\n\n`;
273
+ for (const [packageName, changes] of groupedChanges) {
274
+ const packageInfo = packages.find(p => p.name === packageName);
275
+ if (!packageInfo)
276
+ continue;
277
+ changelog += `## ${packageName}@${packageInfo.version}\n\n`;
278
+ const breakingChanges = changes.filter(c => c.breaking);
279
+ const regularChanges = changes.filter(c => !c.breaking);
280
+ if (breakingChanges.length > 0) {
281
+ changelog += '### Breaking Changes\n\n';
282
+ for (const change of breakingChanges) {
283
+ changelog += `- ${change.summary}\n`;
284
+ }
285
+ changelog += '\n';
286
+ }
287
+ if (regularChanges.length > 0) {
288
+ changelog += '### Changes\n\n';
289
+ for (const change of regularChanges) {
290
+ changelog += `- ${change.summary}\n`;
291
+ }
292
+ changelog += '\n';
293
+ }
294
+ }
295
+ return changelog;
296
+ }
297
+ /**
298
+ * Get configuration
299
+ */
300
+ getConfig() {
301
+ return { ...this.config };
302
+ }
303
+ /**
304
+ * Update configuration
305
+ */
306
+ updateConfig(newConfig) {
307
+ this.config = { ...this.config, ...newConfig };
308
+ }
309
+ ensureChangesetsDirectory() {
310
+ if (!fs.existsSync(this.changesetsDir)) {
311
+ fs.mkdirSync(this.changesetsDir, { recursive: true });
312
+ }
313
+ }
314
+ writeChangesetFile(changeset) {
315
+ const filePath = path.join(this.changesetsDir, `${changeset.id}.md`);
316
+ const content = this.formatChangesetContent(changeset);
317
+ fs.writeFileSync(filePath, content, 'utf8');
318
+ }
319
+ formatChangesetContent(changeset) {
320
+ let content = `---
321
+ ${changeset.packages.map(pkg => `"${pkg}": ${changeset.bumpType}`).join('\n')}
322
+ ---
323
+
324
+ ${changeset.summary}
325
+ `;
326
+ if (changeset.breaking) {
327
+ content += '\nBREAKING CHANGE: This is a breaking change.\n';
328
+ }
329
+ return content;
330
+ }
331
+ parseChangesetFile(content, filename) {
332
+ const lines = content.split('\n');
333
+ const frontMatterStart = lines.findIndex(line => line.trim() === '---');
334
+ const frontMatterEnd = lines.findIndex((line, index) => index > frontMatterStart && line.trim() === '---');
335
+ if (frontMatterStart === -1 || frontMatterEnd === -1) {
336
+ throw new Error('Invalid changeset file format');
337
+ }
338
+ const frontMatter = lines.slice(frontMatterStart + 1, frontMatterEnd);
339
+ const summary = lines.slice(frontMatterEnd + 1).join('\n').trim();
340
+ const packages = [];
341
+ let bumpType = 'patch';
342
+ for (const line of frontMatter) {
343
+ const match = line.match(/"([^"]+)":\s*(major|minor|patch|none)/);
344
+ if (match && match[1]) {
345
+ packages.push(match[1]);
346
+ bumpType = match[2];
347
+ }
348
+ }
349
+ const breaking = content.includes('BREAKING CHANGE');
350
+ return {
351
+ id: path.basename(filename, '.md'),
352
+ summary,
353
+ packages,
354
+ bumpType,
355
+ timestamp: new Date(),
356
+ breaking
357
+ };
358
+ }
359
+ readWorkspaceConfig(workspaceRoot) {
360
+ const packageJsonPath = path.join(workspaceRoot, 'package.json');
361
+ if (fs.existsSync(packageJsonPath)) {
362
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
363
+ return { workspaces: packageJson.workspaces || [] };
364
+ }
365
+ return { workspaces: [] };
366
+ }
367
+ getHighestBumpType(current, newBump) {
368
+ const bumpOrder = ['none', 'patch', 'minor', 'major'];
369
+ const currentIndex = bumpOrder.indexOf(current);
370
+ const newIndex = bumpOrder.indexOf(newBump);
371
+ return bumpOrder[Math.max(currentIndex, newIndex)];
372
+ }
373
+ groupChangesByPackage(changesets) {
374
+ const grouped = new Map();
375
+ for (const changeset of changesets) {
376
+ for (const packageName of changeset.packages) {
377
+ if (!grouped.has(packageName)) {
378
+ grouped.set(packageName, []);
379
+ }
380
+ grouped.get(packageName).push(changeset);
381
+ }
382
+ }
383
+ return grouped;
384
+ }
385
+ }
386
+ exports.ChangesetManager = ChangesetManager;
387
+ //# sourceMappingURL=changeset-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeset-manager.js","sourceRoot":"","sources":["../src/changeset-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { ChangesetManager } from './changeset-manager';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.ChangesetManager = void 0;
25
+ var changeset_manager_1 = require("./changeset-manager");
26
+ Object.defineProperty(exports, "ChangesetManager", { enumerable: true, get: function () { return changeset_manager_1.ChangesetManager; } });
27
+ __exportStar(require("./types"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;EAME;;;;;;;;;;;;;;;;;AAEF,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,0CAAwB"}
@@ -0,0 +1,66 @@
1
+ export type VersionBumpType = 'major' | 'minor' | 'patch' | 'none';
2
+ export interface ChangesetEntry {
3
+ id: string;
4
+ summary: string;
5
+ packages: string[];
6
+ bumpType: VersionBumpType;
7
+ timestamp: Date;
8
+ author?: string;
9
+ breaking?: boolean;
10
+ dependencies?: string[];
11
+ }
12
+ export interface ChangesetConfig {
13
+ baseBranch: string;
14
+ access: 'public' | 'restricted';
15
+ ignore: string[];
16
+ changelog: {
17
+ repo: string;
18
+ title: string;
19
+ };
20
+ commit: {
21
+ message: string;
22
+ };
23
+ linked: string[][];
24
+ updateInternalDependencies: 'patch' | 'minor';
25
+ ___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH: {
26
+ onlyUpdatePeerDependentsWhenOutOfRange: boolean;
27
+ updateInternalDependents: 'always' | 'out-of-range';
28
+ };
29
+ }
30
+ export interface PackageVersion {
31
+ name: string;
32
+ version: string;
33
+ private: boolean;
34
+ dependencies?: Record<string, string>;
35
+ devDependencies?: Record<string, string>;
36
+ peerDependencies?: Record<string, string>;
37
+ }
38
+ export interface ChangesetResult {
39
+ success: boolean;
40
+ changesets: ChangesetEntry[];
41
+ packages: PackageVersion[];
42
+ errors: string[];
43
+ warnings: string[];
44
+ }
45
+ export interface ChangesetOptions {
46
+ packages?: string[];
47
+ bumpType?: VersionBumpType;
48
+ summary?: string;
49
+ breaking?: boolean;
50
+ dependencies?: string[];
51
+ dryRun?: boolean;
52
+ }
53
+ export interface VersionResult {
54
+ success: boolean;
55
+ updatedPackages: PackageVersion[];
56
+ changesetFiles: string[];
57
+ errors: string[];
58
+ warnings: string[];
59
+ }
60
+ export interface PublishResult {
61
+ success: boolean;
62
+ publishedPackages: string[];
63
+ errors: string[];
64
+ warnings: string[];
65
+ }
66
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,YAAY,CAAC;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,0BAA0B,EAAE,OAAO,GAAG,OAAO,CAAC;IAC9C,iDAAiD,EAAE;QACjD,sCAAsC,EAAE,OAAO,CAAC;QAChD,wBAAwB,EAAE,QAAQ,GAAG,cAAc,CAAC;KACrD,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}
package/dist/types.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;EAME"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@bernierllc/changeset-manager",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "description": "Pure changeset management utilities for versioning and changelog generation",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "test": "jest",
11
+ "lint": "eslint src/**/*.ts",
12
+ "type-check": "tsc --noEmit",
13
+ "clean": "rm -rf dist"
14
+ },
15
+ "keywords": [
16
+ "changeset",
17
+ "versioning",
18
+ "changelog",
19
+ "release",
20
+ "semver",
21
+ "monorepo"
22
+ ],
23
+ "author": "Bernier LLC",
24
+ "license": "Bernier LLC",
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "https://github.com/bernierllc/tools.git",
28
+ "directory": "packages/core/changeset-manager"
29
+ },
30
+ "dependencies": {
31
+ "uuid": "^9.0.0"
32
+ },
33
+ "devDependencies": {
34
+ "@types/jest": "^29.5.0",
35
+ "@types/node": "^20.0.0",
36
+ "@types/uuid": "^9.0.0",
37
+ "jest": "^29.5.0",
38
+ "ts-jest": "^29.1.0",
39
+ "typescript": "^5.0.0"
40
+ },
41
+ "files": [
42
+ "dist/**/*",
43
+ "README.md",
44
+ "LICENSE"
45
+ ]
46
+ }