source: node_modules/patch-package/dist/rebase.js@ d24f17c

main
Last change on this file since d24f17c was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 20.3 KB
RevLine 
[d24f17c]1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6exports.rebase = void 0;
7const chalk_1 = __importDefault(require("chalk"));
8const path_1 = require("path");
9const applyPatches_1 = require("./applyPatches");
10const hash_1 = require("./hash");
11const patchFs_1 = require("./patchFs");
12const stateFile_1 = require("./stateFile");
13function rebase({ appPath, patchDir, packagePathSpecifier, targetPatch, }) {
14 const patchesDirectory = path_1.join(appPath, patchDir);
15 const groupedPatches = patchFs_1.getGroupedPatches(patchesDirectory);
16 if (groupedPatches.numPatchFiles === 0) {
17 console.log(chalk_1.default.blueBright("No patch files found"));
18 process.exit(1);
19 }
20 const packagePatches = groupedPatches.pathSpecifierToPatchFiles[packagePathSpecifier];
21 if (!packagePatches) {
22 console.log(chalk_1.default.blueBright("No patch files found for package"), packagePathSpecifier);
23 process.exit(1);
24 }
25 const state = stateFile_1.getPatchApplicationState(packagePatches[0]);
26 if (!state) {
27 console.log(chalk_1.default.blueBright("No patch state found"), "Did you forget to run", chalk_1.default.bold("patch-package"), "(without arguments) first?");
28 process.exit(1);
29 }
30 if (state.isRebasing) {
31 console.log(chalk_1.default.blueBright("Already rebasing"), "Make changes to the files in", chalk_1.default.bold(packagePatches[0].path), "and then run `patch-package", packagePathSpecifier, "--continue` to", packagePatches.length === state.patches.length
32 ? "append a patch file"
33 : `update the ${packagePatches[packagePatches.length - 1].patchFilename} file`);
34 console.log(`💡 To remove a broken patch file, delete it and reinstall node_modules`);
35 process.exit(1);
36 }
37 if (state.patches.length !== packagePatches.length) {
38 console.log(chalk_1.default.blueBright("Some patches have not been applied."), "Reinstall node_modules and try again.");
39 }
40 // check hashes
41 stateFile_1.verifyAppliedPatches({ appPath, patchDir, state });
42 if (targetPatch === "0") {
43 // unapply all
44 unApplyPatches({
45 patches: packagePatches,
46 appPath,
47 patchDir,
48 });
49 stateFile_1.savePatchApplicationState({
50 packageDetails: packagePatches[0],
51 isRebasing: true,
52 patches: [],
53 });
54 console.log(`
55Make any changes you need inside ${chalk_1.default.bold(packagePatches[0].path)}
56
57When you are done, run
58
59 ${chalk_1.default.bold(`patch-package ${packagePathSpecifier} --append 'MyChangeDescription'`)}
60
61to insert a new patch file.
62`);
63 return;
64 }
65 // find target patch
66 const target = packagePatches.find((p) => {
67 if (p.patchFilename === targetPatch) {
68 return true;
69 }
70 if (path_1.resolve(process.cwd(), targetPatch) ===
71 path_1.join(patchesDirectory, p.patchFilename)) {
72 return true;
73 }
74 if (targetPatch === p.sequenceName) {
75 return true;
76 }
77 const n = Number(targetPatch.replace(/^0+/g, ""));
78 if (!isNaN(n) && n === p.sequenceNumber) {
79 return true;
80 }
81 return false;
82 });
83 if (!target) {
84 console.log(chalk_1.default.red("Could not find target patch file"), chalk_1.default.bold(targetPatch));
85 console.log();
86 console.log("The list of available patch files is:");
87 packagePatches.forEach((p) => {
88 console.log(` - ${p.patchFilename}`);
89 });
90 process.exit(1);
91 }
92 const currentHash = hash_1.hashFile(path_1.join(patchesDirectory, target.patchFilename));
93 const prevApplication = state.patches.find((p) => p.patchContentHash === currentHash);
94 if (!prevApplication) {
95 console.log(chalk_1.default.red("Could not find previous application of patch file"), chalk_1.default.bold(target.patchFilename));
96 console.log();
97 console.log("You should reinstall node_modules and try again.");
98 process.exit(1);
99 }
100 // ok, we are good to start undoing all the patches that were applied up to but not including the target patch
101 const targetIdx = state.patches.indexOf(prevApplication);
102 unApplyPatches({
103 patches: packagePatches.slice(targetIdx + 1),
104 appPath,
105 patchDir,
106 });
107 stateFile_1.savePatchApplicationState({
108 packageDetails: packagePatches[0],
109 isRebasing: true,
110 patches: packagePatches.slice(0, targetIdx + 1).map((p) => ({
111 patchFilename: p.patchFilename,
112 patchContentHash: hash_1.hashFile(path_1.join(patchesDirectory, p.patchFilename)),
113 didApply: true,
114 })),
115 });
116 console.log(`
117Make any changes you need inside ${chalk_1.default.bold(packagePatches[0].path)}
118
119When you are done, do one of the following:
120
121 To update ${chalk_1.default.bold(packagePatches[targetIdx].patchFilename)} run
122
123 ${chalk_1.default.bold(`patch-package ${packagePathSpecifier}`)}
124
125 To create a new patch file after ${chalk_1.default.bold(packagePatches[targetIdx].patchFilename)} run
126
127 ${chalk_1.default.bold(`patch-package ${packagePathSpecifier} --append 'MyChangeDescription'`)}
128
129 `);
130}
131exports.rebase = rebase;
132function unApplyPatches({ patches, appPath, patchDir, }) {
133 for (const patch of patches.slice().reverse()) {
134 if (!applyPatches_1.applyPatch({
135 patchFilePath: path_1.join(appPath, patchDir, patch.patchFilename),
136 reverse: true,
137 patchDetails: patch,
138 patchDir,
139 cwd: process.cwd(),
140 bestEffort: false,
141 })) {
142 console.log(chalk_1.default.red("Failed to un-apply patch file"), chalk_1.default.bold(patch.patchFilename), "Try completely reinstalling node_modules.");
143 process.exit(1);
144 }
145 console.log(chalk_1.default.cyan.bold("Un-applied"), patch.patchFilename);
146 }
147}
148//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmViYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBeUI7QUFDekIsK0JBQW9DO0FBQ3BDLGlEQUEyQztBQUMzQyxpQ0FBaUM7QUFFakMsdUNBQTZDO0FBQzdDLDJDQUlvQjtBQUVwQixTQUFnQixNQUFNLENBQUMsRUFDckIsT0FBTyxFQUNQLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsV0FBVyxHQU1aO0lBQ0MsTUFBTSxnQkFBZ0IsR0FBRyxXQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ2hELE1BQU0sY0FBYyxHQUFHLDJCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFFMUQsSUFBSSxjQUFjLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRTtRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFBO1FBQ3JELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDaEI7SUFFRCxNQUFNLGNBQWMsR0FDbEIsY0FBYyxDQUFDLHlCQUF5QixDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDaEUsSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUNuQixPQUFPLENBQUMsR0FBRyxDQUNULGVBQUssQ0FBQyxVQUFVLENBQUMsa0NBQWtDLENBQUMsRUFDcEQsb0JBQW9CLENBQ3JCLENBQUE7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBRUQsTUFBTSxLQUFLLEdBQUcsb0NBQXdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFekQsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE9BQU8sQ0FBQyxHQUFHLENBQ1QsZUFBSyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUN4Qyx1QkFBdUIsRUFDdkIsZUFB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RSxXQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFXO1lBQ3JFLE9BQU8sRUFBRSxJQUFJO1lBQ2IsWUFBWSxFQUFFLEtBQUs7WUFDbkIsUUFBUTtZQUNSLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2xCLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUMsRUFDRjtZQUNBLE9BQU8sQ0FBQyxHQUFHLENBQ1QsZUFBSyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxFQUMxQyxlQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFDL0IsMkNBQTJDLENBQzVDLENBQUE7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ2hCO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7S0FDaEU7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiXG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSBcInBhdGhcIlxuaW1wb3J0IHsgYXBwbHlQYXRjaCB9IGZyb20gXCIuL2FwcGx5UGF0Y2hlc1wiXG5pbXBvcnQgeyBoYXNoRmlsZSB9IGZyb20gXCIuL2hhc2hcIlxuaW1wb3J0IHsgUGF0Y2hlZFBhY2thZ2VEZXRhaWxzIH0gZnJvbSBcIi4vUGFja2FnZURldGFpbHNcIlxuaW1wb3J0IHsgZ2V0R3JvdXBlZFBhdGNoZXMgfSBmcm9tIFwiLi9wYXRjaEZzXCJcbmltcG9ydCB7XG4gIGdldFBhdGNoQXBwbGljYXRpb25TdGF0ZSxcbiAgc2F2ZVBhdGNoQXBwbGljYXRpb25TdGF0ZSxcbiAgdmVyaWZ5QXBwbGllZFBhdGNoZXMsXG59IGZyb20gXCIuL3N0YXRlRmlsZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiByZWJhc2Uoe1xuICBhcHBQYXRoLFxuICBwYXRjaERpcixcbiAgcGFja2FnZVBhdGhTcGVjaWZpZXIsXG4gIHRhcmdldFBhdGNoLFxufToge1xuICBhcHBQYXRoOiBzdHJpbmdcbiAgcGF0Y2hEaXI6IHN0cmluZ1xuICBwYWNrYWdlUGF0aFNwZWNpZmllcjogc3RyaW5nXG4gIHRhcmdldFBhdGNoOiBzdHJpbmdcbn0pOiB2b2lkIHtcbiAgY29uc3QgcGF0Y2hlc0RpcmVjdG9yeSA9IGpvaW4oYXBwUGF0aCwgcGF0Y2hEaXIpXG4gIGNvbnN0IGdyb3VwZWRQYXRjaGVzID0gZ2V0R3JvdXBlZFBhdGNoZXMocGF0Y2hlc0RpcmVjdG9yeSlcblxuICBpZiAoZ3JvdXBlZFBhdGNoZXMubnVtUGF0Y2hGaWxlcyA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWVCcmlnaHQoXCJObyBwYXRjaCBmaWxlcyBmb3VuZFwiKSlcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VQYXRjaGVzID1cbiAgICBncm91cGVkUGF0Y2hlcy5wYXRoU3BlY2lmaWVyVG9QYXRjaEZpbGVzW3BhY2thZ2VQYXRoU3BlY2lmaWVyXVxuICBpZiAoIXBhY2thZ2VQYXRjaGVzKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBjaGFsay5ibHVlQnJpZ2h0KFwiTm8gcGF0Y2ggZmlsZXMgZm91bmQgZm9yIHBhY2thZ2VcIiksXG4gICAgICBwYWNrYWdlUGF0aFNwZWNpZmllcixcbiAgICApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IGdldFBhdGNoQXBwbGljYXRpb25TdGF0ZShwYWNrYWdlUGF0Y2hlc1swXSlcblxuICBpZiAoIXN0YXRlKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBjaGFsay5ibHVlQnJpZ2h0KFwiTm8gcGF0Y2ggc3RhdGUgZm91bmRcIiksXG4gICAgICBcIkRpZCB5b3UgZm9yZ2V0IHRvIHJ1blwiLFxuICAgICAgY2hhbGsuYm9sZChcInBhdGNoLXBhY2thZ2VcIiksXG4gICAgICBcIih3aXRob3V0IGFyZ3VtZW50cykgZmlyc3Q/XCIsXG4gICAgKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIGlmIChzdGF0ZS5pc1JlYmFzaW5nKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBjaGFsay5ibHVlQnJpZ2h0KFwiQWxyZWFkeSByZWJhc2luZ1wiKSxcbiAgICAgIFwiTWFrZSBjaGFuZ2VzIHRvIHRoZSBmaWxlcyBpblwiLFxuICAgICAgY2hhbGsuYm9sZChwYWNrYWdlUGF0Y2hlc1swXS5wYXRoKSxcbiAgICAgIFwiYW5kIHRoZW4gcnVuIGBwYXRjaC1wYWNrYWdlXCIsXG4gICAgICBwYWNrYWdlUGF0aFNwZWNpZmllcixcbiAgICAgIFwiLS1jb250aW51ZWAgdG9cIixcbiAgICAgIHBhY2thZ2VQYXRjaGVzLmxlbmd0aCA9PT0gc3RhdGUucGF0Y2hlcy5sZW5ndGhcbiAgICAgICAgPyBcImFwcGVuZCBhIHBhdGNoIGZpbGVcIlxuICAgICAgICA6IGB1cGRhdGUgdGhlICR7XG4gICAgICAgICAgICBwYWNrYWdlUGF0Y2hlc1twYWNrYWdlUGF0Y2hlcy5sZW5ndGggLSAxXS5wYXRjaEZpbGVuYW1lXG4gICAgICAgICAgfSBmaWxlYCxcbiAgICApXG4gICAgY29uc29sZS5sb2coXG4gICAgICBg8J+SoSBUbyByZW1vdmUgYSBicm9rZW4gcGF0Y2ggZmlsZSwgZGVsZXRlIGl0IGFuZCByZWluc3RhbGwgbm9kZV9tb2R1bGVzYCxcbiAgICApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgaWYgKHN0YXRlLnBhdGNoZXMubGVuZ3RoICE9PSBwYWNrYWdlUGF0Y2hlcy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGNoYWxrLmJsdWVCcmlnaHQoXCJTb21lIHBhdGNoZXMgaGF2ZSBub3QgYmVlbiBhcHBsaWVkLlwiKSxcbiAgICAgIFwiUmVpbnN0YWxsIG5vZGVfbW9kdWxlcyBhbmQgdHJ5IGFnYWluLlwiLFxuICAgIClcbiAgfVxuICAvLyBjaGVjayBoYXNoZXNcbiAgdmVyaWZ5QXBwbGllZFBhdGNoZXMoeyBhcHBQYXRoLCBwYXRjaERpciwgc3RhdGUgfSlcblxuICBpZiAodGFyZ2V0UGF0Y2ggPT09IFwiMFwiKSB7XG4gICAgLy8gdW5hcHBseSBhbGxcbiAgICB1bkFwcGx5UGF0Y2hlcyh7XG4gICAgICBwYXRjaGVzOiBwYWNrYWdlUGF0Y2hlcyxcbiAgICAgIGFwcFBhdGgsXG4gICAgICBwYXRjaERpcixcbiAgICB9KVxuICAgIHNhdmVQYXRjaEFwcGxpY2F0aW9uU3RhdGUoe1xuICAgICAgcGFja2FnZURldGFpbHM6IHBhY2thZ2VQYXRjaGVzWzBdLFxuICAgICAgaXNSZWJhc2luZzogdHJ1ZSxcbiAgICAgIHBhdGNoZXM6IFtdLFxuICAgIH0pXG4gICAgY29uc29sZS5sb2coYFxuTWFrZSBhbnkgY2hhbmdlcyB5b3UgbmVlZCBpbnNpZGUgJHtjaGFsay5ib2xkKHBhY2thZ2VQYXRjaGVzWzBdLnBhdGgpfVxuXG5XaGVuIHlvdSBhcmUgZG9uZSwgcnVuXG5cbiAgJHtjaGFsay5ib2xkKFxuICAgIGBwYXRjaC1wYWNrYWdlICR7cGFja2FnZVBhdGhTcGVjaWZpZXJ9IC0tYXBwZW5kICdNeUNoYW5nZURlc2NyaXB0aW9uJ2AsXG4gICl9XG4gIFxudG8gaW5zZXJ0IGEgbmV3IHBhdGNoIGZpbGUuXG5gKVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gZmluZCB0YXJnZXQgcGF0Y2hcbiAgY29uc3QgdGFyZ2V0ID0gcGFja2FnZVBhdGNoZXMuZmluZCgocCkgPT4ge1xuICAgIGlmIChwLnBhdGNoRmlsZW5hbWUgPT09IHRhcmdldFBhdGNoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICByZXNvbHZlKHByb2Nlc3MuY3dkKCksIHRhcmdldFBhdGNoKSA9PT1cbiAgICAgIGpvaW4ocGF0Y2hlc0RpcmVjdG9yeSwgcC5wYXRjaEZpbGVuYW1lKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0UGF0Y2ggPT09IHAuc2VxdWVuY2VOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBjb25zdCBuID0gTnVtYmVyKHRhcmdldFBhdGNoLnJlcGxhY2UoL14wKy9nLCBcIlwiKSlcbiAgICBpZiAoIWlzTmFOKG4pICYmIG4gPT09IHAuc2VxdWVuY2VOdW1iZXIpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9KVxuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBjaGFsay5yZWQoXCJDb3VsZCBub3QgZmluZCB0YXJnZXQgcGF0Y2ggZmlsZVwiKSxcbiAgICAgIGNoYWxrLmJvbGQodGFyZ2V0UGF0Y2gpLFxuICAgIClcbiAgICBjb25zb2xlLmxvZygpXG4gICAgY29uc29sZS5sb2coXCJUaGUgbGlzdCBvZiBhdmFpbGFibGUgcGF0Y2ggZmlsZXMgaXM6XCIpXG4gICAgcGFja2FnZVBhdGNoZXMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coYCAgLSAke3AucGF0Y2hGaWxlbmFtZX1gKVxuICAgIH0pXG5cbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBjb25zdCBjdXJyZW50SGFzaCA9IGhhc2hGaWxlKGpvaW4ocGF0Y2hlc0RpcmVjdG9yeSwgdGFyZ2V0LnBhdGNoRmlsZW5hbWUpKVxuXG4gIGNvbnN0IHByZXZBcHBsaWNhdGlvbiA9IHN0YXRlLnBhdGNoZXMuZmluZChcbiAgICAocCkgPT4gcC5wYXRjaENvbnRlbnRIYXNoID09PSBjdXJyZW50SGFzaCxcbiAgKVxuICBpZiAoIXByZXZBcHBsaWNhdGlvbikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsucmVkKFwiQ291bGQgbm90IGZpbmQgcHJldmlvdXMgYXBwbGljYXRpb24gb2YgcGF0Y2ggZmlsZVwiKSxcbiAgICAgIGNoYWxrLmJvbGQodGFyZ2V0LnBhdGNoRmlsZW5hbWUpLFxuICAgIClcbiAgICBjb25zb2xlLmxvZygpXG4gICAgY29uc29sZS5sb2coXCJZb3Ugc2hvdWxkIHJlaW5zdGFsbCBub2RlX21vZHVsZXMgYW5kIHRyeSBhZ2Fpbi5cIilcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuXG4gIC8vIG9rLCB3ZSBhcmUgZ29vZCB0byBzdGFydCB1bmRvaW5nIGFsbCB0aGUgcGF0Y2hlcyB0aGF0IHdlcmUgYXBwbGllZCB1cCB0byBidXQgbm90IGluY2x1ZGluZyB0aGUgdGFyZ2V0IHBhdGNoXG4gIGNvbnN0IHRhcmdldElkeCA9IHN0YXRlLnBhdGNoZXMuaW5kZXhPZihwcmV2QXBwbGljYXRpb24pXG5cbiAgdW5BcHBseVBhdGNoZXMoe1xuICAgIHBhdGNoZXM6IHBhY2thZ2VQYXRjaGVzLnNsaWNlKHRhcmdldElkeCArIDEpLFxuICAgIGFwcFBhdGgsXG4gICAgcGF0Y2hEaXIsXG4gIH0pXG4gIHNhdmVQYXRjaEFwcGxpY2F0aW9uU3RhdGUoe1xuICAgIHBhY2thZ2VEZXRhaWxzOiBwYWNrYWdlUGF0Y2hlc1swXSxcbiAgICBpc1JlYmFzaW5nOiB0cnVlLFxuICAgIHBhdGNoZXM6IHBhY2thZ2VQYXRjaGVzLnNsaWNlKDAsIHRhcmdldElkeCArIDEpLm1hcCgocCkgPT4gKHtcbiAgICAgIHBhdGNoRmlsZW5hbWU6IHAucGF0Y2hGaWxlbmFtZSxcbiAgICAgIHBhdGNoQ29udGVudEhhc2g6IGhhc2hGaWxlKGpvaW4ocGF0Y2hlc0RpcmVjdG9yeSwgcC5wYXRjaEZpbGVuYW1lKSksXG4gICAgICBkaWRBcHBseTogdHJ1ZSxcbiAgICB9KSksXG4gIH0pXG5cbiAgY29uc29sZS5sb2coYFxuTWFrZSBhbnkgY2hhbmdlcyB5b3UgbmVlZCBpbnNpZGUgJHtjaGFsay5ib2xkKHBhY2thZ2VQYXRjaGVzWzBdLnBhdGgpfVxuXG5XaGVuIHlvdSBhcmUgZG9uZSwgZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgVG8gdXBkYXRlICR7Y2hhbGsuYm9sZChwYWNrYWdlUGF0Y2hlc1t0YXJnZXRJZHhdLnBhdGNoRmlsZW5hbWUpfSBydW5cblxuICAgICR7Y2hhbGsuYm9sZChgcGF0Y2gtcGFja2FnZSAke3BhY2thZ2VQYXRoU3BlY2lmaWVyfWApfVxuICAgIFxuICBUbyBjcmVhdGUgYSBuZXcgcGF0Y2ggZmlsZSBhZnRlciAke2NoYWxrLmJvbGQoXG4gICAgcGFja2FnZVBhdGNoZXNbdGFyZ2V0SWR4XS5wYXRjaEZpbGVuYW1lLFxuICApfSBydW5cbiAgXG4gICAgJHtjaGFsay5ib2xkKFxuICAgICAgYHBhdGNoLXBhY2thZ2UgJHtwYWNrYWdlUGF0aFNwZWNpZmllcn0gLS1hcHBlbmQgJ015Q2hhbmdlRGVzY3JpcHRpb24nYCxcbiAgICApfVxuXG4gIGApXG59XG5cbmZ1bmN0aW9uIHVuQXBwbHlQYXRjaGVzKHtcbiAgcGF0Y2hlcyxcbiAgYXBwUGF0aCxcbiAgcGF0Y2hEaXIsXG59OiB7XG4gIHBhdGNoZXM6IFBhdGNoZWRQYWNrYWdlRGV0YWlsc1tdXG4gIGFwcFBhdGg6IHN0cmluZ1xuICBwYXRjaERpcjogc3RyaW5nXG59KSB7XG4gIGZvciAoY29uc3QgcGF0Y2ggb2YgcGF0Y2hlcy5zbGljZSgpLnJldmVyc2UoKSkge1xuICAgIGlmIChcbiAgICAgICFhcHBseVBhdGNoKHtcbiAgICAgICAgcGF0Y2hGaWxlUGF0aDogam9pbihhcHBQYXRoLCBwYXRjaERpciwgcGF0Y2gucGF0Y2hGaWxlbmFtZSkgYXMgc3RyaW5nLFxuICAgICAgICByZXZlcnNlOiB0cnVlLFxuICAgICAgICBwYXRjaERldGFpbHM6IHBhdGNoLFxuICAgICAgICBwYXRjaERpcixcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBiZXN0RWZmb3J0OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY2hhbGsucmVkKFwiRmFpbGVkIHRvIHVuLWFwcGx5IHBhdGNoIGZpbGVcIiksXG4gICAgICAgIGNoYWxrLmJvbGQocGF0Y2gucGF0Y2hGaWxlbmFtZSksXG4gICAgICAgIFwiVHJ5IGNvbXBsZXRlbHkgcmVpbnN0YWxsaW5nIG5vZGVfbW9kdWxlcy5cIixcbiAgICAgIClcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuLmJvbGQoXCJVbi1hcHBsaWVkXCIpLCBwYXRjaC5wYXRjaEZpbGVuYW1lKVxuICB9XG59XG4iXX0=
Note: See TracBrowser for help on using the repository browser.