@haochuan9421/urm
Version:
Universal Registry Manager, manage npm and yarn registry easily.
102 lines (88 loc) • 2.62 kB
JavaScript
const fs = require("fs");
const ini = require("ini");
const { Table } = require("console-table-printer");
const { urmModes, urmRcFile, presetRegistries } = require("./const");
// 获取 urm 的配置
function getUrmConfig() {
return fs.existsSync(urmRcFile) ? ini.parse(fs.readFileSync(urmRcFile, "utf-8")) : {};
}
// 设置 urm 的配置
function setUrmConfig(urmConfig) {
fs.writeFileSync(urmRcFile, ini.stringify(urmConfig));
}
// 获取 urm 当前的默认模式
function getUrmDefaultMode() {
const urmConfig = getUrmConfig();
return urmConfig.mode || urmModes[0];
}
// 判断是否是有效的 HTTP URL
function isValidHttpUrl(str) {
let url;
try {
url = new URL(str);
} catch (_) {
return false;
}
return url.protocol === "http:" || url.protocol === "https:";
}
// 获取全部可选的 registry
function getAvailableRegistries() {
const urmConfig = getUrmConfig();
const registries = {
...urmConfig.presetRegistries,
...urmConfig.customRegistries,
};
return Object.keys(registries).map((name) => {
const registryItem = registries[name];
return {
name,
registry: registryItem.registry,
defaultOnSelectToUse: registryItem.defaultOnSelectToUse,
};
});
}
// 以表格的形式展示全部可选的 registry
function printAvailableRegistriesTable(curRegistries = []) {
const availableRegistries = getAvailableRegistries();
if (!availableRegistries.length) {
console.log(i18n.A025);
return;
}
const availableRegistriesTable = new Table({
title: i18n.A059,
columns: [
{ name: "name", alignment: "left" },
{ name: "registry", alignment: "left" },
],
});
availableRegistries.forEach((availableRegistry) => {
// 高亮显示已被使用的 registry
const isUsing = curRegistries.some((curRegistry) => new URL(curRegistry.registry).href === new URL(availableRegistry.registry).href);
availableRegistriesTable.addRow(
{
name: `${isUsing ? "* " : ""}${availableRegistry.name}`,
registry: availableRegistry.registry,
},
{
color: isUsing ? "green" : "crimson",
}
);
});
availableRegistriesTable.printTable();
}
// 恢复可选的 registry 列表到预设状态
function restoreAvailableRegistries() {
const urmConfig = getUrmConfig();
urmConfig.presetRegistries = presetRegistries;
urmConfig.customRegistries = {};
setUrmConfig(urmConfig);
}
module.exports = {
getUrmConfig,
setUrmConfig,
getUrmDefaultMode,
isValidHttpUrl,
getAvailableRegistries,
printAvailableRegistriesTable,
restoreAvailableRegistries,
};