Add npm package for bd with native binaries (bd-febc)
Implements @beads/bd npm package for easy installation in Node.js environments, especially Claude Code for Web. Features: - Automatic platform-specific binary download during postinstall - CLI wrapper that invokes native bd binary - Full feature parity with standalone bd - Works with SessionStart hooks for auto-installation Package structure: - bin/bd.js: Node.js CLI wrapper - scripts/postinstall.js: Downloads correct binary from GitHub releases - scripts/test.js: Verification tests - Comprehensive documentation (6 guides) Published to npm: https://www.npmjs.com/package/@beads/bd Benefits vs WASM: - Full SQLite support (no custom VFS) - Better performance (native vs WASM) - Simpler implementation and maintenance - All commands work identically Closes bd-febc, bd-be7a, bd-e2e6, bd-f282, bd-87a0, bd-b54c 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
54
npm-package/bin/bd.js
Executable file
54
npm-package/bin/bd.js
Executable file
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const { spawn } = require('child_process');
|
||||
const path = require('path');
|
||||
const os = require('os');
|
||||
const fs = require('fs');
|
||||
|
||||
// Determine the platform-specific binary name
|
||||
function getBinaryPath() {
|
||||
const platform = os.platform();
|
||||
const arch = os.arch();
|
||||
|
||||
let binaryName = 'bd';
|
||||
if (platform === 'win32') {
|
||||
binaryName = 'bd.exe';
|
||||
}
|
||||
|
||||
// Binary is stored in the package's bin directory
|
||||
const binaryPath = path.join(__dirname, binaryName);
|
||||
|
||||
if (!fs.existsSync(binaryPath)) {
|
||||
console.error(`Error: bd binary not found at ${binaryPath}`);
|
||||
console.error('This may indicate that the postinstall script failed to download the binary.');
|
||||
console.error(`Platform: ${platform}, Architecture: ${arch}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
return binaryPath;
|
||||
}
|
||||
|
||||
// Execute the native binary with all arguments passed through
|
||||
function main() {
|
||||
const binaryPath = getBinaryPath();
|
||||
|
||||
// Spawn the native bd binary with all command-line arguments
|
||||
const child = spawn(binaryPath, process.argv.slice(2), {
|
||||
stdio: 'inherit',
|
||||
env: process.env
|
||||
});
|
||||
|
||||
child.on('error', (err) => {
|
||||
console.error(`Error executing bd binary: ${err.message}`);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
child.on('exit', (code, signal) => {
|
||||
if (signal) {
|
||||
process.exit(1);
|
||||
}
|
||||
process.exit(code || 0);
|
||||
});
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user