UNPKG

swap-lock-registry

Version:

A CLI tool to swap the registry URL in the lock file without having to remove it

70 lines (69 loc) 2.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.traitPackage = exports.readFile = exports.fetchPackageFromRegistry = exports.trimString = void 0; const fs_1 = require("fs"); const got_1 = require("got"); const ssri_1 = require("ssri"); const logger_1 = require("./logger"); const NPM_REGISTRY_RE = /https?:\/\/registry\.npmjs\.org/g; const IGNORE_REGEX = [ /^https?:\/\/.*/g, /^git.*/g, /^[^\/]+\/[^\/]+(#.*)?/g, /^file:.*/g, ]; const RESOLVED_IGNORE_REGEX = [/^git.*/g, /^file:.*/g]; function trimString(str, char = ' ') { let i = 0; let j = str.length - 1; while (i < str.length && str[i] === char) i++; while (j >= 0 && str[j] === char) j--; return str.substring(i, j + 1); } exports.trimString = trimString; const processedPackages = {}; async function fetchPackageFromRegistry(url, name, version) { var _a; (_a = processedPackages[name]) !== null && _a !== void 0 ? _a : (processedPackages[name] = (await got_1.default.get(`${url}/${name}`, { responseType: 'json', retry: 0, })).body); return processedPackages[name].versions[version]; } exports.fetchPackageFromRegistry = fetchPackageFromRegistry; async function readFile(path) { try { return await fs_1.promises.readFile(path, 'utf8'); } catch (error) { throw new Error(`Could not read '${path}'!`); } } exports.readFile = readFile; async function traitPackage(obj, pkg, name, source, opts) { var _a; const { url, lockFile, ignore, tarballWithShaSum, ignoreReplaced } = opts; const resolved = (_a = obj[pkg]) === null || _a === void 0 ? void 0 : _a.resolved; if (IGNORE_REGEX.some((reg) => source.match(reg)) || RESOLVED_IGNORE_REGEX.some((reg) => resolved === null || resolved === void 0 ? void 0 : resolved.match(reg)) || ignore.some((reg) => name.match(reg))) { logger_1.logger.warning(lockFile, `Ignoring ${name}@${source}`); return; } if (ignoreReplaced && (resolved === null || resolved === void 0 ? void 0 : resolved.startsWith(url))) { return; } const version = obj[pkg].version; const newPackage = await fetchPackageFromRegistry(url, name, version); const { shasum, integrity } = newPackage.dist; let tarball = newPackage.dist.tarball; if (!url.match(NPM_REGISTRY_RE) && tarball.match(NPM_REGISTRY_RE)) { tarball = tarball.replace(NPM_REGISTRY_RE, url); } obj[pkg].resolved = tarballWithShaSum ? `${tarball}#${shasum}` : tarball; obj[pkg].integrity = integrity !== null && integrity !== void 0 ? integrity : (0, ssri_1.fromHex)(shasum, 'sha1').toString(); logger_1.logger.progress(lockFile, `${name}@${version}`); } exports.traitPackage = traitPackage;