gitlab-ci-local 4.28.0 → 4.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Tired of pushing to test your .gitlab-ci.yml?",
4
4
  "main": "src/index.js",
5
5
  "bin": "src/index.js",
6
- "version": "4.28.0",
6
+ "version": "4.28.1",
7
7
  "scripts": {
8
8
  "prepublishOnly": "npm run check-all && chmod +x src/index.js",
9
9
  "pkg-linux": "pkg src/index.js --public -t node16-linux-x64 -o bin/linux/gitlab-ci-local && chmod +x bin/linux/gitlab-ci-local && gzip -c bin/linux/gitlab-ci-local > bin/linux.gz",
@@ -22,7 +22,7 @@
22
22
  "dependencies": {
23
23
  "axios": "^0.24.0",
24
24
  "base64url": "^3.0.1",
25
- "camelcase": "^6.2.1",
25
+ "camelcase": "^6.3.0",
26
26
  "chalk": "^4.1.2",
27
27
  "checksum": "^1.0.0",
28
28
  "deep-extend": "^0.6.0",
@@ -31,24 +31,24 @@
31
31
  "js-yaml": "^4.1.0",
32
32
  "pretty-hrtime": "^1.0.3",
33
33
  "source-map-support": "^0.5.21",
34
- "yargs": "^17.3.0"
34
+ "yargs": "^17.3.1"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/checksum": "0.1.33",
38
38
  "@types/deep-extend": "0.4.32",
39
39
  "@types/fs-extra": "9.0.13",
40
- "@types/jest": "27.0.3",
41
- "@types/jest-when": "2.7.3",
40
+ "@types/jest": "27.4.0",
41
+ "@types/jest-when": "2.7.4",
42
42
  "@types/js-yaml": "4.0.5",
43
43
  "@types/pretty-hrtime": "1.0.1",
44
44
  "@types/source-map-support": "0.5.4",
45
- "@types/yargs": "17.0.7",
46
- "@typescript-eslint/eslint-plugin": "5.8.0",
47
- "@typescript-eslint/parser": "5.8.0",
45
+ "@types/yargs": "17.0.8",
46
+ "@typescript-eslint/eslint-plugin": "5.9.0",
47
+ "@typescript-eslint/parser": "5.9.0",
48
48
  "axios-mock-adapter": "1.20.0",
49
- "depcheck": "1.4.2",
50
- "eslint": "8.5.0",
51
- "jest": "27.4.5",
49
+ "depcheck": "1.4.3",
50
+ "eslint": "8.6.0",
51
+ "jest": "27.4.7",
52
52
  "jest-when": "3.5.0",
53
53
  "pkg": "5.5.1",
54
54
  "ts-jest": "27.1.2",
package/src/index.js CHANGED
@@ -23,10 +23,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
23
23
  return (mod && mod.__esModule) ? mod : { "default": mod };
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
+ require("source-map-support/register");
26
27
  const chalk_1 = __importDefault(require("chalk"));
27
28
  const fs = __importStar(require("fs-extra"));
28
29
  const path = __importStar(require("path"));
29
- const sourceMapSupport = __importStar(require("source-map-support"));
30
30
  const yargs_1 = __importDefault(require("yargs"));
31
31
  const parser_1 = require("./parser");
32
32
  const state = __importStar(require("./state"));
@@ -35,7 +35,6 @@ const process_write_streams_1 = require("./process-write-streams");
35
35
  const handler_1 = require("./handler");
36
36
  const job_executor_1 = require("./job-executor");
37
37
  const mock_write_streams_1 = require("./mock-write-streams");
38
- sourceMapSupport.install();
39
38
  (() => {
40
39
  const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, "../package.json"), "utf8"));
41
40
  (0, yargs_1.default)(process.argv.slice(2))
@@ -168,4 +167,4 @@ sourceMapSupport.install();
168
167
  })
169
168
  .parse();
170
169
  })();
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0Esa0RBQTBCO0FBQzFCLDZDQUErQjtBQUMvQiwyQ0FBNkI7QUFDN0IscUVBQXVEO0FBQ3ZELGtEQUEwQjtBQUMxQixxQ0FBZ0M7QUFDaEMsK0NBQWlDO0FBQ2pDLG1EQUE2QztBQUM3QyxtRUFBNEQ7QUFDNUQsdUNBQWtDO0FBQ2xDLGlEQUEyQztBQUMzQyw2REFBc0Q7QUFFdEQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFM0IsQ0FBQyxHQUFHLEVBQUU7SUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLElBQUEsZUFBSyxFQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDL0IsY0FBYyxDQUFDLEtBQUssQ0FBQztTQUNyQixJQUFJLENBQUMsZUFBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzNCLE9BQU8sQ0FBQztRQUNMLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDcEIsSUFBSTtnQkFDQSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsaUJBQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSwyQ0FBbUIsRUFBRSxDQUFDLENBQUM7Z0JBQzVELE1BQU0sVUFBVSxHQUFHLDBCQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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QUN4RjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDN0I7SUFFTCxDQUFDLENBQUM7U0FDRCxLQUFLLEVBQUUsQ0FBQztBQUNqQixDQUFDLENBQUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBzb3VyY2VNYXBTdXBwb3J0IGZyb20gXCJzb3VyY2UtbWFwLXN1cHBvcnRcIjtcbmltcG9ydCB5YXJncyBmcm9tIFwieWFyZ3NcIjtcbmltcG9ydCB7UGFyc2VyfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCAqIGFzIHN0YXRlIGZyb20gXCIuL3N0YXRlXCI7XG5pbXBvcnQge0V4aXRFcnJvcn0gZnJvbSBcIi4vdHlwZXMvZXhpdC1lcnJvclwiO1xuaW1wb3J0IHtQcm9jZXNzV3JpdGVTdHJlYW1zfSBmcm9tIFwiLi9wcm9jZXNzLXdyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7aGFuZGxlcn0gZnJvbSBcIi4vaGFuZGxlclwiO1xuaW1wb3J0IHtKb2JFeGVjdXRvcn0gZnJvbSBcIi4vam9iLWV4ZWN1dG9yXCI7XG5pbXBvcnQge01vY2tXcml0ZVN0cmVhbXN9IGZyb20gXCIuL21vY2std3JpdGUtc3RyZWFtc1wiO1xuXG5zb3VyY2VNYXBTdXBwb3J0Lmluc3RhbGwoKTtcblxuKCgpID0+IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vcGFja2FnZS5qc29uXCIpLCBcInV0ZjhcIikpO1xuICAgIHlhcmdzKHByb2Nlc3MuYXJndi5zbGljZSgyKSlcbiAgICAgICAgLnZlcnNpb24ocGFja2FnZUpzb25bXCJ2ZXJzaW9uXCJdKVxuICAgICAgICAuc2hvd0hlbHBPbkZhaWwoZmFsc2UpXG4gICAgICAgIC53cmFwKHlhcmdzLnRlcm1pbmFsV2lkdGgoKSlcbiAgICAgICAgLmNvbW1hbmQoe1xuICAgICAgICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3YpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBqb2JzID0gYXdhaXQgaGFuZGxlcihhcmd2LCBuZXcgUHJvY2Vzc1dyaXRlU3RyZWFtcygpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkSm9icyA9IEpvYkV4ZWN1dG9yLmdldEZhaWxlZChqb2JzKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KGZhaWxlZEpvYnMubGVuZ3RoID4gMCA/IDEgOiAwKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXhpdEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShjaGFsa2B7cmVkICR7ZS5tZXNzYWdlfX1cXG5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWlsZGVyOiAoeTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHkucG9zaXRpb25hbChcImpvYlwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlOiBcIkpvYm5hbWUncyB0byBleGVjdXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21tYW5kOiBcIiQwIFtqb2IuLl1cIixcbiAgICAgICAgICAgIGRlc2NyaWJlOiBcIlJ1bnMgdGhlIGVudGlyZSBwaXBlbGluZSBvciBqb2Inc1wiLFxuICAgICAgICB9KVxuICAgICAgICAudXNhZ2UoXCJGaW5kIG1vcmUgaW5mb3JtYXRpb24gYXQgaHR0cHM6Ly9naXRodWIuY29tL2ZpcmVjb3cvZ2l0bGFiLWNpLWxvY2FsXCIpXG4gICAgICAgIC5zdHJpY3RPcHRpb25zKClcbiAgICAgICAgLmVudihcIkdDTFwiKVxuICAgICAgICAub3B0aW9uKFwibWFudWFsXCIsIHtcbiAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9uZSBvciBtb3JlIG1hbnVhbCBqb2JzIHRvIHJ1biBkdXJpbmcgYSBwaXBlbGluZVwiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJsaXN0XCIsIHtcbiAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJMaXN0IGpvYnMgYW5kIGpvYiBpbmZvcm1hdGlvbiwgd2hlbjpuZXZlciBleGNsdWRlZFwiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwibGlzdC1hbGxcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkxpc3Qgam9icyBhbmQgam9iIGluZm9ybWF0aW9uLCB3aGVuOm5ldmVyIGluY2x1ZGVkXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJwcmV2aWV3XCIsIHtcbiAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQcmludCBZTUwgd2l0aCBkZWZhdWx0cywgaW5jbHVkZXMsIGV4dGVuZHMgYW5kIHJlZmVyZW5jZSdzIGV4cGFuZGVkXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJjd2RcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBhdGggdG8gYSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbihcImNvbXBsZXRpb25cIiwge1xuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkdlbmVyYXRlIHRhYiBjb21wbGV0aW9uIHNjcmlwdFwiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwibmVlZHNcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJSdW4gbmVlZGVkIGpvYnMsIHdoZW4gZXhlY3V0aW5nIGEgc2luZ2xlIGpvYlwiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwidmFyaWFibGVcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQWRkIHZhcmlhYmxlIHRvIGFsbCBleGVjdXRlZCBqb2JzICgtLXZhcmlhYmxlIEhFTExPPXdvcmxkKVwiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwiZmlsZVwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiU3BlY2lmeSBjdXN0b20gbG9jYXRpb24gb2YgdGhlIC5naXRsYWItY2kueW1sLiBSZWxhdGl2ZSB0byBjd2QsIGVnLiAoZ2l0bGFiLy5naXRsYWItY2kueW1sKVwiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwiaG9tZVwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiU3BlY2lmeSBjdXN0b20gSE9NRSBsb2NhdGlvbiAoJEhPTUUvLmdpdGxhYi1jaS1sb2NhbC92YXJpYWJsZXMueW1sKVwiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwic2hlbGwtaXNvbGF0aW9uXCIsIHtcbiAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRW5hYmxlIGFydGlmYWN0IGlzb2xhdGlvbiBmb3Igc2hlbGwtZXhlY3V0b3Igam9ic1wiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwibW91bnQtY2FjaGVcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJFbmFibGUgZG9ja2VyIG1vdW50IGJhc2VkIGNhY2hpbmdcIixcbiAgICAgICAgICAgIHJlcXVpcmVzQXJnOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbihcInByaXZpbGVnZWRcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTZXQgZG9ja2VyIGV4ZWN1dG9yIHRvIHByaXZpbGVnZWQgbW9kZVwiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwidm9sdW1lXCIsIHtcbiAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkFkZCB2b2x1bWVzIHRvIGRvY2tlciBleGVjdXRvclwiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwiZXh0cmEtaG9zdFwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJBZGQgZXh0cmEgZG9ja2VyIGhvc3QgZW50cmllc1wiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwiZmV0Y2gtaW5jbHVkZXNcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJGZXRjaCBhbGwgZXh0ZXJuYWwgaW5jbHVkZXMgb25lIG1vcmUgdGltZVwiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAuY29tcGxldGlvbihcImNvbXBsZXRpb25cIiwgZmFsc2UsIGFzeW5jIChfLCB5YXJnc0FyZ3YpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3dkID0geWFyZ3NBcmd2LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpcGVsaW5lSWlkID0gYXdhaXQgc3RhdGUuZ2V0UGlwZWxpbmVJaWQoY3dkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZXIgPSBhd2FpdCBQYXJzZXIuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXM6IG5ldyBNb2NrV3JpdGVTdHJlYW1zKCksXG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lSWlkLFxuICAgICAgICAgICAgICAgICAgICBmaWxlOiB5YXJnc0FyZ3YuZmlsZSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiB7fSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLnBhcnNlci5qb2JzLnZhbHVlcygpXS5maWx0ZXIoKGopID0+IGoud2hlbiAhPSBcIm5ldmVyXCIpLm1hcCgoaikgPT4gai5uYW1lKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1wiUGFyc2VyLUZhaWxlZCFcIl07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSlcbiAgICAgICAgLnBhcnNlKCk7XG59KSgpO1xuXG4iXX0=
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsdUNBQXFDO0FBQ3JDLGtEQUEwQjtBQUMxQiw2Q0FBK0I7QUFDL0IsMkNBQTZCO0FBQzdCLGtEQUEwQjtBQUMxQixxQ0FBZ0M7QUFDaEMsK0NBQWlDO0FBQ2pDLG1EQUE2QztBQUM3QyxtRUFBNEQ7QUFDNUQsdUNBQWtDO0FBQ2xDLGlEQUEyQztBQUMzQyw2REFBc0Q7QUFFdEQsQ0FBQyxHQUFHLEVBQUU7SUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLElBQUEsZUFBSyxFQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDL0IsY0FBYyxDQUFDLEtBQUssQ0FBQztTQUNyQixJQUFJLENBQUMsZUFBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzNCLE9BQU8sQ0FBQztRQUNMLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDcEIsSUFBSTtnQkFDQSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsaUJBQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSwyQ0FBbUIsRUFBRSxDQUFDLENBQUM7Z0JBQzVELE1BQU0sVUFBVSxHQUFHLDBCQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFD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TyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDN0I7SUFFTCxDQUFDLENBQUM7U0FDRCxLQUFLLEVBQUUsQ0FBQztBQUNqQixDQUFDLENBQUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IFwic291cmNlLW1hcC1zdXBwb3J0L3JlZ2lzdGVyXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB5YXJncyBmcm9tIFwieWFyZ3NcIjtcbmltcG9ydCB7UGFyc2VyfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCAqIGFzIHN0YXRlIGZyb20gXCIuL3N0YXRlXCI7XG5pbXBvcnQge0V4aXRFcnJvcn0gZnJvbSBcIi4vdHlwZXMvZXhpdC1lcnJvclwiO1xuaW1wb3J0IHtQcm9jZXNzV3JpdGVTdHJlYW1zfSBmcm9tIFwiLi9wcm9jZXNzLXdyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7aGFuZGxlcn0gZnJvbSBcIi4vaGFuZGxlclwiO1xuaW1wb3J0IHtKb2JFeGVjdXRvcn0gZnJvbSBcIi4vam9iLWV4ZWN1dG9yXCI7XG5pbXBvcnQge01vY2tXcml0ZVN0cmVhbXN9IGZyb20gXCIuL21vY2std3JpdGUtc3RyZWFtc1wiO1xuXG4oKCkgPT4ge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9wYWNrYWdlLmpzb25cIiksIFwidXRmOFwiKSk7XG4gICAgeWFyZ3MocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxuICAgICAgICAudmVyc2lvbihwYWNrYWdlSnNvbltcInZlcnNpb25cIl0pXG4gICAgICAgIC5zaG93SGVscE9uRmFpbChmYWxzZSlcbiAgICAgICAgLndyYXAoeWFyZ3MudGVybWluYWxXaWR0aCgpKVxuICAgICAgICAuY29tbWFuZCh7XG4gICAgICAgICAgICBoYW5kbGVyOiBhc3luYyAoYXJndikgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpvYnMgPSBhd2FpdCBoYW5kbGVyKGFyZ3YsIG5ldyBQcm9jZXNzV3JpdGVTdHJlYW1zKCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmYWlsZWRKb2JzID0gSm9iRXhlY3V0b3IuZ2V0RmFpbGVkKGpvYnMpO1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoZmFpbGVkSm9icy5sZW5ndGggPiAwID8gMSA6IDApO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFeGl0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGNoYWxrYHtyZWQgJHtlLm1lc3NhZ2V9fVxcbmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1aWxkZXI6ICh5OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geS5wb3NpdGlvbmFsKFwiam9iXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmU6IFwiSm9ibmFtZSdzIHRvIGV4ZWN1dGVcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiJDAgW2pvYi4uXVwiLFxuICAgICAgICAgICAgZGVzY3JpYmU6IFwiUnVucyB0aGUgZW50aXJlIHBpcGVsaW5lIG9yIGpvYidzXCIsXG4gICAgICAgIH0pXG4gICAgICAgIC51c2FnZShcIkZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhdCBodHRwczovL2dpdGh1Yi5jb20vZmlyZWNvdy9naXRsYWItY2ktbG9jYWxcIilcbiAgICAgICAgLnN0cmljdE9wdGlvbnMoKVxuICAgICAgICAuZW52KFwiR0NMXCIpXG4gICAgICAgIC5vcHRpb24oXCJtYW51YWxcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT25lIG9yIG1vcmUgbWFudWFsIGpvYnMgdG8gcnVuIGR1cmluZyBhIHBpcGVsaW5lXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbihcImxpc3RcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkxpc3Qgam9icyBhbmQgam9iIGluZm9ybWF0aW9uLCB3aGVuOm5ldmVyIGV4Y2x1ZGVkXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJsaXN0LWFsbFwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTGlzdCBqb2JzIGFuZCBqb2IgaW5mb3JtYXRpb24sIHdoZW46bmV2ZXIgaW5jbHVkZWRcIixcbiAgICAgICAgICAgIHJlcXVpcmVzQXJnOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbihcInByZXZpZXdcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlByaW50IFlNTCB3aXRoIGRlZmF1bHRzLCBpbmNsdWRlcywgZXh0ZW5kcyBhbmQgcmVmZXJlbmNlJ3MgZXhwYW5kZWRcIixcbiAgICAgICAgICAgIHJlcXVpcmVzQXJnOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbihcImN3ZFwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiUGF0aCB0byBhIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcIixcbiAgICAgICAgICAgIHJlcXVpcmVzQXJnOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwiY29tcGxldGlvblwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiR2VuZXJhdGUgdGFiIGNvbXBsZXRpb24gc2NyaXB0XCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJuZWVkc1wiLCB7XG4gICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlJ1biBuZWVkZWQgam9icywgd2hlbiBleGVjdXRpbmcgYSBzaW5nbGUgam9iXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJ2YXJpYWJsZVwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJBZGQgdmFyaWFibGUgdG8gYWxsIGV4ZWN1dGVkIGpvYnMgKC0tdmFyaWFibGUgSEVMTE89d29ybGQpXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJmaWxlXCIsIHtcbiAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTcGVjaWZ5IGN1c3RvbSBsb2NhdGlvbiBvZiB0aGUgLmdpdGxhYi1jaS55bWwuIFJlbGF0aXZlIHRvIGN3ZCwgZWcuIChnaXRsYWIvLmdpdGxhYi1jaS55bWwpXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJob21lXCIsIHtcbiAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTcGVjaWZ5IGN1c3RvbSBIT01FIGxvY2F0aW9uICgkSE9NRS8uZ2l0bGFiLWNpLWxvY2FsL3ZhcmlhYmxlcy55bWwpXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJzaGVsbC1pc29sYXRpb25cIiwge1xuICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJFbmFibGUgYXJ0aWZhY3QgaXNvbGF0aW9uIGZvciBzaGVsbC1leGVjdXRvciBqb2JzXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJtb3VudC1jYWNoZVwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkVuYWJsZSBkb2NrZXIgbW91bnQgYmFzZWQgY2FjaGluZ1wiLFxuICAgICAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKFwicHJpdmlsZWdlZFwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlNldCBkb2NrZXIgZXhlY3V0b3IgdG8gcHJpdmlsZWdlZCBtb2RlXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJ2b2x1bWVcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQWRkIHZvbHVtZXMgdG8gZG9ja2VyIGV4ZWN1dG9yXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJleHRyYS1ob3N0XCIsIHtcbiAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkFkZCBleHRyYSBkb2NrZXIgaG9zdCBlbnRyaWVzXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oXCJmZXRjaC1pbmNsdWRlc1wiLCB7XG4gICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkZldGNoIGFsbCBleHRlcm5hbCBpbmNsdWRlcyBvbmUgbW9yZSB0aW1lXCIsXG4gICAgICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5jb21wbGV0aW9uKFwiY29tcGxldGlvblwiLCBmYWxzZSwgYXN5bmMgKF8sIHlhcmdzQXJndikgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjd2QgPSB5YXJnc0FyZ3YuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlwZWxpbmVJaWQgPSBhd2FpdCBzdGF0ZS5nZXRQaXBlbGluZUlpZChjd2QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlciA9IGF3YWl0IFBhcnNlci5jcmVhdGUoe1xuICAgICAgICAgICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtczogbmV3IE1vY2tXcml0ZVN0cmVhbXMoKSxcbiAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVJaWQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGU6IHlhcmdzQXJndi5maWxlLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHt9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBbLi4ucGFyc2VyLmpvYnMudmFsdWVzKCldLmZpbHRlcigoaikgPT4gai53aGVuICE9IFwibmV2ZXJcIikubWFwKChqKSA9PiBqLm5hbWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXCJQYXJzZXItRmFpbGVkIVwiXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgICAgICAucGFyc2UoKTtcbn0pKCk7XG5cbiJdfQ==
package/src/test.js ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("./utils");
4
+ console.log(utils_1.Utils.evaluateRuleIf("$CI_COMMIT_BRANCH =~ /master($|\\s)/", { CI_COMMIT_BRANCH: "master" }));
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FBOEI7QUFFOUIsT0FBTyxDQUFDLEdBQUcsQ0FDUCxhQUFLLENBQUMsY0FBYyxDQUNoQixzQ0FBc0MsRUFDdEMsRUFBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUMsQ0FDL0IsQ0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc29sZS5sb2coXG4gICAgVXRpbHMuZXZhbHVhdGVSdWxlSWYoXG4gICAgICAgIFwiJENJX0NPTU1JVF9CUkFOQ0ggPX4gL21hc3RlcigkfFxcXFxzKS9cIixcbiAgICAgICAge0NJX0NPTU1JVF9CUkFOQ0g6IFwibWFzdGVyXCJ9XG4gICAgKVxuKTtcblxuIl19
package/src/utils.js CHANGED
@@ -93,8 +93,8 @@ class Utils {
93
93
  const content = await fs.readFile(`${cwd}/.gitlab-ci-local/output/${jobName}.log`, "utf8");
94
94
  const regex = new RegExp(coverageRegex.replace(/^\//, "").replace(/\/$/, ""), "m");
95
95
  const match = content.match(regex);
96
- if (match && match[1] != null) {
97
- const firstNumber = match[1].match(/\d+(\.\d+)?/);
96
+ if (match && match[0] != null) {
97
+ const firstNumber = match[0].match(/\d+(\.\d+)?/);
98
98
  return firstNumber && firstNumber[0] ? firstNumber[0] : null;
99
99
  }
100
100
  return "0";
@@ -136,42 +136,23 @@ class Utils {
136
136
  return { when, allowFailure };
137
137
  }
138
138
  static evaluateRuleIf(ruleIf, envs) {
139
- const expandedRule = ruleIf.replace(/[$]\w*/g, (match) => {
139
+ let evalStr = ruleIf;
140
+ // Expand all variables
141
+ evalStr = evalStr.replace(/[$]\w+/g, (match) => {
140
142
  const sub = envs[match.replace(/^[$]/, "")];
141
143
  return sub != null ? `'${sub}'` : "null";
142
144
  });
143
- const subRules = expandedRule.split(/&&|\|\|/g);
144
- const subEvals = [];
145
- for (const subRule of subRules) {
146
- let subEval = subRule;
147
- if (subRule.includes("!~")) {
148
- subEval = subRule.replace(/\s*!~\s*(\/.*\/[igmsuy]*)/g, ".match($1) == null").trim();
149
- subEval = subEval.match(/^null/) ? "false" : subEval;
150
- }
151
- else if (subRule.includes("=~")) {
152
- subEval = subRule.replace(/\s*=~\s*(\/.*\/[igmsuy]*)/g, ".match($1) != null").trim();
153
- subEval = subEval.match(/^null/) ? "false" : subEval;
154
- }
155
- else if (!subRule.match(/==|!=/)) {
156
- if (subRule.match(/null/)) {
157
- subEval = subRule.replace(/(\s*)\S*(\s*)/, "$1false$2").trim();
158
- }
159
- else if (subRule.match(/''/)) {
160
- subEval = subRule.replace(/'(\s?)\S*(\s)?'/, "$1false$2").trim();
161
- }
162
- else {
163
- subEval = subRule.replace(/'(\s?)\S*(\s)?'/, "$1true$2").trim();
164
- }
165
- }
166
- subEvals.push(subEval);
167
- }
168
- const conditions = expandedRule.match(/&&|\|\|/g);
169
- let evalStr = "";
170
- subEvals.forEach((subEval, index) => {
171
- evalStr += subEval;
172
- evalStr += conditions && conditions[index] ? conditions[index] : "";
173
- });
174
- return eval(evalStr);
145
+ // Convert =~ to match function
146
+ evalStr = evalStr.replace(/\s*=~\s*(\/.*?\/[igmsuy]*)/g, ".match($1) != null");
147
+ evalStr = evalStr.replace(/\s*=~\s(.+?)(\)*?)(?:\s|$)/g, ".match(new RegExp($1)) != null$2"); // Without forward slashes
148
+ // Convert !~ to match function
149
+ evalStr = evalStr.replace(/\s*!~\s*(\/.*?\/[igmsuy]*)/g, ".match($1) == null");
150
+ evalStr = evalStr.replace(/\s*!~\s(.+?)(\)*?)(?:\s|$)/g, ".match(new RegExp($1)) == null$2"); // Without forward slashes
151
+ // Convert all null.match functions to false
152
+ evalStr = evalStr.replace(/null.match\(.+?\) != null/g, "false");
153
+ evalStr = evalStr.replace(/null.match\(.+?\) == null/g, "false");
154
+ // noinspection BadExpressionStatementJS
155
+ return eval(`if (${evalStr}) { true } else { false }`);
175
156
  }
176
157
  static async rsyncTrackedFiles(cwd, target) {
177
158
  const time = process.hrtime();
@@ -196,4 +177,4 @@ class Utils {
196
177
  }
197
178
  }
198
179
  exports.Utils = Utils;
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLDREQUE4QztBQUM5QyxtREFBNkM7QUFDN0MsK0JBQTBCO0FBQzFCLHVDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isd0RBQWdDO0FBQ2hDLDBEQUFrQztBQUVsQyxNQUFhLEtBQUs7SUFFZCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQWUsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUM3QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztZQUVwRixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUVoQixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDMUIsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztZQUNILEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMxQixNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMxQixNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFB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QUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUEsa0JBQVEsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNKO0FBMUxELHNCQTBMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCAqIGFzIGNoaWxkUHJvY2VzcyBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHtFeGl0RXJyb3J9IGZyb20gXCIuL3R5cGVzL2V4aXQtZXJyb3JcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2JcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9hc3NlcnRzXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBjaGVja3N1bSBmcm9tIFwiY2hlY2tzdW1cIjtcbmltcG9ydCBiYXNlNjR1cmwgZnJvbSBcImJhc2U2NHVybFwiO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMge1xuXG4gICAgc3RhdGljIHNwYXduKGNvbW1hbmQ6IHN0cmluZywgY3dkID0gcHJvY2Vzcy5jd2QoKSk6IFByb21pc2U8eyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IG91dHB1dDogc3RyaW5nOyBzdGF0dXM6IG51bWJlciB9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjcCA9IGNoaWxkUHJvY2Vzcy5zcGF3bihgJHtjb21tYW5kfWAsIHtzaGVsbDogXCJiYXNoXCIsIGVudjogcHJvY2Vzcy5lbnYsIGN3ZH0pO1xuXG4gICAgICAgICAgICBsZXQgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgICAgICAgICAgbGV0IHN0ZGVyciA9IFwiXCI7XG5cbiAgICAgICAgICAgIGNwLnN0ZGVyci5vbihcImRhdGFcIiwgKGJ1ZmYpID0+IHtcbiAgICAgICAgICAgICAgICBzdGRlcnIgKz0gYnVmZi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBidWZmLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNwLnN0ZG91dC5vbihcImRhdGFcIiwgKGJ1ZmYpID0+IHtcbiAgICAgICAgICAgICAgICBzdGRvdXQgKz0gYnVmZi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBidWZmLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNwLm9uKFwiZXhpdFwiLCAoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgPz8gMCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSh7c3Rkb3V0LCBzdGRlcnIsIG91dHB1dCwgc3RhdHVzOiBzdGF0dXMgPz8gMH0pLCAxMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXhpdEVycm9yKGAke291dHB1dCAhPT0gXCJcIiA/IG91dHB1dCA6IFwiJD8gW1wiICsgc3RhdHVzICsgXCJdXCJ9YCkpLCAxMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNwLm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEV4aXRFcnJvcihgJyR7Y29tbWFuZH0nIGhhZCBlcnJvcnNcXG4ke2V9YCkpLCAxMCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnNVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoL15odHRwczpcXC9cXC8vZywgXCJcIikucmVwbGFjZSgvXmh0dHA6XFwvXFwvL2csIFwiXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRKb2JCeU5hbWUoam9iczogUmVhZG9ubHlNYXA8c3RyaW5nLCBKb2I+LCBuYW1lOiBzdHJpbmcpOiBKb2Ige1xuICAgICAgICBjb25zdCBqb2IgPSBqb2JzLmdldChuYW1lKTtcbiAgICAgICAgYXNzZXJ0KGpvYiAhPSBudWxsLCBjaGFsa2B7Ymx1ZUJyaWdodCAke25hbWV9fSBjb3VsZCBub3QgYmUgZm91bmRgKTtcbiAgICAgICAgcmV0dXJuIGpvYjtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0U2FmZUpvYk5hbWUoam9iTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBqb2JOYW1lLnJlcGxhY2UoL1teXFx3LV0rL2csIChtYXRjaCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGJhc2U2NHVybC5lbmNvZGUobWF0Y2gpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9yRWFjaFJlYWxKb2IoZ2l0bGFiRGF0YTogYW55LCBjYWxsYmFjazogKGpvYk5hbWU6IHN0cmluZywgam9iRGF0YTogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2pvYk5hbWUsIGpvYkRhdGFdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4oZ2l0bGFiRGF0YSkpIHtcbiAgICAgICAgICAgIGlmIChKb2IuaWxsZWdhbEpvYk5hbWVzLmluY2x1ZGVzKGpvYk5hbWUpIHx8IGpvYk5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhqb2JOYW1lLCBqb2JEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRKb2JOYW1lc0Zyb21QcmV2aW91c1N0YWdlcyhqb2JzOiBSZWFkb25seU1hcDxzdHJpbmcsIEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10sIGN1cnJlbnRKb2I6IEpvYikge1xuICAgICAgICBjb25zdCBqb2JOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YWdlSW5kZXggPSBzdGFnZXMuaW5kZXhPZihjdXJyZW50Sm9iLnN0YWdlKTtcbiAgICAgICAgam9icy5mb3JFYWNoKGpvYiA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2Yoam9iLnN0YWdlKTtcbiAgICAgICAgICAgIGlmIChzdGFnZUluZGV4IDwgY3VycmVudFN0YWdlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBqb2JOYW1lcy5wdXNoKGpvYi5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBqb2JOYW1lcztcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZ2V0Q292ZXJhZ2VQZXJjZW50KGN3ZDogc3RyaW5nLCBjb3ZlcmFnZVJlZ2V4OiBzdHJpbmcsIGpvYk5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsL291dHB1dC8ke2pvYk5hbWV9LmxvZ2AsIFwidXRmOFwiKTtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGNvdmVyYWdlUmVnZXgucmVwbGFjZSgvXlxcLy8sIFwiXCIpLnJlcGxhY2UoL1xcLyQvLCBcIlwiKSwgXCJtXCIpO1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbnRlbnQubWF0Y2gocmVnZXgpO1xuICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3ROdW1iZXIgPSBtYXRjaFsxXS5tYXRjaCgvXFxkKyhcXC5cXGQrKT8vKTtcbiAgICAgICAgICAgIHJldHVybiBmaXJzdE51bWJlciAmJiBmaXJzdE51bWJlclswXSA/IGZpcnN0TnVtYmVyWzBdIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCIwXCI7XG4gICAgfVxuXG4gICAgc3RhdGljIHByaW50Sm9iTmFtZXMoc3RyZWFtOiAodHh0OiBzdHJpbmcpID0+IHZvaWQsIGpvYjogeyBuYW1lOiBzdHJpbmcgfSwgaTogbnVtYmVyLCBhcnI6IHsgbmFtZTogc3RyaW5nIH1bXSkge1xuICAgICAgICBpZiAoaSA9PT0gYXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHN0cmVhbShjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbShjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX0sIGApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZFRleHQodGV4dD86IGFueSwgZW52czogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHByb2Nlc3MuZW52KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSgvWyRdW3tdP1xcdypbfV0/L2csIChtYXRjaCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3ViID0gZW52c1ttYXRjaC5yZXBsYWNlKC9eWyRdW3tdPy8sIFwiXCIpLnJlcGxhY2UoL1t9XT8kLywgXCJcIildO1xuICAgICAgICAgICAgcmV0dXJuIHN1YiB8fCBcIlwiO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXhwYW5kVmFyaWFibGVzKHZhcmlhYmxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgZW52czogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgICAgICBjb25zdCBleHBhbmRlZFZhcmlhYmxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XG4gICAgICAgICAgICBleHBhbmRlZFZhcmlhYmxlc1trZXldID0gVXRpbHMuZXhwYW5kVGV4dCh2YWx1ZSwgZW52cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cGFuZGVkVmFyaWFibGVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSdWxlc1Jlc3VsdChydWxlczogeyBpZj86IHN0cmluZzsgd2hlbj86IHN0cmluZzsgYWxsb3dfZmFpbHVyZT86IGJvb2xlYW4gfVtdLCB2YXJpYWJsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiB7IHdoZW46IHN0cmluZzsgYWxsb3dGYWlsdXJlOiBib29sZWFuIH0ge1xuICAgICAgICBsZXQgd2hlbiA9IFwibmV2ZXJcIjtcbiAgICAgICAgbGV0IGFsbG93RmFpbHVyZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgICAgICAgaWYgKFV0aWxzLmV2YWx1YXRlUnVsZUlmKHJ1bGUuaWYgfHwgXCJ0cnVlXCIsIHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgICAgICB3aGVuID0gcnVsZS53aGVuID8gcnVsZS53aGVuIDogXCJvbl9zdWNjZXNzXCI7XG4gICAgICAgICAgICAgICAgYWxsb3dGYWlsdXJlID0gcnVsZS5hbGxvd19mYWlsdXJlID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHt3aGVuLCBhbGxvd0ZhaWx1cmV9O1xuICAgIH1cblxuICAgIHN0YXRpYyBldmFsdWF0ZVJ1bGVJZihydWxlSWY6IHN0cmluZywgZW52czogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgICAgICBjb25zdCBleHBhbmRlZFJ1bGUgPSBydWxlSWYucmVwbGFjZSgvWyRdXFx3Ki9nLCAobWF0Y2gpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YiA9IGVudnNbbWF0Y2gucmVwbGFjZSgvXlskXS8sIFwiXCIpXTtcbiAgICAgICAgICAgIHJldHVybiBzdWIgIT0gbnVsbCA/IGAnJHtzdWJ9J2AgOiBcIm51bGxcIjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3ViUnVsZXMgPSBleHBhbmRlZFJ1bGUuc3BsaXQoLyYmfFxcfFxcfC9nKTtcbiAgICAgICAgY29uc3Qgc3ViRXZhbHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzdWJSdWxlIG9mIHN1YlJ1bGVzKSB7XG4gICAgICAgICAgICBsZXQgc3ViRXZhbCA9IHN1YlJ1bGU7XG5cbiAgICAgICAgICAgIGlmIChzdWJSdWxlLmluY2x1ZGVzKFwiIX5cIikpIHtcbiAgICAgICAgICAgICAgICBzdWJFdmFsID0gc3ViUnVsZS5yZXBsYWNlKC9cXHMqIX5cXHMqKFxcLy4qXFwvW2lnbXN1eV0qKS9nLCBcIi5tYXRjaCgkMSkgPT0gbnVsbFwiKS50cmltKCk7XG4gICAgICAgICAgICAgICAgc3ViRXZhbCA9IHN1YkV2YWwubWF0Y2goL15udWxsLykgPyBcImZhbHNlXCIgOiBzdWJFdmFsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSdWxlLmluY2x1ZGVzKFwiPX5cIikpIHtcbiAgICAgICAgICAgICAgICBzdWJFdmFsID0gc3ViUnVsZS5yZXBsYWNlKC9cXHMqPX5cXHMqKFxcLy4qXFwvW2lnbXN1eV0qKS9nLCBcIi5tYXRjaCgkMSkgIT0gbnVsbFwiKS50cmltKCk7XG4gICAgICAgICAgICAgICAgc3ViRXZhbCA9IHN1YkV2YWwubWF0Y2goL15udWxsLykgPyBcImZhbHNlXCIgOiBzdWJFdmFsO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3ViUnVsZS5tYXRjaCgvPT18IT0vKSkge1xuICAgICAgICAgICAgICAgIGlmIChzdWJSdWxlLm1hdGNoKC9udWxsLykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViRXZhbCA9IHN1YlJ1bGUucmVwbGFjZSgvKFxccyopXFxTKihcXHMqKS8sIFwiJDFmYWxzZSQyXCIpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJ1bGUubWF0Y2goLycnLykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViRXZhbCA9IHN1YlJ1bGUucmVwbGFjZSgvJyhcXHM/KVxcUyooXFxzKT8nLywgXCIkMWZhbHNlJDJcIikudHJpbSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YkV2YWwgPSBzdWJSdWxlLnJlcGxhY2UoLycoXFxzPylcXFMqKFxccyk/Jy8sIFwiJDF0cnVlJDJcIikudHJpbSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3ViRXZhbHMucHVzaChzdWJFdmFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBleHBhbmRlZFJ1bGUubWF0Y2goLyYmfFxcfFxcfC9nKTtcblxuICAgICAgICBsZXQgZXZhbFN0ciA9IFwiXCI7XG5cbiAgICAgICAgc3ViRXZhbHMuZm9yRWFjaCgoc3ViRXZhbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGV2YWxTdHIgKz0gc3ViRXZhbDtcbiAgICAgICAgICAgIGV2YWxTdHIgKz0gY29uZGl0aW9ucyAmJiBjb25kaXRpb25zW2luZGV4XSA/IGNvbmRpdGlvbnNbaW5kZXhdIDogXCJcIjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGV2YWwoZXZhbFN0cik7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIHJzeW5jVHJhY2tlZEZpbGVzKGN3ZDogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IFByb21pc2U8eyBocmRlbHRhdGltZTogW251bWJlciwgbnVtYmVyXSB9PiB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2J1aWxkcy8ke3RhcmdldH1gKTtcbiAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYHJzeW5jIC1hIC0tZGVsZXRlLWV4Y2x1ZGVkIC0tZGVsZXRlIC0tZXhjbHVkZS1mcm9tPTwoZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5KSAtLWV4Y2x1ZGUgLmdpdGxhYi1jaS1sb2NhbC8gLi8gLmdpdGxhYi1jaS1sb2NhbC9idWlsZHMvJHt0YXJnZXR9L2AsIGN3ZCk7XG4gICAgICAgIHJldHVybiB7aHJkZWx0YXRpbWU6IHByb2Nlc3MuaHJ0aW1lKHRpbWUpfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgY2hlY2tzdW1GaWxlcyhmaWxlczogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwcm9taXNlczogUHJvbWlzZTxzdHJpbmc+W10gPSBbXTtcblxuICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjaGVja3N1bS5maWxlKGZpbGUsIChlcnIsIGhhc2gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaGFzaCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgcmV0dXJuIGNoZWNrc3VtKHJlc3VsdC5qb2luKFwiXCIpKTtcbiAgICB9XG59XG4iXX0=
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLDREQUE4QztBQUM5QyxtREFBNkM7QUFDN0MsK0JBQTBCO0FBQzFCLHVDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isd0RBQWdDO0FBQ2hDLDBEQUFrQztBQUVsQyxNQUFhLEtBQUs7SUFFZCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQWUsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUM3QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztZQUVwRixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUVoQixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDMUIsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztZQUNILEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMxQixNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMxQixNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFB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QztRQUNSLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBQSxrQkFBUSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0o7QUF6S0Qsc0JBeUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0ICogYXMgY2hpbGRQcm9jZXNzIGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQge0V4aXRFcnJvcn0gZnJvbSBcIi4vdHlwZXMvZXhpdC1lcnJvclwiO1xuaW1wb3J0IHtKb2J9IGZyb20gXCIuL2pvYlwiO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gXCIuL2Fzc2VydHNcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IGNoZWNrc3VtIGZyb20gXCJjaGVja3N1bVwiO1xuaW1wb3J0IGJhc2U2NHVybCBmcm9tIFwiYmFzZTY0dXJsXCI7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyB7XG5cbiAgICBzdGF0aWMgc3Bhd24oY29tbWFuZDogc3RyaW5nLCBjd2QgPSBwcm9jZXNzLmN3ZCgpKTogUHJvbWlzZTx7IHN0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZzsgb3V0cHV0OiBzdHJpbmc7IHN0YXR1czogbnVtYmVyIH0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNwID0gY2hpbGRQcm9jZXNzLnNwYXduKGAke2NvbW1hbmR9YCwge3NoZWxsOiBcImJhc2hcIiwgZW52OiBwcm9jZXNzLmVudiwgY3dkfSk7XG5cbiAgICAgICAgICAgIGxldCBvdXRwdXQgPSBcIlwiO1xuICAgICAgICAgICAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gICAgICAgICAgICBsZXQgc3RkZXJyID0gXCJcIjtcblxuICAgICAgICAgICAgY3Auc3RkZXJyLm9uKFwiZGF0YVwiLCAoYnVmZikgPT4ge1xuICAgICAgICAgICAgICAgIHN0ZGVyciArPSBidWZmLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGJ1ZmYudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3Auc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoYnVmZikgPT4ge1xuICAgICAgICAgICAgICAgIHN0ZG91dCArPSBidWZmLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGJ1ZmYudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3Aub24oXCJleGl0XCIsIChzdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyA/PyAwKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHtzdGRvdXQsIHN0ZGVyciwgb3V0cHV0LCBzdGF0dXM6IHN0YXR1cyA/PyAwfSksIDEwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFeGl0RXJyb3IoYCR7b3V0cHV0ICE9PSBcIlwiID8gb3V0cHV0IDogXCIkPyBbXCIgKyBzdGF0dXMgKyBcIl1cIn1gKSksIDEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3Aub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXhpdEVycm9yKGAnJHtjb21tYW5kfScgaGFkIGVycm9yc1xcbiR7ZX1gKSksIDEwKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBmc1VybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgvXmh0dHBzOlxcL1xcLy9nLCBcIlwiKS5yZXBsYWNlKC9eaHR0cDpcXC9cXC8vZywgXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEpvYkJ5TmFtZShqb2JzOiBSZWFkb25seU1hcDxzdHJpbmcsIEpvYj4sIG5hbWU6IHN0cmluZyk6IEpvYiB7XG4gICAgICAgIGNvbnN0IGpvYiA9IGpvYnMuZ2V0KG5hbWUpO1xuICAgICAgICBhc3NlcnQoam9iICE9IG51bGwsIGNoYWxrYHtibHVlQnJpZ2h0ICR7bmFtZX19IGNvdWxkIG5vdCBiZSBmb3VuZGApO1xuICAgICAgICByZXR1cm4gam9iO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRTYWZlSm9iTmFtZShqb2JOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGpvYk5hbWUucmVwbGFjZSgvW15cXHctXSsvZywgKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYmFzZTY0dXJsLmVuY29kZShtYXRjaCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JFYWNoUmVhbEpvYihnaXRsYWJEYXRhOiBhbnksIGNhbGxiYWNrOiAoam9iTmFtZTogc3RyaW5nLCBqb2JEYXRhOiBhbnkpID0+IHZvaWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBbam9iTmFtZSwgam9iRGF0YV0gb2YgT2JqZWN0LmVudHJpZXM8YW55PihnaXRsYWJEYXRhKSkge1xuICAgICAgICAgICAgaWYgKEpvYi5pbGxlZ2FsSm9iTmFtZXMuaW5jbHVkZXMoam9iTmFtZSkgfHwgam9iTmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGpvYk5hbWUsIGpvYkRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEpvYk5hbWVzRnJvbVByZXZpb3VzU3RhZ2VzKGpvYnM6IFJlYWRvbmx5TWFwPHN0cmluZywgSm9iPiwgc3RhZ2VzOiByZWFkb25seSBzdHJpbmdbXSwgY3VycmVudEpvYjogSm9iKSB7XG4gICAgICAgIGNvbnN0IGpvYk5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhZ2VJbmRleCA9IHN0YWdlcy5pbmRleE9mKGN1cnJlbnRKb2Iuc3RhZ2UpO1xuICAgICAgICBqb2JzLmZvckVhY2goam9iID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YWdlSW5kZXggPSBzdGFnZXMuaW5kZXhPZihqb2Iuc3RhZ2UpO1xuICAgICAgICAgICAgaWYgKHN0YWdlSW5kZXggPCBjdXJyZW50U3RhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgIGpvYk5hbWVzLnB1c2goam9iLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGpvYk5hbWVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBnZXRDb3ZlcmFnZVBlcmNlbnQoY3dkOiBzdHJpbmcsIGNvdmVyYWdlUmVnZXg6IHN0cmluZywgam9iTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvb3V0cHV0LyR7am9iTmFtZX0ubG9nYCwgXCJ1dGY4XCIpO1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoY292ZXJhZ2VSZWdleC5yZXBsYWNlKC9eXFwvLywgXCJcIikucmVwbGFjZSgvXFwvJC8sIFwiXCIpLCBcIm1cIik7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gY29udGVudC5tYXRjaChyZWdleCk7XG4gICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFswXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdE51bWJlciA9IG1hdGNoWzBdLm1hdGNoKC9cXGQrKFxcLlxcZCspPy8pO1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0TnVtYmVyICYmIGZpcnN0TnVtYmVyWzBdID8gZmlyc3ROdW1iZXJbMF0gOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIjBcIjtcbiAgICB9XG5cbiAgICBzdGF0aWMgcHJpbnRKb2JOYW1lcyhzdHJlYW06ICh0eHQ6IHN0cmluZykgPT4gdm9pZCwgam9iOiB7IG5hbWU6IHN0cmluZyB9LCBpOiBudW1iZXIsIGFycjogeyBuYW1lOiBzdHJpbmcgfVtdKSB7XG4gICAgICAgIGlmIChpID09PSBhcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgc3RyZWFtKGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtKGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fSwgYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZXhwYW5kVGV4dCh0ZXh0PzogYW55LCBlbnZzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0gcHJvY2Vzcy5lbnYpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bJF1be10/XFx3Klt9XT8vZywgKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWIgPSBlbnZzW21hdGNoLnJlcGxhY2UoL15bJF1be10/LywgXCJcIikucmVwbGFjZSgvW31dPyQvLCBcIlwiKV07XG4gICAgICAgICAgICByZXR1cm4gc3ViIHx8IFwiXCI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBleHBhbmRWYXJpYWJsZXModmFyaWFibGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LCBlbnZzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkVmFyaWFibGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIGV4cGFuZGVkVmFyaWFibGVzW2tleV0gPSBVdGlscy5leHBhbmRUZXh0KHZhbHVlLCBlbnZzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwYW5kZWRWYXJpYWJsZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJ1bGVzUmVzdWx0KHJ1bGVzOiB7IGlmPzogc3RyaW5nOyB3aGVuPzogc3RyaW5nOyBhbGxvd19mYWlsdXJlPzogYm9vbGVhbiB9W10sIHZhcmlhYmxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHsgd2hlbjogc3RyaW5nOyBhbGxvd0ZhaWx1cmU6IGJvb2xlYW4gfSB7XG4gICAgICAgIGxldCB3aGVuID0gXCJuZXZlclwiO1xuICAgICAgICBsZXQgYWxsb3dGYWlsdXJlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuZXZhbHVhdGVSdWxlSWYocnVsZS5pZiB8fCBcInRydWVcIiwgdmFyaWFibGVzKSkge1xuICAgICAgICAgICAgICAgIHdoZW4gPSBydWxlLndoZW4gPyBydWxlLndoZW4gOiBcIm9uX3N1Y2Nlc3NcIjtcbiAgICAgICAgICAgICAgICBhbGxvd0ZhaWx1cmUgPSBydWxlLmFsbG93X2ZhaWx1cmUgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge3doZW4sIGFsbG93RmFpbHVyZX07XG4gICAgfVxuXG4gICAgc3RhdGljIGV2YWx1YXRlUnVsZUlmKHJ1bGVJZjogc3RyaW5nLCBlbnZzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgICAgIGxldCBldmFsU3RyID0gcnVsZUlmO1xuXG4gICAgICAgIC8vIEV4cGFuZCBhbGwgdmFyaWFibGVzXG4gICAgICAgIGV2YWxTdHIgPSBldmFsU3RyLnJlcGxhY2UoL1skXVxcdysvZywgKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWIgPSBlbnZzW21hdGNoLnJlcGxhY2UoL15bJF0vLCBcIlwiKV07XG4gICAgICAgICAgICByZXR1cm4gc3ViICE9IG51bGwgPyBgJyR7c3VifSdgIDogXCJudWxsXCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENvbnZlcnQgPX4gdG8gbWF0Y2ggZnVuY3Rpb25cbiAgICAgICAgZXZhbFN0ciA9IGV2YWxTdHIucmVwbGFjZSgvXFxzKj1+XFxzKihcXC8uKj9cXC9baWdtc3V5XSopL2csIFwiLm1hdGNoKCQxKSAhPSBudWxsXCIpO1xuICAgICAgICBldmFsU3RyID0gZXZhbFN0ci5yZXBsYWNlKC9cXHMqPX5cXHMoLis/KShcXCkqPykoPzpcXHN8JCkvZywgXCIubWF0Y2gobmV3IFJlZ0V4cCgkMSkpICE9IG51bGwkMlwiKTsgLy8gV2l0aG91dCBmb3J3YXJkIHNsYXNoZXNcblxuICAgICAgICAvLyBDb252ZXJ0ICF+IHRvIG1hdGNoIGZ1bmN0aW9uXG4gICAgICAgIGV2YWxTdHIgPSBldmFsU3RyLnJlcGxhY2UoL1xccyohflxccyooXFwvLio/XFwvW2lnbXN1eV0qKS9nLCBcIi5tYXRjaCgkMSkgPT0gbnVsbFwiKTtcbiAgICAgICAgZXZhbFN0ciA9IGV2YWxTdHIucmVwbGFjZSgvXFxzKiF+XFxzKC4rPykoXFwpKj8pKD86XFxzfCQpL2csIFwiLm1hdGNoKG5ldyBSZWdFeHAoJDEpKSA9PSBudWxsJDJcIik7IC8vIFdpdGhvdXQgZm9yd2FyZCBzbGFzaGVzXG5cbiAgICAgICAgLy8gQ29udmVydCBhbGwgbnVsbC5tYXRjaCBmdW5jdGlvbnMgdG8gZmFsc2VcbiAgICAgICAgZXZhbFN0ciA9IGV2YWxTdHIucmVwbGFjZSgvbnVsbC5tYXRjaFxcKC4rP1xcKSAhPSBudWxsL2csIFwiZmFsc2VcIik7XG4gICAgICAgIGV2YWxTdHIgPSBldmFsU3RyLnJlcGxhY2UoL251bGwubWF0Y2hcXCguKz9cXCkgPT0gbnVsbC9nLCBcImZhbHNlXCIpO1xuXG4gICAgICAgIC8vIG5vaW5zcGVjdGlvbiBCYWRFeHByZXNzaW9uU3RhdGVtZW50SlNcbiAgICAgICAgcmV0dXJuIGV2YWwoYGlmICgke2V2YWxTdHJ9KSB7IHRydWUgfSBlbHNlIHsgZmFsc2UgfWApO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyByc3luY1RyYWNrZWRGaWxlcyhjd2Q6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpOiBQcm9taXNlPHsgaHJkZWx0YXRpbWU6IFtudW1iZXIsIG51bWJlcl0gfT4ge1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgYXdhaXQgZnMubWtkaXJwKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC9idWlsZHMvJHt0YXJnZXR9YCk7XG4gICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKGByc3luYyAtYSAtLWRlbGV0ZS1leGNsdWRlZCAtLWRlbGV0ZSAtLWV4Y2x1ZGUtZnJvbT08KGdpdCBscy1maWxlcyAtbyAtLWRpcmVjdG9yeSkgLS1leGNsdWRlIC5naXRsYWItY2ktbG9jYWwvIC4vIC5naXRsYWItY2ktbG9jYWwvYnVpbGRzLyR7dGFyZ2V0fS9gLCBjd2QpO1xuICAgICAgICByZXR1cm4ge2hyZGVsdGF0aW1lOiBwcm9jZXNzLmhydGltZSh0aW1lKX07XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGNoZWNrc3VtRmlsZXMoZmlsZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8c3RyaW5nPltdID0gW107XG5cbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0uZmlsZShmaWxlLCAoZXJyLCBoYXNoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGhhc2gpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgIHJldHVybiBjaGVja3N1bShyZXN1bHQuam9pbihcIlwiKSk7XG4gICAgfVxufVxuIl19