@bleed-believer/path-alias
Version:
Assign path alias using tsconfig.json file
32 lines (31 loc) • 1.14 kB
JavaScript
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();
}
}