UNPKG

@unts/patch-package

Version:

Fix broken node modules with no fuss

127 lines 14.6 kB
"use strict"; 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==