@alexanderjeurissen/yarn-bundle
Version:
Bundler for global yarn packages
44 lines (43 loc) • 1.88 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPackageDetails = exports.fetchPackageInfo = exports.fetchGlobalNodeModules = exports.execAsync = void 0;
const child_process_1 = require("child_process");
const chalk_1 = __importDefault(require("chalk"));
exports.execAsync = async (cmd) => {
return new Promise((resolve) => {
child_process_1.exec(cmd, (error, stdout, stderr) => {
if (error) {
console.error(chalk_1.default.red(error));
}
if (stderr) {
console.error(chalk_1.default.red(stderr));
}
resolve(stdout ? stdout : stderr);
});
});
};
exports.fetchGlobalNodeModules = async () => {
const stdout = await exports.execAsync("yarn global --json --no-progress list");
const entries = JSON.parse(`[${stdout.trim().split("\n").join(",")}]`);
const listEntries = entries.filter((entry) => entry["type"] === "list");
const infoEntries = entries.filter((entry) => entry["type"] === "info");
return { entries, listEntries, infoEntries };
};
exports.fetchPackageInfo = async (packageName) => {
const result = await exports.execAsync(`yarn --json info ${packageName}`);
return JSON.parse(result)["data"];
};
exports.getPackageDetails = (options) => async (nodePackage) => {
const { data } = nodePackage;
const [, name, version] = data.match(/^"(.*)@(.*)" has binaries/);
const details = { name, version };
// NOTE: only fetch description if --describe flag is passed
if (options.describe) {
const { description } = await exports.fetchPackageInfo(name);
details["description"] = description;
}
return details;
};