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
JavaScript
;
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;