@cdktn/commons 0.25.0-pre.51 → 0.25.0-pre.53

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.
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAWA,wBAAgB,WAAW,CAAC,WAAW,SAAgB,GAAG,MAAM,GAAG,SAAS,CAW3E;AAsBD,wBAAgB,gBAAgB,gCAE/B;AAED,wBAAgB,cAAc,gCAE7B;AACD,wBAAgB,eAAe,gCAE9B;AAED,wBAAgB,gBAAgB,gCAE/B;AAED,wBAAsB,gBAAgB,gCAKrC;AACD,wBAAgB,aAAa,gCAE5B;AACD,wBAAgB,gBAAgB,gCAE/B;AAED,wBAAgB,YAAY,gCAE3B;AAED,wBAAgB,cAAc,gCAE7B;AA8RD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiB7B;AAED,wBAAsB,uBAAuB,2CAsD5C"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAYA,wBAAgB,WAAW,CAAC,WAAW,SAAgB,GAAG,MAAM,GAAG,SAAS,CAW3E;AAsBD,wBAAgB,gBAAgB,gCAE/B;AAED,wBAAgB,cAAc,gCAE7B;AACD,wBAAgB,eAAe,gCAE9B;AAED,wBAAgB,gBAAgB,gCAE/B;AAED,wBAAsB,gBAAgB,gCAKrC;AACD,wBAAgB,aAAa,gCAE5B;AACD,wBAAgB,gBAAgB,gCAE/B;AAED,wBAAgB,YAAY,gCAE3B;AAED,wBAAgB,cAAc,gCAE7B;AA0RD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiB7B;AAED,wBAAsB,uBAAuB,2CAsD5C"}
package/build/debug.js CHANGED
@@ -55,6 +55,7 @@ const terraform_1 = require("./terraform");
55
55
  const version_1 = require("./version");
56
56
  const fs_extra_1 = require("fs-extra");
57
57
  const gradle_1 = require("./gradle");
58
+ const node_package_manager_1 = require("./node-package-manager");
58
59
  function getLanguage(projectPath = process.cwd()) {
59
60
  try {
60
61
  const cdktfJson = JSON.parse((0, fs_extra_1.readFileSync)(path.resolve(projectPath, "cdktf.json"), "utf-8"));
@@ -106,10 +107,7 @@ function getNodeVersion() {
106
107
  return getBinaryVersion("node", "--version");
107
108
  }
108
109
  async function getNodeModuleVersion(packageName) {
109
- // Use the presence of the pnpm lock file as a signal that
110
- // we should interrogate packages via pnpm instead of npm.
111
- const usingPnpm = await (0, fs_extra_1.pathExists)("pnpm-lock.yaml");
112
- return usingPnpm
110
+ return (0, node_package_manager_1.detectNodePackageManager)(process.cwd()) === "pnpm"
113
111
  ? getPnpmNodeModuleVersion(packageName)
114
112
  : getNpmNodeModuleVersion(packageName);
115
113
  }
@@ -385,4 +383,4 @@ async function collectDebugInformation() {
385
383
  }
386
384
  return debugOutput;
387
385
  }
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxrQ0FXQztBQXNCRCw0Q0FFQztBQUVELHdDQUVDO0FBQ0QsMENBRUM7QUFFRCw0Q0FFQztBQUVELDRDQUtDO0FBQ0Qsc0NBRUM7QUFDRCw0Q0FFQztBQUVELG9DQUVDO0FBRUQsd0NBRUM7QUE4UkQsOENBb0JDO0FBRUQsMERBc0RDO0FBeGJELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6Qix1Q0FBbUM7QUFDbkMsaUNBQThCO0FBQzlCLDJDQUErQztBQUMvQyx1Q0FBNEM7QUFDNUMsdUNBQW9EO0FBQ3BELHFDQUFvRTtBQUVwRSxTQUFnQixXQUFXLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFDckQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDMUIsSUFBQSx1QkFBWSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUMvRCxDQUFDO1FBQ0YsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQzVCLENBQUM7SUFBQyxXQUFNLENBQUM7UUFDUCxpQ0FBaUM7UUFDakMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDNUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsZ0JBQWdCLENBQzdCLE1BQWMsRUFDZCxjQUFzQjtJQUV0QixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDdEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLFdBQUksRUFD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QUM7Z0JBQ0MsTUFBTSxJQUFJLEdBQUcsY0FBYyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sS0FBSyxHQUFHLGVBQWUsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNsQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBQSxDQUFDLE1BQU0sSUFBSSxDQUFDLG1DQUFJLElBQUksQ0FBQztnQkFDM0MsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQUEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxtQ0FBSSxJQUFJLENBQUM7Z0JBQzdDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFBLENBQUMsTUFBTSxNQUFNLENBQUMsbUNBQUksSUFBSSxDQUFDO1lBQ2pELENBQUM7WUFDRCxNQUFNO1FBQ1IsS0FBSyxRQUFRO1lBQ1gsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBQyxNQUFNLGdCQUFnQixFQUFFLENBQUMsbUNBQUksSUFBSSxDQUFDO1lBQzNELE1BQU07UUFDUixLQUFLLElBQUk7WUFDUCxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBQSxDQUFDLE1BQU0sWUFBWSxFQUFFLENBQUMsbUNBQUksSUFBSSxDQUFDO1lBQ25ELE1BQU07SUFDVixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyB0ZXJyYWZvcm1WZXJzaW9uIH0gZnJvbSBcIi4vdGVycmFmb3JtXCI7XG5pbXBvcnQgeyBESVNQTEFZX1ZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uXCI7XG5pbXBvcnQgeyBwYXRoRXhpc3RzLCByZWFkRmlsZVN5bmMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCB7IGdldEdyYWRsZVBhY2thZ2VWZXJzaW9uLCBpc0dyYWRsZVByb2plY3QgfSBmcm9tIFwiLi9ncmFkbGVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhbmd1YWdlKHByb2plY3RQYXRoID0gcHJvY2Vzcy5jd2QoKSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgY2RrdGZKc29uID0gSlNPTi5wYXJzZShcbiAgICAgIHJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUocHJvamVjdFBhdGgsIFwiY2RrdGYuanNvblwiKSwgXCJ1dGYtOFwiKSxcbiAgICApO1xuICAgIHJldHVybiBjZGt0Zkpzb24ubGFuZ3VhZ2U7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFdlIGNhbiBub3QgZGV0ZWN0IHRoZSBsYW5ndWFnZVxuICAgIGxvZ2dlci5kZWJ1ZyhgVW5hYmxlIHRvIGRldGVjdCBsYW5ndWFnZSBpbiAke3Byb2plY3RQYXRofWApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QmluYXJ5VmVyc2lvbihcbiAgYmluYXJ5OiBzdHJpbmcsXG4gIHZlcnNpb25Db21tYW5kOiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBub09wID0gKCkgPT4ge307XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlYyhcbiAgICAgIGJpbmFyeSxcbiAgICAgIFt2ZXJzaW9uQ29tbWFuZF0sXG4gICAgICB7IGVudjogcHJvY2Vzcy5lbnYsIHN0ZGlvOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiaWdub3JlXCJdIH0sXG4gICAgICBub09wLFxuICAgICAgbm9PcCxcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQudHJpbSgpLnJlcGxhY2UoL1xccj9cXG58XFxyL2csIFwiXCIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gcnVuICR7YmluYXJ5fSAke3ZlcnNpb25Db21tYW5kfTogJHtlfWApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERvdG5ldFZlcnNpb24oKSB7XG4gIHJldHVybiBnZXRCaW5hcnlWZXJzaW9uKFwiZG90bmV0XCIsIFwiLS12ZXJzaW9uXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SmF2YVZlcnNpb24oKSB7XG4gIHJldHVybiBnZXRCaW5hcnlWZXJzaW9uKFwiamF2YVwiLCBcIi12ZXJzaW9uXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdmVuVmVyc2lvbigpIHtcbiAgcmV0dXJuIGdldEJpbmFyeVZlcnNpb24oXCJtdm5cIiwgXCItLXZlcnNpb25cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmFkbGVWZXJzaW9uKCkge1xuICByZXR1cm4gZ2V0QmluYXJ5VmVyc2lvbihcImdyYWRsZVwiLCBcIi0tdmVyc2lvblwiKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFB5dGhvblZlcnNpb24oKSB7XG4gIHJldHVybiAoXG4gICAgKGF3YWl0IGdldEJpbmFyeVZlcnNpb24oXCJweXRob24zXCIsIFwiLS12ZXJzaW9uXCIpKSB8fFxuICAgIChhd2FpdCBnZXRCaW5hcnlWZXJzaW9uKFwicHl0aG9uXCIsIFwiLS12ZXJzaW9uXCIpKVxuICApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBpcFZlcnNpb24oKSB7XG4gIHJldHVybiBnZXRCaW5hcnlWZXJzaW9uKFwicGlwXCIsIFwiLS12ZXJzaW9uXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBpcGVudlZlcnNpb24oKSB7XG4gIHJldHVybiBnZXRCaW5hcnlWZXJzaW9uKFwicGlwZW52XCIsIFwiLS12ZXJzaW9uXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R29WZXJzaW9uKCkge1xuICByZXR1cm4gZ2V0QmluYXJ5VmVyc2lvbihcImdvXCIsIFwidmVyc2lvblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZGVWZXJzaW9uKCkge1xuICByZXR1cm4gZ2V0QmluYXJ5VmVyc2lvbihcIm5vZGVcIiwgXCItLXZlcnNpb25cIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE5vZGVNb2R1bGVWZXJzaW9uKFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgLy8gVXNlIHRoZSBwcmVzZW5jZSBvZiB0aGUgcG5wbSBsb2NrIGZpbGUgYXMgYSBzaWduYWwgdGhhdFxuICAvLyB3ZSBzaG91bGQgaW50ZXJyb2dhdGUgcGFja2FnZXMgdmlhIHBucG0gaW5zdGVhZCBvZiBucG0uXG4gIGNvbnN0IHVzaW5nUG5wbSA9IGF3YWl0IHBhdGhFeGlzdHMoXCJwbnBtLWxvY2sueWFtbFwiKTtcblxuICByZXR1cm4gdXNpbmdQbnBtXG4gICAgPyBnZXRQbnBtTm9kZU1vZHVsZVZlcnNpb24ocGFja2FnZU5hbWUpXG4gICAgOiBnZXROcG1Ob2RlTW9kdWxlVmVyc2lvbihwYWNrYWdlTmFtZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBucG1Ob2RlTW9kdWxlVmVyc2lvbihcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGxldCBvdXRwdXQ7XG5cbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCBleGVjKFwicG5wbVwiLCBbXCJsaXN0XCIsIHBhY2thZ2VOYW1lLCBcIi0tanNvblwiXSwge1xuICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52IH0sXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoYFVuYWJsZSB0byBydW4gJ3BucG0gbGlzdCAke3BhY2thZ2VOYW1lfSAtLWpzb24nOiAke2V9YCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBqc29uO1xuICB0cnkge1xuICAgIGpzb24gPSBKU09OLnBhcnNlKG91dHB1dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgVW5hYmxlIHRvIHBhcnNlIG91dHB1dCBvZiAncG5wbSBsaXN0ICR7cGFja2FnZU5hbWV9IC0tanNvbic6ICR7ZX1gLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChcbiAgICAhanNvbiB8fFxuICAgICFBcnJheS5pc0FycmF5KGpzb24pIHx8XG4gICAganNvbi5sZW5ndGggPT09IDAgfHxcbiAgICAhanNvblswXT8uZGVwZW5kZW5jaWVzPy5bcGFja2FnZU5hbWVdPy52ZXJzaW9uXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVbmFibGUgdG8gZmluZCAnJHtwYWNrYWdlTmFtZX0nIGluICdwbnBtIGxpc3QgJHtwYWNrYWdlTmFtZX0gLS1qc29uJzogJHtvdXRwdXR9YCxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ganNvblswXS5kZXBlbmRlbmNpZXNbcGFja2FnZU5hbWVdLnZlcnNpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE5wbU5vZGVNb2R1bGVWZXJzaW9uKFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgbGV0IG91dHB1dDtcblxuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IGV4ZWMoXG4gICAgICBcIm5wbVwiLFxuICAgICAgW1wibGlzdFwiLCBwYWNrYWdlTmFtZSwgXCItLWpzb25cIiwgXCItLWluY2x1ZGU9ZGV2XCJdLFxuICAgICAge1xuICAgICAgICBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgVW5hYmxlIHRvIHJ1biAnbnBtIGxpc3QgJHtwYWNrYWdlTmFtZX0gLS1qc29uJzogJHtlfWApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQganNvbjtcbiAgdHJ5IHtcbiAgICBqc29uID0gSlNPTi5wYXJzZShvdXRwdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYFVuYWJsZSB0byBwYXJzZSBvdXRwdXQgb2YgJ25wbSBsaXN0ICR7cGFja2FnZU5hbWV9IC0tanNvbic6ICR7ZX1gLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChcbiAgICAhanNvbi5kZXBlbmRlbmNpZXMgfHxcbiAgICAhanNvbi5kZXBlbmRlbmNpZXNbcGFja2FnZU5hbWVdIHx8XG4gICAgIWpzb24uZGVwZW5kZW5jaWVzW3BhY2thZ2VOYW1lXS52ZXJzaW9uXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVbmFibGUgdG8gZmluZCAnJHtwYWNrYWdlTmFtZX0nIGluICducG0gbGlzdCAke3BhY2thZ2VOYW1lfSAtLWpzb24nOiAke291dHB1dH1gLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBqc29uLmRlcGVuZGVuY2llc1twYWNrYWdlTmFtZV0udmVyc2lvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UHl0aG9uUGFja2FnZVZlcnNpb24oXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IGV4ZWMoXCJwaXBlbnZcIiwgW1wicnVuXCIsIFwicGlwXCIsIFwic2hvd1wiLCBcIi1xcVwiLCBwYWNrYWdlTmFtZV0sIHtcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgfSk7XG5cbiAgICAvLyBSdW5uaW5nIHdpdGggYC1xcWAgc3VwcHJlc3NlcyBib3RoIG1pc3NpbmcgcGFja2FnZXMgYW5kIGFjdHVhbCBwYWNrYWdlXG4gICAgb3V0cHV0ID0gYXdhaXQgZXhlYyhcInBpcGVudlwiLCBbXCJydW5cIiwgXCJwaXBcIiwgXCJzaG93XCIsIHBhY2thZ2VOYW1lXSwge1xuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgVW5hYmxlIHRvIHJ1biAncGlwZW52IHJ1biBwaXAgc2hvdyAke3BhY2thZ2VOYW1lfSc6ICR7ZX1gKTtcbiAgfVxuXG4gIC8vIElmIHdlIGNvdWxkbid0IGdldCB0aGUgb3V0cHV0IHVzaW5nIHBpcGVudiwgdHJ5IHRvIGdldCBpdCB1c2luZyBwaXAgZGlyZWN0bHlcbiAgaWYgKCFvdXRwdXQpIHtcbiAgICB0cnkge1xuICAgICAgb3V0cHV0ID0gYXdhaXQgZXhlYyhcInBpcFwiLCBbXCJzaG93XCIsIFwiLXFxXCIsIHBhY2thZ2VOYW1lXSwge1xuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJ1bm5pbmcgd2l0aCBgLXFxYCBzdXBwcmVzc2VzIGJvdGggbWlzc2luZyBwYWNrYWdlcyBhbmQgYWN0dWFsIHBhY2thZ2VcbiAgICAgIG91dHB1dCA9IGF3YWl0IGV4ZWMoXCJwaXBcIiwgW1wic2hvd1wiLCBwYWNrYWdlTmFtZV0sIHtcbiAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgVW5hYmxlIHRvIHJ1biAncGlwIHNob3cgJHtwYWNrYWdlTmFtZX0nOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFvdXRwdXQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbkluZm8gPSBvdXRwdXRcbiAgICAuc3BsaXQoL1xcclxcbnxcXHJ8XFxuLylcbiAgICAuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKFwiVmVyc2lvbjpcIikpO1xuXG4gIGlmICghdmVyc2lvbkluZm8pIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgVW5hYmxlIHRvIGZpbmQgdmVyc2lvbiBpbiBvdXRwdXQgb2YgJ3BpcGVudiBydW4gcGlwIHNob3cgJHtwYWNrYWdlTmFtZX0nIC8gJ3BpcCBzaG93ICR7cGFja2FnZU5hbWV9JzogJHtvdXRwdXR9YCxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gdmVyc2lvbkluZm8uc3BsaXQoXCI6XCIpWzFdLnRyaW0oKTtcbiAgcmV0dXJuIHZlcnNpb247XG59XG5cbi8vIE9uY2UgaHR0cHM6Ly9naXRodWIuY29tL051R2V0L0hvbWUvaXNzdWVzLzc3NTIgZ2V0cyByZXNvbHZlZCB3ZSBjYW4gYWxzbyB0cnkgd2l0aCAtLWpzb25cbmFzeW5jIGZ1bmN0aW9uIGdldENTaGFycFBhY2thZ2VWZXJzaW9uKHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgdHJhbnNsYXRpb25NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAganNpaTogXCJBbWF6b24uSlNJSS5SdW50aW1lXCIsXG4gICAgY29uc3RydWN0czogXCJDb25zdHJ1Y3RzXCIsXG4gICAgY2RrdGY6IFwiSGFzaGlDb3JwLkNka3RmXCIsXG4gICAgY2RrdG46IFwiSW8uQ2RrdG5cIixcbiAgfTtcbiAgY29uc3QgY1NoYXJwUGFja2FnZU5hbWUgPSB0cmFuc2xhdGlvbk1hcFtwYWNrYWdlTmFtZV0gfHwgcGFja2FnZU5hbWU7XG5cbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCBleGVjKFwiZG90bmV0XCIsIFtcImxpc3RcIiwgXCJwYWNrYWdlXCIsIFwiLS1pbmNsdWRlLXRyYW5zaXRpdmVcIl0sIHtcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgVW5hYmxlIHRvIHJ1biAnZG90bmV0IGxpc3QgcGFja2FnZSAtLWluY2x1ZGUtdHJhbnNpdGl2ZSc6ICR7ZX1gLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHZlcnNpb25MaW5lID0gb3V0cHV0XG4gICAgLnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pXG4gICAgLmZpbmQoKGxpbmUpID0+IGxpbmUuaW5jbHVkZXMoYD4gJHtjU2hhcnBQYWNrYWdlTmFtZX1gKSk7XG5cbiAgaWYgKCF2ZXJzaW9uTGluZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVbmFibGUgdG8gZmluZCB2ZXJzaW9uIGZvciAnJHtjU2hhcnBQYWNrYWdlTmFtZX0nIGluIG91dHB1dCBvZiAnZG90bmV0IGxpc3QgcGFja2FnZSAtLWluY2x1ZGUtdHJhbnNpdGl2ZSc6ICR7b3V0cHV0fWAsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQSBsaW5lIG1pZ2h0IGxvb2sgbGlrZSB0aGlzOlxuICAvLyAgIFRyYW5zaXRpdmUgUGFja2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvbHZlZFxuICAvLyAgID4gQW1hem9uLkpTSUkuUnVudGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjE3LjFcbiAgLy8gVGhlcmVmb3JlIHdlIHJldmVyc2Ugc3BsaXQgYnkgd2hpdGVzcGFjZSBhbmQgcmV2ZXJzZVxuICAvLyBzbyB0aGF0IHRoZSBmaXJzdCB0aGluZyB3ZSBmaW5kIGlzIHRoZSB2ZXJzaW9uIG51bWJlclxuICByZXR1cm4gdmVyc2lvbkxpbmVcbiAgICAuc3BsaXQoXCIgXCIpXG4gICAgLnJldmVyc2UoKVxuICAgIC5maW5kKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R29QYWNrYWdlVmVyc2lvbihwYWNrYWdlTmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGpzaWk6IFwianNpaS1ydW50aW1lLWdvXCIsXG4gICAgY2RrdGY6IFwiZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLWNkay1nb1wiLFxuICAgIGNka3RuOiBcImdpdGh1Yi5jb20vb3Blbi1jb25zdHJ1Y3RzL2Nkay10ZXJyYWluLWdvXCIsXG4gIH07XG4gIGNvbnN0IGdvUGFja2FnZU5hbWUgPSB0cmFuc2xhdGlvbk1hcFtwYWNrYWdlTmFtZV0gfHwgcGFja2FnZU5hbWU7XG5cbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCBleGVjKFwiZ29cIiwgW1wibGlzdFwiLCBcIi1tXCIsIFwiYWxsXCJdLCB7XG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBVbmFibGUgdG8gcnVuICdnbyBsaXN0IC1tIGFsbCc6ICR7ZX1gKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IHZlcnNpb25MaW5lID0gb3V0cHV0XG4gICAgLnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pXG4gICAgLmZpbmQoKGxpbmUpID0+IGxpbmUuaW5jbHVkZXMoZ29QYWNrYWdlTmFtZSkpO1xuXG4gIGlmICghdmVyc2lvbkxpbmUpIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgVW5hYmxlIHRvIGZpbmQgdmVyc2lvbiBmb3IgJyR7Z29QYWNrYWdlTmFtZX0nIGluIG91dHB1dCBvZiAnZ28gbGlzdCAtbSBhbGwnOiAke291dHB1dH1gLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIFdlIGFyZSBkZWFsaW5nIHdpdGggYSBsb2NhbCB2ZXJzaW9uXG4gIGlmICh2ZXJzaW9uTGluZS5pbmNsdWRlcyhcIj0+XCIpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBsb2NhbCB2ZXJzaW9uIGZvciAnJHtnb1BhY2thZ2VOYW1lfSc6ICR7dmVyc2lvbkxpbmV9YCk7XG4gICAgdmVyc2lvbkxpbmUgPSB2ZXJzaW9uTGluZS5zcGxpdChcIj0+XCIpWzBdLnRyaW0oKTtcbiAgfVxuXG4gIHJldHVybiB2ZXJzaW9uTGluZS5zcGxpdChcIiBcIikucG9wKCk/LnJlcGxhY2UoXCJ2XCIsIFwiXCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNYXZlblBhY2thZ2VWZXJzaW9uKHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgdHJhbnNsYXRpb25NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAganNpaTogXCJqc2lpLXJ1bnRpbWVcIixcbiAgfTtcbiAgY29uc3QgamF2YVBhY2thZ2VOYW1lID0gdHJhbnNsYXRpb25NYXBbcGFja2FnZU5hbWVdIHx8IHBhY2thZ2VOYW1lO1xuXG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgZXhlYyhcIm12blwiLCBbXCJkZXBlbmRlbmN5Omxpc3RcIl0sIHtcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoYFVuYWJsZSB0byBydW4gJ212biBkZXBlbmRlbmN5Omxpc3QnOiAke2V9YCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdXRpb25QYXJ0ID0gb3V0cHV0LnNwbGl0KFxuICAgIFwiVGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGJlZW4gcmVzb2x2ZWRcIixcbiAgKVsxXTtcbiAgaWYgKCFyZXNvbHV0aW9uUGFydCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVbmFibGUgdG8gZmluZCByZXNvbHV0aW9uIHBhc3NhZ2UgaW4gb3V0cHV0IG9mICdtdm4gZGVwZW5kZW5jeTpsaXN0JzogJHtvdXRwdXR9YCxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBXZSBuZWVkIHRvIHNlYXJjaCBmb3IgdGhlIHBhY2thZ2UgbmFtZSBBTkQgYSBjb2xvbiB0byBub3QgbWF0Y2ggYSBsaW5lIGxpa2VcbiAgLy8gW0lORk9dICAgIGNvbS5oYXNoaWNvcnA6Y2RrdGYtcHJvdmlkZXItYXdzOmphcjo5LjAuOTpjb21waWxlXG4gIC8vIHdoZW4gbG9va2luZyBmb3IgdGhlIGNka3RmIHBhY2thZ2UgKHNlZSBHaXRodWIgaXNzdWUgIzE5OTQpXG4gIGNvbnN0IHZlcnNpb25MaW5lID0gcmVzb2x1dGlvblBhcnRcbiAgICAuc3BsaXQoL1xcclxcbnxcXHJ8XFxuLylcbiAgICAuZmluZCgobGluZSkgPT4gbGluZS5pbmNsdWRlcyhgJHtqYXZhUGFja2FnZU5hbWV9OmApKTtcblxuICBpZiAoIXZlcnNpb25MaW5lKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYFVuYWJsZSB0byBmaW5kIHZlcnNpb24gZm9yICcke2phdmFQYWNrYWdlTmFtZX0nIGluIG91dHB1dCBvZiAnbXZuIGRlcGVuZGVuY3k6bGlzdCc6ICR7b3V0cHV0fWAsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gRXhhbXBsZSBsaW5lOiBbSU5GT10gICAgY29tLmhhc2hpY29ycDpjZGt0ZjpqYXI6MC4wLjA6Y29tcGlsZVxuICBjb25zdCB2ZXJzaW9uU3RhcnREZWxpbWl0ZXIgPSBgJHtqYXZhUGFja2FnZU5hbWV9OmphcjpgO1xuICBjb25zdCB2ZXJzaW9uU3RhcnQgPVxuICAgIHZlcnNpb25MaW5lLmluZGV4T2YodmVyc2lvblN0YXJ0RGVsaW1pdGVyKSArIHZlcnNpb25TdGFydERlbGltaXRlci5sZW5ndGg7XG4gIGNvbnN0IHZlcnNpb25FbmREZWxlbWl0ZXIgPSBcIjpjb21waWxlXCI7XG4gIGNvbnN0IHZlcnNpb25FbmQgPSB2ZXJzaW9uTGluZS5pbmRleE9mKHZlcnNpb25FbmREZWxlbWl0ZXIpO1xuICByZXR1cm4gdmVyc2lvbkxpbmUuc3Vic3RyaW5nKHZlcnNpb25TdGFydCwgdmVyc2lvbkVuZCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEphdmFQYWNrYWdlVmVyc2lvbihwYWNrYWdlTmFtZTogc3RyaW5nKSB7XG4gIGlmIChpc0dyYWRsZVByb2plY3QoXCIuL1wiKSkge1xuICAgIHJldHVybiBnZXRHcmFkbGVQYWNrYWdlVmVyc2lvbihwYWNrYWdlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gZ2V0TWF2ZW5QYWNrYWdlVmVyc2lvbihwYWNrYWdlTmFtZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQYWNrYWdlVmVyc2lvbihcbiAgbGFuZ3VhZ2U6IHN0cmluZyxcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG5vT3AgPSBhc3luYyAoKSA9PiB1bmRlZmluZWQ7XG4gIGNvbnN0IGdldExpYnJhcnlWZXJzaW9uTWFwOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPlxuICA+ID0ge1xuICAgIHR5cGVzY3JpcHQ6IGdldE5vZGVNb2R1bGVWZXJzaW9uLFxuICAgIHB5dGhvbjogZ2V0UHl0aG9uUGFja2FnZVZlcnNpb24sXG4gICAgZ286IGdldEdvUGFja2FnZVZlcnNpb24sXG4gICAgY3NoYXJwOiBnZXRDU2hhcnBQYWNrYWdlVmVyc2lvbixcbiAgICBqYXZhOiBnZXRKYXZhUGFja2FnZVZlcnNpb24sXG4gIH07XG5cbiAgY29uc3QgbGliVmVyc2lvbiA9IGF3YWl0IChnZXRMaWJyYXJ5VmVyc2lvbk1hcFtsYW5ndWFnZV0gfHwgbm9PcCkoXG4gICAgcGFja2FnZU5hbWUsXG4gICk7XG4gIHJldHVybiBsaWJWZXJzaW9uID8/IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3REZWJ1Z0luZm9ybWF0aW9uKCkge1xuICBjb25zdCBkZWJ1Z091dHB1dDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4gPSB7fTtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZSgpO1xuICBkZWJ1Z091dHB1dFtcImxhbmd1YWdlXCJdID0gbGFuZ3VhZ2UgPz8gbnVsbDtcbiAgZGVidWdPdXRwdXRbXCJjZGt0bi1jbGlcIl0gPSBESVNQTEFZX1ZFUlNJT047XG5cbiAgY29uc3Qgbm9kZSA9IGdldE5vZGVWZXJzaW9uKCk7XG5cbiAgZGVidWdPdXRwdXRbXCJub2RlXCJdID0gKGF3YWl0IG5vZGUpID8/IG51bGw7XG4gIGlmIChsYW5ndWFnZSkge1xuICAgIGNvbnN0IGNka3RuID0gZ2V0UGFja2FnZVZlcnNpb24obGFuZ3VhZ2UsIFwiY2RrdG5cIik7XG4gICAgY29uc3QgY2RrdGYgPSBnZXRQYWNrYWdlVmVyc2lvbihsYW5ndWFnZSwgXCJjZGt0ZlwiKTtcbiAgICBjb25zdCBjb25zdHJ1Y3RzID0gZ2V0UGFja2FnZVZlcnNpb24obGFuZ3VhZ2UsIFwiY29uc3RydWN0c1wiKTtcbiAgICBjb25zdCBqc2lpID0gZ2V0UGFja2FnZVZlcnNpb24obGFuZ3VhZ2UsIFwianNpaVwiKTtcblxuICAgIGRlYnVnT3V0cHV0W1wiY2RrdG5cIl0gPSAoYXdhaXQgY2RrdG4pID8/IG51bGw7XG4gICAgZGVidWdPdXRwdXRbXCJjZGt0ZlwiXSA9IChhd2FpdCBjZGt0ZikgPz8gbnVsbDtcbiAgICBkZWJ1Z091dHB1dFtcImNvbnN0cnVjdHNcIl0gPSAoYXdhaXQgY29uc3RydWN0cykgPz8gbnVsbDtcbiAgICBkZWJ1Z091dHB1dFtcImpzaWlcIl0gPSAoYXdhaXQganNpaSkgPz8gbnVsbDtcbiAgfVxuICBkZWJ1Z091dHB1dFtcInRlcnJhZm9ybVwiXSA9IGF3YWl0IHRlcnJhZm9ybVZlcnNpb247XG4gIGRlYnVnT3V0cHV0W1wiYXJjaFwiXSA9IG9zLmFyY2goKTtcbiAgZGVidWdPdXRwdXRbXCJvc1wiXSA9IGAke29zLnBsYXRmb3JtKCl9ICR7b3MucmVsZWFzZSgpfWA7XG5cbiAgc3dpdGNoIChsYW5ndWFnZSkge1xuICAgIGNhc2UgXCJweXRob25cIjpcbiAgICAgIHtcbiAgICAgICAgY29uc3QgcHl0aG9uID0gZ2V0UHl0aG9uVmVyc2lvbigpO1xuICAgICAgICBjb25zdCBwaXAgPSBnZXRQaXBWZXJzaW9uKCk7XG4gICAgICAgIGNvbnN0IHBpcGVudiA9IGdldFBpcGVudlZlcnNpb24oKTtcbiAgICAgICAgZGVidWdPdXRwdXRbXCJweXRob25cIl0gPSAoYXdhaXQgcHl0aG9uKSA/PyBudWxsO1xuICAgICAgICBkZWJ1Z091dHB1dFtcInBpcFwiXSA9IChhd2FpdCBwaXApID8/IG51bGw7XG4gICAgICAgIGRlYnVnT3V0cHV0W1wicGlwZW52XCJdID0gKGF3YWl0IHBpcGVudikgPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJqYXZhXCI6XG4gICAgICB7XG4gICAgICAgIGNvbnN0IGphdmEgPSBnZXRKYXZhVmVyc2lvbigpO1xuICAgICAgICBjb25zdCBtYXZlbiA9IGdldE1hdmVuVmVyc2lvbigpO1xuICAgICAgICBjb25zdCBncmFkbGUgPSBnZXRHcmFkbGVWZXJzaW9uKCk7XG4gICAgICAgIGRlYnVnT3V0cHV0W1wiamF2YVwiXSA9IChhd2FpdCBqYXZhKSA/PyBudWxsO1xuICAgICAgICBkZWJ1Z091dHB1dFtcIm1hdmVuXCJdID0gKGF3YWl0IG1hdmVuKSA/PyBudWxsO1xuICAgICAgICBkZWJ1Z091dHB1dFtcImdyYWRsZVwiXSA9IChhd2FpdCBncmFkbGUpID8/IG51bGw7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY3NoYXJwXCI6XG4gICAgICBkZWJ1Z091dHB1dFtcImRvdG5ldFwiXSA9IChhd2FpdCBnZXREb3RuZXRWZXJzaW9uKCkpID8/IG51bGw7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZ29cIjpcbiAgICAgIGRlYnVnT3V0cHV0W1wiZ29cIl0gPSAoYXdhaXQgZ2V0R29WZXJzaW9uKCkpID8/IG51bGw7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBkZWJ1Z091dHB1dDtcbn1cbiJdfQ==
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSxrQ0FXQztBQXNCRCw0Q0FFQztBQUVELHdDQUVDO0FBQ0QsMENBRUM7QUFFRCw0Q0FFQztBQUVELDRDQUtDO0FBQ0Qsc0NBRUM7QUFDRCw0Q0FFQztBQUVELG9DQUVDO0FBRUQsd0NBRUM7QUEwUkQsOENBb0JDO0FBRUQsMERBc0RDO0FBcmJELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6Qix1Q0FBbUM7QUFDbkMsaUNBQThCO0FBQzlCLDJDQUErQztBQUMvQyx1Q0FBNEM7QUFDNUMsdUNBQXdDO0FBQ3hDLHFDQUFvRTtBQUNwRSxpRUFBa0U7QUFFbEUsU0FBZ0IsV0FBVyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO0lBQ3JELElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzFCLElBQUEsdUJBQVksRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FDL0QsQ0FBQztRQUNGLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ1AsaUNBQWlDO1FBQ2pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLGdCQUFnQixDQUM3QixNQUFjLEVBQ2QsY0FBc0I7SUFFdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQ3RCLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0s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Y0FBYyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sS0FBSyxHQUFHLGVBQWUsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNsQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBQSxDQUFDLE1BQU0sSUFBSSxDQUFDLG1DQUFJLElBQUksQ0FBQztnQkFDM0MsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQUEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxtQ0FBSSxJQUFJLENBQUM7Z0JBQzdDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFBLENBQUMsTUFBTSxNQUFNLENBQUMsbUNBQUksSUFBSSxDQUFDO1lBQ2pELENBQUM7WUFDRCxNQUFNO1FBQ1IsS0FBSyxRQUFRO1lBQ1gsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBQyxNQUFNLGdCQUFnQixFQUFFLENBQUMsbUNBQUksSUFBSSxDQUFDO1lBQzNELE1BQU07UUFDUixLQUFLLElBQUk7WUFDUCxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBQSxDQUFDLE1BQU0sWUFBWSxFQUFFLENBQUMsbUNBQUksSUFBSSxDQUFDO1lBQ25ELE1BQU07SUFDVixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyB0ZXJyYWZvcm1WZXJzaW9uIH0gZnJvbSBcIi4vdGVycmFmb3JtXCI7XG5pbXBvcnQgeyBESVNQTEFZX1ZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCB7IGdldEdyYWRsZVBhY2thZ2VWZXJzaW9uLCBpc0dyYWRsZVByb2plY3QgfSBmcm9tIFwiLi9ncmFkbGVcIjtcbmltcG9ydCB7IGRldGVjdE5vZGVQYWNrYWdlTWFuYWdlciB9IGZyb20gXCIuL25vZGUtcGFja2FnZS1tYW5hZ2VyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYW5ndWFnZShwcm9qZWN0UGF0aCA9IHByb2Nlc3MuY3dkKCkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IGNka3RmSnNvbiA9IEpTT04ucGFyc2UoXG4gICAgICByZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKHByb2plY3RQYXRoLCBcImNka3RmLmpzb25cIiksIFwidXRmLThcIiksXG4gICAgKTtcbiAgICByZXR1cm4gY2RrdGZKc29uLmxhbmd1YWdlO1xuICB9IGNhdGNoIHtcbiAgICAvLyBXZSBjYW4gbm90IGRldGVjdCB0aGUgbGFuZ3VhZ2VcbiAgICBsb2dnZXIuZGVidWcoYFVuYWJsZSB0byBkZXRlY3QgbGFuZ3VhZ2UgaW4gJHtwcm9qZWN0UGF0aH1gKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJpbmFyeVZlcnNpb24oXG4gIGJpbmFyeTogc3RyaW5nLFxuICB2ZXJzaW9uQ29tbWFuZDogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgbm9PcCA9ICgpID0+IHt9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWMoXG4gICAgICBiaW5hcnksXG4gICAgICBbdmVyc2lvbkNvbW1hbmRdLFxuICAgICAgeyBlbnY6IHByb2Nlc3MuZW52LCBzdGRpbzogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCBcImlnbm9yZVwiXSB9LFxuICAgICAgbm9PcCxcbiAgICAgIG5vT3AsXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0LnRyaW0oKS5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCBcIlwiKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgRmFpbGVkIHRvIHJ1biAke2JpbmFyeX0gJHt2ZXJzaW9uQ29tbWFuZH06ICR7ZX1gKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREb3RuZXRWZXJzaW9uKCkge1xuICByZXR1cm4gZ2V0QmluYXJ5VmVyc2lvbihcImRvdG5ldFwiLCBcIi0tdmVyc2lvblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEphdmFWZXJzaW9uKCkge1xuICByZXR1cm4gZ2V0QmluYXJ5VmVyc2lvbihcImphdmFcIiwgXCItdmVyc2lvblwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXZlblZlcnNpb24oKSB7XG4gIHJldHVybiBnZXRCaW5hcnlWZXJzaW9uKFwibXZuXCIsIFwiLS12ZXJzaW9uXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R3JhZGxlVmVyc2lvbigpIHtcbiAgcmV0dXJuIGdldEJpbmFyeVZlcnNpb24oXCJncmFkbGVcIiwgXCItLXZlcnNpb25cIik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQeXRob25WZXJzaW9uKCkge1xuICByZXR1cm4gKFxuICAgIChhd2FpdCBnZXRCaW5hcnlWZXJzaW9uKFwicHl0aG9uM1wiLCBcIi0tdmVyc2lvblwiKSkgfHxcbiAgICAoYXdhaXQgZ2V0QmluYXJ5VmVyc2lvbihcInB5dGhvblwiLCBcIi0tdmVyc2lvblwiKSlcbiAgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQaXBWZXJzaW9uKCkge1xuICByZXR1cm4gZ2V0QmluYXJ5VmVyc2lvbihcInBpcFwiLCBcIi0tdmVyc2lvblwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQaXBlbnZWZXJzaW9uKCkge1xuICByZXR1cm4gZ2V0QmluYXJ5VmVyc2lvbihcInBpcGVudlwiLCBcIi0tdmVyc2lvblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdvVmVyc2lvbigpIHtcbiAgcmV0dXJuIGdldEJpbmFyeVZlcnNpb24oXCJnb1wiLCBcInZlcnNpb25cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2RlVmVyc2lvbigpIHtcbiAgcmV0dXJuIGdldEJpbmFyeVZlcnNpb24oXCJub2RlXCIsIFwiLS12ZXJzaW9uXCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXROb2RlTW9kdWxlVmVyc2lvbihcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiBkZXRlY3ROb2RlUGFja2FnZU1hbmFnZXIocHJvY2Vzcy5jd2QoKSkgPT09IFwicG5wbVwiXG4gICAgPyBnZXRQbnBtTm9kZU1vZHVsZVZlcnNpb24ocGFja2FnZU5hbWUpXG4gICAgOiBnZXROcG1Ob2RlTW9kdWxlVmVyc2lvbihwYWNrYWdlTmFtZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBucG1Ob2RlTW9kdWxlVmVyc2lvbihcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGxldCBvdXRwdXQ7XG5cbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCBleGVjKFwicG5wbVwiLCBbXCJsaXN0XCIsIHBhY2thZ2VOYW1lLCBcIi0tanNvblwiXSwge1xuICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52IH0sXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoYFVuYWJsZSB0byBydW4gJ3BucG0gbGlzdCAke3BhY2thZ2VOYW1lfSAtLWpzb24nOiAke2V9YCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBqc29uO1xuICB0cnkge1xuICAgIGpzb24gPSBKU09OLnBhcnNlKG91dHB1dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgVW5hYmxlIHRvIHBhcnNlIG91dHB1dCBvZiAncG5wbSBsaXN0ICR7cGFja2FnZU5hbWV9IC0tanNvbic6ICR7ZX1gLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChcbiAgICAhanNvbiB8fFxuICAgICFBcnJheS5pc0FycmF5KGpzb24pIHx8XG4gICAganNvbi5sZW5ndGggPT09IDAgfHxcbiAgICAhanNvblswXT8uZGVwZW5kZW5jaWVzPy5bcGFja2FnZU5hbWVdPy52ZXJzaW9uXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVbmFibGUgdG8gZmluZCAnJHtwYWNrYWdlTmFtZX0nIGluICdwbnBtIGxpc3QgJHtwYWNrYWdlTmFtZX0gLS1qc29uJzogJHtvdXRwdXR9YCxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ganNvblswXS5kZXBlbmRlbmNpZXNbcGFja2FnZU5hbWVdLnZlcnNpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE5wbU5vZGVNb2R1bGVWZXJzaW9uKFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgbGV0IG91dHB1dDtcblxuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IGV4ZWMoXG4gICAgICBcIm5wbVwiLFxuICAgICAgW1wibGlzdFwiLCBwYWNrYWdlTmFtZSwgXCItLWpzb25cIiwgXCItLWluY2x1ZGU9ZGV2XCJdLFxuICAgICAge1xuICAgICAgICBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgVW5hYmxlIHRvIHJ1biAnbnBtIGxpc3QgJHtwYWNrYWdlTmFtZX0gLS1qc29uJzogJHtlfWApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQganNvbjtcbiAgdHJ5IHtcbiAgICBqc29uID0gSlNPTi5wYXJzZShvdXRwdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYFVuYWJsZSB0byBwYXJzZSBvdXRwdXQgb2YgJ25wbSBsaXN0ICR7cGFja2FnZU5hbWV9IC0tanNvbic6ICR7ZX1gLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChcbiAgICAhanNvbi5kZXBlbmRlbmNpZXMgfHxcbiAgICAhanNvbi5kZXBlbmRlbmNpZXNbcGFja2FnZU5hbWVdIHx8XG4gICAgIWpzb24uZGVwZW5kZW5jaWVzW3BhY2thZ2VOYW1lXS52ZXJzaW9uXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVbmFibGUgdG8gZmluZCAnJHtwYWNrYWdlTmFtZX0nIGluICducG0gbGlzdCAke3BhY2thZ2VOYW1lfSAtLWpzb24nOiAke291dHB1dH1gLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBqc29uLmRlcGVuZGVuY2llc1twYWNrYWdlTmFtZV0udmVyc2lvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UHl0aG9uUGFja2FnZVZlcnNpb24oXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IGV4ZWMoXCJwaXBlbnZcIiwgW1wicnVuXCIsIFwicGlwXCIsIFwic2hvd1wiLCBcIi1xcVwiLCBwYWNrYWdlTmFtZV0sIHtcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgfSk7XG5cbiAgICAvLyBSdW5uaW5nIHdpdGggYC1xcWAgc3VwcHJlc3NlcyBib3RoIG1pc3NpbmcgcGFja2FnZXMgYW5kIGFjdHVhbCBwYWNrYWdlXG4gICAgb3V0cHV0ID0gYXdhaXQgZXhlYyhcInBpcGVudlwiLCBbXCJydW5cIiwgXCJwaXBcIiwgXCJzaG93XCIsIHBhY2thZ2VOYW1lXSwge1xuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgVW5hYmxlIHRvIHJ1biAncGlwZW52IHJ1biBwaXAgc2hvdyAke3BhY2thZ2VOYW1lfSc6ICR7ZX1gKTtcbiAgfVxuXG4gIC8vIElmIHdlIGNvdWxkbid0IGdldCB0aGUgb3V0cHV0IHVzaW5nIHBpcGVudiwgdHJ5IHRvIGdldCBpdCB1c2luZyBwaXAgZGlyZWN0bHlcbiAgaWYgKCFvdXRwdXQpIHtcbiAgICB0cnkge1xuICAgICAgb3V0cHV0ID0gYXdhaXQgZXhlYyhcInBpcFwiLCBbXCJzaG93XCIsIFwiLXFxXCIsIHBhY2thZ2VOYW1lXSwge1xuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJ1bm5pbmcgd2l0aCBgLXFxYCBzdXBwcmVzc2VzIGJvdGggbWlzc2luZyBwYWNrYWdlcyBhbmQgYWN0dWFsIHBhY2thZ2VcbiAgICAgIG91dHB1dCA9IGF3YWl0IGV4ZWMoXCJwaXBcIiwgW1wic2hvd1wiLCBwYWNrYWdlTmFtZV0sIHtcbiAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgVW5hYmxlIHRvIHJ1biAncGlwIHNob3cgJHtwYWNrYWdlTmFtZX0nOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFvdXRwdXQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbkluZm8gPSBvdXRwdXRcbiAgICAuc3BsaXQoL1xcclxcbnxcXHJ8XFxuLylcbiAgICAuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKFwiVmVyc2lvbjpcIikpO1xuXG4gIGlmICghdmVyc2lvbkluZm8pIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgVW5hYmxlIHRvIGZpbmQgdmVyc2lvbiBpbiBvdXRwdXQgb2YgJ3BpcGVudiBydW4gcGlwIHNob3cgJHtwYWNrYWdlTmFtZX0nIC8gJ3BpcCBzaG93ICR7cGFja2FnZU5hbWV9JzogJHtvdXRwdXR9YCxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gdmVyc2lvbkluZm8uc3BsaXQoXCI6XCIpWzFdLnRyaW0oKTtcbiAgcmV0dXJuIHZlcnNpb247XG59XG5cbi8vIE9uY2UgaHR0cHM6Ly9naXRodWIuY29tL051R2V0L0hvbWUvaXNzdWVzLzc3NTIgZ2V0cyByZXNvbHZlZCB3ZSBjYW4gYWxzbyB0cnkgd2l0aCAtLWpzb25cbmFzeW5jIGZ1bmN0aW9uIGdldENTaGFycFBhY2thZ2VWZXJzaW9uKHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgdHJhbnNsYXRpb25NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAganNpaTogXCJBbWF6b24uSlNJSS5SdW50aW1lXCIsXG4gICAgY29uc3RydWN0czogXCJDb25zdHJ1Y3RzXCIsXG4gICAgY2RrdGY6IFwiSGFzaGlDb3JwLkNka3RmXCIsXG4gICAgY2RrdG46IFwiSW8uQ2RrdG5cIixcbiAgfTtcbiAgY29uc3QgY1NoYXJwUGFja2FnZU5hbWUgPSB0cmFuc2xhdGlvbk1hcFtwYWNrYWdlTmFtZV0gfHwgcGFja2FnZU5hbWU7XG5cbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCBleGVjKFwiZG90bmV0XCIsIFtcImxpc3RcIiwgXCJwYWNrYWdlXCIsIFwiLS1pbmNsdWRlLXRyYW5zaXRpdmVcIl0sIHtcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgVW5hYmxlIHRvIHJ1biAnZG90bmV0IGxpc3QgcGFja2FnZSAtLWluY2x1ZGUtdHJhbnNpdGl2ZSc6ICR7ZX1gLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHZlcnNpb25MaW5lID0gb3V0cHV0XG4gICAgLnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pXG4gICAgLmZpbmQoKGxpbmUpID0+IGxpbmUuaW5jbHVkZXMoYD4gJHtjU2hhcnBQYWNrYWdlTmFtZX1gKSk7XG5cbiAgaWYgKCF2ZXJzaW9uTGluZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVbmFibGUgdG8gZmluZCB2ZXJzaW9uIGZvciAnJHtjU2hhcnBQYWNrYWdlTmFtZX0nIGluIG91dHB1dCBvZiAnZG90bmV0IGxpc3QgcGFja2FnZSAtLWluY2x1ZGUtdHJhbnNpdGl2ZSc6ICR7b3V0cHV0fWAsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQSBsaW5lIG1pZ2h0IGxvb2sgbGlrZSB0aGlzOlxuICAvLyAgIFRyYW5zaXRpdmUgUGFja2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvbHZlZFxuICAvLyAgID4gQW1hem9uLkpTSUkuUnVudGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjE3LjFcbiAgLy8gVGhlcmVmb3JlIHdlIHJldmVyc2Ugc3BsaXQgYnkgd2hpdGVzcGFjZSBhbmQgcmV2ZXJzZVxuICAvLyBzbyB0aGF0IHRoZSBmaXJzdCB0aGluZyB3ZSBmaW5kIGlzIHRoZSB2ZXJzaW9uIG51bWJlclxuICByZXR1cm4gdmVyc2lvbkxpbmVcbiAgICAuc3BsaXQoXCIgXCIpXG4gICAgLnJldmVyc2UoKVxuICAgIC5maW5kKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R29QYWNrYWdlVmVyc2lvbihwYWNrYWdlTmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGpzaWk6IFwianNpaS1ydW50aW1lLWdvXCIsXG4gICAgY2RrdGY6IFwiZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLWNkay1nb1wiLFxuICAgIGNka3RuOiBcImdpdGh1Yi5jb20vb3Blbi1jb25zdHJ1Y3RzL2Nkay10ZXJyYWluLWdvXCIsXG4gIH07XG4gIGNvbnN0IGdvUGFja2FnZU5hbWUgPSB0cmFuc2xhdGlvbk1hcFtwYWNrYWdlTmFtZV0gfHwgcGFja2FnZU5hbWU7XG5cbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCBleGVjKFwiZ29cIiwgW1wibGlzdFwiLCBcIi1tXCIsIFwiYWxsXCJdLCB7XG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBVbmFibGUgdG8gcnVuICdnbyBsaXN0IC1tIGFsbCc6ICR7ZX1gKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IHZlcnNpb25MaW5lID0gb3V0cHV0XG4gICAgLnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pXG4gICAgLmZpbmQoKGxpbmUpID0+IGxpbmUuaW5jbHVkZXMoZ29QYWNrYWdlTmFtZSkpO1xuXG4gIGlmICghdmVyc2lvbkxpbmUpIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgVW5hYmxlIHRvIGZpbmQgdmVyc2lvbiBmb3IgJyR7Z29QYWNrYWdlTmFtZX0nIGluIG91dHB1dCBvZiAnZ28gbGlzdCAtbSBhbGwnOiAke291dHB1dH1gLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIFdlIGFyZSBkZWFsaW5nIHdpdGggYSBsb2NhbCB2ZXJzaW9uXG4gIGlmICh2ZXJzaW9uTGluZS5pbmNsdWRlcyhcIj0+XCIpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBsb2NhbCB2ZXJzaW9uIGZvciAnJHtnb1BhY2thZ2VOYW1lfSc6ICR7dmVyc2lvbkxpbmV9YCk7XG4gICAgdmVyc2lvbkxpbmUgPSB2ZXJzaW9uTGluZS5zcGxpdChcIj0+XCIpWzBdLnRyaW0oKTtcbiAgfVxuXG4gIHJldHVybiB2ZXJzaW9uTGluZS5zcGxpdChcIiBcIikucG9wKCk/LnJlcGxhY2UoXCJ2XCIsIFwiXCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNYXZlblBhY2thZ2VWZXJzaW9uKHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgdHJhbnNsYXRpb25NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAganNpaTogXCJqc2lpLXJ1bnRpbWVcIixcbiAgfTtcbiAgY29uc3QgamF2YVBhY2thZ2VOYW1lID0gdHJhbnNsYXRpb25NYXBbcGFja2FnZU5hbWVdIHx8IHBhY2thZ2VOYW1lO1xuXG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgZXhlYyhcIm12blwiLCBbXCJkZXBlbmRlbmN5Omxpc3RcIl0sIHtcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoYFVuYWJsZSB0byBydW4gJ212biBkZXBlbmRlbmN5Omxpc3QnOiAke2V9YCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdXRpb25QYXJ0ID0gb3V0cHV0LnNwbGl0KFxuICAgIFwiVGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGJlZW4gcmVzb2x2ZWRcIixcbiAgKVsxXTtcbiAgaWYgKCFyZXNvbHV0aW9uUGFydCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVbmFibGUgdG8gZmluZCByZXNvbHV0aW9uIHBhc3NhZ2UgaW4gb3V0cHV0IG9mICdtdm4gZGVwZW5kZW5jeTpsaXN0JzogJHtvdXRwdXR9YCxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBXZSBuZWVkIHRvIHNlYXJjaCBmb3IgdGhlIHBhY2thZ2UgbmFtZSBBTkQgYSBjb2xvbiB0byBub3QgbWF0Y2ggYSBsaW5lIGxpa2VcbiAgLy8gW0lORk9dICAgIGNvbS5oYXNoaWNvcnA6Y2RrdGYtcHJvdmlkZXItYXdzOmphcjo5LjAuOTpjb21waWxlXG4gIC8vIHdoZW4gbG9va2luZyBmb3IgdGhlIGNka3RmIHBhY2thZ2UgKHNlZSBHaXRodWIgaXNzdWUgIzE5OTQpXG4gIGNvbnN0IHZlcnNpb25MaW5lID0gcmVzb2x1dGlvblBhcnRcbiAgICAuc3BsaXQoL1xcclxcbnxcXHJ8XFxuLylcbiAgICAuZmluZCgobGluZSkgPT4gbGluZS5pbmNsdWRlcyhgJHtqYXZhUGFja2FnZU5hbWV9OmApKTtcblxuICBpZiAoIXZlcnNpb25MaW5lKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYFVuYWJsZSB0byBmaW5kIHZlcnNpb24gZm9yICcke2phdmFQYWNrYWdlTmFtZX0nIGluIG91dHB1dCBvZiAnbXZuIGRlcGVuZGVuY3k6bGlzdCc6ICR7b3V0cHV0fWAsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gRXhhbXBsZSBsaW5lOiBbSU5GT10gICAgY29tLmhhc2hpY29ycDpjZGt0ZjpqYXI6MC4wLjA6Y29tcGlsZVxuICBjb25zdCB2ZXJzaW9uU3RhcnREZWxpbWl0ZXIgPSBgJHtqYXZhUGFja2FnZU5hbWV9OmphcjpgO1xuICBjb25zdCB2ZXJzaW9uU3RhcnQgPVxuICAgIHZlcnNpb25MaW5lLmluZGV4T2YodmVyc2lvblN0YXJ0RGVsaW1pdGVyKSArIHZlcnNpb25TdGFydERlbGltaXRlci5sZW5ndGg7XG4gIGNvbnN0IHZlcnNpb25FbmREZWxlbWl0ZXIgPSBcIjpjb21waWxlXCI7XG4gIGNvbnN0IHZlcnNpb25FbmQgPSB2ZXJzaW9uTGluZS5pbmRleE9mKHZlcnNpb25FbmREZWxlbWl0ZXIpO1xuICByZXR1cm4gdmVyc2lvbkxpbmUuc3Vic3RyaW5nKHZlcnNpb25TdGFydCwgdmVyc2lvbkVuZCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEphdmFQYWNrYWdlVmVyc2lvbihwYWNrYWdlTmFtZTogc3RyaW5nKSB7XG4gIGlmIChpc0dyYWRsZVByb2plY3QoXCIuL1wiKSkge1xuICAgIHJldHVybiBnZXRHcmFkbGVQYWNrYWdlVmVyc2lvbihwYWNrYWdlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gZ2V0TWF2ZW5QYWNrYWdlVmVyc2lvbihwYWNrYWdlTmFtZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQYWNrYWdlVmVyc2lvbihcbiAgbGFuZ3VhZ2U6IHN0cmluZyxcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG5vT3AgPSBhc3luYyAoKSA9PiB1bmRlZmluZWQ7XG4gIGNvbnN0IGdldExpYnJhcnlWZXJzaW9uTWFwOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPlxuICA+ID0ge1xuICAgIHR5cGVzY3JpcHQ6IGdldE5vZGVNb2R1bGVWZXJzaW9uLFxuICAgIHB5dGhvbjogZ2V0UHl0aG9uUGFja2FnZVZlcnNpb24sXG4gICAgZ286IGdldEdvUGFja2FnZVZlcnNpb24sXG4gICAgY3NoYXJwOiBnZXRDU2hhcnBQYWNrYWdlVmVyc2lvbixcbiAgICBqYXZhOiBnZXRKYXZhUGFja2FnZVZlcnNpb24sXG4gIH07XG5cbiAgY29uc3QgbGliVmVyc2lvbiA9IGF3YWl0IChnZXRMaWJyYXJ5VmVyc2lvbk1hcFtsYW5ndWFnZV0gfHwgbm9PcCkoXG4gICAgcGFja2FnZU5hbWUsXG4gICk7XG4gIHJldHVybiBsaWJWZXJzaW9uID8/IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3REZWJ1Z0luZm9ybWF0aW9uKCkge1xuICBjb25zdCBkZWJ1Z091dHB1dDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4gPSB7fTtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZSgpO1xuICBkZWJ1Z091dHB1dFtcImxhbmd1YWdlXCJdID0gbGFuZ3VhZ2UgPz8gbnVsbDtcbiAgZGVidWdPdXRwdXRbXCJjZGt0bi1jbGlcIl0gPSBESVNQTEFZX1ZFUlNJT047XG5cbiAgY29uc3Qgbm9kZSA9IGdldE5vZGVWZXJzaW9uKCk7XG5cbiAgZGVidWdPdXRwdXRbXCJub2RlXCJdID0gKGF3YWl0IG5vZGUpID8/IG51bGw7XG4gIGlmIChsYW5ndWFnZSkge1xuICAgIGNvbnN0IGNka3RuID0gZ2V0UGFja2FnZVZlcnNpb24obGFuZ3VhZ2UsIFwiY2RrdG5cIik7XG4gICAgY29uc3QgY2RrdGYgPSBnZXRQYWNrYWdlVmVyc2lvbihsYW5ndWFnZSwgXCJjZGt0ZlwiKTtcbiAgICBjb25zdCBjb25zdHJ1Y3RzID0gZ2V0UGFja2FnZVZlcnNpb24obGFuZ3VhZ2UsIFwiY29uc3RydWN0c1wiKTtcbiAgICBjb25zdCBqc2lpID0gZ2V0UGFja2FnZVZlcnNpb24obGFuZ3VhZ2UsIFwianNpaVwiKTtcblxuICAgIGRlYnVnT3V0cHV0W1wiY2RrdG5cIl0gPSAoYXdhaXQgY2RrdG4pID8/IG51bGw7XG4gICAgZGVidWdPdXRwdXRbXCJjZGt0ZlwiXSA9IChhd2FpdCBjZGt0ZikgPz8gbnVsbDtcbiAgICBkZWJ1Z091dHB1dFtcImNvbnN0cnVjdHNcIl0gPSAoYXdhaXQgY29uc3RydWN0cykgPz8gbnVsbDtcbiAgICBkZWJ1Z091dHB1dFtcImpzaWlcIl0gPSAoYXdhaXQganNpaSkgPz8gbnVsbDtcbiAgfVxuICBkZWJ1Z091dHB1dFtcInRlcnJhZm9ybVwiXSA9IGF3YWl0IHRlcnJhZm9ybVZlcnNpb247XG4gIGRlYnVnT3V0cHV0W1wiYXJjaFwiXSA9IG9zLmFyY2goKTtcbiAgZGVidWdPdXRwdXRbXCJvc1wiXSA9IGAke29zLnBsYXRmb3JtKCl9ICR7b3MucmVsZWFzZSgpfWA7XG5cbiAgc3dpdGNoIChsYW5ndWFnZSkge1xuICAgIGNhc2UgXCJweXRob25cIjpcbiAgICAgIHtcbiAgICAgICAgY29uc3QgcHl0aG9uID0gZ2V0UHl0aG9uVmVyc2lvbigpO1xuICAgICAgICBjb25zdCBwaXAgPSBnZXRQaXBWZXJzaW9uKCk7XG4gICAgICAgIGNvbnN0IHBpcGVudiA9IGdldFBpcGVudlZlcnNpb24oKTtcbiAgICAgICAgZGVidWdPdXRwdXRbXCJweXRob25cIl0gPSAoYXdhaXQgcHl0aG9uKSA/PyBudWxsO1xuICAgICAgICBkZWJ1Z091dHB1dFtcInBpcFwiXSA9IChhd2FpdCBwaXApID8/IG51bGw7XG4gICAgICAgIGRlYnVnT3V0cHV0W1wicGlwZW52XCJdID0gKGF3YWl0IHBpcGVudikgPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJqYXZhXCI6XG4gICAgICB7XG4gICAgICAgIGNvbnN0IGphdmEgPSBnZXRKYXZhVmVyc2lvbigpO1xuICAgICAgICBjb25zdCBtYXZlbiA9IGdldE1hdmVuVmVyc2lvbigpO1xuICAgICAgICBjb25zdCBncmFkbGUgPSBnZXRHcmFkbGVWZXJzaW9uKCk7XG4gICAgICAgIGRlYnVnT3V0cHV0W1wiamF2YVwiXSA9IChhd2FpdCBqYXZhKSA/PyBudWxsO1xuICAgICAgICBkZWJ1Z091dHB1dFtcIm1hdmVuXCJdID0gKGF3YWl0IG1hdmVuKSA/PyBudWxsO1xuICAgICAgICBkZWJ1Z091dHB1dFtcImdyYWRsZVwiXSA9IChhd2FpdCBncmFkbGUpID8/IG51bGw7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY3NoYXJwXCI6XG4gICAgICBkZWJ1Z091dHB1dFtcImRvdG5ldFwiXSA9IChhd2FpdCBnZXREb3RuZXRWZXJzaW9uKCkpID8/IG51bGw7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZ29cIjpcbiAgICAgIGRlYnVnT3V0cHV0W1wiZ29cIl0gPSAoYXdhaXQgZ2V0R29WZXJzaW9uKCkpID8/IG51bGw7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBkZWJ1Z091dHB1dDtcbn1cbiJdfQ==
package/build/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export * from "./errors";
7
7
  export * from "./gradle";
8
8
  export * from "./logging";
9
9
  export * from "./module-schema";
10
+ export * from "./node-package-manager";
10
11
  export * from "./provider-schema";
11
12
  export * from "./registry";
12
13
  export * from "./terraform-module";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
package/build/index.js CHANGED
@@ -25,10 +25,11 @@ __exportStar(require("./errors"), exports);
25
25
  __exportStar(require("./gradle"), exports);
26
26
  __exportStar(require("./logging"), exports);
27
27
  __exportStar(require("./module-schema"), exports);
28
+ __exportStar(require("./node-package-manager"), exports);
28
29
  __exportStar(require("./provider-schema"), exports);
29
30
  __exportStar(require("./registry"), exports);
30
31
  __exportStar(require("./terraform-module"), exports);
31
32
  __exportStar(require("./terraform"), exports);
32
33
  __exportStar(require("./util"), exports);
33
34
  __exportStar(require("./version"), exports);
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbkMsK0NBQTZCO0FBQzdCLDJEQUF5QztBQUN6QywyQ0FBeUI7QUFDekIsMENBQXdCO0FBQ3hCLGdEQUE4QjtBQUM5QiwyQ0FBeUI7QUFDekIsMkNBQXlCO0FBQ3pCLDRDQUEwQjtBQUMxQixrREFBZ0M7QUFDaEMsb0RBQWtDO0FBQ2xDLDZDQUEyQjtBQUMzQixxREFBbUM7QUFDbkMsOENBQTRCO0FBQzVCLHlDQUF1QjtBQUN2Qiw0Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuXG5leHBvcnQgKiBmcm9tIFwiLi9jaGVja3BvaW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdHJ1Y3QtbWFrZXItdGFyZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25maWdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlYnVnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbnZpcm9ubWVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ncmFkbGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvZ2dpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZHVsZS1zY2hlbWFcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVyLXNjaGVtYVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVnaXN0cnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RlcnJhZm9ybS1tb2R1bGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RlcnJhZm9ybVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVyc2lvblwiO1xuIl19
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbkMsK0NBQTZCO0FBQzdCLDJEQUF5QztBQUN6QywyQ0FBeUI7QUFDekIsMENBQXdCO0FBQ3hCLGdEQUE4QjtBQUM5QiwyQ0FBeUI7QUFDekIsMkNBQXlCO0FBQ3pCLDRDQUEwQjtBQUMxQixrREFBZ0M7QUFDaEMseURBQXVDO0FBQ3ZDLG9EQUFrQztBQUNsQyw2Q0FBMkI7QUFDM0IscURBQW1DO0FBQ25DLDhDQUE0QjtBQUM1Qix5Q0FBdUI7QUFDdkIsNENBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcblxuZXhwb3J0ICogZnJvbSBcIi4vY2hlY2twb2ludFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RydWN0LW1ha2VyLXRhcmdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uZmlnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWJ1Z1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW52aXJvbm1lbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ3JhZGxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb2dnaW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2R1bGUtc2NoZW1hXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ub2RlLXBhY2thZ2UtbWFuYWdlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvdmlkZXItc2NoZW1hXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVycmFmb3JtLW1vZHVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVycmFmb3JtXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92ZXJzaW9uXCI7XG4iXX0=
@@ -0,0 +1,15 @@
1
+ export declare const YARN_TRACKING_ISSUE_URL = "https://github.com/open-constructs/cdk-terrain/issues/492";
2
+ /**
3
+ * Yarn classic (1.x) and Yarn Berry (2+) share the `yarn` command but differ in CLI surface, so they are told apart.
4
+ */
5
+ export type NodePackageManagerName = "npm" | "pnpm" | "yarn" | "yarn-berry";
6
+ /**
7
+ * The command that drives a project managed by the given package manager.
8
+ */
9
+ export declare function nodePackageManagerCommand(packageManager: NodePackageManagerName): "npm" | "pnpm" | "yarn";
10
+ /**
11
+ * Detects the package manager of the Node.js project in `dir`. An explicit `packageManager` field (corepack) wins
12
+ * over lockfile probing, since it is a deliberate declaration.
13
+ */
14
+ export declare function detectNodePackageManager(dir: string): NodePackageManagerName;
15
+ //# sourceMappingURL=node-package-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-package-manager.d.ts","sourceRoot":"","sources":["../src/node-package-manager.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,uBAAuB,8DACyB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAE5E;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,sBAAsB,GACrC,KAAK,GAAG,MAAM,GAAG,MAAM,CAEzB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,CAgC5E"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.YARN_TRACKING_ISSUE_URL = void 0;
37
+ exports.nodePackageManagerCommand = nodePackageManagerCommand;
38
+ exports.detectNodePackageManager = detectNodePackageManager;
39
+ // Copyright (c) HashiCorp, Inc
40
+ // SPDX-License-Identifier: MPL-2.0
41
+ const fs = __importStar(require("fs-extra"));
42
+ const path = __importStar(require("path"));
43
+ const semver = __importStar(require("semver"));
44
+ exports.YARN_TRACKING_ISSUE_URL = "https://github.com/open-constructs/cdk-terrain/issues/492";
45
+ /**
46
+ * The command that drives a project managed by the given package manager.
47
+ */
48
+ function nodePackageManagerCommand(packageManager) {
49
+ return packageManager === "yarn-berry" ? "yarn" : packageManager;
50
+ }
51
+ /**
52
+ * Detects the package manager of the Node.js project in `dir`. An explicit `packageManager` field (corepack) wins
53
+ * over lockfile probing, since it is a deliberate declaration.
54
+ */
55
+ function detectNodePackageManager(dir) {
56
+ var _a, _b;
57
+ let declared;
58
+ try {
59
+ declared = (_a = fs.readJsonSync(path.join(dir, "package.json"))) === null || _a === void 0 ? void 0 : _a.packageManager;
60
+ }
61
+ catch (_c) {
62
+ // no or unreadable package.json - fall through to lockfile probing
63
+ }
64
+ if (typeof declared === "string") {
65
+ const at = declared.indexOf("@");
66
+ const name = at === -1 ? declared : declared.slice(0, at);
67
+ const version = at === -1 ? "" : declared.slice(at + 1);
68
+ if (name === "npm" || name === "pnpm") {
69
+ return name;
70
+ }
71
+ if (name === "yarn") {
72
+ return semver.major((_b = semver.coerce(version)) !== null && _b !== void 0 ? _b : "1.0.0") >= 2
73
+ ? "yarn-berry"
74
+ : "yarn";
75
+ }
76
+ }
77
+ if (fs.existsSync(path.join(dir, "pnpm-lock.yaml"))) {
78
+ return "pnpm";
79
+ }
80
+ if (fs.existsSync(path.join(dir, ".yarnrc.yml"))) {
81
+ return "yarn-berry";
82
+ }
83
+ if (fs.existsSync(path.join(dir, "yarn.lock"))) {
84
+ return "yarn";
85
+ }
86
+ return "npm";
87
+ }
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1wYWNrYWdlLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbm9kZS1wYWNrYWdlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBLDhEQUlDO0FBTUQsNERBZ0NDO0FBM0RELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUM3QiwrQ0FBaUM7QUFFcEIsUUFBQSx1QkFBdUIsR0FDbEMsMkRBQTJELENBQUM7QUFPOUQ7O0dBRUc7QUFDSCxTQUFnQix5QkFBeUIsQ0FDdkMsY0FBc0M7SUFFdEMsT0FBTyxjQUFjLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztBQUNuRSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsR0FBVzs7SUFDbEQsSUFBSSxRQUE0QixDQUFDO0lBQ2pDLElBQUksQ0FBQztRQUNILFFBQVEsR0FBRyxNQUFBLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUMsMENBQUUsY0FBYyxDQUFDO0lBQzdFLENBQUM7SUFBQyxXQUFNLENBQUM7UUFDUCxtRUFBbUU7SUFDckUsQ0FBQztJQUVELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDakMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUQsTUFBTSxPQUFPLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUNBQUksT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDekQsQ0FBQyxDQUFDLFlBQVk7Z0JBQ2QsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSBcInNlbXZlclwiO1xuXG5leHBvcnQgY29uc3QgWUFSTl9UUkFDS0lOR19JU1NVRV9VUkwgPVxuICBcImh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLWNvbnN0cnVjdHMvY2RrLXRlcnJhaW4vaXNzdWVzLzQ5MlwiO1xuXG4vKipcbiAqIFlhcm4gY2xhc3NpYyAoMS54KSBhbmQgWWFybiBCZXJyeSAoMispIHNoYXJlIHRoZSBgeWFybmAgY29tbWFuZCBidXQgZGlmZmVyIGluIENMSSBzdXJmYWNlLCBzbyB0aGV5IGFyZSB0b2xkIGFwYXJ0LlxuICovXG5leHBvcnQgdHlwZSBOb2RlUGFja2FnZU1hbmFnZXJOYW1lID0gXCJucG1cIiB8IFwicG5wbVwiIHwgXCJ5YXJuXCIgfCBcInlhcm4tYmVycnlcIjtcblxuLyoqXG4gKiBUaGUgY29tbWFuZCB0aGF0IGRyaXZlcyBhIHByb2plY3QgbWFuYWdlZCBieSB0aGUgZ2l2ZW4gcGFja2FnZSBtYW5hZ2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZVBhY2thZ2VNYW5hZ2VyQ29tbWFuZChcbiAgcGFja2FnZU1hbmFnZXI6IE5vZGVQYWNrYWdlTWFuYWdlck5hbWUsXG4pOiBcIm5wbVwiIHwgXCJwbnBtXCIgfCBcInlhcm5cIiB7XG4gIHJldHVybiBwYWNrYWdlTWFuYWdlciA9PT0gXCJ5YXJuLWJlcnJ5XCIgPyBcInlhcm5cIiA6IHBhY2thZ2VNYW5hZ2VyO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIHBhY2thZ2UgbWFuYWdlciBvZiB0aGUgTm9kZS5qcyBwcm9qZWN0IGluIGBkaXJgLiBBbiBleHBsaWNpdCBgcGFja2FnZU1hbmFnZXJgIGZpZWxkIChjb3JlcGFjaykgd2luc1xuICogb3ZlciBsb2NrZmlsZSBwcm9iaW5nLCBzaW5jZSBpdCBpcyBhIGRlbGliZXJhdGUgZGVjbGFyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3ROb2RlUGFja2FnZU1hbmFnZXIoZGlyOiBzdHJpbmcpOiBOb2RlUGFja2FnZU1hbmFnZXJOYW1lIHtcbiAgbGV0IGRlY2xhcmVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgZGVjbGFyZWQgPSBmcy5yZWFkSnNvblN5bmMocGF0aC5qb2luKGRpciwgXCJwYWNrYWdlLmpzb25cIikpPy5wYWNrYWdlTWFuYWdlcjtcbiAgfSBjYXRjaCB7XG4gICAgLy8gbm8gb3IgdW5yZWFkYWJsZSBwYWNrYWdlLmpzb24gLSBmYWxsIHRocm91Z2ggdG8gbG9ja2ZpbGUgcHJvYmluZ1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkZWNsYXJlZCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IGF0ID0gZGVjbGFyZWQuaW5kZXhPZihcIkBcIik7XG4gICAgY29uc3QgbmFtZSA9IGF0ID09PSAtMSA/IGRlY2xhcmVkIDogZGVjbGFyZWQuc2xpY2UoMCwgYXQpO1xuICAgIGNvbnN0IHZlcnNpb24gPSBhdCA9PT0gLTEgPyBcIlwiIDogZGVjbGFyZWQuc2xpY2UoYXQgKyAxKTtcbiAgICBpZiAobmFtZSA9PT0gXCJucG1cIiB8fCBuYW1lID09PSBcInBucG1cIikge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcInlhcm5cIikge1xuICAgICAgcmV0dXJuIHNlbXZlci5tYWpvcihzZW12ZXIuY29lcmNlKHZlcnNpb24pID8/IFwiMS4wLjBcIikgPj0gMlxuICAgICAgICA/IFwieWFybi1iZXJyeVwiXG4gICAgICAgIDogXCJ5YXJuXCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKGRpciwgXCJwbnBtLWxvY2sueWFtbFwiKSkpIHtcbiAgICByZXR1cm4gXCJwbnBtXCI7XG4gIH1cbiAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKGRpciwgXCIueWFybnJjLnltbFwiKSkpIHtcbiAgICByZXR1cm4gXCJ5YXJuLWJlcnJ5XCI7XG4gIH1cbiAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKGRpciwgXCJ5YXJuLmxvY2tcIikpKSB7XG4gICAgcmV0dXJuIFwieWFyblwiO1xuICB9XG4gIHJldHVybiBcIm5wbVwiO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node-package-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-package-manager.test.d.ts","sourceRoot":"","sources":["../src/node-package-manager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // Copyright (c) HashiCorp, Inc
4
+ // SPDX-License-Identifier: MPL-2.0
5
+ const fs_1 = require("fs");
6
+ const os_1 = require("os");
7
+ const path_1 = require("path");
8
+ const node_package_manager_1 = require("./node-package-manager");
9
+ function pkg(packageManager) {
10
+ return JSON.stringify({ packageManager });
11
+ }
12
+ function projectWith(files) {
13
+ const dir = (0, fs_1.mkdtempSync)((0, path_1.join)((0, os_1.tmpdir)(), "cdktn-pm-test-"));
14
+ for (const [name, contents] of Object.entries(files)) {
15
+ (0, fs_1.writeFileSync)((0, path_1.join)(dir, name), contents);
16
+ }
17
+ return dir;
18
+ }
19
+ describe("detectNodePackageManager", () => {
20
+ it.each([
21
+ ["npm field", { "package.json": pkg("npm@10.9.0") }, "npm"],
22
+ [
23
+ "pnpm field over a conflicting lockfile",
24
+ { "package.json": pkg("pnpm@11.5.2"), "yarn.lock": "" },
25
+ "pnpm",
26
+ ],
27
+ ["yarn@1 field", { "package.json": pkg("yarn@1.22.22") }, "yarn"],
28
+ [
29
+ "yarn@4 field",
30
+ { "package.json": pkg("yarn@4.5.0+sha512.abc") },
31
+ "yarn-berry",
32
+ ],
33
+ [
34
+ "yarn field pinned to a scoped registry URL",
35
+ {
36
+ "package.json": pkg("yarn@https://registry.npmjs.org/@yarnpkg/cli-dist/-/cli-dist-4.1.0.tgz"),
37
+ },
38
+ "yarn-berry",
39
+ ],
40
+ ["pnpm-lock.yaml", { "pnpm-lock.yaml": "" }, "pnpm"],
41
+ ["yarn.lock alone", { "yarn.lock": "" }, "yarn"],
42
+ [
43
+ "yarn.lock with .yarnrc.yml",
44
+ { "yarn.lock": "", ".yarnrc.yml": "" },
45
+ "yarn-berry",
46
+ ],
47
+ ["nothing", {}, "npm"],
48
+ ])("%s => %s", (_, files, expected) => {
49
+ expect((0, node_package_manager_1.detectNodePackageManager)(projectWith(files))).toBe(expected);
50
+ });
51
+ });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1wYWNrYWdlLW1hbmFnZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ub2RlLXBhY2thZ2UtbWFuYWdlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQywyQkFBZ0Q7QUFDaEQsMkJBQTRCO0FBQzVCLCtCQUE0QjtBQUM1QixpRUFBa0U7QUFFbEUsU0FBUyxHQUFHLENBQUMsY0FBc0I7SUFDakMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBNkI7SUFDaEQsTUFBTSxHQUFHLEdBQUcsSUFBQSxnQkFBVyxFQUFDLElBQUEsV0FBSSxFQUFDLElBQUEsV0FBTSxHQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQzFELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckQsSUFBQSxrQkFBYSxFQUFDLElBQUEsV0FBSSxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsUUFBUSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtJQUN4QyxFQUFFLENBQUMsSUFBSSxDQUEyQztRQUNoRCxDQUFDLFdBQVcsRUFBRSxFQUFFLGNBQWMsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7UUFDM0Q7WUFDRSx3Q0FBd0M7WUFDeEMsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUU7WUFDdkQsTUFBTTtTQUNQO1FBQ0QsQ0FBQyxjQUFjLEVBQUUsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDO1FBQ2pFO1lBQ0UsY0FBYztZQUNkLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO1lBQ2hELFlBQVk7U0FDYjtRQUNEO1lBQ0UsNENBQTRDO1lBQzVDO2dCQUNFLGNBQWMsRUFBRSxHQUFHLENBQ2pCLHdFQUF3RSxDQUN6RTthQUNGO1lBQ0QsWUFBWTtTQUNiO1FBQ0QsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNwRCxDQUFDLGlCQUFpQixFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNoRDtZQUNFLDRCQUE0QjtZQUM1QixFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRTtZQUN0QyxZQUFZO1NBQ2I7UUFDRCxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0tBQ3ZCLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO1FBQ3BDLE1BQU0sQ0FBQyxJQUFBLCtDQUF3QixFQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgbWtkdGVtcFN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBkZXRlY3ROb2RlUGFja2FnZU1hbmFnZXIgfSBmcm9tIFwiLi9ub2RlLXBhY2thZ2UtbWFuYWdlclwiO1xuXG5mdW5jdGlvbiBwa2cocGFja2FnZU1hbmFnZXI6IHN0cmluZykge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyBwYWNrYWdlTWFuYWdlciB9KTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFdpdGgoZmlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgY29uc3QgZGlyID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJjZGt0bi1wbS10ZXN0LVwiKSk7XG4gIGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRzXSBvZiBPYmplY3QuZW50cmllcyhmaWxlcykpIHtcbiAgICB3cml0ZUZpbGVTeW5jKGpvaW4oZGlyLCBuYW1lKSwgY29udGVudHMpO1xuICB9XG4gIHJldHVybiBkaXI7XG59XG5cbmRlc2NyaWJlKFwiZGV0ZWN0Tm9kZVBhY2thZ2VNYW5hZ2VyXCIsICgpID0+IHtcbiAgaXQuZWFjaDxbc3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBzdHJpbmddPihbXG4gICAgW1wibnBtIGZpZWxkXCIsIHsgXCJwYWNrYWdlLmpzb25cIjogcGtnKFwibnBtQDEwLjkuMFwiKSB9LCBcIm5wbVwiXSxcbiAgICBbXG4gICAgICBcInBucG0gZmllbGQgb3ZlciBhIGNvbmZsaWN0aW5nIGxvY2tmaWxlXCIsXG4gICAgICB7IFwicGFja2FnZS5qc29uXCI6IHBrZyhcInBucG1AMTEuNS4yXCIpLCBcInlhcm4ubG9ja1wiOiBcIlwiIH0sXG4gICAgICBcInBucG1cIixcbiAgICBdLFxuICAgIFtcInlhcm5AMSBmaWVsZFwiLCB7IFwicGFja2FnZS5qc29uXCI6IHBrZyhcInlhcm5AMS4yMi4yMlwiKSB9LCBcInlhcm5cIl0sXG4gICAgW1xuICAgICAgXCJ5YXJuQDQgZmllbGRcIixcbiAgICAgIHsgXCJwYWNrYWdlLmpzb25cIjogcGtnKFwieWFybkA0LjUuMCtzaGE1MTIuYWJjXCIpIH0sXG4gICAgICBcInlhcm4tYmVycnlcIixcbiAgICBdLFxuICAgIFtcbiAgICAgIFwieWFybiBmaWVsZCBwaW5uZWQgdG8gYSBzY29wZWQgcmVnaXN0cnkgVVJMXCIsXG4gICAgICB7XG4gICAgICAgIFwicGFja2FnZS5qc29uXCI6IHBrZyhcbiAgICAgICAgICBcInlhcm5AaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHlhcm5wa2cvY2xpLWRpc3QvLS9jbGktZGlzdC00LjEuMC50Z3pcIixcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICBcInlhcm4tYmVycnlcIixcbiAgICBdLFxuICAgIFtcInBucG0tbG9jay55YW1sXCIsIHsgXCJwbnBtLWxvY2sueWFtbFwiOiBcIlwiIH0sIFwicG5wbVwiXSxcbiAgICBbXCJ5YXJuLmxvY2sgYWxvbmVcIiwgeyBcInlhcm4ubG9ja1wiOiBcIlwiIH0sIFwieWFyblwiXSxcbiAgICBbXG4gICAgICBcInlhcm4ubG9jayB3aXRoIC55YXJucmMueW1sXCIsXG4gICAgICB7IFwieWFybi5sb2NrXCI6IFwiXCIsIFwiLnlhcm5yYy55bWxcIjogXCJcIiB9LFxuICAgICAgXCJ5YXJuLWJlcnJ5XCIsXG4gICAgXSxcbiAgICBbXCJub3RoaW5nXCIsIHt9LCBcIm5wbVwiXSxcbiAgXSkoXCIlcyA9PiAlc1wiLCAoXywgZmlsZXMsIGV4cGVjdGVkKSA9PiB7XG4gICAgZXhwZWN0KGRldGVjdE5vZGVQYWNrYWdlTWFuYWdlcihwcm9qZWN0V2l0aChmaWxlcykpKS50b0JlKGV4cGVjdGVkKTtcbiAgfSk7XG59KTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdktn/commons",
3
- "version": "0.25.0-pre.51",
3
+ "version": "0.25.0-pre.53",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -39,7 +39,7 @@
39
39
  "semver": "7.8.5",
40
40
  "strip-ansi": "6.0.1",
41
41
  "validator": "13.15.35",
42
- "cdktn": "0.25.0-pre.51"
42
+ "cdktn": "0.25.0-pre.53"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "22.20.1",