From 48a673dc09037ab20f1ef012f302c131142d0ed1 Mon Sep 17 00:00:00 2001 From: Endeavorance Date: Thu, 29 May 2025 08:52:39 -0400 Subject: [PATCH] Cleanup --- src/cli.ts | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index 191fd58..d27544a 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -58,19 +58,19 @@ function parseCommand(command: string): Command { * @param fromPath The path to start searching from * @returns The path to the rundir, or null if not found */ -function findNearestRundir(fromPath?: string): string | null { +function getRundirPath(fromPath?: string): string { const currentDir = fromPath ?? process.cwd(); - const potentialPath = path.join(currentDir, ".run"); + const potentialPath = path.resolve(currentDir, ".run"); if (currentDir === path.dirname(currentDir)) { - return null; + throw new NoRundirError(); } if (existsSync(potentialPath)) { return potentialPath; } - return findNearestRundir(path.dirname(currentDir)); + return getRundirPath(path.dirname(currentDir)); } /** @@ -79,14 +79,12 @@ function findNearestRundir(fromPath?: string): string | null { * @param name The name of the script * @returns The absolute path to the script */ -function makeScriptPath(name: string): string { - const rundir = findNearestRundir(); +function getScriptPath(name: string): string { + return path.resolve(getRundirPath(), name); +} - if (!rundir) { - throw new NoRundirError(); - } - - return path.join(rundir, name); +async function scriptExists(name: string): Promise { + return Bun.file(getScriptPath(name)).exists(); } /** @@ -100,13 +98,13 @@ function makeScriptPath(name: string): string { * @param name The name of the script to find the path of */ async function findScriptPath(name: string): Promise { - const currentRundir = findNearestRundir(); + const currentRundir = getRundirPath(); if (!currentRundir) { throw new NoRundirError(); } - const expectedPath = path.join(currentRundir, name); + const expectedPath = path.resolve(currentRundir, name); const checkFile = Bun.file(expectedPath); @@ -184,8 +182,9 @@ async function readScriptData(scriptName: string): Promise { */ async function ls(scriptName?: string) { if (scriptName) { - const pathname = await findScriptPath(scriptName); - if (pathname === null) { + const pathname = getScriptPath(scriptName); + const exists = await scriptExists(pathname); + if (!exists) { throw new CLIError(`Script "${scriptName}" not found.`); } @@ -193,7 +192,7 @@ async function ls(scriptName?: string) { return; } - const currentRundir = findNearestRundir(); + const currentRundir = getRundirPath(); const filesInDir = new Glob(`${currentRundir}/*`).scan(); const scriptLines: string[] = []; @@ -216,14 +215,7 @@ async function ls(scriptName?: string) { * @command */ async function which() { - const nearest = findNearestRundir(); - - if (!nearest) { - console.error("No rundir found in the current directory tree."); - process.exit(1); - } - - console.log(path.resolve(nearest)); + console.log(getRundirPath()); } /** @@ -231,7 +223,7 @@ async function which() { * @command */ async function newScript(name: string) { - const scriptPath = makeScriptPath(name); + const scriptPath = getScriptPath(name); const scriptFile = Bun.file(scriptPath); let template = DEFAULT_TEMPLATE;