UNPKG

@naandalist/patch-package

Version:
131 lines 15 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; } const humanReadablePathSpecifier = parts .map(({ packageName: name }) => name) .join(" => "); const path = (0, path_1.join)("node_modules", parts.map(({ packageName: name }) => name).join("/node_modules/")); return { name: lastPart.packageName, version: lastPart.version, humanReadablePathSpecifier, isDevOnly: patchFilename.endsWith(".dev.patch"), isNested: parts.length > 1, packageNames: parts.map(({ packageName: name }) => name), path, patchFilename, pathSpecifier: parts.map(({ packageName: name }) => name).join("/"), sequenceName: lastPart.sequenceName, sequenceNumber: lastPart.sequenceNumber, workspacePath: "", }; } 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 { humanReadablePathSpecifier: packageNames.join(" => "), isNested: packageNames.length > 1, name: packageNames[packageNames.length - 1], packageNames, path, pathSpecifier: specifier, workspacePath: "", }; } exports.getPatchDetailsFromCliString = getPatchDetailsFromCliString; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZURldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUGFja2FnZURldGFpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQTZCO0FBb0I3QixTQUFnQixtQkFBbUIsQ0FBQyxHQUFXO0lBTTdDLE1BQU0sS0FBSyxHQUFHLEdBQUc7U0FDZCxLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDcEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxJQUFJLENBQUE7S0FDWjtJQUNELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtLQUM1QjtJQUNELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQ2hDLENBQUE7SUFDRCxJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtRQUN2QixNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUMzQixPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUE7S0FDM0M7SUFDRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUM5QyxJQUFJLFdBQVcsQ0FBQTtJQUNmLFFBQVEsU0FBUyxDQUFDLE1BQU0sRUFBRTtRQUN4QixLQUFLLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQTtRQUNiLEtBQUssQ0FBQztZQUNKLFdB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S0FDRjtJQUVELE1BQU0sSUFBSSxHQUFHLElBQUEsV0FBSSxFQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtJQUV0RSxPQUFPO1FBQ0wsMEJBQTBCLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckQsUUFBUSxFQUFFLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNqQyxJQUFJLEVBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLFlBQVk7UUFDWixJQUFJO1FBQ0osYUFBYSxFQUFFLFNBQVM7UUFDeEIsYUFBYSxFQUFFLEVBQUU7S0FDbEIsQ0FBQTtBQUNILENBQUM7QUFuQ0Qsb0VBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gXCIuL3BhdGhcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VEZXRhaWxzIHtcbiAgaHVtYW5SZWFkYWJsZVBhdGhTcGVjaWZpZXI6IHN0cmluZ1xuICBpc05lc3RlZDogYm9vbGVhblxuICBuYW1lOiBzdHJpbmdcbiAgcGFja2FnZU5hbWVzOiBzdHJpbmdbXVxuICBwYXRoOiBzdHJpbmdcbiAgcGF0aFNwZWNpZmllcjogc3RyaW5nXG4gIHdvcmtzcGFjZVBhdGg6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhdGNoZWRQYWNrYWdlRGV0YWlscyBleHRlbmRzIFBhY2thZ2VEZXRhaWxzIHtcbiAgaXNEZXZPbmx5OiBib29sZWFuXG4gIHBhdGNoRmlsZW5hbWU6IHN0cmluZ1xuICB2ZXJzaW9uOiBzdHJpbmdcbiAgc2VxdWVuY2VOYW1lPzogc3RyaW5nXG4gIHNlcXVlbmNlTnVtYmVyPzogbnVtYmVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU5hbWVBbmRWZXJzaW9uKHN0cjogc3RyaW5nKToge1xuICBwYWNrYWdlTmFtZTogc3RyaW5nXG4gIHZlcnNpb24/OiBzdHJpbmdcbiAgc2VxdWVuY2VOYW1lPzogc3RyaW5nXG4gIHNlcXVlbmNlTnVtYmVyPzogbnVtYmVyXG59IHwgbnVsbCB7XG4gIGNvbnN0IHBhcnRzID0gc3RyXG4gICAgLnNwbGl0KFwiK1wiKVxuICAgIC5tYXAoKHMpID0+IHMudHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7IHBhY2thZ2VOYW1lOiBzdHIgfVxuICB9XG4gIGNvbnN0IHZlcnNpb25JbmRleCA9IHBhcnRzLmZpbmRJbmRleCgocGFydCkgPT5cbiAgICBwYXJ0Lm1hdGNoKC9eXFxkK1xcLlxcZCtcXC5cXGQrLiokLyksXG4gIClcbiAgaWYgKHZlcnNpb25JbmRleCA9PT0gLTEpIHtcbiAgICBjb25zdCBbc2NvcGUsIG5hbWVdID0gcGFydHNcbiAgICByZXR1cm4geyBwYWNrYWdlTmFtZTogYCR7c2NvcGV9LyR7bmFtZX1gIH1cbiAgfVxuICBjb25zdCBuYW1lUGFydHMgPSBwYXJ0cy5zbGljZSgwLCB2ZXJzaW9uSW5kZXgpXG4gIGxldCBwYWNrYWdlTmFtZVxuICBzd2l0Y2ggKG5hbWVQYXJ0cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gbnVsbFxuICAgIGNhc2UgMTpcbiAgICAgIHBhY2thZ2VOYW1lID0gbmFtZVBhcnRzWzBdXG4gICAgICBicmVha1xuICAgIGNhc2UgMjpcbiAgICAgIGNvbnN0IFtzY29wZSwgbmFtZV0gPSBuYW1lUGFydHNcbiAgICAgIHBhY2thZ2VOYW1lID0gYCR7c2NvcGV9LyR7bmFtZX1gXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgdmVyc2lvbiA9IHBhcnRzW3ZlcnNpb25JbmRleF1cbiAgY29uc3Qgc2VxdWVuY2VQYXJ0cyA9IHBhcnRzLnNsaWNlKHZlcnNpb25JbmRleCArIDEpXG4gIGlmIChzZXF1ZW5jZVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IHBhY2thZ2VOYW1lLCB2ZXJzaW9uIH1cbiAgfVxuXG4gIC8vIGV4cGVjdCBzZXF1ZW5jZVBhcnRzWzBdIHRvIGJlIGEgbnVtYmVyLCBzdHJpcCBsZWFkaW5nIDBzXG4gIGNvbnN0IHNlcXVlbmNlTnVtYmVyID0gcGFyc2VJbnQoc2VxdWVuY2VQYXJ0c1swXS5yZXBsYWNlKC9eMCsvLCBcIlwiKSwgMTApXG4gIGlmIChpc05hTihzZXF1ZW5jZU51bWJlcikpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHN3aXRjaCAoc2VxdWVuY2VQYXJ0cy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6IHtcbiAgICAgIHJldHVybiB7IHBhY2thZ2VOYW1lLCB2ZXJzaW9uLCBzZXF1ZW5jZU51bWJlciB9XG4gICAgfVxuICAgIGNhc2UgMjoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHNlcXVlbmNlTmFtZTogc2VxdWVuY2VQYXJ0c1sxXSxcbiAgICAgICAgc2VxdWVuY2VOdW1iZXIsXG4gICAgICB9XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlRGV0YWlsc0Zyb21QYXRjaEZpbGVuYW1lKFxuICBwYXRjaEZpbGVuYW1lOiBzdHJpbmcsXG4pOiBQYXRjaGVkUGFja2FnZURldGFpbHMgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSBwYXRjaEZpbGVuYW1lXG4gICAgLnJlcGxhY2UoLyhcXC5kZXYpP1xcLnBhdGNoJC8sIFwiXCIpXG4gICAgLnNwbGl0KFwiKytcIilcbiAgICAubWFwKHBhcnNlTmFtZUFuZFZlcnNpb24pXG4gICAgLmZpbHRlcigoeCk6IHggaXMgTm9uTnVsbGFibGU8dHlwZW9mIHg+ID0+IHggIT09IG51bGwpXG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBsYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG5cbiAgaWYgKCFsYXN0UGFydC52ZXJzaW9uKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGh1bWFuUmVhZGFibGVQYXRoU3BlY2lmaWVyID0gcGFydHNcbiAgICAubWFwKCh7IHBhY2thZ2VOYW1lOiBuYW1lIH0pID0+IG5hbWUpXG4gICAgLmpvaW4oXCIgPT4gXCIpXG5cbiAgY29uc3QgcGF0aCA9IGpvaW4oXG4gICAgXCJub2RlX21vZHVsZXNcIixcbiAgICBwYXJ0cy5tYXAoKHsgcGFja2FnZU5hbWU6IG5hbWUgfSkgPT4gbmFtZSkuam9pbihcIi9ub2RlX21vZHVsZXMvXCIpLFxuICApXG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBsYXN0UGFydC5wYWNrYWdlTmFtZSxcbiAgICB2ZXJzaW9uOiBsYXN0UGFydC52ZXJzaW9uLFxuICAgIGh1bWFuUmVhZGFibGVQYXRoU3BlY2lmaWVyLFxuICAgIGlzRGV2T25seTogcGF0Y2hGaWxlbmFtZS5lbmRzV2l0aChcIi5kZXYucGF0Y2hcIiksXG4gICAgaXNOZXN0ZWQ6IHBhcnRzLmxlbmd0aCA+IDEsXG4gICAgcGFja2FnZU5hbWVzOiBwYXJ0cy5tYXAoKHsgcGFja2FnZU5hbWU6IG5hbWUgfSkgPT4gbmFtZSksXG4gICAgcGF0aCxcbiAgICBwYXRjaEZpbGVuYW1lLFxuICAgIHBhdGhTcGVjaWZpZXI6IHBhcnRzLm1hcCgoeyBwYWNrYWdlTmFtZTogbmFtZSB9KSA9PiBuYW1lKS5qb2luKFwiL1wiKSxcbiAgICBzZXF1ZW5jZU5hbWU6IGxhc3RQYXJ0LnNlcXVlbmNlTmFtZSxcbiAgICBzZXF1ZW5jZU51bWJlcjogbGFzdFBhcnQuc2VxdWVuY2VOdW1iZXIsXG4gICAgd29ya3NwYWNlUGF0aDogXCJcIixcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0Y2hEZXRhaWxzRnJvbUNsaVN0cmluZyhcbiAgc3BlY2lmaWVyOiBzdHJpbmcsXG4pOiBQYWNrYWdlRGV0YWlscyB8IG51bGwge1xuICBjb25zdCBwYXJ0cyA9IHNwZWNpZmllci5zcGxpdChcIi9cIilcbiAgY29uc3QgcGFja2FnZU5hbWVzID0gW11cblxuICBsZXQgc2NvcGU6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChwYXJ0c1tpXS5zdGFydHNXaXRoKFwiQFwiKSkge1xuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBzY29wZSA9IHBhcnRzW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzY29wZSkge1xuICAgICAgICBwYWNrYWdlTmFtZXMucHVzaChgJHtzY29wZX0vJHtwYXJ0c1tpXX1gKVxuICAgICAgICBzY29wZSA9IG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhY2thZ2VOYW1lcy5wdXNoKHBhcnRzW2ldKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBhdGggPSBqb2luKFwibm9kZV9tb2R1bGVzXCIsIHBhY2thZ2VOYW1lcy5qb2luKFwiL25vZGVfbW9kdWxlcy9cIikpXG5cbiAgcmV0dXJuIHtcbiAgICBodW1hblJlYWRhYmxlUGF0aFNwZWNpZmllcjogcGFja2FnZU5hbWVzLmpvaW4oXCIgPT4gXCIpLFxuICAgIGlzTmVzdGVkOiBwYWNrYWdlTmFtZXMubGVuZ3RoID4gMSxcbiAgICBuYW1lOiBwYWNrYWdlTmFtZXNbcGFja2FnZU5hbWVzLmxlbmd0aCAtIDFdLFxuICAgIHBhY2thZ2VOYW1lcyxcbiAgICBwYXRoLFxuICAgIHBhdGhTcGVjaWZpZXI6IHNwZWNpZmllcixcbiAgICB3b3Jrc3BhY2VQYXRoOiBcIlwiLFxuICB9XG59XG4iXX0=