15 lines
830 B
JavaScript
15 lines
830 B
JavaScript
import { existsSync } from 'node:fs';
|
|
import { resolve, delimiter } from 'node:path';
|
|
import { spawn } from 'node:child_process';
|
|
const local = resolve('.tools/cargo');
|
|
const executable = resolve(local,'bin',process.platform === 'win32' ? 'cargo.exe' : 'cargo');
|
|
const env = {...process.env};
|
|
if (existsSync(executable)) {
|
|
env.CARGO_HOME = local; env.RUSTUP_HOME = resolve('.tools/rustup');
|
|
const pathKey=Object.keys(env).find(key=>key.toLowerCase()==='path') || 'PATH';
|
|
env[pathKey] = `${resolve(local,'bin')}${delimiter}${env[pathKey] || ''}`;
|
|
}
|
|
const child = spawn(existsSync(executable) ? executable : 'cargo',process.argv.slice(2),{stdio:'inherit',env});
|
|
child.on('error',error=>{console.error(`Rust toolchain is required: ${error.message}`);process.exitCode=1;});
|
|
child.on('exit',code=>{process.exitCode=code ?? 1;});
|