@lvnt/release-radar 1.7.6 → 1.7.7
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/cli/package.json +1 -1
- package/cli/src/index.ts +16 -13
- package/cli/src/ui.ts +62 -18
- package/package.json +1 -1
package/cli/package.json
CHANGED
package/cli/src/index.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { DownloadTracker } from './tracker.js';
|
|
|
7
7
|
import { loadVersions } from './versions.js';
|
|
8
8
|
import { checkAndUpdate } from './updater.js';
|
|
9
9
|
import { downloadFile, updateNpmPackage } from './downloader.js';
|
|
10
|
-
import { promptSetup, promptToolSelection, type ToolChoice } from './ui.js';
|
|
10
|
+
import { promptSetup, promptToolSelection, renderTable, type ToolChoice, type TableRow } from './ui.js';
|
|
11
11
|
import { isNpmTool } from './types.js';
|
|
12
12
|
|
|
13
13
|
function getVersion(): string {
|
|
@@ -56,25 +56,28 @@ async function showStatus(): Promise<void> {
|
|
|
56
56
|
const downloaded = tracker.getAll();
|
|
57
57
|
|
|
58
58
|
console.log(chalk.bold('\nTool Status:\n'));
|
|
59
|
-
console.log(chalk.bold(' Tool Latest Downloaded Status Type'));
|
|
60
|
-
console.log(chalk.gray('─'.repeat(70)));
|
|
61
59
|
|
|
62
|
-
|
|
60
|
+
const rows: TableRow[] = versions.tools.map(tool => {
|
|
63
61
|
const record = downloaded[tool.name];
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
let status: string;
|
|
62
|
+
let status: 'new' | 'update' | 'current';
|
|
67
63
|
if (!record) {
|
|
68
|
-
status =
|
|
64
|
+
status = 'new';
|
|
69
65
|
} else if (record.version !== tool.version) {
|
|
70
|
-
status =
|
|
66
|
+
status = 'update';
|
|
71
67
|
} else {
|
|
72
|
-
status =
|
|
68
|
+
status = 'current';
|
|
73
69
|
}
|
|
74
70
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
return {
|
|
72
|
+
displayName: tool.displayName,
|
|
73
|
+
version: tool.version,
|
|
74
|
+
downloadedVersion: record?.version ?? '-',
|
|
75
|
+
status,
|
|
76
|
+
type: isNpmTool(tool) ? 'npm' : 'download',
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
renderTable(rows);
|
|
78
81
|
console.log('');
|
|
79
82
|
}
|
|
80
83
|
|
package/cli/src/ui.ts
CHANGED
|
@@ -126,24 +126,41 @@ function createToolChoice(tool: VersionsJsonTool, downloaded: DownloadedState):
|
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
export
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
console.log(chalk.bold(`\nrelease-radar-cli`));
|
|
137
|
-
console.log(chalk.gray(`Last updated: ${new Date(generatedAt).toLocaleString()}\n`));
|
|
129
|
+
export interface TableRow {
|
|
130
|
+
displayName: string;
|
|
131
|
+
version: string;
|
|
132
|
+
downloadedVersion: string;
|
|
133
|
+
status: 'new' | 'update' | 'current';
|
|
134
|
+
type: 'npm' | 'download';
|
|
135
|
+
}
|
|
138
136
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
137
|
+
export function renderTable(rows: TableRow[]): void {
|
|
138
|
+
// Calculate dynamic column widths
|
|
139
|
+
const colWidths = {
|
|
140
|
+
tool: Math.max(4, ...rows.map(r => r.displayName.length)) + 2,
|
|
141
|
+
latest: Math.max(6, ...rows.map(r => r.version.length)) + 2,
|
|
142
|
+
downloaded: Math.max(10, ...rows.map(r => r.downloadedVersion.length)) + 2,
|
|
143
|
+
status: 8,
|
|
144
|
+
type: 4,
|
|
145
|
+
};
|
|
142
146
|
|
|
143
|
-
|
|
144
|
-
|
|
147
|
+
const totalWidth = colWidths.tool + colWidths.latest + colWidths.downloaded + colWidths.status + colWidths.type + 2;
|
|
148
|
+
|
|
149
|
+
// Header
|
|
150
|
+
console.log(chalk.bold(
|
|
151
|
+
' ' +
|
|
152
|
+
'Tool'.padEnd(colWidths.tool) +
|
|
153
|
+
'Latest'.padEnd(colWidths.latest) +
|
|
154
|
+
'Downloaded'.padEnd(colWidths.downloaded) +
|
|
155
|
+
'Status'.padEnd(colWidths.status) +
|
|
156
|
+
'Type'
|
|
157
|
+
));
|
|
158
|
+
console.log(chalk.gray('─'.repeat(totalWidth)));
|
|
159
|
+
|
|
160
|
+
// Rows
|
|
161
|
+
for (const row of rows) {
|
|
145
162
|
let statusStr: string;
|
|
146
|
-
switch (
|
|
163
|
+
switch (row.status) {
|
|
147
164
|
case 'new':
|
|
148
165
|
statusStr = chalk.blue('NEW');
|
|
149
166
|
break;
|
|
@@ -154,12 +171,39 @@ export async function promptToolSelection(
|
|
|
154
171
|
statusStr = chalk.green('✓');
|
|
155
172
|
break;
|
|
156
173
|
}
|
|
157
|
-
const typeStr =
|
|
174
|
+
const typeStr = row.type === 'npm' ? chalk.magenta('npm') : chalk.cyan('wget');
|
|
175
|
+
|
|
158
176
|
console.log(
|
|
159
|
-
|
|
177
|
+
' ' +
|
|
178
|
+
row.displayName.padEnd(colWidths.tool) +
|
|
179
|
+
row.version.padEnd(colWidths.latest) +
|
|
180
|
+
row.downloadedVersion.padEnd(colWidths.downloaded) +
|
|
181
|
+
statusStr.padEnd(colWidths.status + 5) + // +5 for chalk color codes
|
|
182
|
+
typeStr
|
|
160
183
|
);
|
|
161
|
-
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export async function promptToolSelection(
|
|
188
|
+
tools: VersionsJsonTool[],
|
|
189
|
+
downloaded: DownloadedState,
|
|
190
|
+
generatedAt: string
|
|
191
|
+
): Promise<ToolChoice[]> {
|
|
192
|
+
const choices: ToolChoice[] = tools.map((tool) => createToolChoice(tool, downloaded));
|
|
193
|
+
|
|
194
|
+
console.log(chalk.bold(`\nrelease-radar-cli`));
|
|
195
|
+
console.log(chalk.gray(`Last updated: ${new Date(generatedAt).toLocaleString()}\n`));
|
|
196
|
+
|
|
197
|
+
// Convert to table rows and display
|
|
198
|
+
const rows: TableRow[] = choices.map(choice => ({
|
|
199
|
+
displayName: choice.displayName,
|
|
200
|
+
version: choice.version,
|
|
201
|
+
downloadedVersion: choice.downloadedVersion ?? '-',
|
|
202
|
+
status: choice.status,
|
|
203
|
+
type: choice.type === 'npm' ? 'npm' : 'download',
|
|
204
|
+
}));
|
|
162
205
|
|
|
206
|
+
renderTable(rows);
|
|
163
207
|
console.log('');
|
|
164
208
|
|
|
165
209
|
const { selected } = await inquirer.prompt([
|