@williamthorsen/release-kit 0.2.1
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/CHANGELOG.md +54 -0
- package/LICENSE +7 -0
- package/README.md +395 -0
- package/cliff.toml.template +73 -0
- package/dist/esm/.cache +1 -0
- package/dist/esm/bumpAllVersions.d.ts +2 -0
- package/dist/esm/bumpAllVersions.js +51 -0
- package/dist/esm/bumpVersion.d.ts +2 -0
- package/dist/esm/bumpVersion.js +26 -0
- package/dist/esm/defaults.d.ts +2 -0
- package/dist/esm/defaults.js +15 -0
- package/dist/esm/determineBumpType.d.ts +2 -0
- package/dist/esm/determineBumpType.js +38 -0
- package/dist/esm/generateChangelogs.d.ts +6 -0
- package/dist/esm/generateChangelogs.js +30 -0
- package/dist/esm/getCommitsSinceTarget.d.ts +5 -0
- package/dist/esm/getCommitsSinceTarget.js +61 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.js +21 -0
- package/dist/esm/parseCommitMessage.d.ts +2 -0
- package/dist/esm/parseCommitMessage.js +46 -0
- package/dist/esm/releasePrepare.d.ts +6 -0
- package/dist/esm/releasePrepare.js +48 -0
- package/dist/esm/releasePrepareMono.d.ts +3 -0
- package/dist/esm/releasePrepareMono.js +65 -0
- package/dist/esm/types.d.ts +41 -0
- package/dist/esm/types.js +0 -0
- package/dist/tsconfig.generate-typings.tsbuildinfo +1 -0
- package/package.json +41 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## [release-kit-v0.2.1] - 2026-03-09
|
|
6
|
+
|
|
7
|
+
### Tooling
|
|
8
|
+
|
|
9
|
+
- Root|tooling: Make release-kit public
|
|
10
|
+
|
|
11
|
+
## [release-kit-v0.2.0] - 2026-03-09
|
|
12
|
+
|
|
13
|
+
### Documentation
|
|
14
|
+
|
|
15
|
+
- Release-kit|docs: Rewrite README as adoption guide
|
|
16
|
+
|
|
17
|
+
Replace minimal API docs with end-to-end adoption guide covering single-package and monorepo configurations, release scripts, GitHub Actions workflows that commit directly to `main`.
|
|
18
|
+
|
|
19
|
+
### Tooling
|
|
20
|
+
|
|
21
|
+
- #13 root|tooling: Migrate from changesets to release-kit (#16)
|
|
22
|
+
|
|
23
|
+
Replaces the `@changesets/cli`-based release workflow with the in-house `release-kit` package, adding `git-cliff` for changelog generation, a monorepo release config for all 13 packages, and a CLI wrapper script. Removes all changeset infrastructure and creates per-package baseline version tags.
|
|
24
|
+
|
|
25
|
+
- #10 root|tooling: Publish release-kit to GitHub Package Registry (#17)
|
|
26
|
+
|
|
27
|
+
Adds release infrastructure for the toolbelt monorepo: a GitHub Actions `workflow_dispatch` workflow that automates the full release cycle (prepare, commit, tag, push) on `main`, convenience `release:prepare` scripts in the release-kit package, and a `RELEASING.md` documenting the workflow-based release process.
|
|
28
|
+
|
|
29
|
+
- #10 root|tooling: Streamline release-kit adoption
|
|
30
|
+
|
|
31
|
+
## [tools-v3.0.0] - 2026-03-08
|
|
32
|
+
|
|
33
|
+
### Features
|
|
34
|
+
|
|
35
|
+
- #7 release|feat: Create release-kit package (#9)
|
|
36
|
+
|
|
37
|
+
Creates the `@williamthorsen/release-kit` package in the `toolbelt` monorepo, extracting version-bumping and changelog-generation logic from `skypilot-site` and `devtools/afg` into a reusable library. The package provides functions for parsing conventional commits, determining semver bump types, updating `package.json` versions across workspaces, and generating changelogs via `git-cliff`.
|
|
38
|
+
|
|
39
|
+
Add contextual error messages to all I/O operations: file reads/writes in bumpAllVersions, execSync calls in generateChangelogs and releasePrepare, and git commands in getCommitsSinceTarget.
|
|
40
|
+
|
|
41
|
+
Differentiate expected "no tag" errors from real failures in git describe. Replace string-based commit separator with null-byte to prevent collisions with commit message content. Log git log failures before returning empty results.
|
|
42
|
+
|
|
43
|
+
Add tests for uppercase/mixed-case type resolution, workspace+breaking combo parsing, breaking-on-first-commit early return, and empty workTypes. Strengthen alias tests to use toStrictEqual for full shape
|
|
44
|
+
verification.
|
|
45
|
+
|
|
46
|
+
Simplify determineBumpType by replacing the redundant isKeyOf guard on RELEASE_PRIORITY with a direct lookup, since bump is already typed as ReleaseType. Simplify parseCommitMessage by replacing mutable object construction with a conditional spread for the optional workspace field.
|
|
47
|
+
|
|
48
|
+
Add workspaceAliases field to ReleaseConfig and integrate into parseCommitMessage for resolving workspace shorthand names to canonical names. Replace execSync with execFileSync using argument arrays in generateChangelogs and getCommitsSinceTarget to prevent shell injection from paths with special characters. Remove redundant length-check guard in bumpAllVersions, keeping the undefined guard that also narrows the type.
|
|
49
|
+
|
|
50
|
+
### Refactoring
|
|
51
|
+
|
|
52
|
+
- Release-kit|refactor: Inline isKeyOf and remove toolbelt.objects dependency
|
|
53
|
+
|
|
54
|
+
<!-- generated by git-cliff -->
|
package/LICENSE
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
UNLICENSED SOFTWARE
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023-2025 William Thorsen
|
|
4
|
+
|
|
5
|
+
All rights reserved.
|
|
6
|
+
|
|
7
|
+
This software is provided 'as-is', without any express or implied warranty. No rights are granted to use, copy, modify, or distribute this software for any purpose. For full legal details, consult a legal expert. This notice may not be removed or altered from any distribution.
|
package/README.md
ADDED
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
# @williamthorsen/release-kit
|
|
2
|
+
|
|
3
|
+
Version-bumping and changelog-generation toolkit for release workflows.
|
|
4
|
+
|
|
5
|
+
This package extracts the shared release-preparation logic from the `skypilot-site` and `devtools/afg` repositories into a reusable library. It provides functions for parsing commits, determining version bumps, updating `package.json` files, and generating changelogs with `git-cliff`.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add -D @williamthorsen/release-kit git-cliff
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Since this package is published to GitHub Packages, configure your `.npmrc`:
|
|
14
|
+
|
|
15
|
+
```ini
|
|
16
|
+
@williamthorsen:registry=https://npm.pkg.github.com
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Quick start
|
|
20
|
+
|
|
21
|
+
1. Install `@williamthorsen/release-kit` and `git-cliff` as dev dependencies
|
|
22
|
+
2. Create `scripts/release-prepare.ts` and `scripts/release.config.ts` (see examples below)
|
|
23
|
+
3. Add `release:prepare` scripts to `package.json`
|
|
24
|
+
4. Copy `cliff.toml.template` to your repo root as `cliff.toml`
|
|
25
|
+
5. Add the GitHub Actions release workflow
|
|
26
|
+
|
|
27
|
+
## Configuration
|
|
28
|
+
|
|
29
|
+
### Single-package repo
|
|
30
|
+
|
|
31
|
+
Create `scripts/release.config.ts`:
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { DEFAULT_WORK_TYPES } from '@williamthorsen/release-kit';
|
|
35
|
+
import type { ReleaseConfig } from '@williamthorsen/release-kit';
|
|
36
|
+
|
|
37
|
+
export const config: ReleaseConfig = {
|
|
38
|
+
tagPrefix: 'v',
|
|
39
|
+
packageFiles: ['package.json'],
|
|
40
|
+
changelogPaths: ['.'],
|
|
41
|
+
workTypes: [...DEFAULT_WORK_TYPES],
|
|
42
|
+
formatCommand: 'pnpm run fmt',
|
|
43
|
+
};
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Monorepo
|
|
47
|
+
|
|
48
|
+
Create `scripts/release.config.ts`:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import { DEFAULT_WORK_TYPES } from '@williamthorsen/release-kit';
|
|
52
|
+
import type { MonorepoReleaseConfig } from '@williamthorsen/release-kit';
|
|
53
|
+
|
|
54
|
+
function component(dir: string) {
|
|
55
|
+
return {
|
|
56
|
+
tagPrefix: `${dir}-v`,
|
|
57
|
+
packageFiles: [`packages/${dir}/package.json`],
|
|
58
|
+
changelogPaths: [`packages/${dir}`],
|
|
59
|
+
paths: [`packages/${dir}/**`],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export const config: MonorepoReleaseConfig = {
|
|
64
|
+
components: [component('my-lib'), component('my-cli')],
|
|
65
|
+
workTypes: [...DEFAULT_WORK_TYPES],
|
|
66
|
+
formatCommand: 'pnpm run fmt',
|
|
67
|
+
};
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### ReleaseConfig reference
|
|
71
|
+
|
|
72
|
+
| Field | Type | Required | Description |
|
|
73
|
+
| ----------------- | ------------------ | -------- | ------------------------------------------------------------------ |
|
|
74
|
+
| `tagPrefix` | `string` | Yes | Git tag prefix for version tags (e.g., `'v'`) |
|
|
75
|
+
| `packageFiles` | `string[]` | Yes | Paths to `package.json` files to bump |
|
|
76
|
+
| `changelogPaths` | `string[]` | Yes | Directories in which to generate changelogs |
|
|
77
|
+
| `workTypes` | `WorkTypeConfig[]` | Yes | Ordered list of work type configurations for commit categorization |
|
|
78
|
+
| `formatCommand` | `string` | No | Shell command to run after changelog generation |
|
|
79
|
+
| `cliffConfigPath` | `string` | No | Path to `cliff.toml` (defaults to `'cliff.toml'`) |
|
|
80
|
+
|
|
81
|
+
### MonorepoReleaseConfig reference
|
|
82
|
+
|
|
83
|
+
| Field | Type | Required | Description |
|
|
84
|
+
| --------------- | ------------------- | -------- | ----------------------------------------------------- |
|
|
85
|
+
| `components` | `ComponentConfig[]` | Yes | Per-component config (tagPrefix, packageFiles, paths) |
|
|
86
|
+
| `workTypes` | `WorkTypeConfig[]` | Yes | Shared work type configurations |
|
|
87
|
+
| `formatCommand` | `string` | No | Shell command to run after changelog generation |
|
|
88
|
+
|
|
89
|
+
## Release script
|
|
90
|
+
|
|
91
|
+
Create `scripts/release-prepare.ts`:
|
|
92
|
+
|
|
93
|
+
### Single-package version
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
import { releasePrepare } from '@williamthorsen/release-kit';
|
|
97
|
+
import type { ReleaseType } from '@williamthorsen/release-kit';
|
|
98
|
+
import { config } from './release.config.ts';
|
|
99
|
+
|
|
100
|
+
const VALID_BUMP_TYPES: readonly string[] = ['major', 'minor', 'patch'];
|
|
101
|
+
|
|
102
|
+
function parseArgs(): { dryRun: boolean; bumpOverride?: ReleaseType } {
|
|
103
|
+
const args = process.argv.slice(2);
|
|
104
|
+
let dryRun = false;
|
|
105
|
+
let bumpOverride: ReleaseType | undefined;
|
|
106
|
+
|
|
107
|
+
for (const arg of args) {
|
|
108
|
+
if (arg === '--dry-run') dryRun = true;
|
|
109
|
+
else if (arg.startsWith('--bump=')) {
|
|
110
|
+
const value = arg.slice('--bump='.length);
|
|
111
|
+
if (!VALID_BUMP_TYPES.includes(value)) {
|
|
112
|
+
console.error(`Invalid bump type "${value}". Must be: ${VALID_BUMP_TYPES.join(', ')}`);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
bumpOverride = value as ReleaseType;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return { dryRun, bumpOverride };
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const { dryRun, bumpOverride } = parseArgs();
|
|
123
|
+
releasePrepare(config, { dryRun, ...(bumpOverride ? { bumpOverride } : {}) });
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Monorepo version
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
import { releasePrepareMono } from '@williamthorsen/release-kit';
|
|
130
|
+
import type { ReleaseType } from '@williamthorsen/release-kit';
|
|
131
|
+
import { config } from './release.config.ts';
|
|
132
|
+
|
|
133
|
+
const VALID_BUMP_TYPES: readonly string[] = ['major', 'minor', 'patch'];
|
|
134
|
+
|
|
135
|
+
function parseArgs(): { dryRun: boolean; bumpOverride?: ReleaseType; only?: string[] } {
|
|
136
|
+
const args = process.argv.slice(2);
|
|
137
|
+
let dryRun = false;
|
|
138
|
+
let bumpOverride: ReleaseType | undefined;
|
|
139
|
+
let only: string[] | undefined;
|
|
140
|
+
|
|
141
|
+
for (const arg of args) {
|
|
142
|
+
if (arg === '--dry-run') dryRun = true;
|
|
143
|
+
else if (arg.startsWith('--bump=')) {
|
|
144
|
+
const value = arg.slice('--bump='.length);
|
|
145
|
+
if (!VALID_BUMP_TYPES.includes(value)) {
|
|
146
|
+
console.error(`Invalid bump type "${value}". Must be: ${VALID_BUMP_TYPES.join(', ')}`);
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
bumpOverride = value as ReleaseType;
|
|
150
|
+
} else if (arg.startsWith('--only=')) {
|
|
151
|
+
only = arg.slice('--only='.length).split(',');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return { dryRun, bumpOverride, only };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const { dryRun, bumpOverride, only } = parseArgs();
|
|
159
|
+
|
|
160
|
+
let effectiveConfig = config;
|
|
161
|
+
if (only) {
|
|
162
|
+
const filtered = config.components.filter((c) => {
|
|
163
|
+
const name = c.tagPrefix.replace(/-v$/, '');
|
|
164
|
+
return only.includes(name);
|
|
165
|
+
});
|
|
166
|
+
effectiveConfig = { ...config, components: filtered };
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
releasePrepareMono(effectiveConfig, { dryRun, ...(bumpOverride ? { bumpOverride } : {}) });
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### package.json scripts
|
|
173
|
+
|
|
174
|
+
```json
|
|
175
|
+
{
|
|
176
|
+
"scripts": {
|
|
177
|
+
"release:prepare": "tsx scripts/release-prepare.ts",
|
|
178
|
+
"release:prepare:dry": "tsx scripts/release-prepare.ts --dry-run"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## GitHub Actions workflow
|
|
184
|
+
|
|
185
|
+
### Single-package repo
|
|
186
|
+
|
|
187
|
+
```yaml
|
|
188
|
+
# .github/workflows/release.yaml
|
|
189
|
+
name: Release
|
|
190
|
+
|
|
191
|
+
on:
|
|
192
|
+
workflow_dispatch:
|
|
193
|
+
inputs:
|
|
194
|
+
bump:
|
|
195
|
+
description: 'Override bump type (leave empty to auto-detect)'
|
|
196
|
+
required: false
|
|
197
|
+
type: choice
|
|
198
|
+
options:
|
|
199
|
+
- ''
|
|
200
|
+
- patch
|
|
201
|
+
- minor
|
|
202
|
+
- major
|
|
203
|
+
|
|
204
|
+
permissions:
|
|
205
|
+
contents: write
|
|
206
|
+
|
|
207
|
+
jobs:
|
|
208
|
+
release:
|
|
209
|
+
runs-on: ubuntu-latest
|
|
210
|
+
steps:
|
|
211
|
+
- uses: actions/checkout@v4
|
|
212
|
+
with:
|
|
213
|
+
fetch-depth: 0
|
|
214
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
215
|
+
|
|
216
|
+
- uses: pnpm/action-setup@v4
|
|
217
|
+
|
|
218
|
+
- uses: actions/setup-node@v4
|
|
219
|
+
with:
|
|
220
|
+
node-version: '24'
|
|
221
|
+
cache: 'pnpm'
|
|
222
|
+
|
|
223
|
+
- run: pnpm install
|
|
224
|
+
|
|
225
|
+
- name: Run release preparation
|
|
226
|
+
id: prepare
|
|
227
|
+
run: |
|
|
228
|
+
ARGS=""
|
|
229
|
+
if [ -n "${{ inputs.bump }}" ]; then
|
|
230
|
+
ARGS="--bump=${{ inputs.bump }}"
|
|
231
|
+
fi
|
|
232
|
+
pnpm run release:prepare $ARGS
|
|
233
|
+
VERSION=$(node -p "require('./package.json').version")
|
|
234
|
+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
235
|
+
|
|
236
|
+
- name: Check for changes
|
|
237
|
+
id: check
|
|
238
|
+
run: |
|
|
239
|
+
if git diff --quiet; then
|
|
240
|
+
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
241
|
+
echo "No release-worthy changes found."
|
|
242
|
+
else
|
|
243
|
+
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
244
|
+
fi
|
|
245
|
+
|
|
246
|
+
- name: Commit, tag, and push
|
|
247
|
+
if: steps.check.outputs.changed == 'true'
|
|
248
|
+
run: |
|
|
249
|
+
git config user.name "github-actions[bot]"
|
|
250
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
251
|
+
git add -A
|
|
252
|
+
git commit -m "release: v${{ steps.prepare.outputs.version }}"
|
|
253
|
+
git tag "v${{ steps.prepare.outputs.version }}"
|
|
254
|
+
git push origin main "v${{ steps.prepare.outputs.version }}"
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Monorepo
|
|
258
|
+
|
|
259
|
+
```yaml
|
|
260
|
+
# .github/workflows/release.yaml
|
|
261
|
+
name: Release
|
|
262
|
+
|
|
263
|
+
on:
|
|
264
|
+
workflow_dispatch:
|
|
265
|
+
inputs:
|
|
266
|
+
only:
|
|
267
|
+
description: 'Components to release (comma-separated, leave empty for all)'
|
|
268
|
+
required: false
|
|
269
|
+
type: string
|
|
270
|
+
bump:
|
|
271
|
+
description: 'Override bump type (leave empty to auto-detect)'
|
|
272
|
+
required: false
|
|
273
|
+
type: choice
|
|
274
|
+
options:
|
|
275
|
+
- ''
|
|
276
|
+
- patch
|
|
277
|
+
- minor
|
|
278
|
+
- major
|
|
279
|
+
|
|
280
|
+
permissions:
|
|
281
|
+
contents: write
|
|
282
|
+
|
|
283
|
+
jobs:
|
|
284
|
+
release:
|
|
285
|
+
runs-on: ubuntu-latest
|
|
286
|
+
steps:
|
|
287
|
+
- uses: actions/checkout@v4
|
|
288
|
+
with:
|
|
289
|
+
fetch-depth: 0
|
|
290
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
291
|
+
|
|
292
|
+
- uses: pnpm/action-setup@v4
|
|
293
|
+
|
|
294
|
+
- uses: actions/setup-node@v4
|
|
295
|
+
with:
|
|
296
|
+
node-version: '24'
|
|
297
|
+
cache: 'pnpm'
|
|
298
|
+
|
|
299
|
+
- run: pnpm install
|
|
300
|
+
|
|
301
|
+
- name: Run release preparation
|
|
302
|
+
run: |
|
|
303
|
+
ARGS=""
|
|
304
|
+
if [ -n "${{ inputs.only }}" ]; then
|
|
305
|
+
ARGS="$ARGS --only=${{ inputs.only }}"
|
|
306
|
+
fi
|
|
307
|
+
if [ -n "${{ inputs.bump }}" ]; then
|
|
308
|
+
ARGS="$ARGS --bump=${{ inputs.bump }}"
|
|
309
|
+
fi
|
|
310
|
+
pnpm run release:prepare $ARGS
|
|
311
|
+
|
|
312
|
+
- name: Check for changes
|
|
313
|
+
id: check
|
|
314
|
+
run: |
|
|
315
|
+
if git diff --quiet; then
|
|
316
|
+
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
317
|
+
echo "No release-worthy changes found."
|
|
318
|
+
else
|
|
319
|
+
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
320
|
+
fi
|
|
321
|
+
|
|
322
|
+
- name: Determine release tags
|
|
323
|
+
if: steps.check.outputs.changed == 'true'
|
|
324
|
+
id: tags
|
|
325
|
+
run: |
|
|
326
|
+
TAGS=""
|
|
327
|
+
for pkg in $(git diff --name-only -- 'packages/*/package.json'); do
|
|
328
|
+
DIR=$(echo "$pkg" | cut -d/ -f2)
|
|
329
|
+
VERSION=$(node -p "require('./$pkg').version")
|
|
330
|
+
TAGS="$TAGS ${DIR}-v${VERSION}"
|
|
331
|
+
done
|
|
332
|
+
echo "tags=$TAGS" >> "$GITHUB_OUTPUT"
|
|
333
|
+
echo "Releasing:$TAGS"
|
|
334
|
+
|
|
335
|
+
- name: Commit, tag, and push
|
|
336
|
+
if: steps.check.outputs.changed == 'true'
|
|
337
|
+
run: |
|
|
338
|
+
git config user.name "github-actions[bot]"
|
|
339
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
340
|
+
git add -A
|
|
341
|
+
git commit -m "release: ${{ steps.tags.outputs.tags }}"
|
|
342
|
+
for TAG in ${{ steps.tags.outputs.tags }}; do
|
|
343
|
+
git tag "$TAG"
|
|
344
|
+
done
|
|
345
|
+
git push origin main ${{ steps.tags.outputs.tags }}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## Triggering a release
|
|
349
|
+
|
|
350
|
+
```sh
|
|
351
|
+
# Single-package repo
|
|
352
|
+
gh workflow run release.yaml
|
|
353
|
+
gh workflow run release.yaml -f bump=minor
|
|
354
|
+
|
|
355
|
+
# Monorepo: all components
|
|
356
|
+
gh workflow run release.yaml
|
|
357
|
+
|
|
358
|
+
# Monorepo: specific component(s)
|
|
359
|
+
gh workflow run release.yaml -f only=my-lib
|
|
360
|
+
gh workflow run release.yaml -f only=my-lib,my-cli -f bump=minor
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## cliff.toml setup
|
|
364
|
+
|
|
365
|
+
The package includes a `cliff.toml.template` with a generic git-cliff configuration that:
|
|
366
|
+
|
|
367
|
+
- Strips issue-ticket prefixes matching `^[A-Z]+-\d+\s+` (e.g., `TOOL-123 `, `AFG-456 `)
|
|
368
|
+
- Handles both `type: description` and `workspace|type: description` commit formats
|
|
369
|
+
- Groups commits by work type into changelog sections
|
|
370
|
+
|
|
371
|
+
Copy it to your repo root:
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
cp node_modules/@williamthorsen/release-kit/cliff.toml.template cliff.toml
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
Then customize as needed for your project.
|
|
378
|
+
|
|
379
|
+
## External dependencies
|
|
380
|
+
|
|
381
|
+
This package shells out to two external tools:
|
|
382
|
+
|
|
383
|
+
- **`git`** — must be available on `PATH`. Used to find tags and retrieve commit history.
|
|
384
|
+
- **`git-cliff`** — must be available on `PATH`. Add `git-cliff` as a dev dependency to make it available in CI.
|
|
385
|
+
|
|
386
|
+
## Migration from changesets
|
|
387
|
+
|
|
388
|
+
1. Add `@williamthorsen/release-kit` and `git-cliff` as dev dependencies.
|
|
389
|
+
2. Remove `@changesets/cli` from dev dependencies.
|
|
390
|
+
3. Delete the `.changeset/` directory.
|
|
391
|
+
4. Create `scripts/release-prepare.ts` and `scripts/release.config.ts` (see examples above).
|
|
392
|
+
5. Replace `changeset:*` scripts in `package.json` with `release:prepare` scripts.
|
|
393
|
+
6. Copy `cliff.toml.template` to your repo root as `cliff.toml`.
|
|
394
|
+
7. Add the GitHub Actions release workflow.
|
|
395
|
+
8. Create an initial version tag for each package (e.g., `git tag v1.0.0` or `git tag my-lib-v1.0.0`).
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# git-cliff configuration
|
|
2
|
+
# See https://git-cliff.org/docs/configuration
|
|
3
|
+
|
|
4
|
+
[changelog]
|
|
5
|
+
# changelog header
|
|
6
|
+
header = """
|
|
7
|
+
# Changelog\n
|
|
8
|
+
All notable changes to this project will be documented in this file.\n
|
|
9
|
+
"""
|
|
10
|
+
# template for the changelog body
|
|
11
|
+
body = """
|
|
12
|
+
{% if version %}\
|
|
13
|
+
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
|
|
14
|
+
{% else %}\
|
|
15
|
+
## [unreleased]
|
|
16
|
+
{% endif %}\
|
|
17
|
+
{% for group, commits in commits | group_by(attribute="group") %}
|
|
18
|
+
### {{ group | striptags | trim | upper_first }}
|
|
19
|
+
{% for commit in commits %}
|
|
20
|
+
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
|
|
21
|
+
{% if commit.breaking %}[**breaking**] {% endif %}\
|
|
22
|
+
{{ commit.message | upper_first }}\
|
|
23
|
+
{% endfor %}
|
|
24
|
+
{% endfor %}\n
|
|
25
|
+
"""
|
|
26
|
+
# template for the changelog footer
|
|
27
|
+
footer = """
|
|
28
|
+
<!-- generated by git-cliff -->
|
|
29
|
+
"""
|
|
30
|
+
# remove the leading and trailing whitespace from the templates
|
|
31
|
+
trim = true
|
|
32
|
+
|
|
33
|
+
[git]
|
|
34
|
+
# parse the commits based on https://www.conventionalcommits.org
|
|
35
|
+
conventional_commits = false
|
|
36
|
+
# filter out the commits that are not conventional
|
|
37
|
+
filter_unconventional = false
|
|
38
|
+
# process each line of a commit as an individual commit
|
|
39
|
+
split_commits = false
|
|
40
|
+
# regex for preprocessing the commit messages
|
|
41
|
+
commit_preprocessors = [
|
|
42
|
+
# Strip issue-ticket prefixes like "TOOL-123 " or "AFG-456 "
|
|
43
|
+
{ pattern = '^[A-Z]+-\d+\s+', replace = "" },
|
|
44
|
+
]
|
|
45
|
+
# regex for parsing and grouping commits
|
|
46
|
+
# Supports both "type: description" and "workspace|type: description" formats
|
|
47
|
+
commit_parsers = [
|
|
48
|
+
{ message = "^.*\\|?fix(!)?:", group = "Bug fixes" },
|
|
49
|
+
{ message = "^.*\\|?feat(!)?:", group = "Features" },
|
|
50
|
+
{ message = "^.*\\|?feature(!)?:", group = "Features" },
|
|
51
|
+
{ message = "^.*\\|?internal(!)?:", group = "Internal" },
|
|
52
|
+
{ message = "^.*\\|?refactor(!)?:", group = "Refactoring" },
|
|
53
|
+
{ message = "^.*\\|?tests?(!)?:", group = "Tests" },
|
|
54
|
+
{ message = "^.*\\|?tooling(!)?:", group = "Tooling" },
|
|
55
|
+
{ message = "^.*\\|?ci(!)?:", group = "CI" },
|
|
56
|
+
{ message = "^.*\\|?deps?(!)?:", group = "Dependencies" },
|
|
57
|
+
{ message = "^.*\\|?docs?(!)?:", group = "Documentation" },
|
|
58
|
+
{ message = "^.*\\|?fmt(!)?:", group = "Formatting" },
|
|
59
|
+
]
|
|
60
|
+
# protect breaking changes from being skipped due to matching a skipping commit_parser
|
|
61
|
+
protect_breaking_commits = false
|
|
62
|
+
# filter out the commits that are not matched by commit parsers
|
|
63
|
+
filter_commits = true
|
|
64
|
+
# regex for matching git tags
|
|
65
|
+
tag_pattern = "v[0-9].*"
|
|
66
|
+
# regex for skipping tags
|
|
67
|
+
skip_tags = ""
|
|
68
|
+
# regex for ignoring tags
|
|
69
|
+
ignore_tags = ""
|
|
70
|
+
# sort the tags topologically
|
|
71
|
+
topo_order = false
|
|
72
|
+
# sort the commits inside sections by oldest/newest order
|
|
73
|
+
sort_commits = "oldest"
|
package/dist/esm/.cache
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
8a18e5e0175c0a255102ec4b295d04d399b7b59bad01debc291efd33e7abf5c2
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { bumpVersion } from "./bumpVersion.js";
|
|
3
|
+
function isPackageJson(value) {
|
|
4
|
+
return typeof value === "object" && value !== null && "version" in value && typeof value.version === "string";
|
|
5
|
+
}
|
|
6
|
+
function bumpAllVersions(packageFiles, releaseType, dryRun) {
|
|
7
|
+
const firstFile = packageFiles[0];
|
|
8
|
+
if (firstFile === void 0) {
|
|
9
|
+
throw new Error("No package files specified");
|
|
10
|
+
}
|
|
11
|
+
const firstPkg = readPackageJson(firstFile);
|
|
12
|
+
const currentVersion = firstPkg.version;
|
|
13
|
+
const newVersion = bumpVersion(currentVersion, releaseType);
|
|
14
|
+
console.info(`Bumping version: ${currentVersion} -> ${newVersion} (${releaseType})`);
|
|
15
|
+
for (const filePath of packageFiles) {
|
|
16
|
+
if (dryRun) {
|
|
17
|
+
console.info(` [dry-run] Would bump ${filePath}`);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const pkg = readPackageJson(filePath);
|
|
21
|
+
pkg.version = newVersion;
|
|
22
|
+
try {
|
|
23
|
+
writeFileSync(filePath, JSON.stringify(pkg, null, 2) + "\n", "utf8");
|
|
24
|
+
} catch (error) {
|
|
25
|
+
throw new Error(`Failed to write ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
26
|
+
}
|
|
27
|
+
console.info(` Bumped ${filePath}`);
|
|
28
|
+
}
|
|
29
|
+
return newVersion;
|
|
30
|
+
}
|
|
31
|
+
function readPackageJson(filePath) {
|
|
32
|
+
let content;
|
|
33
|
+
try {
|
|
34
|
+
content = readFileSync(filePath, "utf8");
|
|
35
|
+
} catch (error) {
|
|
36
|
+
throw new Error(`Failed to read ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
37
|
+
}
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
parsed = JSON.parse(content);
|
|
41
|
+
} catch (error) {
|
|
42
|
+
throw new Error(`Failed to parse JSON in ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
43
|
+
}
|
|
44
|
+
if (!isPackageJson(parsed)) {
|
|
45
|
+
throw new Error(`No valid 'version' field found in ${filePath}`);
|
|
46
|
+
}
|
|
47
|
+
return parsed;
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
bumpAllVersions
|
|
51
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
function bumpVersion(version, releaseType) {
|
|
2
|
+
const match = version.match(/^(\d+)\.(\d+)\.(\d+)$/);
|
|
3
|
+
if (!match) {
|
|
4
|
+
throw new Error(`Invalid semver version: '${version}'`);
|
|
5
|
+
}
|
|
6
|
+
const major = match[1];
|
|
7
|
+
const minor = match[2];
|
|
8
|
+
const patch = match[3];
|
|
9
|
+
if (major === void 0 || minor === void 0 || patch === void 0) {
|
|
10
|
+
throw new Error(`Invalid semver version: '${version}'`);
|
|
11
|
+
}
|
|
12
|
+
const majorNum = Number.parseInt(major, 10);
|
|
13
|
+
const minorNum = Number.parseInt(minor, 10);
|
|
14
|
+
const patchNum = Number.parseInt(patch, 10);
|
|
15
|
+
switch (releaseType) {
|
|
16
|
+
case "major":
|
|
17
|
+
return `${majorNum + 1}.0.0`;
|
|
18
|
+
case "minor":
|
|
19
|
+
return `${majorNum}.${minorNum + 1}.0`;
|
|
20
|
+
case "patch":
|
|
21
|
+
return `${majorNum}.${minorNum}.${patchNum + 1}`;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
bumpVersion
|
|
26
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const DEFAULT_WORK_TYPES = [
|
|
2
|
+
{ type: "fix", header: "Bug fixes", bump: "patch", aliases: ["bugfix"] },
|
|
3
|
+
{ type: "feat", header: "Features", bump: "minor", aliases: ["feature"] },
|
|
4
|
+
{ type: "internal", header: "Internal", bump: "patch" },
|
|
5
|
+
{ type: "refactor", header: "Refactoring", bump: "patch" },
|
|
6
|
+
{ type: "tests", header: "Tests", bump: "patch", aliases: ["test"] },
|
|
7
|
+
{ type: "tooling", header: "Tooling", bump: "patch" },
|
|
8
|
+
{ type: "ci", header: "CI", bump: "patch" },
|
|
9
|
+
{ type: "deps", header: "Dependencies", bump: "patch", aliases: ["dep"] },
|
|
10
|
+
{ type: "docs", header: "Documentation", bump: "patch", aliases: ["doc"] },
|
|
11
|
+
{ type: "fmt", header: "Formatting", bump: "patch" }
|
|
12
|
+
];
|
|
13
|
+
export {
|
|
14
|
+
DEFAULT_WORK_TYPES
|
|
15
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const RELEASE_PRIORITY = {
|
|
2
|
+
major: 3,
|
|
3
|
+
minor: 2,
|
|
4
|
+
patch: 1
|
|
5
|
+
};
|
|
6
|
+
function determineBumpType(commits, workTypes) {
|
|
7
|
+
const typeToBump = {};
|
|
8
|
+
for (const config of workTypes) {
|
|
9
|
+
typeToBump[config.type] = config.bump;
|
|
10
|
+
}
|
|
11
|
+
let highestPriority = 0;
|
|
12
|
+
let result;
|
|
13
|
+
for (const commit of commits) {
|
|
14
|
+
if (commit.breaking) {
|
|
15
|
+
return "major";
|
|
16
|
+
}
|
|
17
|
+
const commitType = commit.type;
|
|
18
|
+
if (!isKeyOf(commitType, typeToBump)) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const bump = typeToBump[commitType];
|
|
22
|
+
if (bump === void 0) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const priority = RELEASE_PRIORITY[bump];
|
|
26
|
+
if (priority > highestPriority) {
|
|
27
|
+
highestPriority = priority;
|
|
28
|
+
result = bump;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
function isKeyOf(key, obj) {
|
|
34
|
+
return Object.hasOwn(obj, key);
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
determineBumpType
|
|
38
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ReleaseConfig } from './types.ts';
|
|
2
|
+
export interface GenerateChangelogOptions {
|
|
3
|
+
includePaths?: string[];
|
|
4
|
+
}
|
|
5
|
+
export declare function generateChangelog(config: Pick<ReleaseConfig, 'cliffConfigPath'>, changelogPath: string, tag: string, dryRun: boolean, options?: GenerateChangelogOptions): void;
|
|
6
|
+
export declare function generateChangelogs(config: ReleaseConfig, tag: string, dryRun: boolean): void;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
function generateChangelog(config, changelogPath, tag, dryRun, options) {
|
|
3
|
+
const cliffConfigPath = config.cliffConfigPath ?? "cliff.toml";
|
|
4
|
+
const outputFile = `${changelogPath}/CHANGELOG.md`;
|
|
5
|
+
const args = ["--config", cliffConfigPath, "--output", outputFile, "--tag", tag];
|
|
6
|
+
for (const includePath of options?.includePaths ?? []) {
|
|
7
|
+
args.push("--include-path", includePath);
|
|
8
|
+
}
|
|
9
|
+
if (dryRun) {
|
|
10
|
+
console.info(` [dry-run] Would run: git-cliff ${args.join(" ")}`);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
console.info(` Generating changelog: ${outputFile}`);
|
|
14
|
+
try {
|
|
15
|
+
execFileSync("git-cliff", args, { stdio: "inherit" });
|
|
16
|
+
} catch (error) {
|
|
17
|
+
throw new Error(
|
|
18
|
+
`Failed to generate changelog for ${outputFile}: ${error instanceof Error ? error.message : String(error)}`
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function generateChangelogs(config, tag, dryRun) {
|
|
23
|
+
for (const changelogPath of config.changelogPaths) {
|
|
24
|
+
generateChangelog(config, changelogPath, tag, dryRun);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
generateChangelog,
|
|
29
|
+
generateChangelogs
|
|
30
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
const FIELD_SEPARATOR = "";
|
|
3
|
+
function isNoTagError(err) {
|
|
4
|
+
return typeof err === "object" && err !== null && "status" in err && err.status === 128;
|
|
5
|
+
}
|
|
6
|
+
function errorMessage(err) {
|
|
7
|
+
return err instanceof Error ? err.message : String(err);
|
|
8
|
+
}
|
|
9
|
+
function findLatestTag(tagPrefix) {
|
|
10
|
+
try {
|
|
11
|
+
const tagResult = execFileSync("git", ["describe", "--tags", "--abbrev=0", `--match=${tagPrefix}*`], {
|
|
12
|
+
encoding: "utf8",
|
|
13
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
14
|
+
}).trim();
|
|
15
|
+
return tagResult || void 0;
|
|
16
|
+
} catch (error) {
|
|
17
|
+
if (isNoTagError(error)) {
|
|
18
|
+
return void 0;
|
|
19
|
+
}
|
|
20
|
+
throw new Error(`Failed to run 'git describe': ${errorMessage(error)}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function parseLogOutput(logOutput) {
|
|
24
|
+
const commits = [];
|
|
25
|
+
for (const line of logOutput.split("\n")) {
|
|
26
|
+
const trimmedLine = line.trim();
|
|
27
|
+
if (trimmedLine === "") {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const [message, hash] = trimmedLine.split(FIELD_SEPARATOR);
|
|
31
|
+
if (message !== void 0 && hash !== void 0) {
|
|
32
|
+
commits.push({ message, hash });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return commits;
|
|
36
|
+
}
|
|
37
|
+
function getCommitsSinceTarget(tagPrefix, paths) {
|
|
38
|
+
const tag = findLatestTag(tagPrefix);
|
|
39
|
+
const range = tag === void 0 ? "HEAD" : `${tag}..HEAD`;
|
|
40
|
+
const format = `%s${FIELD_SEPARATOR}%H`;
|
|
41
|
+
const args = ["log", range, `--pretty=format:${format}`];
|
|
42
|
+
if (paths !== void 0 && paths.length > 0) {
|
|
43
|
+
args.push("--", ...paths);
|
|
44
|
+
}
|
|
45
|
+
let logOutput;
|
|
46
|
+
try {
|
|
47
|
+
logOutput = execFileSync("git", args, {
|
|
48
|
+
encoding: "utf8",
|
|
49
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
50
|
+
}).trim();
|
|
51
|
+
} catch (error) {
|
|
52
|
+
throw new Error(`Failed to run 'git log' for range '${range}': ${errorMessage(error)}`);
|
|
53
|
+
}
|
|
54
|
+
if (logOutput === "") {
|
|
55
|
+
return { tag, commits: [] };
|
|
56
|
+
}
|
|
57
|
+
return { tag, commits: parseLogOutput(logOutput) };
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
getCommitsSinceTarget
|
|
61
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type { GenerateChangelogOptions } from './generateChangelogs.ts';
|
|
2
|
+
export type { ReleasePrepareOptions } from './releasePrepare.ts';
|
|
3
|
+
export type { Commit, ComponentConfig, MonorepoReleaseConfig, ParsedCommit, ReleaseConfig, ReleaseType, WorkTypeConfig, } from './types.ts';
|
|
4
|
+
export { DEFAULT_WORK_TYPES } from './defaults.ts';
|
|
5
|
+
export { bumpAllVersions } from './bumpAllVersions.ts';
|
|
6
|
+
export { bumpVersion } from './bumpVersion.ts';
|
|
7
|
+
export { determineBumpType } from './determineBumpType.ts';
|
|
8
|
+
export { generateChangelog, generateChangelogs } from './generateChangelogs.ts';
|
|
9
|
+
export { getCommitsSinceTarget } from './getCommitsSinceTarget.ts';
|
|
10
|
+
export { parseCommitMessage } from './parseCommitMessage.ts';
|
|
11
|
+
export { releasePrepare } from './releasePrepare.ts';
|
|
12
|
+
export { releasePrepareMono } from './releasePrepareMono.ts';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DEFAULT_WORK_TYPES } from "./defaults.js";
|
|
2
|
+
import { bumpAllVersions } from "./bumpAllVersions.js";
|
|
3
|
+
import { bumpVersion } from "./bumpVersion.js";
|
|
4
|
+
import { determineBumpType } from "./determineBumpType.js";
|
|
5
|
+
import { generateChangelog, generateChangelogs } from "./generateChangelogs.js";
|
|
6
|
+
import { getCommitsSinceTarget } from "./getCommitsSinceTarget.js";
|
|
7
|
+
import { parseCommitMessage } from "./parseCommitMessage.js";
|
|
8
|
+
import { releasePrepare } from "./releasePrepare.js";
|
|
9
|
+
import { releasePrepareMono } from "./releasePrepareMono.js";
|
|
10
|
+
export {
|
|
11
|
+
DEFAULT_WORK_TYPES,
|
|
12
|
+
bumpAllVersions,
|
|
13
|
+
bumpVersion,
|
|
14
|
+
determineBumpType,
|
|
15
|
+
generateChangelog,
|
|
16
|
+
generateChangelogs,
|
|
17
|
+
getCommitsSinceTarget,
|
|
18
|
+
parseCommitMessage,
|
|
19
|
+
releasePrepare,
|
|
20
|
+
releasePrepareMono
|
|
21
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
function parseCommitMessage(message, hash, workTypes, workspaceAliases) {
|
|
2
|
+
const match = message.match(/^(?:([^|]+)\|)?(\w+)(!)?:\s*(.*)$/);
|
|
3
|
+
if (!match) {
|
|
4
|
+
return void 0;
|
|
5
|
+
}
|
|
6
|
+
const workspace = match[1];
|
|
7
|
+
const rawType = match[2];
|
|
8
|
+
const breakingMarker = match[3];
|
|
9
|
+
const description = match[4];
|
|
10
|
+
if (rawType === void 0 || description === void 0) {
|
|
11
|
+
return void 0;
|
|
12
|
+
}
|
|
13
|
+
const resolvedType = resolveType(rawType, workTypes);
|
|
14
|
+
if (resolvedType === void 0) {
|
|
15
|
+
return void 0;
|
|
16
|
+
}
|
|
17
|
+
const breaking = breakingMarker === "!" || message.includes("BREAKING CHANGE:");
|
|
18
|
+
const resolvedWorkspace = workspace !== void 0 && workspaceAliases !== void 0 ? workspaceAliases[workspace] ?? workspace : workspace;
|
|
19
|
+
return {
|
|
20
|
+
message,
|
|
21
|
+
hash,
|
|
22
|
+
type: resolvedType,
|
|
23
|
+
description,
|
|
24
|
+
breaking,
|
|
25
|
+
...resolvedWorkspace !== void 0 && { workspace: resolvedWorkspace }
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function resolveType(rawType, workTypes) {
|
|
29
|
+
const lowered = rawType.toLowerCase();
|
|
30
|
+
for (const config of workTypes) {
|
|
31
|
+
if (config.type === lowered) {
|
|
32
|
+
return config.type;
|
|
33
|
+
}
|
|
34
|
+
if (config.aliases !== void 0) {
|
|
35
|
+
for (const alias of config.aliases) {
|
|
36
|
+
if (alias === lowered) {
|
|
37
|
+
return config.type;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return void 0;
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
parseCommitMessage
|
|
46
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { bumpAllVersions } from "./bumpAllVersions.js";
|
|
3
|
+
import { determineBumpType } from "./determineBumpType.js";
|
|
4
|
+
import { generateChangelogs } from "./generateChangelogs.js";
|
|
5
|
+
import { getCommitsSinceTarget } from "./getCommitsSinceTarget.js";
|
|
6
|
+
import { parseCommitMessage } from "./parseCommitMessage.js";
|
|
7
|
+
function releasePrepare(config, options) {
|
|
8
|
+
const { dryRun, bumpOverride } = options;
|
|
9
|
+
console.info("Finding commits since last release...");
|
|
10
|
+
const { tag, commits } = getCommitsSinceTarget(config.tagPrefix);
|
|
11
|
+
console.info(` Found ${commits.length} commits since ${tag ?? "the beginning"}`);
|
|
12
|
+
let releaseType;
|
|
13
|
+
if (bumpOverride === void 0) {
|
|
14
|
+
const parsedCommits = commits.map((c) => parseCommitMessage(c.message, c.hash, config.workTypes, config.workspaceAliases)).filter((c) => c !== void 0);
|
|
15
|
+
console.info(` Parsed ${parsedCommits.length} typed commits`);
|
|
16
|
+
releaseType = determineBumpType(parsedCommits, config.workTypes);
|
|
17
|
+
} else {
|
|
18
|
+
releaseType = bumpOverride;
|
|
19
|
+
console.info(` Using bump override: ${releaseType}`);
|
|
20
|
+
}
|
|
21
|
+
if (releaseType === void 0) {
|
|
22
|
+
console.info("No release-worthy changes found. Skipping.");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
console.info(`Bumping versions (${releaseType})...`);
|
|
26
|
+
const newVersion = bumpAllVersions(config.packageFiles, releaseType, dryRun);
|
|
27
|
+
const newTag = `${config.tagPrefix}${newVersion}`;
|
|
28
|
+
console.info("Generating changelogs...");
|
|
29
|
+
generateChangelogs(config, newTag, dryRun);
|
|
30
|
+
if (config.formatCommand !== void 0) {
|
|
31
|
+
if (dryRun) {
|
|
32
|
+
console.info(` [dry-run] Would run format command: ${config.formatCommand}`);
|
|
33
|
+
} else {
|
|
34
|
+
console.info(` Running format command: ${config.formatCommand}`);
|
|
35
|
+
try {
|
|
36
|
+
execSync(config.formatCommand, { stdio: "inherit" });
|
|
37
|
+
} catch (error) {
|
|
38
|
+
throw new Error(
|
|
39
|
+
`Format command failed ('${config.formatCommand}'): ${error instanceof Error ? error.message : String(error)}`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
console.info(`Release preparation complete: ${newTag}`);
|
|
45
|
+
}
|
|
46
|
+
export {
|
|
47
|
+
releasePrepare
|
|
48
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { bumpAllVersions } from "./bumpAllVersions.js";
|
|
3
|
+
import { determineBumpType } from "./determineBumpType.js";
|
|
4
|
+
import { generateChangelog } from "./generateChangelogs.js";
|
|
5
|
+
import { getCommitsSinceTarget } from "./getCommitsSinceTarget.js";
|
|
6
|
+
import { parseCommitMessage } from "./parseCommitMessage.js";
|
|
7
|
+
function releasePrepareMono(config, options) {
|
|
8
|
+
const { dryRun, bumpOverride } = options;
|
|
9
|
+
let anyComponentProcessed = false;
|
|
10
|
+
for (const component of config.components) {
|
|
11
|
+
console.info(`
|
|
12
|
+
Processing component: ${component.tagPrefix}`);
|
|
13
|
+
console.info(" Finding commits since last release...");
|
|
14
|
+
const { tag, commits } = getCommitsSinceTarget(component.tagPrefix, component.paths);
|
|
15
|
+
console.info(` Found ${commits.length} commits since ${tag ?? "the beginning"}`);
|
|
16
|
+
if (commits.length === 0) {
|
|
17
|
+
console.info(` No changes for ${component.tagPrefix}. Skipping.`);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
let releaseType;
|
|
21
|
+
if (bumpOverride === void 0) {
|
|
22
|
+
const parsedCommits = commits.map((c) => parseCommitMessage(c.message, c.hash, config.workTypes, config.workspaceAliases)).filter((c) => c !== void 0);
|
|
23
|
+
console.info(` Parsed ${parsedCommits.length} typed commits`);
|
|
24
|
+
releaseType = determineBumpType(parsedCommits, config.workTypes);
|
|
25
|
+
} else {
|
|
26
|
+
releaseType = bumpOverride;
|
|
27
|
+
console.info(` Using bump override: ${releaseType}`);
|
|
28
|
+
}
|
|
29
|
+
if (releaseType === void 0) {
|
|
30
|
+
console.info(` No release-worthy changes for ${component.tagPrefix}. Skipping.`);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
console.info(` Bumping versions (${releaseType})...`);
|
|
34
|
+
const newVersion = bumpAllVersions(component.packageFiles, releaseType, dryRun);
|
|
35
|
+
const newTag = `${component.tagPrefix}${newVersion}`;
|
|
36
|
+
anyComponentProcessed = true;
|
|
37
|
+
console.info(" Generating changelogs...");
|
|
38
|
+
for (const changelogPath of component.changelogPaths) {
|
|
39
|
+
generateChangelog(config, changelogPath, newTag, dryRun, { includePaths: component.paths });
|
|
40
|
+
}
|
|
41
|
+
console.info(` Component release prepared: ${newTag}`);
|
|
42
|
+
}
|
|
43
|
+
if (anyComponentProcessed && config.formatCommand !== void 0) {
|
|
44
|
+
if (dryRun) {
|
|
45
|
+
console.info(`
|
|
46
|
+
[dry-run] Would run format command: ${config.formatCommand}`);
|
|
47
|
+
} else {
|
|
48
|
+
console.info(`
|
|
49
|
+
Running format command: ${config.formatCommand}`);
|
|
50
|
+
try {
|
|
51
|
+
execSync(config.formatCommand, { stdio: "inherit" });
|
|
52
|
+
} catch (error) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
`Format command failed ('${config.formatCommand}'): ${error instanceof Error ? error.message : String(error)}`
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const summary = anyComponentProcessed ? "Monorepo release preparation complete." : "No components had release-worthy changes.";
|
|
60
|
+
console.info(`
|
|
61
|
+
${summary}`);
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
releasePrepareMono
|
|
65
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export type ReleaseType = 'major' | 'minor' | 'patch';
|
|
2
|
+
export interface WorkTypeConfig {
|
|
3
|
+
type: string;
|
|
4
|
+
header: string;
|
|
5
|
+
bump: ReleaseType;
|
|
6
|
+
aliases?: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface Commit {
|
|
9
|
+
message: string;
|
|
10
|
+
hash: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ParsedCommit {
|
|
13
|
+
message: string;
|
|
14
|
+
hash: string;
|
|
15
|
+
type: string;
|
|
16
|
+
description: string;
|
|
17
|
+
workspace?: string;
|
|
18
|
+
breaking: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface ComponentConfig {
|
|
21
|
+
tagPrefix: string;
|
|
22
|
+
packageFiles: string[];
|
|
23
|
+
changelogPaths: string[];
|
|
24
|
+
paths: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface MonorepoReleaseConfig {
|
|
27
|
+
components: ComponentConfig[];
|
|
28
|
+
workTypes: WorkTypeConfig[];
|
|
29
|
+
formatCommand?: string;
|
|
30
|
+
cliffConfigPath?: string;
|
|
31
|
+
workspaceAliases?: Record<string, string>;
|
|
32
|
+
}
|
|
33
|
+
export interface ReleaseConfig {
|
|
34
|
+
tagPrefix: string;
|
|
35
|
+
packageFiles: string[];
|
|
36
|
+
changelogPaths: string[];
|
|
37
|
+
workTypes: WorkTypeConfig[];
|
|
38
|
+
formatCommand?: string;
|
|
39
|
+
cliffConfigPath?: string;
|
|
40
|
+
workspaceAliases?: Record<string, string>;
|
|
41
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/types.ts","../src/bumpversion.ts","../src/bumpallversions.ts","../src/defaults.ts","../src/determinebumptype.ts","../src/generatechangelogs.ts","../src/getcommitssincetarget.ts","../src/parsecommitmessage.ts","../src/releaseprepare.ts","../src/releasepreparemono.ts","../src/index.ts","../../../node_modules/.pnpm/@types+js-yaml@4.0.9/node_modules/@types/js-yaml/index.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/utility.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@24.12.0/node_modules/@types/node/index.d.ts"],"fileIdsList":[[95,149,166,167],[95,146,147,149,166,167],[95,148,149,166,167],[149,166,167],[95,149,154,166,167,184],[95,149,150,155,160,166,167,169,181,192],[95,149,150,151,160,166,167,169],[95,149,152,166,167,193],[95,149,153,154,161,166,167,170],[95,149,154,166,167,181,189],[95,149,155,157,160,166,167,169],[95,148,149,156,166,167],[95,149,157,158,166,167],[95,149,159,160,166,167],[95,148,149,160,166,167],[95,149,160,161,162,166,167,181,192],[95,149,160,161,162,166,167,176,181,184],[95,141,149,157,160,163,166,167,169,181,192],[95,149,160,161,163,164,166,167,169,181,189,192],[95,149,163,165,166,167,181,189,192],[93,94,95,96,97,98,99,100,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198],[95,149,160,166,167],[95,149,166,167,168,192],[95,149,157,160,166,167,169,181],[95,149,166,167,170],[95,149,166,167,171],[95,148,149,166,167,172],[95,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198],[95,149,166,167,174],[95,149,166,167,175],[95,149,160,166,167,176,177],[95,149,166,167,176,178,193,195],[95,149,161,166,167],[95,149,160,166,167,181,182,184],[95,149,166,167,183,184],[95,149,166,167,181,182],[95,149,166,167,184],[95,149,166,167,185],[95,146,149,166,167,181,186,192],[95,149,160,166,167,187,188],[95,149,166,167,187,188],[95,149,154,166,167,169,181,189],[95,149,166,167,190],[95,149,166,167,169,191],[95,149,163,166,167,175,192],[95,149,154,166,167,193],[95,149,166,167,181,194],[95,149,166,167,168,195],[95,149,166,167,196],[95,149,154,166,167],[95,141,149,166,167],[95,149,166,167,197],[95,141,149,160,162,166,167,172,181,184,192,194,195,197],[95,149,166,167,181,198],[95,107,110,113,114,149,166,167,192],[95,110,149,166,167,181,192],[95,110,114,149,166,167,192],[95,149,166,167,181],[95,104,149,166,167],[95,108,149,166,167],[95,106,107,110,149,166,167,192],[95,149,166,167,169,189],[95,149,166,167,199],[95,104,149,166,167,199],[95,106,110,149,166,167,169,192],[95,101,102,103,105,109,149,160,166,167,181,192],[95,110,118,126,149,166,167],[95,102,108,149,166,167],[95,110,135,136,149,166,167],[95,102,105,110,149,166,167,184,192,199],[95,110,149,166,167],[95,106,110,149,166,167,192],[95,101,149,166,167],[95,104,105,106,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,149,166,167],[95,110,128,131,149,157,166,167],[95,110,118,119,120,149,166,167],[95,108,110,119,121,149,166,167],[95,109,149,166,167],[95,102,104,110,149,166,167],[95,110,114,119,121,149,166,167],[95,114,149,166,167],[95,108,110,113,149,166,167,192],[95,102,106,110,118,149,166,167],[95,110,128,149,166,167],[95,121,149,166,167],[95,104,110,135,149,166,167,184,197,199],[81,82,95,149,161,166,167],[81,95,149,166,167],[81,95,149,150,166,167],[81,82,83,84,85,86,87,88,89,90,95,149,166,167],[81,83,85,86,87,88,95,149,150,166,167],[81,83,85,86,87,88,89,95,149,150,166,167]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"41e3598a62c74b23976b62c70a604ac16717634f364e0709959592d1a658541a","signature":"71003211beb0a0425cd45c9902370917d09a788b577660532825b3a305d7b6a4","impliedFormat":99},{"version":"8fa9d8a01b5f23351e74bb5ed27056f2dc61f3be784e2b40ac5c6769d5b5c857","signature":"4addc77f22adb312bacc79b2d60daf7f22d038021c9eacff9acb4c12d26b50dd","impliedFormat":99},{"version":"5cb7020711b38f8e28df92ac824f8f6ebcb877948c187b00f5f2b3d67af5c220","signature":"36eb11bac75359679c935842c23b13247a4137cae851f623ae4a04424df8e336","impliedFormat":99},{"version":"60a64a5edcc3e1d19bed76a6cdf90acb02b4c6e5390b3a5aa702250d7fdd2a91","signature":"7199d7b10d107d8545fd8082056943713d29fe91270e03cc7eefa650af399895","impliedFormat":99},{"version":"b6a8d91cf62e400d8aea2a3a9e41dbaba8bbd874473f25601b4a6931423ef7f0","signature":"a84162b33353010221019fe7cfb01ad603f0be288693a5f543f76fce0693f049","impliedFormat":99},{"version":"c5bfb6f5c5cb1a45c480e6aa993eb632b619eeb16d93e2f0c7b83869a4a1ff33","signature":"b2c36e251fe4ccf17ee130f0f287416961138db58cf27efd4fb63d347b0fce6c","impliedFormat":99},{"version":"9b100f6d522fafc7853fb4f6a20094f302f57d563c9841c74971b245f909f81d","signature":"a33a4b1c537925114d141aa19ec342fc3c942f1725a7467d6741350cddd356f1","impliedFormat":99},{"version":"18ea07de1202564ac49ff845e582f3c6a7f31f654b78c9f3f0c60f96217d11a8","signature":"648dd82248554fca9b6a7f1f9d5789dea8c7d83a6362d6a6295e195242b2e679","impliedFormat":99},{"version":"e970d23e4c7637ff5af1bf050cc50a02c1132df9ab367f989eb395a70aa3af8e","signature":"136caf05c4682e6d667ba89ed4059960bc79a6f686bda722047d1754dbe6a77a","impliedFormat":99},{"version":"fd0248e439a513eb92c1fcba0f5c0fc953104468a7c782106a71f6b94f897005","signature":"2b7a06d3327ce7c76258d0dd3d90ee6f27a2085888e0b8f2c28ff53f78dfa807","impliedFormat":99},{"version":"eb44974253e39a08236ceb37fd93f0af7fd2238b6b8ac62b692a5018631ae9df","signature":"4b52acee151767ac812dc7cb9e348455b84f564fbfc26b8f9a494d9d4e2ee6a4","impliedFormat":99},{"version":"7a1dd1e9c8bf5e23129495b10718b280340c7500570e0cfe5cffcdee51e13e48","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"c06b2652ffeb89afd0f1c52c165ced77032f9cd09bc481153fbd6b5504c69494","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"612422d5ba6b4a5c4537f423e9199645468ad80a689801da63ab7edb43f7b835","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"0904660ae854e6d41f6ff25356db1d654436c6305b0f0aa89d1532df0253486e","impliedFormat":1},{"version":"060d305fe4494d8cb2b99d620928d369d1ee55c1645f5e729a2aca07d0f108cb","impliedFormat":1},{"version":"230bdc111d7578276e4a3bb9d075d85c78c6b68f428c3a9935e2eaa10f4ae1f5","impliedFormat":1},{"version":"0c50296ee73dae94efc3f0da4936b1146ca6ce2217acfabb44c19c9a33fa30e5","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"0e5974dfff7a97181c7c376545f126b20acf2f1341db7d3fccea4977bf3ce19c","impliedFormat":1},{"version":"c7f977ea78a1b060a30554c1c4ec0e2269c6e305a349ca2ada14931ac27ecc0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"145dcf25fd4967c610c53d93d7bc4dce8fbb1b6dd7935362472d4ae49363c7ba","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"2c9adcc85574b002c9a6311ff2141055769e0071856ec979d92ff989042b1f1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bf3fe89ec8baa335f6370b9fa36308e1bc7a72e2eb2dad1e94f31e27fa28b5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"35390d6fa94bdb432c5d0bcb6547bdd11406c2692a6b90b9e47be2105ea19bd6","impliedFormat":1},{"version":"b33b74b97952d9bf4fbd2951dcfbb5136656ddb310ce1c84518aaa77dbca9992","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"8d117798e5228c7fdff887f44851d07320739c5cc0d511afae8f250c51809a36","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"8e7c3bed5f19ade8f911677ddc83052e2283e25b0a8654cd89db9079d4b323c7","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"ccf3afaeebbeee4ca9092101e99fd6abd681116b6e5ec23e381bbb1e1f32262c","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"ab7818a9d57a9297b90e456fc68b77f84d74395a9210a3cfa9d87db33aff8b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb08062718a5470cd864c1fae0eb5b3a3adc5bcd05dcf87608d6f60b65eca3f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a815b7d1aebc0646b91548eab2fc19dada09ff255d04c71ced00bbd3058c8eb","impliedFormat":1},{"version":"255d948f87f24ffd57bcb2fdf95792fd418a2e1f712a98cf2cce88744d75085c","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"836b36913830645ac3b28fe33731aac3fdb3524ee8adbb4cdab9a5c189f41943","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd3b3c21a56104693183942e221c1896ee23bcb8f8d91ab0b941f7b32985411","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1}],"root":[[81,91]],"options":{"allowImportingTsExtensions":true,"allowJs":false,"allowUnreachableCode":false,"allowUnusedLabels":false,"declaration":true,"emitDeclarationOnly":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"experimentalDecorators":true,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"outDir":"./esm","removeComments":true,"rootDir":"../src","skipLibCheck":true,"sourceMap":false,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.generate-typings.tsbuildinfo"},"referencedMap":[[92,1],[146,2],[147,2],[148,3],[95,4],[149,5],[150,6],[151,7],[93,1],[152,8],[153,9],[154,10],[155,11],[156,12],[157,13],[158,13],[159,14],[160,15],[161,16],[162,17],[96,1],[94,1],[163,18],[164,19],[165,20],[199,21],[166,22],[167,1],[168,23],[169,24],[170,25],[171,26],[172,27],[173,28],[174,29],[175,30],[176,31],[177,31],[178,32],[179,1],[180,33],[181,34],[183,35],[182,36],[184,37],[185,38],[186,39],[187,40],[188,41],[189,42],[190,43],[191,44],[192,45],[193,46],[194,47],[195,48],[196,49],[97,1],[98,50],[99,1],[100,1],[142,51],[143,52],[144,1],[145,37],[197,53],[198,54],[79,1],[80,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[23,1],[24,1],[4,1],[25,1],[29,1],[26,1],[27,1],[28,1],[30,1],[31,1],[32,1],[5,1],[33,1],[34,1],[35,1],[36,1],[6,1],[40,1],[37,1],[38,1],[39,1],[41,1],[7,1],[42,1],[47,1],[48,1],[43,1],[44,1],[45,1],[46,1],[8,1],[52,1],[49,1],[50,1],[51,1],[53,1],[9,1],[54,1],[55,1],[56,1],[58,1],[57,1],[59,1],[60,1],[10,1],[61,1],[62,1],[63,1],[11,1],[64,1],[65,1],[66,1],[67,1],[68,1],[1,1],[69,1],[70,1],[12,1],[74,1],[72,1],[77,1],[76,1],[71,1],[75,1],[73,1],[78,1],[118,55],[130,56],[116,57],[131,58],[140,59],[107,60],[108,61],[106,62],[139,63],[134,64],[138,65],[110,66],[127,67],[109,68],[137,69],[104,70],[105,64],[111,71],[112,1],[117,72],[115,71],[102,73],[141,74],[132,75],[121,76],[120,71],[122,77],[125,78],[119,79],[123,80],[135,63],[113,81],[114,82],[126,83],[103,58],[129,84],[128,71],[124,85],[133,1],[101,1],[136,86],[83,87],[82,88],[84,88],[85,88],[86,89],[87,89],[91,90],[88,88],[89,91],[90,92],[81,1]],"version":"5.9.3"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@williamthorsen/release-kit",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Version-bumping and changelog-generation toolkit for release workflows",
|
|
5
|
+
"keywords": [],
|
|
6
|
+
"homepage": "https://github.com/williamthorsen/toolbelt/tree/main/packages/release-kit#readme",
|
|
7
|
+
"bugs": {
|
|
8
|
+
"url": "https://github.com/williamthorsen/toolbelt/issues"
|
|
9
|
+
},
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/williamthorsen/toolbelt.git",
|
|
13
|
+
"directory": "packages/release-kit"
|
|
14
|
+
},
|
|
15
|
+
"license": "UNLICENSED",
|
|
16
|
+
"author": "William Thorsen <william@thorsen.dev> (https://github.com/williamthorsen)",
|
|
17
|
+
"type": "module",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"import": "./dist/esm/index.js"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist/*",
|
|
25
|
+
"cliff.toml.template",
|
|
26
|
+
"CHANGELOG.md"
|
|
27
|
+
],
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18.17.0"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public",
|
|
33
|
+
"registry": "https://registry.npmjs.org"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"publish:github": "pnpm publish",
|
|
37
|
+
"release:prepare": "tsx ../../scripts/release-prepare.ts --only=release-kit",
|
|
38
|
+
"release:prepare:dry": "tsx ../../scripts/release-prepare.ts --only=release-kit --dry-run",
|
|
39
|
+
"ws": "node --import tsx ../../scripts/run-workspace-script.ts --int-test"
|
|
40
|
+
}
|
|
41
|
+
}
|