@naandalist/patch-package
Version:
Fix broken node modules with no fuss
97 lines • 9.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.reversePatch = void 0;
const parse_1 = require("./parse");
const assertNever_1 = require("../assertNever");
function reverseHunk(hunk) {
const header = {
original: hunk.header.patched,
patched: hunk.header.original,
};
const parts = [];
for (const part of hunk.parts) {
switch (part.type) {
case "context":
parts.push(part);
break;
case "deletion":
parts.push({
type: "insertion",
lines: part.lines,
noNewlineAtEndOfFile: part.noNewlineAtEndOfFile,
});
break;
case "insertion":
parts.push({
type: "deletion",
lines: part.lines,
noNewlineAtEndOfFile: part.noNewlineAtEndOfFile,
});
break;
default:
(0, assertNever_1.assertNever)(part.type);
}
}
// swap insertions and deletions over so deletions always come first
for (let i = 0; i < parts.length - 1; i++) {
if (parts[i].type === "insertion" && parts[i + 1].type === "deletion") {
const tmp = parts[i];
parts[i] = parts[i + 1];
parts[i + 1] = tmp;
i += 1;
}
}
const result = {
header,
parts,
source: hunk.source,
};
(0, parse_1.verifyHunkIntegrity)(result);
return result;
}
function reversePatchPart(part) {
switch (part.type) {
case "file creation":
return {
type: "file deletion",
path: part.path,
hash: part.hash,
hunk: part.hunk && reverseHunk(part.hunk),
mode: part.mode,
};
case "file deletion":
return {
type: "file creation",
path: part.path,
hunk: part.hunk && reverseHunk(part.hunk),
mode: part.mode,
hash: part.hash,
};
case "rename":
return {
type: "rename",
fromPath: part.toPath,
toPath: part.fromPath,
};
case "patch":
return {
type: "patch",
path: part.path,
hunks: part.hunks.map(reverseHunk),
beforeHash: part.afterHash,
afterHash: part.beforeHash,
};
case "mode change":
return {
type: "mode change",
path: part.path,
newMode: part.oldMode,
oldMode: part.newMode,
};
}
}
const reversePatch = (patch) => {
return patch.map(reversePatchPart).reverse();
};
exports.reversePatch = reversePatch;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9yZXZlcnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQU1nQjtBQUNoQixnREFBNEM7QUFFNUMsU0FBUyxXQUFXLENBQUMsSUFBVTtJQUM3QixNQUFNLE1BQU0sR0FBZTtRQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1FBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7S0FDOUIsQ0FBQTtJQUNELE1BQU0sS0FBSyxHQUFrQixFQUFFLENBQUE7SUFFL0IsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixLQUFLLFNBQVM7Z0JBQ1osS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDaEIsTUFBSztZQUNQLEtBQUssVUFBVTtnQkFDYixLQUFLLENBQUMsSUFBSSxDQUFDO29CQUNULElBQUksRUFBRSxXQUFXO29CQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7b0JBQ2pCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxvQkFBb0I7aUJBQ2hELENBQUMsQ0FBQTtnQkFDRixNQUFLO1lBQ1AsS0FBSyxXQUFXO2dCQUNkLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ1QsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtpQkFDaEQsQ0FBQyxDQUFBO2dCQUNGLE1BQUs7WUFDUDtnQkFDRSxJQUFBLHlCQUFXLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ3pCO0tBQ0Y7SUFFRCxvRUFBb0U7SUFDcEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3pDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQ3JFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNwQixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUN2QixLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtZQUNsQixDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ1A7S0FDRjtJQUVELE1BQU0sTUFBTSxHQUFTO1FBQ25CLE1BQU07UUFDTixLQUFLO1FBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0tBQ3BCLENBQUE7SUFFRCxJQUFBLDJCQUFtQixFQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTNCLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsSUFBbUI7SUFDM0MsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ2pCLEtBQUssZUFBZTtZQUNsQixPQUFPO2dCQUNMLElBQUksRUFBRSxlQUFlO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUN6QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDaEIsQ0FBQTtRQUNILEtBQUssZUFBZTtZQUNsQixPQUFPO2dCQUNMLElBQUksRUFBRSxlQUFlO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3pDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDaEIsQ0FBQTtRQUNILEtBQUssUUFBUTtZQUNYLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDdEIsQ0FBQTtRQUNILEtBQUssT0FBTztZQUNWLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7Z0JBQ2xDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzNCLENBQUE7UUFDSCxLQUFLLGFBQWE7WUFDaEIsT0FBTztnQkFDTCxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3RCLENBQUE7S0FDSjtBQUNILENBQUM7QUFFTSxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQXNCLEVBQW1CLEVBQUU7SUFDdEUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7QUFDOUMsQ0FBQyxDQUFBO0FBRlksUUFBQSxZQUFZLGdCQUV4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFBhcnNlZFBhdGNoRmlsZSxcbiAgUGF0Y2hGaWxlUGFydCxcbiAgSHVuayxcbiAgSHVua0hlYWRlcixcbiAgdmVyaWZ5SHVua0ludGVncml0eSxcbn0gZnJvbSBcIi4vcGFyc2VcIlxuaW1wb3J0IHsgYXNzZXJ0TmV2ZXIgfSBmcm9tIFwiLi4vYXNzZXJ0TmV2ZXJcIlxuXG5mdW5jdGlvbiByZXZlcnNlSHVuayhodW5rOiBIdW5rKTogSHVuayB7XG4gIGNvbnN0IGhlYWRlcjogSHVua0hlYWRlciA9IHtcbiAgICBvcmlnaW5hbDogaHVuay5oZWFkZXIucGF0Y2hlZCxcbiAgICBwYXRjaGVkOiBodW5rLmhlYWRlci5vcmlnaW5hbCxcbiAgfVxuICBjb25zdCBwYXJ0czogSHVua1tcInBhcnRzXCJdID0gW11cblxuICBmb3IgKGNvbnN0IHBhcnQgb2YgaHVuay5wYXJ0cykge1xuICAgIHN3aXRjaCAocGFydC50eXBlKSB7XG4gICAgICBjYXNlIFwiY29udGV4dFwiOlxuICAgICAgICBwYXJ0cy5wdXNoKHBhcnQpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiZGVsZXRpb25cIjpcbiAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgdHlwZTogXCJpbnNlcnRpb25cIixcbiAgICAgICAgICBsaW5lczogcGFydC5saW5lcyxcbiAgICAgICAgICBub05ld2xpbmVBdEVuZE9mRmlsZTogcGFydC5ub05ld2xpbmVBdEVuZE9mRmlsZSxcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJpbnNlcnRpb25cIjpcbiAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgdHlwZTogXCJkZWxldGlvblwiLFxuICAgICAgICAgIGxpbmVzOiBwYXJ0LmxpbmVzLFxuICAgICAgICAgIG5vTmV3bGluZUF0RW5kT2ZGaWxlOiBwYXJ0Lm5vTmV3bGluZUF0RW5kT2ZGaWxlLFxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0TmV2ZXIocGFydC50eXBlKVxuICAgIH1cbiAgfVxuXG4gIC8vIHN3YXAgaW5zZXJ0aW9ucyBhbmQgZGVsZXRpb25zIG92ZXIgc28gZGVsZXRpb25zIGFsd2F5cyBjb21lIGZpcnN0XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgaWYgKHBhcnRzW2ldLnR5cGUgPT09IFwiaW5zZXJ0aW9uXCIgJiYgcGFydHNbaSArIDFdLnR5cGUgPT09IFwiZGVsZXRpb25cIikge1xuICAgICAgY29uc3QgdG1wID0gcGFydHNbaV1cbiAgICAgIHBhcnRzW2ldID0gcGFydHNbaSArIDFdXG4gICAgICBwYXJ0c1tpICsgMV0gPSB0bXBcbiAgICAgIGkgKz0gMVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogSHVuayA9IHtcbiAgICBoZWFkZXIsXG4gICAgcGFydHMsXG4gICAgc291cmNlOiBodW5rLnNvdXJjZSxcbiAgfVxuXG4gIHZlcmlmeUh1bmtJbnRlZ3JpdHkocmVzdWx0KVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVBhdGNoUGFydChwYXJ0OiBQYXRjaEZpbGVQYXJ0KTogUGF0Y2hGaWxlUGFydCB7XG4gIHN3aXRjaCAocGFydC50eXBlKSB7XG4gICAgY2FzZSBcImZpbGUgY3JlYXRpb25cIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiZmlsZSBkZWxldGlvblwiLFxuICAgICAgICBwYXRoOiBwYXJ0LnBhdGgsXG4gICAgICAgIGhhc2g6IHBhcnQuaGFzaCxcbiAgICAgICAgaHVuazogcGFydC5odW5rICYmIHJldmVyc2VIdW5rKHBhcnQuaHVuayksXG4gICAgICAgIG1vZGU6IHBhcnQubW9kZSxcbiAgICAgIH1cbiAgICBjYXNlIFwiZmlsZSBkZWxldGlvblwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJmaWxlIGNyZWF0aW9uXCIsXG4gICAgICAgIHBhdGg6IHBhcnQucGF0aCxcbiAgICAgICAgaHVuazogcGFydC5odW5rICYmIHJldmVyc2VIdW5rKHBhcnQuaHVuayksXG4gICAgICAgIG1vZGU6IHBhcnQubW9kZSxcbiAgICAgICAgaGFzaDogcGFydC5oYXNoLFxuICAgICAgfVxuICAgIGNhc2UgXCJyZW5hbWVcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwicmVuYW1lXCIsXG4gICAgICAgIGZyb21QYXRoOiBwYXJ0LnRvUGF0aCxcbiAgICAgICAgdG9QYXRoOiBwYXJ0LmZyb21QYXRoLFxuICAgICAgfVxuICAgIGNhc2UgXCJwYXRjaFwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJwYXRjaFwiLFxuICAgICAgICBwYXRoOiBwYXJ0LnBhdGgsXG4gICAgICAgIGh1bmtzOiBwYXJ0Lmh1bmtzLm1hcChyZXZlcnNlSHVuayksXG4gICAgICAgIGJlZm9yZUhhc2g6IHBhcnQuYWZ0ZXJIYXNoLFxuICAgICAgICBhZnRlckhhc2g6IHBhcnQuYmVmb3JlSGFzaCxcbiAgICAgIH1cbiAgICBjYXNlIFwibW9kZSBjaGFuZ2VcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibW9kZSBjaGFuZ2VcIixcbiAgICAgICAgcGF0aDogcGFydC5wYXRoLFxuICAgICAgICBuZXdNb2RlOiBwYXJ0Lm9sZE1vZGUsXG4gICAgICAgIG9sZE1vZGU6IHBhcnQubmV3TW9kZSxcbiAgICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmV2ZXJzZVBhdGNoID0gKHBhdGNoOiBQYXJzZWRQYXRjaEZpbGUpOiBQYXJzZWRQYXRjaEZpbGUgPT4ge1xuICByZXR1cm4gcGF0Y2gubWFwKHJldmVyc2VQYXRjaFBhcnQpLnJldmVyc2UoKVxufVxuIl19