UNPKG

verdaccio

Version:

A lightweight private npm proxy registry

215 lines (213 loc) 8.15 kB
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