@alexanderjeurissen/yarn-bundle
Version:
Bundler for global yarn packages
63 lines (62 loc) • 2.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const chalk_1 = __importDefault(require("chalk"));
const clear_1 = __importDefault(require("clear"));
const figlet_1 = __importDefault(require("figlet"));
const commander_1 = __importDefault(require("commander"));
const fs_1 = require("fs");
const util_1 = require("./util");
const lineReader = require("line-reader"); // eslint-disable-line @typescript-eslint/no-var-requires
clear_1.default();
console.log(chalk_1.default.green(figlet_1.default.textSync("Yarn Bundle", { horizontalLayout: "full" })));
console.log(chalk_1.default.greenBright("brought to you by @alexanderjeurissen"));
commander_1.default
.version("0.0.1")
.description("A CLI for bundling global node modules")
.option("-d, --dump", "Write all globally installed node_modules into a *Yarnfile* file.")
.option("-D, --describe", "dump adds a description comment above each line, unless the dependency does not have a description.")
.option("-i, --install", "Install all dependencies from the *Yarnfile* file")
.parse(process.argv);
const Dump = async (options) => {
const { infoEntries } = await util_1.fetchGlobalNodeModules();
console.log(chalk_1.default.yellow(`NOTE: found ${infoEntries.length} global node modules managed by yarn..`));
console.log("");
const nodePackages = await Promise.all(infoEntries.map(util_1.getPackageDetails(options)));
const data = nodePackages
.map(({ name, version, description }) => {
console.log(chalk_1.default.blue(name) + "@" + chalk_1.default.green(version));
return `${description ? `# ${description} \n` : ""}${name}@${version}`;
})
.join("\n");
fs_1.writeFile("Yarnfile", data, (err) => {
if (err) {
console.error(chalk_1.default.red(err));
return;
}
console.log(chalk_1.default.bgGreen(chalk_1.default.black("entries in Yarnfile successfully installed")));
});
};
const Install = async (options) => {
lineReader.eachLine("Yarnfile", async (line) => {
if (line[0] !== "#") {
const [, name, version] = line.match("(.*)@(.*)");
console.log("* installing " + chalk_1.default.blue(name) + "@" + chalk_1.default.green(version));
await util_1.execAsync(`yarn global add ${line}`);
}
}, (err) => {
if (err)
throw err;
console.log(chalk_1.default.bgGreen(chalk_1.default.black("entries successfully written to ./Yarnfile")));
});
};
// NOTE: dump global installed node packages to yarn_bundle
if (commander_1.default.dump) {
Dump(commander_1.default);
}
else if (commander_1.default.install) {
Install(commander_1.default);
}