verdaccio
Version:
A lightweight private npm proxy registry
215 lines (213 loc) • 8.15 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_runtime = require("../_virtual/_rolldown/runtime.js");
const require_lib_constants = require("./constants.js");
const require_lib_logger_index = require("./logger/index.js");
let lodash = require("lodash");
lodash = require_runtime.__toESM(lodash);
let _verdaccio_core = require("@verdaccio/core");
let _verdaccio_utils = require("@verdaccio/utils");
let debug = require("debug");
debug = require_runtime.__toESM(debug);
let node_path = require("node:path");
node_path = require_runtime.__toESM(node_path);
let semver = require("semver");
semver = require_runtime.__toESM(semver);
let _verdaccio_config = require("@verdaccio/config");
//#region src/lib/utils.ts
var debug$1 = (0, debug.default)("verdaccio:lib:utils");
var { getBadData, getBadRequest, getCode, getConflict, getForbidden, getInternalError, getNotFound, getServiceUnavailable, getUnauthorized } = _verdaccio_core.errorUtils;
function initLogger(logConfig) {
if (logConfig.logs) {
logConfig.log = logConfig.logs;
_verdaccio_core.warningUtils.emit(_verdaccio_core.warningUtils.Codes.VERWAR002);
}
debug$1("initializing logger with config: %o", logConfig.log);
require_lib_logger_index.setup(logConfig.log);
}
function addScope(scope, packageName) {
return `@${scope}/${packageName}`;
}
/**
* Check whether an element is an Object
* @param {*} obj the element
* @return {Boolean}
*/
var isObject = _verdaccio_core.validationUtils.isObject;
/**
* @deprecated not used un v6
*/
function isObjectOrArray(obj) {
return lodash.default.isObject(obj) && lodash.default.isNull(obj) === false;
}
function tagVersion(data, version, tag) {
if (tag && data["dist-tags"][tag] !== version && semver.default.parse(version, true)) {
data[require_lib_constants.DIST_TAGS][tag] = version;
return true;
}
return false;
}
/**
* Gets version from a package object taking into account semver weirdness.
* @return {String} return the semantic version of a package
*/
function getVersion(pkg, version) {
if (lodash.default.isNil(pkg.versions[version]) === false) return pkg.versions[version];
try {
version = semver.default.parse(version, true);
for (const versionItem in pkg.versions) if (version.compare(semver.default.parse(versionItem, true)) === 0) return pkg.versions[versionItem];
} catch {
return;
}
}
/**
* Flatten arrays of tags.
* @param {*} data
*/
function normalizeDistTags(pkg) {
let sorted;
if (!pkg["dist-tags"].latest) {
sorted = _verdaccio_core.pkgUtils.semverSort(Object.keys(pkg.versions));
if (sorted && sorted.length) pkg[require_lib_constants.DIST_TAGS].latest = sorted.pop();
}
for (const tag in pkg[require_lib_constants.DIST_TAGS]) if (lodash.default.isArray(pkg["dist-tags"][tag])) if (pkg["dist-tags"][tag].length) {
sorted = _verdaccio_core.pkgUtils.semverSort(pkg[require_lib_constants.DIST_TAGS][tag]);
if (sorted.length) pkg[require_lib_constants.DIST_TAGS][tag] = sorted.pop();
} else delete pkg[require_lib_constants.DIST_TAGS][tag];
else if (lodash.default.isString(pkg["dist-tags"][tag])) {
if (!semver.default.parse(pkg["dist-tags"][tag], true)) delete pkg[require_lib_constants.DIST_TAGS][tag];
}
}
var parseIntervalTable = {
"": 1e3,
ms: 1,
s: 1e3,
m: 60 * 1e3,
h: 3600 * 1e3,
d: 864e5,
w: 7 * 864e5,
M: 30 * 864e5,
y: 365 * 864e5
};
/**
* Parse an internal string to number
* @param {*} interval
* @return {Number}
*/
function parseInterval(interval) {
if (typeof interval === "number") return interval * 1e3;
let result = 0;
let last_suffix = Infinity;
interval.split(/\s+/).forEach(function(x) {
if (!x) return;
const m = x.match(/^((0|[1-9][0-9]*)(\.[0-9]+)?)(ms|s|m|h|d|w|M|y|)$/);
if (!m || parseIntervalTable[m[4]] >= last_suffix || m[4] === "" && last_suffix !== Infinity) throw Error("invalid interval: " + interval);
last_suffix = parseIntervalTable[m[4]];
result += Number(m[1]) * parseIntervalTable[m[4]];
});
return result;
}
var ErrorCode = {
getConflict,
getBadData,
getBadRequest,
getInternalError,
getUnauthorized,
getForbidden,
getServiceUnavailable,
getNotFound,
getCode
};
function sortByName(packages, orderAscending = true) {
return packages.slice().sort(function(a, b) {
const comparatorNames = a.name.toLowerCase() < b.name.toLowerCase();
return orderAscending ? comparatorNames ? -1 : 1 : comparatorNames ? 1 : -1;
});
}
function deleteProperties(propertiesToDelete, objectItem) {
lodash.default.forEach(propertiesToDelete, (property) => {
delete objectItem[property];
});
return objectItem;
}
/**
* parse package readme - markdown/ascii
* @param {String} packageName name of package
* @param {String} readme package readme
* @return {String} converted html template
*/
function parseReadme(packageName, readme) {
if (lodash.default.isEmpty(readme) === false) return readme;
require_lib_logger_index.logger.info({ packageName }, "@{packageName}: No readme found");
return "ERROR: No README data found!";
}
function encodeScopedUri(packageName) {
return packageName.replace(/\//g, "%2f");
}
function hasDiffOneKey(versions) {
return Object.keys(versions).length !== 1;
}
function isVersionValid(packageMeta, packageVersion) {
if (!(typeof packageVersion !== "undefined")) return false;
return Object.keys(packageMeta.versions).includes(packageVersion);
}
function isRelatedToDeprecation(pkgInfo) {
const { versions } = pkgInfo;
for (const version in versions) if (Object.prototype.hasOwnProperty.call(versions[version], "deprecated")) return true;
return false;
}
var resolveConfigPath = function(storageLocation, file) {
return node_path.default.resolve(node_path.default.dirname(storageLocation), file);
};
function logHTTPSWarning(storageLocation) {
require_lib_logger_index.logger.fatal([
"You have enabled HTTPS and need to specify either ",
" \"https.key\" and \"https.cert\" or ",
" \"https.pfx\" and optionally \"https.passphrase\" ",
"to run https server",
"",
"To quickly create self-signed certificate, use:",
" $ openssl genrsa -out " + resolveConfigPath(storageLocation, require_lib_constants.keyPem) + " 2048",
" $ openssl req -new -sha256 -key " + resolveConfigPath(storageLocation, require_lib_constants.keyPem) + " -out " + resolveConfigPath(storageLocation, require_lib_constants.csrPem),
" $ openssl x509 -req -in " + resolveConfigPath(storageLocation, require_lib_constants.csrPem) + " -signkey " + resolveConfigPath(storageLocation, require_lib_constants.keyPem) + " -out " + resolveConfigPath(storageLocation, require_lib_constants.certPem),
"",
"And then add to config file (" + storageLocation + "):",
" https:",
` key: ${resolveConfigPath(storageLocation, require_lib_constants.keyPem)}`,
` cert: ${resolveConfigPath(storageLocation, require_lib_constants.certPem)}`
].join("\n"));
process.exit(2);
}
function hasLogin(config) {
return lodash.default.isNil(config?.web?.login) || config?.web?.login === true;
}
/**
* Check whether any version in a package manifest has a tarball URL
* that matches the given filename.
*/
function hasTarball(pkg, filename) {
return Object.values(pkg.versions || {}).some((version) => version.dist?.tarball?.endsWith("/" + filename));
}
//#endregion
exports.ErrorCode = ErrorCode;
exports.addScope = addScope;
exports.buildToken = _verdaccio_utils.buildToken;
exports.deleteProperties = deleteProperties;
exports.encodeScopedUri = encodeScopedUri;
exports.getVersion = getVersion;
exports.hasDiffOneKey = hasDiffOneKey;
exports.hasLogin = hasLogin;
exports.hasTarball = hasTarball;
exports.initLogger = initLogger;
exports.isObject = isObject;
exports.isObjectOrArray = isObjectOrArray;
exports.isRelatedToDeprecation = isRelatedToDeprecation;
exports.isVersionValid = isVersionValid;
exports.logHTTPSWarning = logHTTPSWarning;
exports.normalizeDistTags = normalizeDistTags;
exports.parseConfigFile = _verdaccio_config.parseConfigFile;
exports.parseInterval = parseInterval;
exports.parseReadme = parseReadme;
exports.resolveConfigPath = resolveConfigPath;
exports.sortByName = sortByName;
exports.tagVersion = tagVersion;
//# sourceMappingURL=utils.js.map