@ast-grep/cli
Version:
Search and Rewrite code at large scale using precise AST pattern
50 lines (44 loc) • 1.49 kB
JavaScript
let fs = require('fs');
let path = require('path');
let parts = [process.platform, process.arch];
if (process.platform === 'linux') {
const {MUSL, familySync} = require('detect-libc');
if (familySync() === MUSL) {
parts.push('musl');
} else if (process.arch === 'arm') {
parts.push('gnueabihf');
} else {
parts.push('gnu');
}
} else if (process.platform === 'win32') {
parts.push('msvc');
}
let binary = process.platform === 'win32' ? 'ast-grep.exe' : 'ast-grep';
let alternative = process.platform === 'win32' ? 'sg.exe' : 'sg';
let pkgPath;
try {
pkgPath = path.dirname(require.resolve(`@ast-grep/cli-${parts.join('-')}/package.json`));
} catch (err) {
pkgPath = path.join(__dirname, '..', 'target', 'release');
if (!fs.existsSync(path.join(pkgPath, binary))) {
pkgPath = path.join(__dirname, '..', 'target', 'debug');
}
}
try {
fs.linkSync(path.join(pkgPath, binary), path.join(__dirname, binary));
fs.linkSync(path.join(pkgPath, binary), path.join(__dirname, alternative));
} catch (err) {
try {
fs.copyFileSync(path.join(pkgPath, binary), path.join(__dirname, binary));
fs.copyFileSync(path.join(pkgPath, binary), path.join(__dirname, alternative));
} catch (err) {
console.error('Failed to move @ast-grep/cli binary into place.');
process.exit(1);
}
}
if (process.platform === 'win32') {
try {
fs.unlinkSync(path.join(__dirname, 'sg'));
fs.unlinkSync(path.join(__dirname, 'ast-grep'));
} catch (err) {}
}