UNPKG

@naandalist/patch-package

Version:
97 lines 9.86 kB
"use strict"; 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