1.1.2•Updated a month ago
import { Command } from "jsr:@cliffy/command@1.0.0-rc.7";
import { HOST_URL, TOKEN } from "../config.ts";
import { Sort } from "../../utils/sort_utils.ts";
import { fetchExternal } from "../utils/fetch_external.ts";
export default new Command()
.name('info')
.alias('status')
.description('Gets information about a Viapak package')
.arguments('<package:string>')
.action(async (_options, ...args) => {
const [namespace_and_package] = args;
const [namespace, package_and_version] = namespace_and_package.split('/');
const [package_name, package_version = 'latest'] = package_and_version.split('@');
try {
console.log(`FETCHING `, `${HOST_URL}/api/v1/packages/${namespace}/${package_name}@${package_version || 'latest'}`);
const package_info_request = await fetchExternal(`${HOST_URL}/api/v1/packages/${namespace}/${package_name}@${package_version || 'latest'}`, {
headers: {
Authorization: `Bearer ${TOKEN}`
}
});
if(!package_info_request.ok) {
console.error(`Error: Could not get info for ${namespace}/${package_name}`);
console.error(` ╰╴ ${package_info_request.status} ${package_info_request.statusText}`);
return;
}
const package_info = await package_info_request.json() as Viapak.Package.Clean | null;
if(!package_info) {
console.error(`Error: Could not get info for ${namespace}/${package_name}`);
console.error(` ╰╴ Invalid response body`);
return;
}
console.log(`\n${package_info.namespace}${package_info.name}\n\n`);
const versions_to_show = 4;
let versions = `${package_info.versions.all.sort(Sort.Version.Descending).filter((_, i) => i < versions_to_show).join(', ')}`;
if(package_info.versions.all.length > versions_to_show) versions = versions + ` (+ ${package_info.versions.all.length - versions_to_show} more)`;
const info: [string, string][] = [
['Latest version', package_info.versions.latest || '?'],
['Available versions', versions],
]
if(package_info.scripts.length) {
info.push(['Scripts', `${package_info.scripts.join(', ')}`])
}
for(const [name, value] of info) {
console.log(' ', name.padEnd(20), value);
}
if(package_info.deprecated) {
console.warn('!', "DEPRECATED");
}
console.log();
} catch(_: any) {
console.log(`\nSomething went wrong while fetching information for "${package_name}@${package_version}"\n${_.stack}\n`);
}
});