@detergent-software/atk 6.1.0 → 7.0.0-dev.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/build/commands/index.js +1 -1
- package/build/commands/index.js.map +1 -1
- package/build/commands/release-notes.d.ts +6 -2
- package/build/commands/release-notes.d.ts.map +1 -1
- package/build/commands/release-notes.js +26 -8
- package/build/commands/release-notes.js.map +1 -1
- package/build/commands/why.d.ts +1 -2
- package/build/commands/why.d.ts.map +1 -1
- package/build/commands/why.js +2 -11
- package/build/commands/why.js.map +1 -1
- package/build/lib/release-notes.d.ts +47 -16
- package/build/lib/release-notes.d.ts.map +1 -1
- package/build/lib/release-notes.js +43 -27
- package/build/lib/release-notes.js.map +1 -1
- package/package.json +1 -1
package/build/commands/index.js
CHANGED
|
@@ -21,7 +21,7 @@ const commands = [
|
|
|
21
21
|
['prune', 'Remove orphaned dependencies'],
|
|
22
22
|
['publish', 'Publish an asset or bundle to the registry'],
|
|
23
23
|
['register', 'Drop a manifest.json into an existing local directory'],
|
|
24
|
-
['release-notes', 'Show release notes
|
|
24
|
+
['release-notes', 'Show ATK release notes — recent history or a specific version'],
|
|
25
25
|
['schema', 'Show the schema for an asset type, bundle, adapter, lockfile, config, or registry'],
|
|
26
26
|
['search', 'Search for assets in the registry'],
|
|
27
27
|
['setup', 'Initialize ATK in a project — select tools and create config files'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,MAAM,CAAC,MAAM,WAAW,GAAG,sDAAsD,CAAC;AAElF,MAAM,QAAQ,GAAG;IACf,CAAC,OAAO,EAAE,gDAAgD,CAAC;IAC3D,CAAC,QAAQ,EAAE,yCAAyC,CAAC;IACrD,CAAC,OAAO,EAAE,2BAA2B,CAAC;IACtC,CAAC,UAAU,EAAE,mDAAmD,CAAC;IACjE,CAAC,QAAQ,EAAE,+CAA+C,CAAC;IAC3D,CAAC,MAAM,EAAE,mDAAmD,CAAC;IAC7D,CAAC,QAAQ,EAAE,8CAA8C,CAAC;IAC1D,CAAC,OAAO,EAAE,sEAAsE,CAAC;IACjF,CAAC,QAAQ,EAAE,0EAA0E,CAAC;IACtF,CAAC,MAAM,EAAE,6BAA6B,CAAC;IACvC,CAAC,MAAM,EAAE,gCAAgC,CAAC;IAC1C,CAAC,SAAS,EAAE,0DAA0D,CAAC;IACvE,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACjC,CAAC,UAAU,EAAE,6CAA6C,CAAC;IAC3D,CAAC,KAAK,EAAE,8CAA8C,CAAC;IACvD,CAAC,SAAS,EAAE,+DAA+D,CAAC;IAC5E,CAAC,OAAO,EAAE,8BAA8B,CAAC;IACzC,CAAC,SAAS,EAAE,4CAA4C,CAAC;IACzD,CAAC,UAAU,EAAE,uDAAuD,CAAC;IACrE,CAAC,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,MAAM,CAAC,MAAM,WAAW,GAAG,sDAAsD,CAAC;AAElF,MAAM,QAAQ,GAAG;IACf,CAAC,OAAO,EAAE,gDAAgD,CAAC;IAC3D,CAAC,QAAQ,EAAE,yCAAyC,CAAC;IACrD,CAAC,OAAO,EAAE,2BAA2B,CAAC;IACtC,CAAC,UAAU,EAAE,mDAAmD,CAAC;IACjE,CAAC,QAAQ,EAAE,+CAA+C,CAAC;IAC3D,CAAC,MAAM,EAAE,mDAAmD,CAAC;IAC7D,CAAC,QAAQ,EAAE,8CAA8C,CAAC;IAC1D,CAAC,OAAO,EAAE,sEAAsE,CAAC;IACjF,CAAC,QAAQ,EAAE,0EAA0E,CAAC;IACtF,CAAC,MAAM,EAAE,6BAA6B,CAAC;IACvC,CAAC,MAAM,EAAE,gCAAgC,CAAC;IAC1C,CAAC,SAAS,EAAE,0DAA0D,CAAC;IACvE,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACjC,CAAC,UAAU,EAAE,6CAA6C,CAAC;IAC3D,CAAC,KAAK,EAAE,8CAA8C,CAAC;IACvD,CAAC,SAAS,EAAE,+DAA+D,CAAC;IAC5E,CAAC,OAAO,EAAE,8BAA8B,CAAC;IACzC,CAAC,SAAS,EAAE,4CAA4C,CAAC;IACzD,CAAC,UAAU,EAAE,uDAAuD,CAAC;IACrE,CAAC,eAAe,EAAE,+DAA+D,CAAC;IAClF,CAAC,QAAQ,EAAE,mFAAmF,CAAC;IAC/F,CAAC,QAAQ,EAAE,mCAAmC,CAAC;IAC/C,CAAC,OAAO,EAAE,oEAAoE,CAAC;IAC/E,CAAC,MAAM,EAAE,2DAA2D,CAAC;IACrE,CAAC,MAAM,EAAE,oEAAoE,CAAC;IAC9E,CAAC,WAAW,EAAE,8BAA8B,CAAC;IAC7C,CAAC,OAAO,EAAE,8CAA8C,CAAC;IACzD,CAAC,WAAW,EAAE,gDAAgD,CAAC;IAC/D,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IACrC,CAAC,KAAK,EAAE,mCAAmC,CAAC;CACpC,CAAC;AAEX,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAEtE,MAAM,CAAC,OAAO,UAAU,KAAK;IAC3B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAChC,MAAC,IAAI,0DACoC,KAAC,IAAI,IAAC,IAAI,iCAAkB,mCAC9D,EACP,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC9B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAC9B,MAAC,IAAI,eACF,IAAI,EACL,KAAC,IAAI,IAAC,IAAI,kBAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAQ,OAAE,IAAI,KAFxC,IAAI,CAGR,CACR,CAAC,IACE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export declare const description = "Show release notes
|
|
2
|
+
export declare const description = "Show ATK release notes \u2014 recent history or a specific version";
|
|
3
3
|
export declare const options: z.ZodObject<{
|
|
4
|
+
all: z.ZodDefault<z.ZodBoolean>;
|
|
4
5
|
json: z.ZodDefault<z.ZodBoolean>;
|
|
6
|
+
prerelease: z.ZodDefault<z.ZodBoolean>;
|
|
5
7
|
}, z.core.$strip>;
|
|
8
|
+
export declare const args: z.ZodTuple<[z.ZodOptional<z.ZodString>], null>;
|
|
6
9
|
type Props = {
|
|
10
|
+
args: z.infer<typeof args>;
|
|
7
11
|
options: z.infer<typeof options>;
|
|
8
12
|
};
|
|
9
|
-
export default function ReleaseNotes({ options: { json } }: Props): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export default function ReleaseNotes({ args: [version], options: { all, json, prerelease } }: Props): import("react/jsx-runtime").JSX.Element;
|
|
10
14
|
export {};
|
|
11
15
|
//# sourceMappingURL=release-notes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-notes.d.ts","sourceRoot":"","sources":["../../src/commands/release-notes.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"release-notes.d.ts","sourceRoot":"","sources":["../../src/commands/release-notes.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,WAAW,uEAAkE,CAAC;AAE3F,eAAO,MAAM,OAAO;;;;iBAalB,CAAC;AAEH,eAAO,MAAM,IAAI,gDAEf,CAAC;AAEH,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,2CAwElG"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text, useStdout } from 'ink';
|
|
3
3
|
import { option } from 'pastel';
|
|
4
4
|
import { z } from 'zod';
|
|
@@ -8,18 +8,29 @@ import { getBreakpoint } from '../lib/breakpoints.js';
|
|
|
8
8
|
import { renderMarkdown } from '../lib/markdown.js';
|
|
9
9
|
import { renderJson, useNonInteractive } from '../lib/output.js';
|
|
10
10
|
import { getReleaseNotes } from '../lib/release-notes.js';
|
|
11
|
-
export const description = 'Show release notes
|
|
11
|
+
export const description = 'Show ATK release notes — recent history or a specific version';
|
|
12
12
|
export const options = z.object({
|
|
13
|
+
all: z
|
|
14
|
+
.boolean()
|
|
15
|
+
.default(false)
|
|
16
|
+
.describe(option({ alias: 'a', description: 'Show the full release history instead of just the most recent' })),
|
|
13
17
|
json: z
|
|
14
18
|
.boolean()
|
|
15
19
|
.default(false)
|
|
16
20
|
.describe(option({ alias: 'j', description: 'Output raw JSON (for scripting and CI)' })),
|
|
21
|
+
prerelease: z
|
|
22
|
+
.boolean()
|
|
23
|
+
.default(false)
|
|
24
|
+
.describe(option({ alias: 'p', description: 'Include pre-releases (-dev.N, betas) in the listing' })),
|
|
17
25
|
});
|
|
18
|
-
export
|
|
26
|
+
export const args = z.tuple([
|
|
27
|
+
z.string().optional().describe('A specific version to show notes for (e.g. 1.3.0)'),
|
|
28
|
+
]);
|
|
29
|
+
export default function ReleaseNotes({ args: [version], options: { all, json, prerelease } }) {
|
|
19
30
|
const { json: effectiveJson } = useNonInteractive(json);
|
|
20
31
|
const { stdout } = useStdout();
|
|
21
32
|
const bp = getBreakpoint(stdout?.columns ?? 120);
|
|
22
|
-
const state = useCommand(async (progress) => getReleaseNotes(progress), [], 'Fetching release notes...');
|
|
33
|
+
const state = useCommand(async (progress) => getReleaseNotes({ all, includePrerelease: prerelease || undefined, version }, progress), [all, prerelease, version], 'Fetching release notes...');
|
|
23
34
|
if (state.status === 'loading') {
|
|
24
35
|
return _jsx(Spinner, { message: state.message });
|
|
25
36
|
}
|
|
@@ -39,12 +50,19 @@ export default function ReleaseNotes({ options: { json } }) {
|
|
|
39
50
|
if (effectiveJson) {
|
|
40
51
|
return renderJson(data);
|
|
41
52
|
}
|
|
42
|
-
if (data.outcome === '
|
|
43
|
-
return (
|
|
53
|
+
if (data.outcome === 'empty') {
|
|
54
|
+
return _jsx(Text, { dimColor: true, children: "No releases found." });
|
|
55
|
+
}
|
|
56
|
+
if (data.outcome === 'not-found') {
|
|
57
|
+
return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { color: 'yellow', children: ["No release found for v", data.requestedVersion, "."] }), _jsx(Text, { dimColor: true, children: "Run atk release-notes to list available versions." })] }));
|
|
58
|
+
}
|
|
59
|
+
if (data.outcome === 'single') {
|
|
60
|
+
return _jsx(ReleaseEntry, { narrow: bp === 'narrow', release: data.release, showSpacer: false });
|
|
44
61
|
}
|
|
45
|
-
|
|
62
|
+
const hidden = data.total - data.releases.length;
|
|
63
|
+
return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { children: [_jsx(Text, { bold: true, children: data.releases.length }), " of ", _jsx(Text, { bold: true, children: data.total }), ' ', data.total === 1 ? 'release' : 'releases', " \u00B7 installed ", _jsxs(Text, { dimColor: true, children: ["v", data.currentVersion] }), " \u00B7 latest", ' ', _jsxs(Text, { bold: true, children: ["v", data.latestVersion] })] }), _jsx(Box, { height: 1 }), data.releases.map((release, index) => (_jsx(ReleaseEntry, { narrow: bp === 'narrow', release: release, showSpacer: index > 0 }, release.version))), hidden > 0 ? (_jsxs(_Fragment, { children: [_jsx(Box, { height: 1 }), _jsxs(Text, { dimColor: true, children: [hidden, " older not shown. Use --all to see everything."] })] })) : null] }));
|
|
46
64
|
}
|
|
47
65
|
function ReleaseEntry({ narrow, release, showSpacer }) {
|
|
48
|
-
return (_jsxs(Box, { flexDirection: 'column', children: [showSpacer ? _jsx(Box, { height: 1 }) : null, _jsxs(Text, { children: [_jsxs(Text, { bold: true, color: '#FF8800', children: ["v", release.version] }), release.channel === 'dev' ? _jsx(Text, { dimColor: true, children: " (dev)" }) : null, release.publishedAt ? _jsxs(Text, { dimColor: true, children: [" \u00B7 ", release.publishedAt.slice(0, 10)] }) : null] }), _jsx(Box, { marginTop: narrow ? 0 : 1, children: _jsx(Text, { children: renderMarkdown(release.body.trim() || '_No release notes._') }) })] }));
|
|
66
|
+
return (_jsxs(Box, { flexDirection: 'column', children: [showSpacer ? _jsx(Box, { height: 1 }) : null, _jsxs(Text, { children: [_jsxs(Text, { bold: true, color: '#FF8800', children: ["v", release.version] }), release.channel === 'dev' ? _jsx(Text, { dimColor: true, children: " (dev)" }) : null, release.publishedAt ? _jsxs(Text, { dimColor: true, children: [" \u00B7 ", release.publishedAt.slice(0, 10)] }) : null, release.installed ? _jsx(Text, { color: 'cyan', children: " \u2190 installed" }) : null, release.newer ? _jsx(Text, { color: 'green', children: " \u2726 newer" }) : null] }), _jsx(Box, { marginTop: narrow ? 0 : 1, children: _jsx(Text, { children: renderMarkdown(release.body.trim() || '_No release notes._') }) })] }));
|
|
49
67
|
}
|
|
50
68
|
//# sourceMappingURL=release-notes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-notes.js","sourceRoot":"","sources":["../../src/commands/release-notes.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,CAAC,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"release-notes.js","sourceRoot":"","sources":["../../src/commands/release-notes.tsx"],"names":[],"mappings":"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"}
|
package/build/commands/why.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ export declare const description = "Explain why an asset is installed";
|
|
|
3
3
|
export declare const options: z.ZodObject<{
|
|
4
4
|
json: z.ZodDefault<z.ZodBoolean>;
|
|
5
5
|
projectRoot: z.ZodOptional<z.ZodString>;
|
|
6
|
-
tool: z.ZodOptional<z.ZodString>;
|
|
7
6
|
type: z.ZodOptional<z.ZodEnum<{
|
|
8
7
|
skill: "skill";
|
|
9
8
|
agent: "agent";
|
|
@@ -18,6 +17,6 @@ type Props = {
|
|
|
18
17
|
args: z.infer<typeof args>;
|
|
19
18
|
options: z.infer<typeof options>;
|
|
20
19
|
};
|
|
21
|
-
export default function Why({ args: [rawName], options: { json, projectRoot,
|
|
20
|
+
export default function Why({ args: [rawName], options: { json, projectRoot, type } }: Props): import("react/jsx-runtime").JSX.Element;
|
|
22
21
|
export {};
|
|
23
22
|
//# sourceMappingURL=why.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"why.d.ts","sourceRoot":"","sources":["../../src/commands/why.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"why.d.ts","sourceRoot":"","sources":["../../src/commands/why.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,eAAO,MAAM,WAAW,sCAAsC,CAAC;AAE/D,eAAO,MAAM,OAAO;;;;;;;;;;;iBAyBlB,CAAC;AAEH,eAAO,MAAM,IAAI,iCAA+C,CAAC;AAEjE,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,2CA8F3F"}
|
package/build/commands/why.js
CHANGED
|
@@ -9,7 +9,6 @@ import { parseOrgFromName } from '../lib/org.js';
|
|
|
9
9
|
import { renderJson, useNonInteractive } from '../lib/output.js';
|
|
10
10
|
import { findProjectRoot } from '../lib/paths.js';
|
|
11
11
|
import { AssetType } from '../lib/schemas/manifest.js';
|
|
12
|
-
import { resolveToolNames } from '../lib/tool-resolver.js';
|
|
13
12
|
export const description = 'Explain why an asset is installed';
|
|
14
13
|
export const options = z.object({
|
|
15
14
|
json: z
|
|
@@ -26,30 +25,22 @@ export const options = z.object({
|
|
|
26
25
|
alias: 'P',
|
|
27
26
|
description: 'Override project root directory',
|
|
28
27
|
})),
|
|
29
|
-
tool: z
|
|
30
|
-
.string()
|
|
31
|
-
.optional()
|
|
32
|
-
.describe(option({
|
|
33
|
-
alias: 'T',
|
|
34
|
-
description: 'Target tool (e.g., claude-code)',
|
|
35
|
-
})),
|
|
36
28
|
type: AssetType.optional().describe(option({
|
|
37
29
|
alias: 't',
|
|
38
30
|
description: 'Filter by asset type (skill, agent, rule, hook, memory-template, mcp-config)',
|
|
39
31
|
})),
|
|
40
32
|
});
|
|
41
33
|
export const args = z.tuple([z.string().describe('Asset name')]);
|
|
42
|
-
export default function Why({ args: [rawName], options: { json, projectRoot,
|
|
34
|
+
export default function Why({ args: [rawName], options: { json, projectRoot, type } }) {
|
|
43
35
|
const { name, org } = parseOrgFromName(rawName);
|
|
44
36
|
const { json: effectiveJson } = useNonInteractive(json);
|
|
45
37
|
const state = useCommand(async (progress) => {
|
|
46
38
|
const projectDir = findProjectRoot(projectRoot);
|
|
47
|
-
await resolveToolNames(tool, projectDir);
|
|
48
39
|
progress('Reading lockfile...');
|
|
49
40
|
const lockfile = await readLockfile(projectDir);
|
|
50
41
|
progress('Tracing dependency chain...');
|
|
51
42
|
return traceDependencyChain(lockfile, name, type, org);
|
|
52
|
-
}, [rawName, projectRoot,
|
|
43
|
+
}, [rawName, projectRoot, type], 'Reading lockfile...');
|
|
53
44
|
if (state.status === 'loading') {
|
|
54
45
|
return _jsx(Spinner, { message: state.message });
|
|
55
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"why.js","sourceRoot":"","sources":["../../src/commands/why.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"why.js","sourceRoot":"","sources":["../../src/commands/why.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,MAAM,CAAC,MAAM,WAAW,GAAG,mCAAmC,CAAC;AAE/D,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC;SACJ,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,wCAAwC;KACtD,CAAC,CACH;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,iCAAiC;KAC/C,CAAC,CACH;IACH,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACjC,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,8EAA8E;KAC5F,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAOjE,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAS;IAC1F,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAExD,MAAM,KAAK,GAAG,UAAU,CACtB,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjB,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAEhD,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;QAEhD,QAAQ,CAAC,6BAA6B,CAAC,CAAC;QACxC,OAAO,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC,EACD,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,EAC5B,qBAAqB,CACtB,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAC,OAAO,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,UAAU,CAAC;gBAChB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAC,SAAS,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CAAC;IACzF,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAEvB,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;QACpC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;QACpC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,uBACT,MAAC,IAAI,IAAC,IAAI,yBAAG,IAAI,CAAC,IAAI,UAAS,0BAChC,EACP,MAAC,IAAI,IAAC,QAAQ,2BACR,MAAC,IAAI,IAAC,IAAI,kCAAa,IAAI,CAAC,IAAI,IAAQ,mCACvC,IACH,CACP,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,IAAI,kBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAQ,EACnC,MAAC,IAAI,IAAC,QAAQ,mBACX,GAAG,OACF,IAAI,CAAC,KAAK,CAAC,IAAI,SAAK,IAAI,CAAC,KAAK,CAAC,OAAO,IACnC,EACN,0BAA0B,IACtB,CACR,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,aAClB,KAAC,IAAI,IAAC,IAAI,kBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAQ,EACnC,MAAC,IAAI,IAAC,QAAQ,mBACX,GAAG,OACF,IAAI,CAAC,KAAK,CAAC,IAAI,SAAK,IAAI,CAAC,KAAK,CAAC,OAAO,IACnC,EACN,6BAA6B,IACzB,EACP,KAAC,IAAI,IAAC,QAAQ,iHAAkG,EAChH,MAAC,IAAI,IAAC,QAAQ,2BACR,MAAC,IAAI,IAAC,IAAI,qCAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,IAAQ,sBAChD,IACH,CACP,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,OAAO,CACL,KAAC,cAAc,IAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAI,CACnH,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAA2B;IAClD,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACrB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;aAC5B,CAAC;QACJ,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACrB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;aAC5B,CAAC;QACJ,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,OAAO;gBACL,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC;QACJ,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACrB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;aAC5B,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
+
/** Default number of releases shown in list mode before `--all` is needed. */
|
|
2
|
+
export declare const DEFAULT_RELEASE_LIMIT = 15;
|
|
1
3
|
/** Release channel. `latest` = stable; `dev` = pre-release (`-dev.N`, betas, etc.). */
|
|
2
4
|
export type ReleaseChannel = 'dev' | 'latest';
|
|
3
|
-
/** A single published release
|
|
5
|
+
/** A single published release. */
|
|
4
6
|
export interface ReleaseNote {
|
|
5
7
|
/** Raw markdown body of the GitHub release (changelog). */
|
|
6
8
|
body: string;
|
|
7
9
|
/** Resolved channel for this release. */
|
|
8
10
|
channel: ReleaseChannel;
|
|
11
|
+
/** True when this is the version currently installed. */
|
|
12
|
+
installed: boolean;
|
|
13
|
+
/** True when this version is newer than the installed CLI version. */
|
|
14
|
+
newer: boolean;
|
|
9
15
|
/** GitHub's `prerelease` flag for the release. */
|
|
10
16
|
prerelease: boolean;
|
|
11
17
|
/** ISO timestamp the release was published, or null if unknown. */
|
|
@@ -13,15 +19,35 @@ export interface ReleaseNote {
|
|
|
13
19
|
/** Semver version parsed from the release tag (leading `v` stripped). */
|
|
14
20
|
version: string;
|
|
15
21
|
}
|
|
16
|
-
/**
|
|
22
|
+
/** Options controlling which release notes are returned. */
|
|
23
|
+
export interface ReleaseNotesOptions {
|
|
24
|
+
/** Ignore the limit and return the full (channel-filtered) history. */
|
|
25
|
+
all?: boolean;
|
|
26
|
+
/** Include pre-releases. Defaults to the channel implied by the installed build. */
|
|
27
|
+
includePrerelease?: boolean;
|
|
28
|
+
/** Max releases to return in list mode (defaults to `DEFAULT_RELEASE_LIMIT`). */
|
|
29
|
+
limit?: number;
|
|
30
|
+
/** Look up a single release by version (tag normalized; ignores channel filter). */
|
|
31
|
+
version?: string;
|
|
32
|
+
}
|
|
33
|
+
/** Result of gathering release notes. */
|
|
17
34
|
export type ReleaseNotesOutcome = {
|
|
18
35
|
currentVersion: string;
|
|
19
36
|
latestVersion: string;
|
|
20
|
-
outcome: '
|
|
37
|
+
outcome: 'list';
|
|
21
38
|
releases: ReleaseNote[];
|
|
39
|
+
total: number;
|
|
40
|
+
} | {
|
|
41
|
+
currentVersion: string;
|
|
42
|
+
outcome: 'empty';
|
|
22
43
|
} | {
|
|
23
44
|
currentVersion: string;
|
|
24
|
-
outcome: '
|
|
45
|
+
outcome: 'not-found';
|
|
46
|
+
requestedVersion: string;
|
|
47
|
+
} | {
|
|
48
|
+
currentVersion: string;
|
|
49
|
+
outcome: 'single';
|
|
50
|
+
release: ReleaseNote;
|
|
25
51
|
};
|
|
26
52
|
/** Shape of a GitHub Releases API list entry (only the fields we use). */
|
|
27
53
|
interface GitHubRelease {
|
|
@@ -31,29 +57,34 @@ interface GitHubRelease {
|
|
|
31
57
|
tag_name?: string;
|
|
32
58
|
}
|
|
33
59
|
/**
|
|
34
|
-
* Fetch GitHub Releases for the CLI repo and return
|
|
35
|
-
*
|
|
36
|
-
*
|
|
60
|
+
* Fetch GitHub Releases for the CLI repo and return release notes for browsing.
|
|
61
|
+
*
|
|
62
|
+
* Without a `version`, returns the release history (newest-first), channel-filtered
|
|
63
|
+
* and capped at a limit, with each entry flagged for whether it is the installed
|
|
64
|
+
* version or newer than it. With a `version`, returns that single release's notes
|
|
65
|
+
* (pre-releases included, regardless of channel).
|
|
37
66
|
*
|
|
38
|
-
* Channel selection mirrors the update banner: pre-release builds
|
|
39
|
-
*
|
|
67
|
+
* Channel selection mirrors the update banner: pre-release builds include `-dev.N`
|
|
68
|
+
* pre-releases by default, stable builds show stable releases only — overridable
|
|
69
|
+
* via `includePrerelease`.
|
|
40
70
|
*
|
|
41
71
|
* Unlike the silent update banner, auth and network failures propagate so the
|
|
42
72
|
* command can surface them via `ErrorView`.
|
|
43
73
|
*/
|
|
44
|
-
export declare function getReleaseNotes(progress?: (message: string) => void): Promise<ReleaseNotesOutcome>;
|
|
74
|
+
export declare function getReleaseNotes(options?: ReleaseNotesOptions, progress?: (message: string) => void): Promise<ReleaseNotesOutcome>;
|
|
45
75
|
/**
|
|
46
|
-
* Pure selection logic: from raw GitHub releases,
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* version comparison are unit-testable without
|
|
76
|
+
* Pure selection logic: from raw GitHub releases, return valid releases ordered
|
|
77
|
+
* newest-first, optionally including pre-releases, with each entry flagged for
|
|
78
|
+
* whether it is the installed version or newer than it. Exported separately so
|
|
79
|
+
* channel filtering, version comparison, and flagging are unit-testable without
|
|
80
|
+
* any network access.
|
|
50
81
|
*
|
|
51
82
|
* - Tags are normalized by stripping a leading `v`; entries that aren't valid
|
|
52
83
|
* semver are skipped.
|
|
53
84
|
* - A release's channel is `dev` when GitHub's `prerelease` flag is set OR the
|
|
54
85
|
* version carries a semver pre-release component; otherwise `latest`.
|
|
55
|
-
* -
|
|
86
|
+
* - When `includePrerelease` is false, `dev` releases are dropped.
|
|
56
87
|
*/
|
|
57
|
-
export declare function selectReleaseNotes(raw: GitHubRelease[], currentVersion: string,
|
|
88
|
+
export declare function selectReleaseNotes(raw: GitHubRelease[], currentVersion: string, includePrerelease: boolean): ReleaseNote[];
|
|
58
89
|
export {};
|
|
59
90
|
//# sourceMappingURL=release-notes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-notes.d.ts","sourceRoot":"","sources":["../../src/lib/release-notes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"release-notes.d.ts","sourceRoot":"","sources":["../../src/lib/release-notes.ts"],"names":[],"mappings":"AAaA,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,uFAAuF;AACvF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE9C,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,OAAO,EAAE,cAAc,CAAC;IACxB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,KAAK,EAAE,OAAO,CAAC;IACf,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC;IAC3B,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,yCAAyC;AACzC,MAAM,MAAM,mBAAmB,GAC3B;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1G;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC5C;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAExE,0EAA0E;AAC1E,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,OAAO,GAAE,mBAAwB,EACjC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,mBAAmB,CAAC,CAqC9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,aAAa,EAAE,EACpB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,OAAO,GACzB,WAAW,EAAE,CA6Bf"}
|
|
@@ -1,21 +1,27 @@
|
|
|
1
|
-
import { gt as semverGt, prerelease as semverPrerelease, rcompare as semverRcompare, valid as semverValid } from 'semver';
|
|
1
|
+
import { eq as semverEq, gt as semverGt, prerelease as semverPrerelease, rcompare as semverRcompare, valid as semverValid, } from 'semver';
|
|
2
2
|
import { getGitHubToken } from './auth.js';
|
|
3
3
|
import { fetchWithRetry } from './fetch-retry.js';
|
|
4
4
|
import { buildGitHubHeaders, DEFAULT_CLI_REPO, httpErrorMessage } from './github.js';
|
|
5
5
|
import { CLI_VERSION, isPreRelease } from './version.js';
|
|
6
|
+
/** Default number of releases shown in list mode before `--all` is needed. */
|
|
7
|
+
export const DEFAULT_RELEASE_LIMIT = 15;
|
|
6
8
|
const RELEASES_URL = `https://api.github.com/repos/${DEFAULT_CLI_REPO}/releases?per_page=100`;
|
|
7
9
|
/**
|
|
8
|
-
* Fetch GitHub Releases for the CLI repo and return
|
|
9
|
-
* installed `CLI_VERSION`, up to and including the latest — the full gap between
|
|
10
|
-
* the installed version and the latest, ordered newest-first.
|
|
10
|
+
* Fetch GitHub Releases for the CLI repo and return release notes for browsing.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* Without a `version`, returns the release history (newest-first), channel-filtered
|
|
13
|
+
* and capped at a limit, with each entry flagged for whether it is the installed
|
|
14
|
+
* version or newer than it. With a `version`, returns that single release's notes
|
|
15
|
+
* (pre-releases included, regardless of channel).
|
|
16
|
+
*
|
|
17
|
+
* Channel selection mirrors the update banner: pre-release builds include `-dev.N`
|
|
18
|
+
* pre-releases by default, stable builds show stable releases only — overridable
|
|
19
|
+
* via `includePrerelease`.
|
|
14
20
|
*
|
|
15
21
|
* Unlike the silent update banner, auth and network failures propagate so the
|
|
16
22
|
* command can surface them via `ErrorView`.
|
|
17
23
|
*/
|
|
18
|
-
export async function getReleaseNotes(progress) {
|
|
24
|
+
export async function getReleaseNotes(options = {}, progress) {
|
|
19
25
|
progress?.('Authenticating...');
|
|
20
26
|
const token = await getGitHubToken();
|
|
21
27
|
progress?.('Fetching releases...');
|
|
@@ -24,31 +30,43 @@ export async function getReleaseNotes(progress) {
|
|
|
24
30
|
throw new Error(httpErrorMessage(response.status, 'CLI releases'));
|
|
25
31
|
}
|
|
26
32
|
const raw = (await response.json());
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
|
|
33
|
+
// A specific version lookup ignores the channel filter so you can always read
|
|
34
|
+
// the notes for any published version (including pre-releases).
|
|
35
|
+
if (options.version) {
|
|
36
|
+
const requested = normalizeTag(options.version) ?? options.version;
|
|
37
|
+
const release = selectReleaseNotes(raw, CLI_VERSION, true).find((r) => semverEq(r.version, requested));
|
|
38
|
+
return release
|
|
39
|
+
? { currentVersion: CLI_VERSION, outcome: 'single', release }
|
|
40
|
+
: { currentVersion: CLI_VERSION, outcome: 'not-found', requestedVersion: requested };
|
|
41
|
+
}
|
|
42
|
+
const includePrerelease = options.includePrerelease ?? isPreRelease();
|
|
43
|
+
const all = selectReleaseNotes(raw, CLI_VERSION, includePrerelease);
|
|
44
|
+
if (all.length === 0) {
|
|
45
|
+
return { currentVersion: CLI_VERSION, outcome: 'empty' };
|
|
31
46
|
}
|
|
47
|
+
const limit = options.all ? all.length : (options.limit ?? DEFAULT_RELEASE_LIMIT);
|
|
32
48
|
return {
|
|
33
49
|
currentVersion: CLI_VERSION,
|
|
34
|
-
latestVersion:
|
|
35
|
-
outcome: '
|
|
36
|
-
releases,
|
|
50
|
+
latestVersion: all[0].version,
|
|
51
|
+
outcome: 'list',
|
|
52
|
+
releases: all.slice(0, limit),
|
|
53
|
+
total: all.length,
|
|
37
54
|
};
|
|
38
55
|
}
|
|
39
56
|
/**
|
|
40
|
-
* Pure selection logic: from raw GitHub releases,
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* version comparison are unit-testable without
|
|
57
|
+
* Pure selection logic: from raw GitHub releases, return valid releases ordered
|
|
58
|
+
* newest-first, optionally including pre-releases, with each entry flagged for
|
|
59
|
+
* whether it is the installed version or newer than it. Exported separately so
|
|
60
|
+
* channel filtering, version comparison, and flagging are unit-testable without
|
|
61
|
+
* any network access.
|
|
44
62
|
*
|
|
45
63
|
* - Tags are normalized by stripping a leading `v`; entries that aren't valid
|
|
46
64
|
* semver are skipped.
|
|
47
65
|
* - A release's channel is `dev` when GitHub's `prerelease` flag is set OR the
|
|
48
66
|
* version carries a semver pre-release component; otherwise `latest`.
|
|
49
|
-
* -
|
|
67
|
+
* - When `includePrerelease` is false, `dev` releases are dropped.
|
|
50
68
|
*/
|
|
51
|
-
export function selectReleaseNotes(raw, currentVersion,
|
|
69
|
+
export function selectReleaseNotes(raw, currentVersion, includePrerelease) {
|
|
52
70
|
const notes = [];
|
|
53
71
|
for (const entry of raw) {
|
|
54
72
|
const version = normalizeTag(entry.tag_name);
|
|
@@ -56,17 +74,15 @@ export function selectReleaseNotes(raw, currentVersion, channel) {
|
|
|
56
74
|
continue;
|
|
57
75
|
}
|
|
58
76
|
const prerelease = entry.prerelease === true;
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
if (channel === 'latest' && releaseChannel === 'dev') {
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
if (!semverGt(version, currentVersion)) {
|
|
77
|
+
const channel = prerelease || semverPrerelease(version) !== null ? 'dev' : 'latest';
|
|
78
|
+
if (!includePrerelease && channel === 'dev') {
|
|
65
79
|
continue;
|
|
66
80
|
}
|
|
67
81
|
notes.push({
|
|
68
82
|
body: entry.body ?? '',
|
|
69
|
-
channel
|
|
83
|
+
channel,
|
|
84
|
+
installed: semverValid(currentVersion) ? semverEq(version, currentVersion) : false,
|
|
85
|
+
newer: semverValid(currentVersion) ? semverGt(version, currentVersion) : false,
|
|
70
86
|
prerelease,
|
|
71
87
|
publishedAt: entry.published_at ?? null,
|
|
72
88
|
version,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-notes.js","sourceRoot":"","sources":["../../src/lib/release-notes.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"release-notes.js","sourceRoot":"","sources":["../../src/lib/release-notes.ts"],"names":[],"mappings":"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"}
|