ls-exports
Version:
CLI for `list-exports`: Given a package name and a version number, or a path to a package.json, what specifiers does it expose?
73 lines (61 loc) • 1.59 kB
JavaScript
import { join, resolve } from 'path';
import npa from 'npm-package-arg';
import { colorize } from 'json-colorizer';
import pargs from 'pargs';
const { from: arrayFrom } = Array;
const { fromEntries } = Object;
import listExports from 'list-exports';
import exportsTable from '../exportsTable.mjs';
import getPackageJSONPath from '../getPackageJSONPath.mjs';
const subcommandConfig = {
options: {
json: {
type: 'boolean',
default: false,
},
},
allowPositionals: 1,
minPositionals: 1,
};
const {
help,
command,
} = await pargs(import.meta.filename, {
subcommands: {
package: subcommandConfig,
path: subcommandConfig,
},
});
await help();
function serializer(key, value) {
if (value instanceof Set) {
return arrayFrom(value);
}
if (value instanceof Map) {
return fromEntries(arrayFrom(value));
}
return value;
}
let packageDirP;
if (command.name === 'path') {
const [pathArg] = command.positionals;
packageDirP = Promise.resolve(join(resolve(pathArg), 'package.json'));
} else if (command.name === 'package') {
const [specifier] = command.positionals;
try {
npa(specifier);
} catch {
console.error(`Invalid package specifier: ${specifier}`);
process.exitCode = 1;
process.exit();
}
packageDirP = getPackageJSONPath(specifier);
}
const promise = packageDirP.then((packageDir) => (command.values.json
? listExports(packageDir).then((x) => console.log(colorize(JSON.stringify(x, serializer))))
: exportsTable(packageDir, (x) => console.log(x))));
promise.catch((err) => {
console.error(err);
process.exitCode = 1;
});