kimi-code / apps /vscode /scripts /local-cli.mjs
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
6a2bc3b verified
Raw
History Blame Contribute Delete
1.74 kB
import { spawnSync } from 'node:child_process';
import { readFileSync } from 'node:fs';
import { dirname, resolve } from 'node:path';
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
export function resolveLocalCli(packageName, executableName) {
let packageJsonPath;
try {
packageJsonPath = require.resolve(`${packageName}/package.json`);
} catch (error) {
throw new Error(
`Local CLI dependency ${packageName} is not installed. Run pnpm install; runtime CLI downloads are disabled.`,
{ cause: error },
);
}
const manifest = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
const relativeBin = typeof manifest.bin === 'string' ? manifest.bin : manifest.bin?.[executableName];
if (typeof relativeBin !== 'string') {
throw new Error(`${packageName} does not declare the expected "${executableName}" binary.`);
}
return resolve(dirname(packageJsonPath), relativeBin);
}
export function runLocalCli(packageName, executableName, args, options = {}) {
const cliPath = resolveLocalCli(packageName, executableName);
const result = spawnSync(process.execPath, [cliPath, ...args], {
cwd: options.cwd,
env: options.env ?? process.env,
encoding: options.encoding,
stdio: options.stdio ?? 'inherit',
});
if (result.error !== undefined) {
throw new Error(`Unable to start local ${executableName}: ${result.error.message}`, {
cause: result.error,
});
}
if (result.status !== 0) {
const output = [result.stdout, result.stderr].filter(Boolean).join('');
throw new Error(
`Local ${executableName} exited with code ${result.status ?? 'unknown'}${output ? `:\n${output}` : ''}`,
);
}
return result;
}