HEX
Server: Apache/2.4.18 (Ubuntu)
System: Linux ubuntu 7.0.5-x86_64-linode173 #1 SMP PREEMPT_DYNAMIC Fri May 8 10:12:05 EDT 2026 x86_64
User: root (0)
PHP: 7.2.28-1+ubuntu16.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //opt/code/node_modules/patch-package/dist/makePatch.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var chalk_1 = require("chalk");
var fs = require("fs");
var path = require("./path");
var rimraf = require("rimraf");
var tmp = require("tmp");
var resolveRelativeFileDependencies_1 = require("./resolveRelativeFileDependencies");
var spawnSafe_1 = require("./spawnSafe");
var patchFs_1 = require("./patchFs");
var fsExtra = require("fs-extra");
var slash = require("slash");
function makePatch(packageName, appPath, packageManager, includePaths, excludePaths) {
    var nodeModulesPath = path.join(appPath, "node_modules");
    var packagePath = path.join(nodeModulesPath, packageName);
    var packageJsonPath = path.join(packagePath, "package.json");
    if (!fs.existsSync(packageJsonPath)) {
        printNoPackageFoundError(packageName, packageJsonPath);
        process.exit(1);
    }
    var packageVersion = require(packageJsonPath).version;
    var tmpRepo = tmp.dirSync({ unsafeCleanup: true });
    var tmpRepoNodeModulesPath = path.join(tmpRepo.name, "node_modules");
    var tmpRepoPackageJsonPath = path.join(tmpRepo.name, "package.json");
    var tmpRepoPackagePath = path.join(tmpRepoNodeModulesPath, packageName);
    try {
        var patchesDir_1 = path.join(appPath, "patches");
        if (!fs.existsSync(patchesDir_1)) {
            fs.mkdirSync(patchesDir_1);
        }
        else {
            // remove exsiting patch for this package, if any
            patchFs_1.getPatchFiles(patchesDir_1).forEach(function (fileName) {
                if (fileName.startsWith(packageName + ":") ||
                    fileName.startsWith(packageName + "+")) {
                    console.info(chalk_1.green("☑"), "Removing existing", path.relative(process.cwd(), path.join(patchesDir_1, fileName)));
                    fs.unlinkSync(path.join(patchesDir_1, fileName));
                }
            });
        }
        console.info(chalk_1.green("☑"), "Creating temporary folder");
        var tmpExec_1 = function (command, args) {
            return spawnSafe_1.default(command, args, { cwd: tmpRepo.name });
        };
        // reinstall a clean version of the user's node_modules in our tmp location
        fsExtra.copySync(path.join(appPath, "package.json"), path.join(tmpRepo.name, "package.json"));
        // resolve relative file paths in package.json
        fs.writeFileSync(tmpRepoPackageJsonPath, JSON.stringify(resolveRelativeFileDependencies_1.resolveRelativeFileDependenciesInPackageJson(appPath, require(tmpRepoPackageJsonPath))));
        if (packageManager === "yarn") {
            fsExtra.copySync(path.join(appPath, "yarn.lock"), path.join(tmpRepo.name, "yarn.lock"));
            console.info(chalk_1.green("☑"), "Building clean node_modules with yarn");
            tmpExec_1("yarn");
        }
        else {
            var lockFileName = packageManager === "npm-shrinkwrap"
                ? "npm-shrinkwrap.json"
                : "package-lock.json";
            var lockFileContents = JSON.parse(fsExtra.readFileSync(path.join(appPath, lockFileName)).toString());
            var resolvedLockFileContents = resolveRelativeFileDependencies_1.resolveRelativeFileDependenciesInPackageLock(appPath, lockFileContents);
            fs.writeFileSync(path.join(tmpRepo.name, lockFileName), JSON.stringify(resolvedLockFileContents));
            console.info(chalk_1.green("☑"), "Building clean node_modules with npm");
            tmpExec_1("npm", ["i"]);
        }
        // commit the package
        console.info(chalk_1.green("☑"), "Diffing your files with clean files");
        fs.writeFileSync(path.join(tmpRepo.name, ".gitignore"), "!/node_modules\n\n");
        tmpExec_1("git", ["init"]);
        // don't commit package.json though
        fs.unlinkSync(path.join(tmpRepo.name, "node_modules", packageName, "package.json"));
        tmpExec_1("git", ["add", "-f", slash(path.join("node_modules", packageName))]);
        tmpExec_1("git", ["commit", "-m", "init"]);
        // replace package with user's version
        rimraf.sync(tmpRepoPackagePath);
        fsExtra.copySync(packagePath, tmpRepoPackagePath, { recursive: true });
        // remove package.json again
        fs.unlinkSync(path.join(tmpRepo.name, "node_modules", packageName, "package.json"));
        // stage all files
        tmpExec_1("git", ["add", "-f", slash(path.join("node_modules", packageName))]);
        // unstage any ignored files so they don't show up in the diff
        tmpExec_1("git", ["diff", "--cached", "--name-only"]).stdout
            .toString()
            .split(/\r?\n/)
            .filter(Boolean)
            .forEach(function (fileName) {
            if (!fileName.match(includePaths) || fileName.match(excludePaths)) {
                tmpExec_1("git", ["reset", "HEAD", fileName]);
            }
        });
        // get diff of changes
        var patch = tmpExec_1("git", [
            "diff",
            "--cached",
            "--ignore-space-at-eol",
        ]).stdout.toString();
        if (patch.trim() === "") {
            console.warn("\u2049\uFE0F  Not creating patch file for package '" + packageName + "'");
            console.warn("\u2049\uFE0F  There don't appear to be any changes.");
            process.exit(1);
        }
        else {
            var patchFileName = packageName + "+" + packageVersion + ".patch";
            var patchPath = path.join(patchesDir_1, patchFileName);
            if (!fs.existsSync(path.dirname(patchPath))) {
                // scoped package
                fs.mkdirSync(path.dirname(patchPath));
            }
            fs.writeFileSync(patchPath, "patch-package\n" + patchFs_1.removeGitHeadersFromSource(patch));
            console.log(chalk_1.green("✔") + " Created file patches/" + patchFileName);
        }
    }
    catch (e) {
        console.error(e);
        throw e;
    }
    finally {
        tmpRepo.removeCallback();
    }
}
exports.default = makePatch;
function printNoPackageFoundError(packageName, packageJsonPath) {
    console.error("No such package " + packageName + "\n\n  File not found: " + packageJsonPath);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZVBhdGNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ha2VQYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtCQUE2QjtBQUM3Qix1QkFBd0I7QUFDeEIsNkJBQThCO0FBQzlCLCtCQUFnQztBQUNoQyx5QkFBMEI7QUFDMUIscUZBRzBDO0FBQzFDLHlDQUF1QztBQUN2QyxxQ0FBcUU7QUFDckUsa0NBQW1DO0FBRW5DLDZCQUE4QjtBQUU5QixtQkFDRSxXQUFtQixFQUNuQixPQUFlLEVBQ2YsY0FBOEIsRUFDOUIsWUFBb0IsRUFDcEIsWUFBb0I7SUFFcEIsSUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDMUQsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDM0QsSUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDOUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtJQUV2RCxJQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDcEQsSUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDdEUsSUFBTSxzQkFBc0IsR0FBRyxJ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LGVBQXVCO0lBRXZCLE9BQU8sQ0FBQyxLQUFLLENBQ1gscUJBQW1CLFdBQVcsOEJBRWQsZUFBaUIsQ0FDbEMsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBncmVlbiB9IGZyb20gXCJjaGFsa1wiXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwiLi9wYXRoXCJcbmltcG9ydCAqIGFzIHJpbXJhZiBmcm9tIFwicmltcmFmXCJcbmltcG9ydCAqIGFzIHRtcCBmcm9tIFwidG1wXCJcbmltcG9ydCB7XG4gIHJlc29sdmVSZWxhdGl2ZUZpbGVEZXBlbmRlbmNpZXNJblBhY2thZ2VKc29uLFxuICByZXNvbHZlUmVsYXRpdmVGaWxlRGVwZW5kZW5jaWVzSW5QYWNrYWdlTG9jayxcbn0gZnJvbSBcIi4vcmVzb2x2ZVJlbGF0aXZlRmlsZURlcGVuZGVuY2llc1wiXG5pbXBvcnQgc3Bhd25TYWZlU3luYyBmcm9tIFwiLi9zcGF3blNhZmVcIlxuaW1wb3J0IHsgZ2V0UGF0Y2hGaWxlcywgcmVtb3ZlR2l0SGVhZGVyc0Zyb21Tb3VyY2UgfSBmcm9tIFwiLi9wYXRjaEZzXCJcbmltcG9ydCAqIGFzIGZzRXh0cmEgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCB7IFBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIi4vZGV0ZWN0UGFja2FnZU1hbmFnZXJcIlxuaW1wb3J0ICogYXMgc2xhc2ggZnJvbSBcInNsYXNoXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZVBhdGNoKFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICBhcHBQYXRoOiBzdHJpbmcsXG4gIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlcixcbiAgaW5jbHVkZVBhdGhzOiBSZWdFeHAsXG4gIGV4Y2x1ZGVQYXRoczogUmVnRXhwLFxuKSB7XG4gIGNvbnN0IG5vZGVNb2R1bGVzUGF0aCA9IHBhdGguam9pbihhcHBQYXRoLCBcIm5vZGVfbW9kdWxlc1wiKVxuICBjb25zdCBwYWNrYWdlUGF0aCA9IHBhdGguam9pbihub2RlTW9kdWxlc1BhdGgsIHBhY2thZ2VOYW1lKVxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLmpvaW4ocGFja2FnZVBhdGgsIFwicGFja2FnZS5qc29uXCIpXG4gIGlmICghZnMuZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgcHJpbnROb1BhY2thZ2VGb3VuZEVycm9yKHBhY2thZ2VOYW1lLCBwYWNrYWdlSnNvblBhdGgpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cblxuICBjb25zdCBwYWNrYWdlVmVyc2lvbiA9IHJlcXVpcmUocGFja2FnZUpzb25QYXRoKS52ZXJzaW9uXG5cbiAgY29uc3QgdG1wUmVwbyA9IHRtcC5kaXJTeW5jKHsgdW5zYWZlQ2xlYW51cDogdHJ1ZSB9KVxuICBjb25zdCB0bXBSZXBvTm9kZU1vZHVsZXNQYXRoID0gcGF0aC5qb2luKHRtcFJlcG8ubmFtZSwgXCJub2RlX21vZHVsZXNcIilcbiAgY29uc3QgdG1wUmVwb1BhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbih0bXBSZXBvLm5hbWUsIFwicGFja2FnZS5qc29uXCIpXG4gIGNvbnN0IHRtcFJlcG9QYWNrYWdlUGF0aCA9IHBhdGguam9pbih0bXBSZXBvTm9kZU1vZHVsZXNQYXRoLCBwYWNrYWdlTmFtZSlcblxuICB0cnkge1xuICAgIGNvbnN0IHBhdGNoZXNEaXIgPSBwYXRoLmpvaW4oYXBwUGF0aCwgXCJwYXRjaGVzXCIpXG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0Y2hlc0RpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhwYXRjaGVzRGlyKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZW1vdmUgZXhzaXRpbmcgcGF0Y2ggZm9yIHRoaXMgcGFja2FnZSwgaWYgYW55XG4gICAgICBnZXRQYXRjaEZpbGVzKHBhdGNoZXNEaXIpLmZvckVhY2goZmlsZU5hbWUgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZmlsZU5hbWUuc3RhcnRzV2l0aChwYWNrYWdlTmFtZSArIFwiOlwiKSB8fFxuICAgICAgICAgIGZpbGVOYW1lLnN0YXJ0c1dpdGgocGFja2FnZU5hbWUgKyBcIitcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgZ3JlZW4oXCLimJFcIiksXG4gICAgICAgICAgICBcIlJlbW92aW5nIGV4aXN0aW5nXCIsXG4gICAgICAgICAgICBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIHBhdGguam9pbihwYXRjaGVzRGlyLCBmaWxlTmFtZSkpLFxuICAgICAgICAgIClcbiAgICAgICAgICBmcy51bmxpbmtTeW5jKHBhdGguam9pbihwYXRjaGVzRGlyLCBmaWxlTmFtZSkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc29sZS5pbmZvKGdyZWVuKFwi4piRXCIpLCBcIkNyZWF0aW5nIHRlbXBvcmFyeSBmb2xkZXJcIilcblxuICAgIGNvbnN0IHRtcEV4ZWMgPSAoY29tbWFuZDogc3RyaW5nLCBhcmdzPzogc3RyaW5nW10pID0+XG4gICAgICBzcGF3blNhZmVTeW5jKGNvbW1hbmQsIGFyZ3MsIHsgY3dkOiB0bXBSZXBvLm5hbWUgfSlcbiAgICAvLyByZWluc3RhbGwgYSBjbGVhbiB2ZXJzaW9uIG9mIHRoZSB1c2VyJ3Mgbm9kZV9tb2R1bGVzIGluIG91ciB0bXAgbG9jYXRpb25cbiAgICBmc0V4dHJhLmNvcHlTeW5jKFxuICAgICAgcGF0aC5qb2luKGFwcFBhdGgsIFwicGFja2FnZS5qc29uXCIpLFxuICAgICAgcGF0aC5qb2luKHRtcFJlcG8ubmFtZSwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgKVxuICAgIC8vIHJlc29sdmUgcmVsYXRpdmUgZmlsZSBwYXRocyBpbiBwYWNrYWdlLmpzb25cbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgdG1wUmVwb1BhY2thZ2VKc29uUGF0aCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICByZXNvbHZlUmVsYXRpdmVGaWxlRGVwZW5kZW5jaWVzSW5QYWNrYWdlSnNvbihcbiAgICAgICAgICBhcHBQYXRoLFxuICAgICAgICAgIHJlcXVpcmUodG1wUmVwb1BhY2thZ2VKc29uUGF0aCksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcblxuICAgIGlmIChwYWNrYWdlTWFuYWdlciA9PT0gXCJ5YXJuXCIpIHtcbiAgICAgIGZzRXh0cmEuY29weVN5bmMoXG4gICAgICAgIHBhdGguam9pbihhcHBQYXRoLCBcInlhcm4ubG9ja1wiKSxcbiAgICAgICAgcGF0aC5qb2luKHRtcFJlcG8ubmFtZSwgXCJ5YXJuLmxvY2tcIiksXG4gICAgICApXG4gICAgICBjb25zb2xlLmluZm8oZ3JlZW4oXCLimJFcIiksIFwiQnVpbGRpbmcgY2xlYW4gbm9kZV9tb2R1bGVzIHdpdGggeWFyblwiKVxuICAgICAgdG1wRXhlYyhgeWFybmApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxvY2tGaWxlTmFtZSA9XG4gICAgICAgIHBhY2thZ2VNYW5hZ2VyID09PSBcIm5wbS1zaHJpbmt3cmFwXCJcbiAgICAgICAgICA/IFwibnBtLXNocmlua3dyYXAuanNvblwiXG4gICAgICAgICAgOiBcInBhY2thZ2UtbG9jay5qc29uXCJcblxuICAgICAgY29uc3QgbG9ja0ZpbGVDb250ZW50cyA9IEpTT04ucGFyc2UoXG4gICAgICAgIGZzRXh0cmEucmVhZEZpbGVTeW5jKHBhdGguam9pbihhcHBQYXRoLCBsb2NrRmlsZU5hbWUpKS50b1N0cmluZygpLFxuICAgICAgKVxuICAgICAgY29uc3QgcmVzb2x2ZWRMb2NrRmlsZUNvbnRlbnRzID0gcmVzb2x2ZVJlbGF0aXZlRmlsZURlcGVuZGVuY2llc0luUGFja2FnZUxvY2soXG4gICAgICAgIGFwcFBhdGgsXG4gICAgICAgIGxvY2tGaWxlQ29udGVudHMsXG4gICAgICApXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICBwYXRoLmpvaW4odG1wUmVwby5uYW1lLCBsb2NrRmlsZU5hbWUpLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShyZXNvbHZlZExvY2tGaWxlQ29udGVudHMpLFxuICAgICAgKVxuICAgICAgY29uc29sZS5pbmZvKGdyZWVuKFwi4piRXCIpLCBcIkJ1aWxkaW5nIGNsZWFuIG5vZGVfbW9kdWxlcyB3aXRoIG5wbVwiKVxuICAgICAgdG1wRXhlYyhcIm5wbVwiLCBbXCJpXCJdKVxuICAgIH1cblxuICAgIC8vIGNvbW1pdCB0aGUgcGFja2FnZVxuICAgIGNvbnNvbGUuaW5mbyhncmVlbihcIuKYkVwiKSwgXCJEaWZmaW5nIHlvdXIgZmlsZXMgd2l0aCBjbGVhbiBmaWxlc1wiKVxuICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4odG1wUmVwby5uYW1lLCBcIi5naXRpZ25vcmVcIiksXG4gICAgICBcIiEvbm9kZV9tb2R1bGVzXFxuXFxuXCIsXG4gICAgKVxuICAgIHRtcEV4ZWMoXCJnaXRcIiwgW1wiaW5pdFwiXSlcbiAgICAvLyBkb24ndCBjb21taXQgcGFja2FnZS5qc29uIHRob3VnaFxuICAgIGZzLnVubGlua1N5bmMoXG4gICAgICBwYXRoLmpvaW4odG1wUmVwby5uYW1lLCBcIm5vZGVfbW9kdWxlc1wiLCBwYWNrYWdlTmFtZSwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgKVxuICAgIHRtcEV4ZWMoXCJnaXRcIiwgW1wiYWRkXCIsIFwiLWZcIiwgc2xhc2gocGF0aC5qb2luKFwibm9kZV9tb2R1bGVzXCIsIHBhY2thZ2VOYW1lKSldKVxuXG4gICAgdG1wRXhlYyhcImdpdFwiLCBbXCJjb21taXRcIiwgXCItbVwiLCBcImluaXRcIl0pXG5cbiAgICAvLyByZXBsYWNlIHBhY2thZ2Ugd2l0aCB1c2VyJ3MgdmVyc2lvblxuICAgIHJpbXJhZi5zeW5jKHRtcFJlcG9QYWNrYWdlUGF0aClcbiAgICBmc0V4dHJhLmNvcHlTeW5jKHBhY2thZ2VQYXRoLCB0bXBSZXBvUGFja2FnZVBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG5cbiAgICAvLyByZW1vdmUgcGFja2FnZS5qc29uIGFnYWluXG4gICAgZnMudW5saW5rU3luYyhcbiAgICAgIHBhdGguam9pbih0bXBSZXBvLm5hbWUsIFwibm9kZV9tb2R1bGVzXCIsIHBhY2thZ2VOYW1lLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICApXG5cbiAgICAvLyBzdGFnZSBhbGwgZmlsZXNcbiAgICB0bXBFeGVjKFwiZ2l0XCIsIFtcImFkZFwiLCBcIi1mXCIsIHNsYXNoKHBhdGguam9pbihcIm5vZGVfbW9kdWxlc1wiLCBwYWNrYWdlTmFtZSkpXSlcblxuICAgIC8vIHVuc3RhZ2UgYW55IGlnbm9yZWQgZmlsZXMgc28gdGhleSBkb24ndCBzaG93IHVwIGluIHRoZSBkaWZmXG4gICAgdG1wRXhlYyhcImdpdFwiLCBbXCJkaWZmXCIsIFwiLS1jYWNoZWRcIiwgXCItLW5hbWUtb25seVwiXSkuc3Rkb3V0XG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnNwbGl0KC9cXHI/XFxuLylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5mb3JFYWNoKGZpbGVOYW1lID0+IHtcbiAgICAgICAgaWYgKCFmaWxlTmFtZS5tYXRjaChpbmNsdWRlUGF0aHMpIHx8IGZpbGVOYW1lLm1hdGNoKGV4Y2x1ZGVQYXRocykpIHtcbiAgICAgICAgICB0bXBFeGVjKFwiZ2l0XCIsIFtcInJlc2V0XCIsIFwiSEVBRFwiLCBmaWxlTmFtZV0pXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAvLyBnZXQgZGlmZiBvZiBjaGFuZ2VzXG4gICAgY29uc3QgcGF0Y2ggPSB0bXBFeGVjKFwiZ2l0XCIsIFtcbiAgICAgIFwiZGlmZlwiLFxuICAgICAgXCItLWNhY2hlZFwiLFxuICAgICAgXCItLWlnbm9yZS1zcGFjZS1hdC1lb2xcIixcbiAgICBdKS5zdGRvdXQudG9TdHJpbmcoKVxuXG4gICAgaWYgKHBhdGNoLnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgY29uc29sZS53YXJuKGDigYnvuI8gIE5vdCBjcmVhdGluZyBwYXRjaCBmaWxlIGZvciBwYWNrYWdlICcke3BhY2thZ2VOYW1lfSdgKVxuICAgICAgY29uc29sZS53YXJuKGDigYnvuI8gIFRoZXJlIGRvbid0IGFwcGVhciB0byBiZSBhbnkgY2hhbmdlcy5gKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhdGNoRmlsZU5hbWUgPSBgJHtwYWNrYWdlTmFtZX0rJHtwYWNrYWdlVmVyc2lvbn0ucGF0Y2hgXG4gICAgICBjb25zdCBwYXRjaFBhdGggPSBwYXRoLmpvaW4ocGF0Y2hlc0RpciwgcGF0Y2hGaWxlTmFtZSlcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwYXRoLmRpcm5hbWUocGF0Y2hQYXRoKSkpIHtcbiAgICAgICAgLy8gc2NvcGVkIHBhY2thZ2VcbiAgICAgICAgZnMubWtkaXJTeW5jKHBhdGguZGlybmFtZShwYXRjaFBhdGgpKVxuICAgICAgfVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgcGF0Y2hQYXRoLFxuICAgICAgICBcInBhdGNoLXBhY2thZ2VcXG5cIiArIHJlbW92ZUdpdEhlYWRlcnNGcm9tU291cmNlKHBhdGNoKSxcbiAgICAgIClcbiAgICAgIGNvbnNvbGUubG9nKGAke2dyZWVuKFwi4pyUXCIpfSBDcmVhdGVkIGZpbGUgcGF0Y2hlcy8ke3BhdGNoRmlsZU5hbWV9YClcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgdGhyb3cgZVxuICB9IGZpbmFsbHkge1xuICAgIHRtcFJlcG8ucmVtb3ZlQ2FsbGJhY2soKVxuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50Tm9QYWNrYWdlRm91bmRFcnJvcihcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmcsXG4pIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICBgTm8gc3VjaCBwYWNrYWdlICR7cGFja2FnZU5hbWV9XG5cbiAgRmlsZSBub3QgZm91bmQ6ICR7cGFja2FnZUpzb25QYXRofWAsXG4gIClcbn1cbiJdfQ==