chore: set goose binaries as executable in package.json (#8589)
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import { createRequire } from "node:module";
|
||||
import { dirname, join } from "node:path";
|
||||
|
||||
const PLATFORMS: Record<string, string> = {
|
||||
"darwin-arm64": "@aaif/goose-binary-darwin-arm64",
|
||||
"darwin-x64": "@aaif/goose-binary-darwin-x64",
|
||||
"linux-arm64": "@aaif/goose-binary-linux-arm64",
|
||||
"linux-x64": "@aaif/goose-binary-linux-x64",
|
||||
"win32-x64": "@aaif/goose-binary-win32-x64",
|
||||
};
|
||||
|
||||
/**
|
||||
* Resolves the path to the goose binary.
|
||||
*
|
||||
* Resolution order:
|
||||
* 1. `GOOSE_BINARY` environment variable (explicit override)
|
||||
* 2. Platform-specific `@aaif/goose-binary-*` optional dependency
|
||||
*
|
||||
* @throws if no binary can be found
|
||||
*/
|
||||
export function resolveGooseBinary(): string {
|
||||
const envBinary = process.env.GOOSE_BINARY;
|
||||
if (envBinary) return envBinary;
|
||||
|
||||
const key = `${process.platform}-${process.arch}`;
|
||||
const pkg = PLATFORMS[key];
|
||||
if (!pkg) {
|
||||
throw new Error(
|
||||
`No goose binary available for ${key}. Set GOOSE_BINARY to the path of a goose binary.`,
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
const require = createRequire(import.meta.url);
|
||||
const pkgDir = dirname(require.resolve(`${pkg}/package.json`));
|
||||
const binName = process.platform === "win32" ? "goose.exe" : "goose";
|
||||
return join(pkgDir, "bin", binName);
|
||||
} catch {
|
||||
throw new Error(
|
||||
`goose binary package ${pkg} is not installed. Set GOOSE_BINARY or install the native package.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user