import { Cliffy, Path } from "./deps.ts"; import { init } from "./global.ts"; import setupCMD from "./commands/setup.ts"; import initCMD from "./commands/init.ts"; import bumpCMD from "./commands/bump.ts"; import publishCMD from "./commands/publish.ts"; import deprecateCMD from "./commands/deprecate.ts"; const HOME_FOLDER = Deno.env.get("HOME") || Deno.env.get("USERPROFILE") || ""; type CommandHandler = (...opts: any[]) => void | Promise; let command: CommandHandler | undefined = undefined; let opts: any[] = []; // const debounce = (fnc: any) => (...args: any[]) => { // new Promise((y) => setTimeout(y, 0)).then(() => fnc(...args)); // }; //Put function call into queue const commandWrapper = (cmd: CommandHandler) => { return (...params: any[]) => { command = cmd; opts = params; }; }; const flags = await new Cliffy.Command() .name("denreg") .version("0.1.6") .description("CLI for the Open Source DenReg package registry") .option("-i, --interactive [interactive:boolean]", "Interactive mode", { default: true, global: true, }) .option("-c, --config ", "Config file", { default: Path.resolve(HOME_FOLDER, ".denreg"), global: true, }) .option("-v, --verbose [verbose:boolean]", "Verbose", { default: false, global: true, }) .command( "setup", new Cliffy.Command() .description("Configure cli") .action(commandWrapper(setupCMD)) ) .command( "publish", new Cliffy.Command() .description("Upload package") .action(commandWrapper(publishCMD)) ) .command( "init", new Cliffy.Command() .description("Create meta.json") .action(commandWrapper(initCMD)) ) .command( "bump", new Cliffy.Command() .complete("major|minor|patch", () => ["major", "minor", "patch"]) .arguments("") .description("Change package version") .action(commandWrapper(bumpCMD)) ) .command( "deprecate", new Cliffy.Command() .description("Deprecate package") .action(commandWrapper(deprecateCMD)) ) .command("completions", new Cliffy.CompletionsCommand()) .parse(Deno.args); await init(flags.options); if (command) { await Promise.resolve((command as CommandHandler)(...opts)); }