2025-06-24 11:41:30 -07:00
#!/usr/bin/env node
/ * *
* CLI Wrapper Script
*
* This script serves as a wrapper for the Brainy CLI , ensuring that command - line arguments
* are properly passed to the CLI when invoked through npm scripts .
* /
2025-07-02 11:32:06 -07:00
import { spawn , execSync } from 'child_process'
2025-06-24 11:41:30 -07:00
import { fileURLToPath } from 'url'
import { dirname , join } from 'path'
import fs from 'fs'
// Get the directory of the current module
const _ _filename = fileURLToPath ( import . meta . url )
const _ _dirname = dirname ( _ _filename )
// Path to the actual CLI script
const cliPath = join ( _ _dirname , 'dist' , 'cli.js' )
// Check if the CLI script exists
if ( ! fs . existsSync ( cliPath ) ) {
2025-07-02 11:32:06 -07:00
// Check if we're running in a global installation context
const isGlobalInstall = _ _dirname . includes ( 'node_modules' ) && ! _ _dirname . includes ( 'node_modules/.' )
if ( isGlobalInstall ) {
console . error ( ` Error: CLI script not found at ${ cliPath } ` )
console . error ( 'This is likely because the CLI was not built during package installation.' )
console . error ( 'Please reinstall the package with:' )
console . error ( 'npm uninstall -g @soulcraft/brainy' )
console . error ( 'npm install -g @soulcraft/brainy --legacy-peer-deps' )
process . exit ( 1 )
} else {
// In a local development context, try to build the CLI
console . log ( ` CLI script not found at ${ cliPath } . Building CLI... ` )
try {
// Run the build:cli script
execSync ( 'npm run build:cli' , { stdio : 'inherit' } )
// Check again if the CLI script exists after building
if ( ! fs . existsSync ( cliPath ) ) {
console . error ( ` Error: Failed to build CLI script at ${ cliPath } ` )
process . exit ( 1 )
}
console . log ( 'CLI built successfully.' )
} catch ( error ) {
console . error ( ` Error building CLI: ${ error . message } ` )
console . error ( 'Make sure you have the necessary dependencies installed.' )
process . exit ( 1 )
}
}
2025-06-24 11:41:30 -07:00
}
// Special handling for version flags
if ( process . argv . includes ( '--version' ) || process . argv . includes ( '-V' ) ) {
// Read version directly from package.json to ensure it's always correct
try {
const packageJsonPath = join ( _ _dirname , 'package.json' )
const packageJson = JSON . parse ( fs . readFileSync ( packageJsonPath , 'utf8' ) )
console . log ( packageJson . version )
process . exit ( 0 )
} catch ( error ) {
console . error ( 'Error loading version information:' , error . message )
process . exit ( 1 )
}
}
// Forward all arguments to the CLI script
const args = process . argv . slice ( 2 )
// Check if npm is passing --force flag
// When npm runs with --force, it sets the npm_config_force environment variable
if ( process . env . npm _config _force === 'true' && args . includes ( 'clear' ) && ! args . includes ( '--force' ) && ! args . includes ( '-f' ) ) {
args . push ( '--force' )
}
const cli = spawn ( 'node' , [ cliPath , ... args ] , { stdio : 'inherit' } )
cli . on ( 'close' , ( code ) => {
process . exit ( code )
} )