UNPKG

@bleed-believer/path-alias

Version:
32 lines (31 loc) 1.14 kB
import { getCommandMetadata } from "./get-command-metadata.js"; import { Argv } from "../argv/index.js"; import { CommandNotFoundError } from "./command-not-found.error.js"; export class CommandRouter { #constructors = []; #argv; constructor(constructors, injection){ this.#constructors = constructors; this.#argv = injection?.argv ?? new Argv(); } async execute() { for (const constructor of this.#constructors){ const metadata = getCommandMetadata(constructor); if (metadata.path.at(-1) !== '*' && metadata.path.length !== this.#argv.main.length) { continue; } const isMatch = metadata.path.every((part, index)=>{ if (part.startsWith(':') || part === '*') { return true; } else { return this.#argv.main[index] === part; } }); if (isMatch) { const instance = new constructor(); return instance.execute(this.#argv); } } throw new CommandNotFoundError(); } }