@unts/patch-package
Version:
Fix broken node modules with no fuss
127 lines • 14.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPatchDetailsFromCliString = exports.getPackageDetailsFromPatchFilename = exports.parseNameAndVersion = void 0;
const path_1 = require("./path");
function parseNameAndVersion(str) {
const parts = str
.split("+")
.map((s) => s.trim())
.filter(Boolean);
if (parts.length === 0) {
return null;
}
if (parts.length === 1) {
return { packageName: str };
}
const versionIndex = parts.findIndex((part) => part.match(/^\d+\.\d+\.\d+.*$/));
if (versionIndex === -1) {
const [scope, name] = parts;
return { packageName: `${scope}/${name}` };
}
const nameParts = parts.slice(0, versionIndex);
let packageName;
switch (nameParts.length) {
case 0:
return null;
case 1:
packageName = nameParts[0];
break;
case 2:
const [scope, name] = nameParts;
packageName = `${scope}/${name}`;
break;
default:
return null;
}
const version = parts[versionIndex];
const sequenceParts = parts.slice(versionIndex + 1);
if (sequenceParts.length === 0) {
return { packageName, version };
}
// expect sequenceParts[0] to be a number, strip leading 0s
const sequenceNumber = parseInt(sequenceParts[0].replace(/^0+/, ""), 10);
if (isNaN(sequenceNumber)) {
return null;
}
switch (sequenceParts.length) {
case 1: {
return { packageName, version, sequenceNumber };
}
case 2: {
return {
packageName,
version,
sequenceName: sequenceParts[1],
sequenceNumber,
};
}
default: {
return null;
}
}
return null;
}
exports.parseNameAndVersion = parseNameAndVersion;
function getPackageDetailsFromPatchFilename(patchFilename) {
const parts = patchFilename
.replace(/(\.dev)?\.patch$/, "")
.split("++")
.map(parseNameAndVersion)
.filter((x) => x !== null);
if (parts.length === 0) {
return null;
}
const lastPart = parts[parts.length - 1];
if (!lastPart.version) {
return null;
}
return {
name: lastPart.packageName,
version: lastPart.version,
path: (0, path_1.join)("node_modules", parts.map(({ packageName: name }) => name).join("/node_modules/")),
patchFilename,
pathSpecifier: parts.map(({ packageName: name }) => name).join("/"),
humanReadablePathSpecifier: parts
.map(({ packageName: name }) => name)
.join(" => "),
isNested: parts.length > 1,
packageNames: parts.map(({ packageName: name }) => name),
isDevOnly: patchFilename.endsWith(".dev.patch"),
sequenceName: lastPart.sequenceName,
sequenceNumber: lastPart.sequenceNumber,
};
}
exports.getPackageDetailsFromPatchFilename = getPackageDetailsFromPatchFilename;
function getPatchDetailsFromCliString(specifier) {
const parts = specifier.split("/");
const packageNames = [];
let scope = null;
for (let i = 0; i < parts.length; i++) {
if (parts[i].startsWith("@")) {
if (scope) {
return null;
}
scope = parts[i];
}
else {
if (scope) {
packageNames.push(`${scope}/${parts[i]}`);
scope = null;
}
else {
packageNames.push(parts[i]);
}
}
}
const path = (0, path_1.join)("node_modules", packageNames.join("/node_modules/"));
return {
packageNames,
path,
name: packageNames[packageNames.length - 1],
humanReadablePathSpecifier: packageNames.join(" => "),
isNested: packageNames.length > 1,
pathSpecifier: specifier,
};
}
exports.getPatchDetailsFromCliString = getPatchDetailsFromCliString;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZURldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUGFja2FnZURldGFpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQTZCO0FBbUI3QixTQUFnQixtQkFBbUIsQ0FDakMsR0FBVztJQU9YLE1BQU0sS0FBSyxHQUFHLEdBQUc7U0FDZCxLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDcEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxJQUFJLENBQUE7S0FDWjtJQUNELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtLQUM1QjtJQUNELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQ2hDLENBQUE7SUFDRCxJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtRQUN2QixNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUMzQixPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUE7S0FDM0M7SUFDRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUM5QyxJQUFJLFdBQVcsQ0FBQTtJQUNmLFFBQVEsU0FBUyxDQUFDLE1BQU0sRUFBRTtRQUN4QixLQUFLLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQTtRQUNiLEtBQUssQ0FBQztZQUNKLFdB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LENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFBO0lBRXRFLE9BQU87UUFDTCxZQUFZO1FBQ1osSUFBSTtRQUNKLElBQUksRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0MsMEJBQTBCLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckQsUUFBUSxFQUFFLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNqQyxhQUFhLEVBQUUsU0FBUztLQUN6QixDQUFBO0FBQ0gsQ0FBQztBQW5DRCxvRUFtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSBcIi4vcGF0aFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFja2FnZURldGFpbHMge1xuICBodW1hblJlYWRhYmxlUGF0aFNwZWNpZmllcjogc3RyaW5nXG4gIHBhdGhTcGVjaWZpZXI6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGlzTmVzdGVkOiBib29sZWFuXG4gIHBhY2thZ2VOYW1lczogc3RyaW5nW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXRjaGVkUGFja2FnZURldGFpbHMgZXh0ZW5kcyBQYWNrYWdlRGV0YWlscyB7XG4gIHZlcnNpb246IHN0cmluZ1xuICBwYXRjaEZpbGVuYW1lOiBzdHJpbmdcbiAgaXNEZXZPbmx5OiBib29sZWFuXG4gIHNlcXVlbmNlTmFtZT86IHN0cmluZ1xuICBzZXF1ZW5jZU51bWJlcj86IG51bWJlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOYW1lQW5kVmVyc2lvbihcbiAgc3RyOiBzdHJpbmcsXG4pOiB7XG4gIHBhY2thZ2VOYW1lOiBzdHJpbmdcbiAgdmVyc2lvbj86IHN0cmluZ1xuICBzZXF1ZW5jZU5hbWU/OiBzdHJpbmdcbiAgc2VxdWVuY2VOdW1iZXI/OiBudW1iZXJcbn0gfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSBzdHJcbiAgICAuc3BsaXQoXCIrXCIpXG4gICAgLm1hcCgocykgPT4gcy50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHsgcGFja2FnZU5hbWU6IHN0ciB9XG4gIH1cbiAgY29uc3QgdmVyc2lvbkluZGV4ID0gcGFydHMuZmluZEluZGV4KChwYXJ0KSA9PlxuICAgIHBhcnQubWF0Y2goL15cXGQrXFwuXFxkK1xcLlxcZCsuKiQvKSxcbiAgKVxuICBpZiAodmVyc2lvbkluZGV4ID09PSAtMSkge1xuICAgIGNvbnN0IFtzY29wZSwgbmFtZV0gPSBwYXJ0c1xuICAgIHJldHVybiB7IHBhY2thZ2VOYW1lOiBgJHtzY29wZX0vJHtuYW1lfWAgfVxuICB9XG4gIGNvbnN0IG5hbWVQYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIHZlcnNpb25JbmRleClcbiAgbGV0IHBhY2thZ2VOYW1lXG4gIHN3aXRjaCAobmFtZVBhcnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBudWxsXG4gICAgY2FzZSAxOlxuICAgICAgcGFja2FnZU5hbWUgPSBuYW1lUGFydHNbMF1cbiAgICAgIGJyZWFrXG4gICAgY2FzZSAyOlxuICAgICAgY29uc3QgW3Njb3BlLCBuYW1lXSA9IG5hbWVQYXJ0c1xuICAgICAgcGFja2FnZU5hbWUgPSBgJHtzY29wZX0vJHtuYW1lfWBcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gcGFydHNbdmVyc2lvbkluZGV4XVxuICBjb25zdCBzZXF1ZW5jZVBhcnRzID0gcGFydHMuc2xpY2UodmVyc2lvbkluZGV4ICsgMSlcbiAgaWYgKHNlcXVlbmNlUGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgcGFja2FnZU5hbWUsIHZlcnNpb24gfVxuICB9XG5cbiAgLy8gZXhwZWN0IHNlcXVlbmNlUGFydHNbMF0gdG8gYmUgYSBudW1iZXIsIHN0cmlwIGxlYWRpbmcgMHNcbiAgY29uc3Qgc2VxdWVuY2VOdW1iZXIgPSBwYXJzZUludChzZXF1ZW5jZVBhcnRzWzBdLnJlcGxhY2UoL14wKy8sIFwiXCIpLCAxMClcbiAgaWYgKGlzTmFOKHNlcXVlbmNlTnVtYmVyKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgc3dpdGNoIChzZXF1ZW5jZVBhcnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMToge1xuICAgICAgcmV0dXJuIHsgcGFja2FnZU5hbWUsIHZlcnNpb24sIHNlcXVlbmNlTnVtYmVyIH1cbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgc2VxdWVuY2VOYW1lOiBzZXF1ZW5jZVBhcnRzWzFdLFxuICAgICAgICBzZXF1ZW5jZU51bWJlcixcbiAgICAgIH1cbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2thZ2VEZXRhaWxzRnJvbVBhdGNoRmlsZW5hbWUoXG4gIHBhdGNoRmlsZW5hbWU6IHN0cmluZyxcbik6IFBhdGNoZWRQYWNrYWdlRGV0YWlscyB8IG51bGwge1xuICBjb25zdCBwYXJ0cyA9IHBhdGNoRmlsZW5hbWVcbiAgICAucmVwbGFjZSgvKFxcLmRldik/XFwucGF0Y2gkLywgXCJcIilcbiAgICAuc3BsaXQoXCIrK1wiKVxuICAgIC5tYXAocGFyc2VOYW1lQW5kVmVyc2lvbilcbiAgICAuZmlsdGVyKCh4KTogeCBpcyBOb25OdWxsYWJsZTx0eXBlb2YgeD4gPT4geCAhPT0gbnVsbClcblxuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGxhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV1cblxuICBpZiAoIWxhc3RQYXJ0LnZlcnNpb24pIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBsYXN0UGFydC5wYWNrYWdlTmFtZSxcbiAgICB2ZXJzaW9uOiBsYXN0UGFydC52ZXJzaW9uLFxuICAgIHBhdGg6IGpvaW4oXG4gICAgICBcIm5vZGVfbW9kdWxlc1wiLFxuICAgICAgcGFydHMubWFwKCh7IHBhY2thZ2VOYW1lOiBuYW1lIH0pID0+IG5hbWUpLmpvaW4oXCIvbm9kZV9tb2R1bGVzL1wiKSxcbiAgICApLFxuICAgIHBhdGNoRmlsZW5hbWUsXG4gICAgcGF0aFNwZWNpZmllcjogcGFydHMubWFwKCh7IHBhY2thZ2VOYW1lOiBuYW1lIH0pID0+IG5hbWUpLmpvaW4oXCIvXCIpLFxuICAgIGh1bWFuUmVhZGFibGVQYXRoU3BlY2lmaWVyOiBwYXJ0c1xuICAgICAgLm1hcCgoeyBwYWNrYWdlTmFtZTogbmFtZSB9KSA9PiBuYW1lKVxuICAgICAgLmpvaW4oXCIgPT4gXCIpLFxuICAgIGlzTmVzdGVkOiBwYXJ0cy5sZW5ndGggPiAxLFxuICAgIHBhY2thZ2VOYW1lczogcGFydHMubWFwKCh7IHBhY2thZ2VOYW1lOiBuYW1lIH0pID0+IG5hbWUpLFxuICAgIGlzRGV2T25seTogcGF0Y2hGaWxlbmFtZS5lbmRzV2l0aChcIi5kZXYucGF0Y2hcIiksXG4gICAgc2VxdWVuY2VOYW1lOiBsYXN0UGFydC5zZXF1ZW5jZU5hbWUsXG4gICAgc2VxdWVuY2VOdW1iZXI6IGxhc3RQYXJ0LnNlcXVlbmNlTnVtYmVyLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRjaERldGFpbHNGcm9tQ2xpU3RyaW5nKFxuICBzcGVjaWZpZXI6IHN0cmluZyxcbik6IFBhY2thZ2VEZXRhaWxzIHwgbnVsbCB7XG4gIGNvbnN0IHBhcnRzID0gc3BlY2lmaWVyLnNwbGl0KFwiL1wiKVxuXG4gIGNvbnN0IHBhY2thZ2VOYW1lcyA9IFtdXG5cbiAgbGV0IHNjb3BlOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocGFydHNbaV0uc3RhcnRzV2l0aChcIkBcIikpIHtcbiAgICAgIGlmIChzY29wZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgc2NvcGUgPSBwYXJ0c1tpXVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgcGFja2FnZU5hbWVzLnB1c2goYCR7c2NvcGV9LyR7cGFydHNbaV19YClcbiAgICAgICAgc2NvcGUgPSBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWNrYWdlTmFtZXMucHVzaChwYXJ0c1tpXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXRoID0gam9pbihcIm5vZGVfbW9kdWxlc1wiLCBwYWNrYWdlTmFtZXMuam9pbihcIi9ub2RlX21vZHVsZXMvXCIpKVxuXG4gIHJldHVybiB7XG4gICAgcGFja2FnZU5hbWVzLFxuICAgIHBhdGgsXG4gICAgbmFtZTogcGFja2FnZU5hbWVzW3BhY2thZ2VOYW1lcy5sZW5ndGggLSAxXSxcbiAgICBodW1hblJlYWRhYmxlUGF0aFNwZWNpZmllcjogcGFja2FnZU5hbWVzLmpvaW4oXCIgPT4gXCIpLFxuICAgIGlzTmVzdGVkOiBwYWNrYWdlTmFtZXMubGVuZ3RoID4gMSxcbiAgICBwYXRoU3BlY2lmaWVyOiBzcGVjaWZpZXIsXG4gIH1cbn1cbiJdfQ==