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";
export default new Command()
.name('script')
.description('Runs a script from a Viapak package')
.arguments('<package:string> <script_name:string>')
.action(async (_options, ...args) => {
const [namespace_and_package, script_name] = args;
const [namespace, package_and_version] = namespace_and_package.split('/');
const [package_name, package_version = 'latest'] = (package_and_version || '').split('@');
if(!namespace || !namespace.startsWith('@') || !package_name || !package_version) {
console.warn(`"${namespace_and_package}" is not a valid package name\n`);
Deno.exit(0);
}
let package_info: Record<string, any> = {};
try {
package_info = await (
await fetch(`${HOST_URL}/api/v1/packages/${namespace}/${package_name}@${package_version || 'latest'}`, {
headers: {
Authorization: `Bearer ${TOKEN}`
}
})
).json();
} catch(_) { /**/ }
const scripts = package_info.scripts ?? [];
if(scripts.includes(script_name.toLowerCase())) {
await import(`${HOST_URL}/${namespace}/${package_name}@${package_version}/___.viapak/${script_name.toLowerCase()}.ts`);
} else if(scripts.length) {
console.log(`\n${package_name}@${package_version} does not have a script called "${script_name}".\nAvailable scripts: "${package_info.scripts.join('", "')}"\n`);
} else {
console.log(`\n${namespace}/${package_name}@${package_version} has no scripts.\n`);
}
});