diff --git a/packages/driver/src/cli.mts b/packages/driver/src/cli.mts index 652e9dfdc..229e59871 100644 --- a/packages/driver/src/cli.mts +++ b/packages/driver/src/cli.mts @@ -16,6 +16,8 @@ import Debug from "debug"; import which from "which"; import { quote } from "shell-quote"; +import { type Result } from "./typeutil"; + const debug = Debug("edgedb:cli"); const IS_TTY = process.stdout.isTTY; @@ -32,18 +34,6 @@ interface Package { installref: string; } -interface Ok { - tag: "Ok"; - stdout: string | Buffer; -} - -interface Err { - tag: "Err"; - error: Error & SpawnSyncReturns; -} - -type Result = Ok | Err; - debug("Process argv:", process.argv); // n.b. Using `npx`, the 3rd argument is the script name, unlike // `node` where the 2nd argument is the script name. @@ -259,12 +249,12 @@ function runEdgeDbCli( args: string[], pathToCli: string, execOptions: ExecSyncOptions = { stdio: "inherit" }, -): Result { +): Result> { const command = quote([pathToCli, ...args]); debug(`Running EdgeDB CLI: ${command}`); try { const result = execSync(command, execOptions); - return { tag: "Ok", stdout: result }; + return { tag: "Ok", value: result }; } catch (error: unknown) { return { tag: "Err", @@ -412,7 +402,7 @@ function getInstallDir(cliPath: string): string { debug(" - Failed to get install directory from CLI:", result.error); throw result.error; } - const installDir = result.stdout.toString().trim(); + const installDir = result.value.toString().trim(); debug(" - Install directory:", installDir); return installDir; } diff --git a/packages/driver/src/typeutil.ts b/packages/driver/src/typeutil.ts index 95cc63cfe..adbd94345 100644 --- a/packages/driver/src/typeutil.ts +++ b/packages/driver/src/typeutil.ts @@ -1,3 +1,15 @@ export type Mutable = { -readonly [K in keyof T]: T[K]; }; + +export interface Ok { + tag: "Ok"; + value: T; +} + +export interface Err { + tag: "Err"; + error: ErrorT; +} + +export type Result = Ok | Err;