fireflyy 4.0.0-dev.a10ed44 → 4.0.0-dev.a8aacbe
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/assets/firefly.schema.json +19 -17
- package/dist/{commit-analysis.service-Ba6hLgsr.js → commit-analysis.service-B2Z128t8.js} +3 -3
- package/dist/config.d.ts +10 -4
- package/dist/debug-flags-K3yK5B6O.js +74 -0
- package/dist/{dry-run-Cdg-c0EP.js → dry-run-C7RaPEq8.js} +2 -2
- package/dist/{filesystem.service-B8qg87n-.js → filesystem.service-DS2AQGNq.js} +4 -4
- package/dist/{git.service-BBqDH7qx.js → git.service-B6RdTilO.js} +5 -4
- package/dist/main.js +5 -5
- package/dist/{package-json.service-CHmtIoQQ.js → package-json.service-BlMNgPGQ.js} +3 -3
- package/dist/{program-Dqo9sQjU.js → program-BOk_0Q6Q.js} +527 -208
- package/dist/{result.constructors-BMtOWD2-.js → result.constructors-DoAoYdfF.js} +5 -1
- package/dist/{result.utilities-BTVU-GsT.js → result.utilities-DXSJU70_.js} +1 -1
- package/dist/{schema.utilities-BxiRR-GI.js → schema.utilities-C1yimTtB.js} +1 -1
- package/dist/version-DJuocyXy.js +164 -0
- package/dist/version-bumper.service-glxzf9Qm.js +171 -0
- package/dist/{version-strategy.service-CmfeZLYC.js → version-strategy.service-Dln42gxC.js} +41 -42
- package/package.json +8 -8
- package/dist/version-bumper.service-DMYR0npB.js +0 -318
- /package/dist/{logging-BuIkRrn1.js → logging-Bpk2RzGc.js} +0 -0
|
@@ -253,9 +253,13 @@ const failedErrAsync = (opts) => errAsync(failedError(opts));
|
|
|
253
253
|
*/
|
|
254
254
|
const invalidErr = (opts) => err(invalidError(opts));
|
|
255
255
|
/**
|
|
256
|
+
* Creates an async invalid error result.
|
|
257
|
+
*/
|
|
258
|
+
const invalidErrAsync = (opts) => errAsync(invalidError(opts));
|
|
259
|
+
/**
|
|
256
260
|
* Creates an async timeout error result.
|
|
257
261
|
*/
|
|
258
262
|
const timeoutErrAsync = (opts) => errAsync(timeoutError(opts));
|
|
259
263
|
|
|
260
264
|
//#endregion
|
|
261
|
-
export {
|
|
265
|
+
export { notFoundError as _, conflictErrAsync as a, wrapErrorMessage as b, invalidErrAsync as c, validationErr as d, validationErrAsync as f, invalidError as g, failedError as h, FireflyOkAsync as i, notFoundErrAsync as l, createFireflyError as m, FireflyErrAsync as n, failedErrAsync as o, conflictError as p, FireflyOk as r, invalidErr as s, FireflyErr as t, timeoutErrAsync as u, toFireflyError as v, validationError as y };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { f as validationErrAsync, i as FireflyOkAsync, m as createFireflyError, v as toFireflyError } from "./result.constructors-DoAoYdfF.js";
|
|
2
2
|
import { ResultAsync } from "neverthrow";
|
|
3
3
|
|
|
4
4
|
//#region src/core/result/result.utilities.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { m as createFireflyError, r as FireflyOk, t as FireflyErr, v as toFireflyError } from "./result.constructors-DoAoYdfF.js";
|
|
2
2
|
import { ResultAsync } from "neverthrow";
|
|
3
3
|
import z$1 from "zod";
|
|
4
4
|
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { r as FireflyOk, s as invalidErr } from "./result.constructors-DoAoYdfF.js";
|
|
2
|
+
import semver from "semver";
|
|
3
|
+
|
|
4
|
+
//#region src/domain/semver/version.ts
|
|
5
|
+
/**
|
|
6
|
+
* Represents a parsed semantic version with immutable access.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const result = Version.from("1.2.3-alpha.1");
|
|
11
|
+
* if (result.isOk()) {
|
|
12
|
+
* console.log(result.value.major); // 1
|
|
13
|
+
* console.log(result.value.isPrerelease); // true
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
var Version = class Version {
|
|
18
|
+
_raw;
|
|
19
|
+
_parsed;
|
|
20
|
+
constructor(version, parsed) {
|
|
21
|
+
this._raw = version;
|
|
22
|
+
this._parsed = parsed;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Creates a Version from any valid semver string.
|
|
26
|
+
* Handles cleaning (removing 'v' prefix, etc.).
|
|
27
|
+
*/
|
|
28
|
+
static from(input) {
|
|
29
|
+
const cleaned = semver.clean(input);
|
|
30
|
+
if (!cleaned) return invalidErr({ message: `"${input}" is not a valid semantic version.` });
|
|
31
|
+
const parsed = semver.parse(cleaned);
|
|
32
|
+
if (!parsed) return invalidErr({ message: `Failed to parse semantic version "${cleaned}".` });
|
|
33
|
+
return FireflyOk(new Version(cleaned, parsed));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Creates a Version from an already-clean semver string.
|
|
37
|
+
* Use when you know the input is already normalized.
|
|
38
|
+
*/
|
|
39
|
+
static fromClean(cleanVersion) {
|
|
40
|
+
const parsed = semver.parse(cleanVersion);
|
|
41
|
+
if (!parsed) return invalidErr({ message: `Expected clean version but got invalid: ${cleanVersion}` });
|
|
42
|
+
return FireflyOk(new Version(cleanVersion, parsed));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The raw version string.
|
|
46
|
+
*/
|
|
47
|
+
get raw() {
|
|
48
|
+
return this._raw;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Major version number.
|
|
52
|
+
*/
|
|
53
|
+
get major() {
|
|
54
|
+
return this._parsed.major;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Minor version number.
|
|
58
|
+
*/
|
|
59
|
+
get minor() {
|
|
60
|
+
return this._parsed.minor;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Patch version number.
|
|
64
|
+
*/
|
|
65
|
+
get patch() {
|
|
66
|
+
return this._parsed.patch;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Whether this version has prerelease identifiers.
|
|
70
|
+
*/
|
|
71
|
+
get isPrerelease() {
|
|
72
|
+
return this._parsed.prerelease.length > 0;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Prerelease identifiers (e.g., ["alpha", 1] for "1.0.0-alpha.1").
|
|
76
|
+
*/
|
|
77
|
+
get prerelease() {
|
|
78
|
+
return this._parsed.prerelease;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The prerelease identifier (e.g., "alpha" from "1.0.0-alpha.1").
|
|
82
|
+
*/
|
|
83
|
+
get preReleaseId() {
|
|
84
|
+
if (!this.isPrerelease) return null;
|
|
85
|
+
const first = this._parsed.prerelease[0];
|
|
86
|
+
return typeof first === "string" ? first : null;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* The prerelease number (e.g., 1 from "1.0.0-alpha.1").
|
|
90
|
+
*/
|
|
91
|
+
get prereleaseNumber() {
|
|
92
|
+
if (!this.isPrerelease) return null;
|
|
93
|
+
const last = this._parsed.prerelease.at(-1);
|
|
94
|
+
return typeof last === "number" ? last : null;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Build metadata identifiers.
|
|
98
|
+
*/
|
|
99
|
+
get build() {
|
|
100
|
+
return this._parsed.build;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Returns the raw version string.
|
|
104
|
+
*/
|
|
105
|
+
toString() {
|
|
106
|
+
return this._raw;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Checks equality with another Version.
|
|
110
|
+
*
|
|
111
|
+
* @param other - The other Version to compare with
|
|
112
|
+
* @returns True if equal, false otherwise
|
|
113
|
+
*/
|
|
114
|
+
equals(other) {
|
|
115
|
+
return semver.eq(this._raw, other._raw);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Compares with another Version: -1 (less), 0 (equal), 1 (greater).
|
|
119
|
+
*
|
|
120
|
+
* @param other - The other Version to compare with
|
|
121
|
+
* @returns -1, 0, or 1 based on comparison
|
|
122
|
+
*/
|
|
123
|
+
compare(other) {
|
|
124
|
+
return semver.compare(this._raw, other._raw);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Checks if this version is greater than another.
|
|
128
|
+
*
|
|
129
|
+
* @param other - The other Version to compare with
|
|
130
|
+
* @returns True if this version is greater, false otherwise
|
|
131
|
+
*/
|
|
132
|
+
isGreaterThan(other) {
|
|
133
|
+
return semver.gt(this._raw, other._raw);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Checks if this version is less than another.
|
|
137
|
+
*
|
|
138
|
+
* @param other - The other Version to compare with
|
|
139
|
+
* @returns True if this version is less, false otherwise
|
|
140
|
+
*/
|
|
141
|
+
isLessThan(other) {
|
|
142
|
+
return semver.lt(this._raw, other._raw);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Checks if this version satisfies a semver range.
|
|
146
|
+
*
|
|
147
|
+
* @param range - The semver range to check against
|
|
148
|
+
* @returns True if it satisfies the range, false otherwise
|
|
149
|
+
*/
|
|
150
|
+
satisfies(range) {
|
|
151
|
+
return semver.satisfies(this._raw, range);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Converts a prerelease version to its stable form.
|
|
155
|
+
* "1.2.3-alpha.1" → "1.2.3"
|
|
156
|
+
*/
|
|
157
|
+
toStable() {
|
|
158
|
+
const stableVersion = `${this.major}.${this.minor}.${this.patch}`;
|
|
159
|
+
return Version.fromClean(stableVersion);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
//#endregion
|
|
164
|
+
export { Version as t };
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { c as invalidErrAsync, i as FireflyOkAsync, n as FireflyErrAsync, r as FireflyOk, s as invalidErr, t as FireflyErr } from "./result.constructors-DoAoYdfF.js";
|
|
2
|
+
import { t as Version } from "./version-DJuocyXy.js";
|
|
3
|
+
import semver from "semver";
|
|
4
|
+
|
|
5
|
+
//#region src/services/implementations/version-bumper.service.ts
|
|
6
|
+
/**
|
|
7
|
+
* Default implementation of the version bumper service.
|
|
8
|
+
*/
|
|
9
|
+
var DefaultVersionBumperService = class {
|
|
10
|
+
bump(options) {
|
|
11
|
+
const { currentVersion, releaseType, preReleaseId, preReleaseBase } = options;
|
|
12
|
+
if (releaseType === "major" || releaseType === "minor" || releaseType === "patch") {
|
|
13
|
+
const result = this.bumpStandard(currentVersion, releaseType);
|
|
14
|
+
return result.isOk() ? FireflyOkAsync(result.value) : FireflyErrAsync(result.error);
|
|
15
|
+
}
|
|
16
|
+
if (releaseType === "premajor" || releaseType === "preminor" || releaseType === "prepatch") {
|
|
17
|
+
const result = this.bumpPreStandard(currentVersion, releaseType, preReleaseId, preReleaseBase);
|
|
18
|
+
return result.isOk() ? FireflyOkAsync(result.value) : FireflyErrAsync(result.error);
|
|
19
|
+
}
|
|
20
|
+
if (releaseType === "prerelease") {
|
|
21
|
+
const result = this.bumpPrerelease(currentVersion, preReleaseId, preReleaseBase);
|
|
22
|
+
return result.isOk() ? FireflyOkAsync(result.value) : FireflyErrAsync(result.error);
|
|
23
|
+
}
|
|
24
|
+
if (releaseType === "graduate") {
|
|
25
|
+
const result = this.graduatePrerelease(currentVersion);
|
|
26
|
+
return result.isOk() ? FireflyOkAsync(result.value) : FireflyErrAsync(result.error);
|
|
27
|
+
}
|
|
28
|
+
return invalidErrAsync({
|
|
29
|
+
message: `Unsupported release type: ${releaseType}`,
|
|
30
|
+
source: "services/version-bumper"
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Normalizes the prerelease base to a string "0" or "1".
|
|
35
|
+
*
|
|
36
|
+
* @param base - The prerelease base to normalize
|
|
37
|
+
* @returns The normalized base or an error if invalid
|
|
38
|
+
*/
|
|
39
|
+
normalizeBase(base) {
|
|
40
|
+
if (base === void 0 || base === null) return FireflyOk(void 0);
|
|
41
|
+
if (base === "0" || base === "1") return FireflyOk(base);
|
|
42
|
+
if (typeof base === "number" && (base === 0 || base === 1)) return FireflyOk(base.toString());
|
|
43
|
+
return invalidErr({ message: `Invalid preReleaseBase '${base}'. Must be "0", "1", 0, or 1.` });
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Determines if the prerelease identifier is complex (contains dots).
|
|
47
|
+
*
|
|
48
|
+
* @param identifier - The prerelease identifier to check
|
|
49
|
+
* @returns True if the identifier is complex, false otherwise
|
|
50
|
+
*/
|
|
51
|
+
isComplexIdentifier(identifier) {
|
|
52
|
+
return typeof identifier === "string" && identifier.includes(".");
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Bumps a version with a complex prerelease identifier (e.g., "canary.abc123").
|
|
56
|
+
*
|
|
57
|
+
* @param currentVersion - The current version to bump
|
|
58
|
+
* @param identifier - The complex prerelease identifier
|
|
59
|
+
* @returns The new version with the complex identifier
|
|
60
|
+
*/
|
|
61
|
+
bumpWithComplexIdentifier(currentVersion, identifier) {
|
|
62
|
+
if (!identifier) return semver.inc(currentVersion.raw, "prerelease", void 0, "0");
|
|
63
|
+
return semver.inc(currentVersion.raw, "prerelease", identifier, false);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Bumps an existing prerelease version.
|
|
67
|
+
*
|
|
68
|
+
* @param currentVersion - The current version to bump
|
|
69
|
+
* @param identifier - Optional prerelease identifier
|
|
70
|
+
* @returns The new prerelease version
|
|
71
|
+
*/
|
|
72
|
+
bumpExistingPrerelease(currentVersion, identifier) {
|
|
73
|
+
return identifier ? semver.inc(currentVersion.raw, "prerelease", identifier) : semver.inc(currentVersion.raw, "prerelease");
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Bumps a standard version (major, minor, patch) according to the provided release type.
|
|
77
|
+
*
|
|
78
|
+
* @param currentVersion - The current version to bump
|
|
79
|
+
* @param releaseType - The type of standard release
|
|
80
|
+
* @returns The new standard version
|
|
81
|
+
*/
|
|
82
|
+
bumpStandard(currentVersion, releaseType) {
|
|
83
|
+
let baseVersionString = currentVersion.raw;
|
|
84
|
+
if (currentVersion.isPrerelease) {
|
|
85
|
+
const stableResult = currentVersion.toStable();
|
|
86
|
+
if (stableResult.isErr()) return FireflyErr(stableResult.error);
|
|
87
|
+
baseVersionString = stableResult.value.raw;
|
|
88
|
+
}
|
|
89
|
+
const newVersionString = semver.inc(baseVersionString, releaseType);
|
|
90
|
+
if (!newVersionString) return invalidErr({
|
|
91
|
+
message: `Failed to bump ${releaseType} version from '${baseVersionString}'.`,
|
|
92
|
+
source: "services/version-bumper"
|
|
93
|
+
});
|
|
94
|
+
return Version.fromClean(newVersionString);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Bumps a pre-standard version (premajor, preminor, prepatch) according to the provided options.
|
|
98
|
+
*
|
|
99
|
+
* @param currentVersion - The current version to bump
|
|
100
|
+
* @param releaseType - The type of pre-standard release
|
|
101
|
+
* @param identifier - Optional prerelease identifier (e.g., "alpha", "beta")
|
|
102
|
+
* @param base - Optional base number for the prerelease
|
|
103
|
+
* @returns The new pre-standard version
|
|
104
|
+
*/
|
|
105
|
+
bumpPreStandard(currentVersion, releaseType, preReleaseId, preReleaseBase) {
|
|
106
|
+
const normalizedBaseResult = this.normalizeBase(preReleaseBase);
|
|
107
|
+
if (normalizedBaseResult.isErr()) return FireflyErr(normalizedBaseResult.error);
|
|
108
|
+
const normalizedBase = normalizedBaseResult.value;
|
|
109
|
+
let newVersionString = null;
|
|
110
|
+
if (normalizedBase !== void 0) newVersionString = preReleaseId ? semver.inc(currentVersion.raw, releaseType, preReleaseId, normalizedBase) : semver.inc(currentVersion.raw, releaseType, void 0, normalizedBase);
|
|
111
|
+
else newVersionString = preReleaseId ? semver.inc(currentVersion.raw, releaseType, preReleaseId) : semver.inc(currentVersion.raw, releaseType);
|
|
112
|
+
if (!newVersionString) return invalidErr({
|
|
113
|
+
message: `Failed to bump ${releaseType} version from '${currentVersion.raw}' with identifier '${preReleaseId}' and base '${preReleaseBase}'.`,
|
|
114
|
+
source: "services/version-bumper"
|
|
115
|
+
});
|
|
116
|
+
return Version.fromClean(newVersionString);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Bumps a prerelease version according to the provided options.
|
|
120
|
+
* Handles complex identifiers, explicit bases, continuing existing
|
|
121
|
+
* prereleases, and starting new prereleases from stable versions.
|
|
122
|
+
*
|
|
123
|
+
* @param currentVersion - The current version to bump
|
|
124
|
+
* @param identifier - Optional prerelease identifier (e.g., "alpha", "beta")
|
|
125
|
+
* @param base - Optional base number for the prerelease
|
|
126
|
+
* @returns The new prerelease version
|
|
127
|
+
*/
|
|
128
|
+
bumpPrerelease(currentVersion, preReleaseId, preReleaseBase) {
|
|
129
|
+
let newVersionString = null;
|
|
130
|
+
if (this.isComplexIdentifier(preReleaseId)) newVersionString = this.bumpWithComplexIdentifier(currentVersion, preReleaseId);
|
|
131
|
+
else if (preReleaseBase !== void 0 && preReleaseBase !== null) {
|
|
132
|
+
const normalizedBaseResult = this.normalizeBase(preReleaseBase);
|
|
133
|
+
if (normalizedBaseResult.isErr()) return FireflyErr(normalizedBaseResult.error);
|
|
134
|
+
const normalizedBase = normalizedBaseResult.value;
|
|
135
|
+
newVersionString = preReleaseId ? semver.inc(currentVersion.raw, "prerelease", preReleaseId, normalizedBase) : semver.inc(currentVersion.raw, "prerelease", void 0, normalizedBase);
|
|
136
|
+
} else if (currentVersion.isPrerelease) newVersionString = this.bumpExistingPrerelease(currentVersion, preReleaseId);
|
|
137
|
+
else {
|
|
138
|
+
const defaultIdentifier = preReleaseId || "alpha";
|
|
139
|
+
newVersionString = semver.inc(currentVersion.raw, "prerelease", defaultIdentifier);
|
|
140
|
+
}
|
|
141
|
+
if (!newVersionString) return invalidErr({
|
|
142
|
+
message: `Failed to bump prerelease version from '${currentVersion.raw}' with identifier '${preReleaseId}' and base '${preReleaseBase}'.`,
|
|
143
|
+
source: "services/version-bumper"
|
|
144
|
+
});
|
|
145
|
+
return Version.fromClean(newVersionString);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Graduates a prerelease version to its stable counterpart.
|
|
149
|
+
*
|
|
150
|
+
* @param currentVersion - The current prerelease version
|
|
151
|
+
* @returns The stable version
|
|
152
|
+
*/
|
|
153
|
+
graduatePrerelease(currentVersion) {
|
|
154
|
+
if (!currentVersion.isPrerelease) return invalidErr({
|
|
155
|
+
message: `Cannot graduate non-prerelease version '${currentVersion.raw}'. Only prerelease versions can be graduated.`,
|
|
156
|
+
source: "services/version-bumper"
|
|
157
|
+
});
|
|
158
|
+
const stableVersionResult = currentVersion.toStable();
|
|
159
|
+
if (stableVersionResult.isErr()) return FireflyErr(stableVersionResult.error);
|
|
160
|
+
return FireflyOk(stableVersionResult.value);
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Creates a version bumper service instance.
|
|
165
|
+
*/
|
|
166
|
+
function createVersionBumperService() {
|
|
167
|
+
return new DefaultVersionBumperService();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
//#endregion
|
|
171
|
+
export { createVersionBumperService };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as logger } from "./logging-
|
|
3
|
-
import {
|
|
1
|
+
import { g as invalidError, i as FireflyOkAsync, n as FireflyErrAsync } from "./result.constructors-DoAoYdfF.js";
|
|
2
|
+
import { t as logger } from "./logging-Bpk2RzGc.js";
|
|
3
|
+
import { ResultAsync } from "neverthrow";
|
|
4
4
|
|
|
5
5
|
//#region src/services/implementations/version-strategy.service.ts
|
|
6
6
|
const TRANSITION_KEYWORDS = [
|
|
@@ -55,6 +55,9 @@ const VERSION_DESCRIPTIONS = {
|
|
|
55
55
|
prerelease: "Unstable pre-release continuation. Increments the pre-release number or changes identifier.",
|
|
56
56
|
graduate: "Promote pre-release to stable. Removes pre-release identifiers to create a stable version."
|
|
57
57
|
};
|
|
58
|
+
/**
|
|
59
|
+
* Default implementation of the version strategy service.
|
|
60
|
+
*/
|
|
58
61
|
var DefaultVersionStrategyService = class {
|
|
59
62
|
bumper;
|
|
60
63
|
constructor(bumper) {
|
|
@@ -80,19 +83,19 @@ var DefaultVersionStrategyService = class {
|
|
|
80
83
|
return this.bumper.bump({
|
|
81
84
|
currentVersion: options.currentVersion,
|
|
82
85
|
releaseType: options.releaseType,
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
preReleaseId: options.preReleaseId,
|
|
87
|
+
preReleaseBase: options.preReleaseBase
|
|
85
88
|
});
|
|
86
89
|
}
|
|
87
|
-
return
|
|
90
|
+
return FireflyErrAsync(invalidError({ message: "Cannot determine next version: no release type or recommendation provided" }));
|
|
88
91
|
}
|
|
89
92
|
generateChoices(options) {
|
|
90
93
|
logger.verbose(`DefaultVersionStrategyService: Creating version choices for '${options.currentVersion.raw}'...`);
|
|
91
|
-
const choicesResults = this.determineAvailableVersionTypes(options.currentVersion, options.releaseType).map((releaseType) => this.createSingleChoice(options.currentVersion, releaseType, options.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
const choicesResults = this.determineAvailableVersionTypes(options.currentVersion, options.releaseType).map((releaseType) => this.createSingleChoice(options.currentVersion, releaseType, options.preReleaseId, options.preReleaseBase));
|
|
95
|
+
return ResultAsync.combine(choicesResults).map((choices) => {
|
|
96
|
+
logger.verbose(`DefaultVersionStrategyService: Created ${choices.length} version choices.`);
|
|
97
|
+
return choices;
|
|
98
|
+
});
|
|
96
99
|
}
|
|
97
100
|
/**
|
|
98
101
|
* Analyzes the current version and recommendation to determine pre-release context.
|
|
@@ -104,7 +107,7 @@ var DefaultVersionStrategyService = class {
|
|
|
104
107
|
analyzePreReleaseContext(currentVersion, recommendation) {
|
|
105
108
|
return {
|
|
106
109
|
isCurrentPreRelease: currentVersion.isPrerelease,
|
|
107
|
-
|
|
110
|
+
preReleaseId: currentVersion.preReleaseId,
|
|
108
111
|
hasStableTransition: this.detectStableTransition(recommendation)
|
|
109
112
|
};
|
|
110
113
|
}
|
|
@@ -131,8 +134,8 @@ var DefaultVersionStrategyService = class {
|
|
|
131
134
|
return this.bumper.bump({
|
|
132
135
|
currentVersion: options.currentVersion,
|
|
133
136
|
releaseType: "prerelease",
|
|
134
|
-
|
|
135
|
-
|
|
137
|
+
preReleaseId: options.preReleaseId ?? context.preReleaseId ?? "alpha",
|
|
138
|
+
preReleaseBase: options.preReleaseBase
|
|
136
139
|
});
|
|
137
140
|
}
|
|
138
141
|
/**
|
|
@@ -143,26 +146,25 @@ var DefaultVersionStrategyService = class {
|
|
|
143
146
|
* @returns A result containing the new stable version or an error
|
|
144
147
|
*/
|
|
145
148
|
handlePreReleaseToStableTransition(options, recommendation) {
|
|
146
|
-
if (!recommendation) return
|
|
149
|
+
if (!recommendation) return FireflyErrAsync(invalidError({
|
|
147
150
|
message: "Cannot transition to stable version without recommendation",
|
|
148
151
|
source: "services/version-strategy"
|
|
149
152
|
}));
|
|
150
|
-
|
|
153
|
+
return this.bumper.bump({
|
|
151
154
|
currentVersion: options.currentVersion,
|
|
152
155
|
releaseType: "graduate"
|
|
156
|
+
}).andThen((stableVersion) => {
|
|
157
|
+
if (recommendation.level < 2) {
|
|
158
|
+
logger.verbose("DefaultVersionStrategyService: Further bumping after graduation...");
|
|
159
|
+
const releaseType = LEVEL_TO_RELEASE_TYPE[recommendation.level];
|
|
160
|
+
return this.bumper.bump({
|
|
161
|
+
currentVersion: stableVersion,
|
|
162
|
+
releaseType
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
logger.verbose("DefaultVersionStrategyService: Graduated to stable version:", stableVersion.raw);
|
|
166
|
+
return FireflyOkAsync(stableVersion);
|
|
153
167
|
});
|
|
154
|
-
if (graduateResult.isErr()) return FireflyErr(graduateResult.error);
|
|
155
|
-
const stableVersion = graduateResult.value;
|
|
156
|
-
if (recommendation.level < 2) {
|
|
157
|
-
logger.verbose("DefaultVersionStrategyService: Further bumping after graduation...");
|
|
158
|
-
const releaseType = LEVEL_TO_RELEASE_TYPE[recommendation.level];
|
|
159
|
-
return this.bumper.bump({
|
|
160
|
-
currentVersion: stableVersion,
|
|
161
|
-
releaseType
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
logger.verbose("DefaultVersionStrategyService: Graduated to stable version:", stableVersion.raw);
|
|
165
|
-
return FireflyOk(stableVersion);
|
|
166
168
|
}
|
|
167
169
|
/**
|
|
168
170
|
* Creates a new version based on the provided recommendation and pre-release context.
|
|
@@ -178,8 +180,8 @@ var DefaultVersionStrategyService = class {
|
|
|
178
180
|
return this.bumper.bump({
|
|
179
181
|
currentVersion: options.currentVersion,
|
|
180
182
|
releaseType: "prerelease",
|
|
181
|
-
|
|
182
|
-
|
|
183
|
+
preReleaseId: options.preReleaseId ?? context.preReleaseId ?? "alpha",
|
|
184
|
+
preReleaseBase: options.preReleaseBase
|
|
183
185
|
});
|
|
184
186
|
}
|
|
185
187
|
const releaseType = LEVEL_TO_RELEASE_TYPE[recommendation.level];
|
|
@@ -187,8 +189,8 @@ var DefaultVersionStrategyService = class {
|
|
|
187
189
|
return this.bumper.bump({
|
|
188
190
|
currentVersion: options.currentVersion,
|
|
189
191
|
releaseType,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
+
preReleaseId: options.preReleaseId,
|
|
193
|
+
preReleaseBase: options.preReleaseBase
|
|
192
194
|
});
|
|
193
195
|
}
|
|
194
196
|
/**
|
|
@@ -225,25 +227,22 @@ var DefaultVersionStrategyService = class {
|
|
|
225
227
|
*
|
|
226
228
|
* @param currentVersion - The current version
|
|
227
229
|
* @param releaseType - The type of release to create
|
|
228
|
-
* @param
|
|
229
|
-
* @param
|
|
230
|
+
* @param preReleaseId - Optional pre-release identifier
|
|
231
|
+
* @param preReleaseBase - Optional base for pre-release
|
|
230
232
|
* @returns A result containing the version choice or an error
|
|
231
233
|
*/
|
|
232
|
-
createSingleChoice(currentVersion, releaseType,
|
|
234
|
+
createSingleChoice(currentVersion, releaseType, preReleaseId, preReleaseBase) {
|
|
233
235
|
const bumpOptions = {
|
|
234
236
|
currentVersion,
|
|
235
237
|
releaseType,
|
|
236
|
-
|
|
237
|
-
|
|
238
|
+
preReleaseId,
|
|
239
|
+
preReleaseBase
|
|
238
240
|
};
|
|
239
|
-
|
|
240
|
-
if (newVersionResult.isErr()) return FireflyErr(newVersionResult.error);
|
|
241
|
-
const newVersion = newVersionResult.value;
|
|
242
|
-
return FireflyOk({
|
|
241
|
+
return this.bumper.bump(bumpOptions).map((newVersion) => ({
|
|
243
242
|
label: `${releaseType} (${newVersion.raw})`,
|
|
244
243
|
hint: this.getVersionDescription(releaseType),
|
|
245
244
|
value: newVersion.raw
|
|
246
|
-
});
|
|
245
|
+
}));
|
|
247
246
|
}
|
|
248
247
|
};
|
|
249
248
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fireflyy",
|
|
3
|
-
"version": "4.0.0-dev.
|
|
3
|
+
"version": "4.0.0-dev.a8aacbe",
|
|
4
4
|
"description": " CLI orchestrator for automatic semantic versioning, changelog generation, and creating releases. Built for my own use cases.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -53,21 +53,21 @@
|
|
|
53
53
|
"lint:fix": "biome lint . --fix --unsafe"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"c12": "^3.3.
|
|
56
|
+
"c12": "^3.3.3",
|
|
57
57
|
"commander": "^14.0.2",
|
|
58
58
|
"consola": "^3.4.2",
|
|
59
|
-
"git-cliff": "^2.
|
|
59
|
+
"git-cliff": "^2.11.0",
|
|
60
60
|
"neverthrow": "^8.2.0",
|
|
61
61
|
"semver": "^7.7.3",
|
|
62
|
-
"zod": "^4.
|
|
62
|
+
"zod": "^4.3.4"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@biomejs/biome": "2.3.
|
|
66
|
-
"@types/bun": "^1.3.
|
|
65
|
+
"@biomejs/biome": "2.3.10",
|
|
66
|
+
"@types/bun": "^1.3.5",
|
|
67
67
|
"@types/semver": "^7.7.1",
|
|
68
|
-
"tsdown": "^0.
|
|
68
|
+
"tsdown": "^0.18.4",
|
|
69
69
|
"typescript": "^5.9.3",
|
|
70
|
-
"ultracite": "6.
|
|
70
|
+
"ultracite": "6.5.1"
|
|
71
71
|
},
|
|
72
72
|
"keywords": [
|
|
73
73
|
"cli",
|