init project
This commit is contained in:
+74
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env node
|
||||
import process from 'node:process';
|
||||
import {readFileSync} from 'node:fs';
|
||||
import {parseArgs} from 'node:util';
|
||||
import {whichCommand, whichCommandAll} from './index.js';
|
||||
|
||||
const help = `
|
||||
Usage
|
||||
$ which-command <command> …
|
||||
|
||||
Options
|
||||
--all, -a List all matching paths, not just the first
|
||||
--silent, -s Suppress output; the exit code still reflects whether all commands were found
|
||||
|
||||
Examples
|
||||
$ which-command node
|
||||
/usr/local/bin/node
|
||||
|
||||
$ which-command --all node
|
||||
/usr/local/bin/node
|
||||
/opt/homebrew/bin/node
|
||||
|
||||
Exits with code 1 if any of the commands could not be found.
|
||||
`;
|
||||
|
||||
let flags;
|
||||
let commands;
|
||||
try {
|
||||
({values: flags, positionals: commands} = parseArgs({
|
||||
allowPositionals: true,
|
||||
options: {
|
||||
all: {type: 'boolean', short: 'a', default: false},
|
||||
silent: {type: 'boolean', short: 's', default: false},
|
||||
help: {type: 'boolean', short: 'h', default: false},
|
||||
version: {type: 'boolean', default: false},
|
||||
},
|
||||
}));
|
||||
} catch (error) {
|
||||
console.error(error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (flags.version) {
|
||||
const {version} = JSON.parse(readFileSync(new URL('package.json', import.meta.url), 'utf8'));
|
||||
console.log(version);
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
if (flags.help) {
|
||||
console.log(help);
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
if (commands.length === 0) {
|
||||
console.error(help);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
let allFound = true;
|
||||
for (const command of commands) {
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
const paths = flags.all ? await whichCommandAll(command) : [await whichCommand(command)].filter(Boolean);
|
||||
|
||||
if (paths.length === 0) {
|
||||
allFound = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!flags.silent) {
|
||||
console.log(paths.join('\n'));
|
||||
}
|
||||
}
|
||||
|
||||
process.exit(allFound ? 0 : 1);
|
||||
Reference in New Issue
Block a user