import { Command } from "./dependencies.ts"; import { runAndReturnStdout, runCommand } from "./utilities.ts"; async function main(): Promise { const { options } = await new Command() .name("codium-extensions") .description("Small managing utility for VS Codium extensions!") .option( "-f, --file ", "The file to use for storing data.", { default: new URL("../data/codium-extensions.txt", import.meta.url).pathname, }, ) .option("--install", "Install saved extensions.") .option("--list", "List installed extensions.") .option("--list-saved", "List saved extensions.") .option("--save", "Save installed extensions.") .parse(Deno.args); if (options.install) { const extensions = await getSavedExtensions(options.file); await runCommand("codium", { args: [ ...extensions.flatMap((id) => ["--install-extension", id]), ], }); } if (options.list) { const extensions = await getInstalledExtensions(); console.log(extensions.join("\n")); } if (options.listSaved) { const extensions = await getSavedExtensions(options.file); console.log(extensions.join("\n")); } if (options.save) { const extensions = await getInstalledExtensions(); await Deno.writeTextFile(options.file, extensions.join("\n") + "\n"); console.log(`Wrote ${extensions.length} extensions to ${options.file}`); } } /** Run `codium --list-extensions` and return all the extensions as an array. */ async function getInstalledExtensions(): Promise { const extensions = await runAndReturnStdout("codium", { args: ["--list-extensions"], }); return extensions.trim().split("\n"); } /** Get all the saved extensions from the codium-extensions data file. */ async function getSavedExtensions(file: string): Promise { const extensions = await Deno.readTextFile(file); return extensions.trim().split("\n"); } if (import.meta.main) { void main(); }