@kontur.candy/tools 2.191.1 → 2.192.0

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.
Files changed (46) hide show
  1. package/README.md +5 -1
  2. package/distr/Common/CandyApiClient/CandyApiClient.js +4 -1
  3. package/distr/Common/CandyApiClient/CandyApiClient.js.map +1 -1
  4. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +4 -1
  5. package/distr/Common/CandyApiClient/FakeCandyApiClient.js.map +1 -1
  6. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  7. package/distr/Common/CandyApiClient/ICandyApiClient.js.map +1 -1
  8. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +8 -2
  9. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js.map +1 -1
  10. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
  11. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js.map +1 -1
  12. package/distr/Common/CandyApiClient/Types/ErrorLog/ResolveInnerPathRequest.js +6 -0
  13. package/distr/Common/CandyApiClient/Types/ErrorLog/ResolveInnerPathRequest.js.map +1 -0
  14. package/distr/Common/CandyApiClient/Types/ErrorLog/ResolvePathResponse.js +6 -0
  15. package/distr/Common/CandyApiClient/Types/ErrorLog/ResolvePathResponse.js.map +1 -0
  16. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +1 -1
  17. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js.map +1 -1
  18. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -3
  19. package/distr/Tools/src/BuildTasks/Form/CompileForm.js.map +1 -1
  20. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +11 -2
  21. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js.map +1 -1
  22. package/distr/Tools/src/CLICommands/BuildForms/ClearSourceMapForProduction.js +24 -0
  23. package/distr/Tools/src/CLICommands/BuildForms/ClearSourceMapForProduction.js.map +1 -0
  24. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +2 -9
  25. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js.map +1 -1
  26. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +4 -16
  27. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js.map +1 -1
  28. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +3 -8
  29. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js.map +1 -1
  30. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +1 -21
  31. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js.map +1 -1
  32. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +2 -2
  33. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js.map +1 -1
  34. package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +2 -15
  35. package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js.map +1 -1
  36. package/distr/Tools/src/CandyCLI.js +5 -1
  37. package/distr/Tools/src/CandyCLI.js.map +1 -1
  38. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +5 -2
  39. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js.map +1 -1
  40. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  41. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  42. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +128 -100
  43. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  44. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +80 -52
  45. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  46. package/package.json +1 -1
@@ -17,10 +17,10 @@ var _Results = require("../../../Commons/HttpServer/AttributeRouting/Results");
17
17
  var _StreamResultHandler = require("../../../Commons/HttpServer/AttributeRouting/Results/StreamResultHandler");
18
18
  var _SingletonController = require("../../../Commons/HttpServer/ExpressWrapper/SingletonController");
19
19
  var _FarmDirectory = require("./Directories/FarmDirectory");
20
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _class;
20
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _class;
21
21
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
22
22
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
23
- let BuildServerBackendResourcesController = exports.BuildServerBackendResourcesController = (_dec = (0, _Methods.httpGet)("/gfvs", _Results.httpReturn.Json), _dec2 = (0, _Methods.httpGet)("/picklists", _Results.httpReturn.PlainText), _dec3 = (0, _Methods.httpGet)("/picklists/:picklistFilename", _Results.httpReturn.StreamWithMime("application/json"), (0, _Params.httpUrlParam)("picklistFilename", _Params.httpType.String)), _dec4 = (0, _Methods.httpGet)("/converters", _Results.httpReturn.PlainText), _dec5 = (0, _Methods.httpGet)("/converters/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec6 = (0, _Methods.httpGet)("/mergers", _Results.httpReturn.PlainText), _dec7 = (0, _Methods.httpGet)("/mergers/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec8 = (0, _Methods.httpGet)("/schemas", _Results.httpReturn.PlainText), _dec9 = (0, _Methods.httpGet)("/schemas/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec10 = (0, _Methods.httpGet)("/presentations", _Results.httpReturn.PlainText), _dec11 = (0, _Methods.httpGet)("/presentations/:gfv.presentations.json", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec12 = (0, _Methods.httpGet)("/normalize", _Results.httpReturn.PlainText), _dec13 = (0, _Methods.httpGet)("/normalize/:gfv.xml", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec14 = (0, _Methods.httpGet)("/normalize/:gfv.normalize", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec15 = (0, _Methods.httpGet)("/attachmentpaths", _Results.httpReturn.PlainText), _dec16 = (0, _Methods.httpGet)("/attachmentpaths/:gfv.json", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec17 = (0, _Methods.httpGet)("/unmap", _Results.httpReturn.PlainText), _dec18 = (0, _Methods.httpGet)("/unmap/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec19 = (0, _Methods.httpGet)("/map", _Results.httpReturn.PlainText), _dec20 = (0, _Methods.httpGet)("/map/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec21 = (0, _Methods.httpGet)("/patch", _Results.httpReturn.PlainText), _dec22 = (0, _Methods.httpGet)("/patch/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), (_class = class BuildServerBackendResourcesController extends _SingletonController.SingletonController {
23
+ let BuildServerBackendResourcesController = exports.BuildServerBackendResourcesController = (_dec = (0, _Methods.httpGet)("/gfvs", _Results.httpReturn.Json), _dec2 = (0, _Methods.httpGet)("/picklists", _Results.httpReturn.PlainText), _dec3 = (0, _Methods.httpGet)("/picklists/:picklistFilename", _Results.httpReturn.StreamWithMime("application/json"), (0, _Params.httpUrlParam)("picklistFilename", _Params.httpType.String)), _dec4 = (0, _Methods.httpGet)("/converters", _Results.httpReturn.PlainText), _dec5 = (0, _Methods.httpGet)("/converters/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec6 = (0, _Methods.httpGet)("/mergers", _Results.httpReturn.PlainText), _dec7 = (0, _Methods.httpGet)("/mergers/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec8 = (0, _Methods.httpGet)("/schemas", _Results.httpReturn.PlainText), _dec9 = (0, _Methods.httpGet)("/schemas/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec10 = (0, _Methods.httpGet)("/normalize", _Results.httpReturn.PlainText), _dec11 = (0, _Methods.httpGet)("/normalize/:gfv.xml", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec12 = (0, _Methods.httpGet)("/normalize/:gfv.normalize", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec13 = (0, _Methods.httpGet)("/attachmentpaths", _Results.httpReturn.PlainText), _dec14 = (0, _Methods.httpGet)("/attachmentpaths/:gfv.json", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec15 = (0, _Methods.httpGet)("/unmap", _Results.httpReturn.PlainText), _dec16 = (0, _Methods.httpGet)("/unmap/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec17 = (0, _Methods.httpGet)("/map", _Results.httpReturn.PlainText), _dec18 = (0, _Methods.httpGet)("/map/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec19 = (0, _Methods.httpGet)("/patch", _Results.httpReturn.PlainText), _dec20 = (0, _Methods.httpGet)("/patch/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), (_class = class BuildServerBackendResourcesController extends _SingletonController.SingletonController {
24
24
  constructor(allFarmConfig, flangNormalizationSourcesProvider) {
25
25
  super();
26
26
  this.generatedServerSideSourcesProvider = void 0;
@@ -90,18 +90,6 @@ let BuildServerBackendResourcesController = exports.BuildServerBackendResourcesC
90
90
  }
91
91
  throw new _NotFoundWebError.NotFoundWebError("File not found", false);
92
92
  }
93
- async getAllFormPresentations() {
94
- return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllPresentationsFileNames()))).flat().map(x => path.basename(x)).join("\n");
95
- }
96
- async getFormPresentations(gfv) {
97
- for (const farmDirectory of this.allFarmDirectories) {
98
- const filePath = await farmDirectory.getPresentationsFilePathByGfvOrUndefined(gfv);
99
- if (filePath != null && (await (0, _fsExtra.pathExists)(filePath))) {
100
- return new _StreamResultHandler.FileStreamResult(filePath);
101
- }
102
- }
103
- throw new _NotFoundWebError.NotFoundWebError("File not found", false);
104
- }
105
93
  async getAllNormalizeFiles() {
106
94
  const files = (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllNormalizeFilePaths()))).flat();
107
95
  const flangFiles = await this.generatedServerSideSourcesProvider.getAllNormalizationFileNames();
@@ -166,5 +154,5 @@ let BuildServerBackendResourcesController = exports.BuildServerBackendResourcesC
166
154
  }
167
155
  throw new _NotFoundWebError.NotFoundWebError("File not found", false);
168
156
  }
169
- }, ((0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllGfvs", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "getAllGfvs"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllPicklists", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "getAllPicklists"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getPicklists", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, "getPicklists"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllConvertersFiles", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, "getAllConvertersFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getConverterFile", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, "getConverterFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllMergersFiles", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, "getAllMergersFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getMergerFile", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, "getMergerFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllSchemasFiles", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, "getAllSchemasFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFormSchemas", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, "getFormSchemas"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllFormPresentations", [_dec10], Object.getOwnPropertyDescriptor(_class.prototype, "getAllFormPresentations"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFormPresentations", [_dec11], Object.getOwnPropertyDescriptor(_class.prototype, "getFormPresentations"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllNormalizeFiles", [_dec12], Object.getOwnPropertyDescriptor(_class.prototype, "getAllNormalizeFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getNormalizeFile", [_dec13], Object.getOwnPropertyDescriptor(_class.prototype, "getNormalizeFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFLangNormalizeFile", [_dec14], Object.getOwnPropertyDescriptor(_class.prototype, "getFLangNormalizeFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllAttachmentPathsFileNames", [_dec15], Object.getOwnPropertyDescriptor(_class.prototype, "getAllAttachmentPathsFileNames"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAttachmentPathFile", [_dec16], Object.getOwnPropertyDescriptor(_class.prototype, "getAttachmentPathFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllUnmapFiles", [_dec17], Object.getOwnPropertyDescriptor(_class.prototype, "getAllUnmapFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getUnmapFile", [_dec18], Object.getOwnPropertyDescriptor(_class.prototype, "getUnmapFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllMapFiles", [_dec19], Object.getOwnPropertyDescriptor(_class.prototype, "getAllMapFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getMapFile", [_dec20], Object.getOwnPropertyDescriptor(_class.prototype, "getMapFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllPatchFiles", [_dec21], Object.getOwnPropertyDescriptor(_class.prototype, "getAllPatchFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getPatchFile", [_dec22], Object.getOwnPropertyDescriptor(_class.prototype, "getPatchFile"), _class.prototype)), _class));
170
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJyZXF1aXJlIiwicGF0aCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2ZzRXh0cmEiLCJfbG9kYXNoIiwiX01ldGhvZHMiLCJfTm90Rm91bmRXZWJFcnJvciIsIl9QYXJhbXMiLCJfUmVzdWx0cyIsIl9TdHJlYW1SZXN1bHRIYW5kbGVyIiwiX1NpbmdsZXRvbkNvbnRyb2xsZXIiLCJfRmFybURpcmVjdG9yeSIsIl9kZWMiLCJfZGVjMiIsIl9kZWMzIiwiX2RlYzQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2RlYzIxIiwiX2RlYzIyIiwiX2NsYXNzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzQ29udHJvbGxlciIsImV4cG9ydHMiLCJodHRwR2V0IiwiaHR0cFJldHVybiIsIkpzb24iLCJQbGFpblRleHQiLCJTdHJlYW1XaXRoTWltZSIsImh0dHBVcmxQYXJhbSIsImh0dHBUeXBlIiwiU3RyaW5nIiwiU3RyZWFtIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsImZsYW5nTm9ybWFsaXphdGlvblNvdXJjZXNQcm92aWRlciIsImdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIiLCJhbGxTY2hlbWFzRmlsZXMiLCJyZXNldEFsbFNjaGVtYUZpbGVzRGVib3VuY2VkIiwiYWxsRmFybURpcmVjdG9yaWVzIiwibWFwIiwiRmFybURpcmVjdG9yeSIsImZhcm1EaXJlY3RvcnkiLCJkZWJvdW5jZSIsInVuZGVmaW5lZCIsImdldEFsbEdmdnMiLCJQcm9taXNlIiwiYWxsIiwieCIsImZsYXQiLCJnZXRBbGxQaWNrbGlzdHMiLCJqb2luIiwiZ2V0UGlja2xpc3RzIiwicGlja2xpc3RGaWxlbmFtZSIsImFsbEZpbGVQYXRoIiwicGF0aEZpbGUiLCJwYXRoRXhpc3RzIiwiY3JlYXRlUmVhZFN0cmVhbSIsIkVycm9yIiwiZ2V0QWxsQ29udmVydGVyc0ZpbGVzIiwiZmxhdE1hcCIsImdldEFsbENvbnZlcnRlckZpbGVQYXRocyIsImJhc2VuYW1lIiwiZ2V0Q29udmVydGVyRmlsZSIsImZpbGVuYW1lIiwiZmlsZVBhdGgiLCJnZXRDb252ZXJ0ZXJGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZCIsIkZpbGVTdHJlYW1SZXN1bHQiLCJOb3RGb3VuZFdlYkVycm9yIiwiZ2V0QWxsTWVyZ2Vyc0ZpbGVzIiwiZ2V0QWxsTWVyZ2Vyc0ZpbGVQYXRocyIsImdldE1lcmdlckZpbGUiLCJnZXRNZXJnZXJzRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRBbGxTY2hlbWFzRmlsZXMiLCJnZXRBbGxTY2hlbWFzRmlsZVBhdGhzIiwiZ2V0Rm9ybVNjaGVtYXMiLCJnZXRTY2hlbWFGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZCIsImdldEFsbEZvcm1QcmVzZW50YXRpb25zIiwiZ2V0QWxsUHJlc2VudGF0aW9uc0ZpbGVOYW1lcyIsImdldEZvcm1QcmVzZW50YXRpb25zIiwiZ2Z2IiwiZ2V0UHJlc2VudGF0aW9uc0ZpbGVQYXRoQnlHZnZPclVuZGVmaW5lZCIsImdldEFsbE5vcm1hbGl6ZUZpbGVzIiwiZmlsZXMiLCJnZXRBbGxOb3JtYWxpemVGaWxlUGF0aHMiLCJmbGFuZ0ZpbGVzIiwiZ2V0QWxsTm9ybWFsaXphdGlvbkZpbGVOYW1lcyIsImdldE5vcm1hbGl6ZUZpbGUiLCJnZXROb3JtYWxpemVGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZCIsImdldEZMYW5nTm9ybWFsaXplRmlsZSIsInN0cmVhbSIsImdldE5vcm1hbGl6YXRpb25GaWxlQ29udGVudCIsIlN0cmVhbVJlc3VsdCIsImdldEFsbEF0dGFjaG1lbnRQYXRoc0ZpbGVOYW1lcyIsImdldEFsbEF0dGFjaG1lbnRQYXRoRmlsZU5hbWVzIiwiZ2V0QXR0YWNobWVudFBhdGhGaWxlIiwiZ2V0QXR0YWNobWVudFBhdGhzRmlsZUNvbnRlbnQiLCJnZXRBbGxVbm1hcEZpbGVzIiwiZ2V0QWxsVW5tYXBGaWxlUGF0aHMiLCJnZXRVbm1hcEZpbGUiLCJnZXRVbm1hcEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsTWFwRmlsZXMiLCJnZXRBbGxNYXBGaWxlUGF0aHMiLCJnZXRNYXBGaWxlIiwiZ2V0TWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRBbGxQYXRjaEZpbGVzIiwiZ2V0QWxsUGF0Y2hGaWxlUGF0aHMiLCJnZXRQYXRjaEZpbGUiLCJnZXRQYXRjaEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcjIiLCJwcm90b3R5cGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRTZXJ2ZXIvUmVzb3VyY2VzQ29udHJvbGxlcnMvQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtLCBSZWFkU3RyZWFtIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBfLCB7IGRlYm91bmNlIH0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHsgRmFybUNvbmZpZyB9IGZyb20gXCJUb29scy9zcmMvQ2FuZHlDTElcIjtcblxuaW1wb3J0IHsgaHR0cEdldCB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9NZXRob2RzXCI7XG5pbXBvcnQgeyBOb3RGb3VuZFdlYkVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL05vdEZvdW5kV2ViRXJyb3JcIjtcbmltcG9ydCB7IGh0dHBUeXBlLCBodHRwVXJsUGFyYW0gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUGFyYW1zXCI7XG5pbXBvcnQgeyBodHRwUmV0dXJuIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHNcIjtcbmltcG9ydCB7XG4gICAgRmlsZVN0cmVhbVJlc3VsdCxcbiAgICBTdHJlYW1SZXN1bHQsXG59IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9SZXN1bHRzL1N0cmVhbVJlc3VsdEhhbmRsZXJcIjtcbmltcG9ydCB7IFNpbmdsZXRvbkNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0V4cHJlc3NXcmFwcGVyL1NpbmdsZXRvbkNvbnRyb2xsZXJcIjtcblxuaW1wb3J0IHsgSUdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIgfSBmcm9tIFwiLi9JR2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlclwiO1xuaW1wb3J0IHsgRmFybURpcmVjdG9yeSB9IGZyb20gXCIuL0RpcmVjdG9yaWVzL0Zhcm1EaXJlY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkU2VydmVyQmFja2VuZFJlc291cmNlc0NvbnRyb2xsZXIgZXh0ZW5kcyBTaW5nbGV0b25Db250cm9sbGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXI6IElHZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyO1xuICAgIHByaXZhdGUgYWxsU2NoZW1hc0ZpbGVzOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNldEFsbFNjaGVtYUZpbGVzRGVib3VuY2VkOiAoKSA9PiB2b2lkO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsRmFybURpcmVjdG9yaWVzOiBGYXJtRGlyZWN0b3J5W107XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxGYXJtQ29uZmlnOiBGYXJtQ29uZmlnW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGFsbEZhcm1Db25maWc6IEZhcm1Db25maWdbXSxcbiAgICAgICAgZmxhbmdOb3JtYWxpemF0aW9uU291cmNlc1Byb3ZpZGVyOiBJR2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlclxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIgPSBmbGFuZ05vcm1hbGl6YXRpb25Tb3VyY2VzUHJvdmlkZXI7XG4gICAgICAgIHRoaXMuYWxsRmFybUNvbmZpZyA9IGFsbEZhcm1Db25maWc7XG4gICAgICAgIHRoaXMuYWxsRmFybURpcmVjdG9yaWVzID0gYWxsRmFybUNvbmZpZy5tYXAoaSA9PiBuZXcgRmFybURpcmVjdG9yeShpLmZhcm1EaXJlY3RvcnkpKTtcbiAgICAgICAgdGhpcy5yZXNldEFsbFNjaGVtYUZpbGVzRGVib3VuY2VkID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxTY2hlbWFzRmlsZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0sIDUwMDApO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL2dmdnNcIiwgaHR0cFJldHVybi5Kc29uKVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxHZnZzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcy5tYXAoeCA9PiB4LmdldEFsbEdmdnMoKSkpKS5mbGF0KCk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvcGlja2xpc3RzXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxQaWNrbGlzdHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcy5tYXAoeCA9PiB4LmdldEFsbFBpY2tsaXN0cygpKSkpLmZsYXQoKS5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFxuICAgICAgICBcIi9waWNrbGlzdHMvOnBpY2tsaXN0RmlsZW5hbWVcIixcbiAgICAgICAgaHR0cFJldHVybi5TdHJlYW1XaXRoTWltZShcImFwcGxpY2F0aW9uL2pzb25cIiksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcInBpY2tsaXN0RmlsZW5hbWVcIiwgaHR0cFR5cGUuU3RyaW5nKVxuICAgIClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0UGlja2xpc3RzKHBpY2tsaXN0RmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8UmVhZFN0cmVhbT4ge1xuICAgICAgICBjb25zdCBhbGxGaWxlUGF0aCA9IHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoaSA9PiBwYXRoLmpvaW4oaS5mYXJtRGlyZWN0b3J5LCBcInBpY2tsaXN0c1wiLCBwaWNrbGlzdEZpbGVuYW1lKSk7XG4gICAgICAgIGZvciAoY29uc3QgcGF0aEZpbGUgb2YgYWxsRmlsZVBhdGgpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKHBhdGhGaWxlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWFkU3RyZWFtKHBhdGhGaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBFcnJvcihgbm90IGZvdW5kIHBpY2tsaXN0RmlsZW5hbWUgJHtwaWNrbGlzdEZpbGVuYW1lfWApO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL2NvbnZlcnRlcnNcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbENvbnZlcnRlcnNGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbENvbnZlcnRlckZpbGVQYXRocygpKSkpXG4gICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAubWFwKHggPT4gcGF0aC5iYXNlbmFtZSh4KSlcbiAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL2NvbnZlcnRlcnMvOmZpbGVuYW1lXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJmaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRDb252ZXJ0ZXJGaWxlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBmYXJtRGlyZWN0b3J5IG9mIHRoaXMuYWxsRmFybURpcmVjdG9yaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGF3YWl0IGZhcm1EaXJlY3RvcnkuZ2V0Q29udmVydGVyRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoICE9IG51bGwgJiYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRXZWJFcnJvcihcIkZpbGUgbm90IGZvdW5kXCIsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9tZXJnZXJzXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxNZXJnZXJzRmlsZXMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcy5mbGF0TWFwKHggPT4geC5nZXRBbGxNZXJnZXJzRmlsZVBhdGhzKCkpKSlcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXRoLmJhc2VuYW1lKHgpKVxuICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbWVyZ2Vycy86ZmlsZW5hbWVcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImZpbGVuYW1lXCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldE1lcmdlckZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1EaXJlY3Rvcnkgb2YgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZmFybURpcmVjdG9yeS5nZXRNZXJnZXJzRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoICE9IG51bGwgJiYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRXZWJFcnJvcihcIkZpbGUgbm90IGZvdW5kXCIsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9zY2hlbWFzXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxTY2hlbWFzRmlsZXMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKHRoaXMuYWxsU2NoZW1hc0ZpbGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsU2NoZW1hc0ZpbGVzID0gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbFNjaGVtYXNGaWxlUGF0aHMoKSkpKVxuICAgICAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgICAgICAubWFwKHggPT4gcGF0aC5iYXNlbmFtZSh4KSlcbiAgICAgICAgICAgICAgICAuam9pbihcIlxcblwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0QWxsU2NoZW1hRmlsZXNEZWJvdW5jZWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsU2NoZW1hc0ZpbGVzO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL3NjaGVtYXMvOmZpbGVuYW1lXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJmaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtU2NoZW1hcyhmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIGZvciAoY29uc3QgZmFybURpcmVjdG9yeSBvZiB0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBhd2FpdCBmYXJtRGlyZWN0b3J5LmdldFNjaGVtYUZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCAhPSBudWxsICYmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvcHJlc2VudGF0aW9uc1wiLCBodHRwUmV0dXJuLlBsYWluVGV4dClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsRm9ybVByZXNlbnRhdGlvbnMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcy5mbGF0TWFwKHggPT4geC5nZXRBbGxQcmVzZW50YXRpb25zRmlsZU5hbWVzKCkpKSlcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXRoLmJhc2VuYW1lKHgpKVxuICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvcHJlc2VudGF0aW9ucy86Z2Z2LnByZXNlbnRhdGlvbnMuanNvblwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZ2Z2XCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldEZvcm1QcmVzZW50YXRpb25zKGdmdjogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIGZvciAoY29uc3QgZmFybURpcmVjdG9yeSBvZiB0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBhd2FpdCBmYXJtRGlyZWN0b3J5LmdldFByZXNlbnRhdGlvbnNGaWxlUGF0aEJ5R2Z2T3JVbmRlZmluZWQoZ2Z2KTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCAhPSBudWxsICYmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbm9ybWFsaXplXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxOb3JtYWxpemVGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBmaWxlcyA9IChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcy5mbGF0TWFwKHggPT4geC5nZXRBbGxOb3JtYWxpemVGaWxlUGF0aHMoKSkpKS5mbGF0KCk7XG4gICAgICAgIGNvbnN0IGZsYW5nRmlsZXMgPSBhd2FpdCB0aGlzLmdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIuZ2V0QWxsTm9ybWFsaXphdGlvbkZpbGVOYW1lcygpO1xuICAgICAgICByZXR1cm4gWy4uLmZpbGVzLm1hcCh4ID0+IHBhdGguYmFzZW5hbWUoeCkpLCAuLi5mbGFuZ0ZpbGVzXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL25vcm1hbGl6ZS86Z2Z2LnhtbFwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZ2Z2XCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldE5vcm1hbGl6ZUZpbGUoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBmYXJtRGlyZWN0b3J5IG9mIHRoaXMuYWxsRmFybURpcmVjdG9yaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGF3YWl0IGZhcm1EaXJlY3RvcnkuZ2V0Tm9ybWFsaXplRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoYCR7Z2Z2fS54bWxgKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCAhPSBudWxsICYmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbm9ybWFsaXplLzpnZnYubm9ybWFsaXplXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJnZnZcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RkxhbmdOb3JtYWxpemVGaWxlKGdmdjogc3RyaW5nKTogUHJvbWlzZTxTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgdGhpcy5nZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyLmdldE5vcm1hbGl6YXRpb25GaWxlQ29udGVudChnZnYpO1xuICAgICAgICBpZiAoc3RyZWFtID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RGb3VuZFdlYkVycm9yKFwiRmlsZSBub3QgZm91bmRcIiwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1SZXN1bHQoc3RyZWFtKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9hdHRhY2htZW50cGF0aHNcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEF0dGFjaG1lbnRQYXRoc0ZpbGVOYW1lcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBmbGFuZ0ZpbGVzID0gYXdhaXQgdGhpcy5nZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyLmdldEFsbEF0dGFjaG1lbnRQYXRoRmlsZU5hbWVzKCk7XG4gICAgICAgIHJldHVybiBmbGFuZ0ZpbGVzLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvYXR0YWNobWVudHBhdGhzLzpnZnYuanNvblwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZ2Z2XCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldEF0dGFjaG1lbnRQYXRoRmlsZShnZnY6IHN0cmluZyk6IFByb21pc2U8U3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtUmVzdWx0KGF3YWl0IHRoaXMuZ2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlci5nZXRBdHRhY2htZW50UGF0aHNGaWxlQ29udGVudChnZnYpKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi91bm1hcFwiLCBodHRwUmV0dXJuLlBsYWluVGV4dClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsVW5tYXBGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbFVubWFwRmlsZVBhdGhzKCkpKSlcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXRoLmJhc2VuYW1lKHgpKVxuICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvdW5tYXAvOmZpbGVuYW1lXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJmaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRVbm1hcEZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1EaXJlY3Rvcnkgb2YgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZmFybURpcmVjdG9yeS5nZXRVbm1hcEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCAhPSBudWxsICYmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbWFwXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxNYXBGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbE1hcEZpbGVQYXRocygpKSkpXG4gICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAubWFwKHggPT4gcGF0aC5iYXNlbmFtZSh4KSlcbiAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL21hcC86ZmlsZW5hbWVcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImZpbGVuYW1lXCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldE1hcEZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1EaXJlY3Rvcnkgb2YgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZmFybURpcmVjdG9yeS5nZXRNYXBGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGggIT0gbnVsbCAmJiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3RyZWFtUmVzdWx0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBOb3RGb3VuZFdlYkVycm9yKFwiRmlsZSBub3QgZm91bmRcIiwgZmFsc2UpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL3BhdGNoXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxQYXRjaEZpbGVzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMuZmxhdE1hcCh4ID0+IHguZ2V0QWxsUGF0Y2hGaWxlUGF0aHMoKSkpKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhdGguYmFzZW5hbWUoeCkpXG4gICAgICAgICAgICAuam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9wYXRjaC86ZmlsZW5hbWVcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImdmdlwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXRjaEZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1EaXJlY3Rvcnkgb2YgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZmFybURpcmVjdG9yeS5nZXRQYXRjaEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCAhPSBudWxsICYmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLEdBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLElBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUdBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGlCQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxRQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxvQkFBQSxHQUFBVCxPQUFBO0FBSUEsSUFBQVUsb0JBQUEsR0FBQVYsT0FBQTtBQUdBLElBQUFXLGNBQUEsR0FBQVgsT0FBQTtBQUE0RCxJQUFBWSxJQUFBLEVBQUFDLEtBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsS0FBQSxFQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsTUFBQSxF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QSx1QkFBQWhJLEtBQUEsR0FBQStCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSx1QkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSx5QkFBQS9ILEtBQUEsR0FBQThCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSx5QkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSxvQkFBQTlILEtBQUEsR0FBQTZCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSxvQkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSx5QkFBQTdILEtBQUEsR0FBQTRCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSx5QkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSxxQkFBQTVILEtBQUEsR0FBQTJCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSxxQkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSw4QkFBQTNILE1BQUEsR0FBQTBCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSw4QkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSwyQkFBQTFILE1BQUEsR0FBQXlCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSwyQkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSwyQkFBQXpILE1BQUEsR0FBQXdCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSwyQkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSx1QkFBQXhILE1BQUEsR0FBQXVCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSx1QkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSw0QkFBQXZILE1BQUEsR0FBQXNCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSw0QkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSxxQ0FBQXRILE1BQUEsR0FBQXFCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSxxQ0FBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSw0QkFBQXJILE1BQUEsR0FBQW9CLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSw0QkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSx1QkFBQXBILE1BQUEsR0FBQW1CLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSx1QkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSxtQkFBQW5ILE1BQUEsR0FBQWtCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSxtQkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSxxQkFBQWxILE1BQUEsR0FBQWlCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSxxQkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSxpQkFBQWpILE1BQUEsR0FBQWdCLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBOEcsU0FBQSxpQkFBQTlHLE1BQUEsQ0FBQThHLFNBQUEsT0FBQUQsMEJBQUEsQ0FBQXRHLE9BQUEsRUFBQVAsTUFBQSxDQUFBOEcsU0FBQSx1QkFBQWhILE1BQUEsR0FBQWUsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUE4RyxTQUFBLHVCQUFBOUcsTUFBQSxDQUFBOEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBdEcsT0FBQSxFQUFBUCxNQUFBLENBQUE4RyxTQUFBLG1CQUFBL0csTUFBQSxHQUFBYyxNQUFBLENBQUFFLHdCQUFBLENBQUFmLE1BQUEsQ0FBQThHLFNBQUEsbUJBQUE5RyxNQUFBLENBQUE4RyxTQUFBLElBQUE5RyxNQUFBIiwiaWdub3JlTGlzdCI6W119
157
+ }, ((0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllGfvs", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "getAllGfvs"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllPicklists", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "getAllPicklists"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getPicklists", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, "getPicklists"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllConvertersFiles", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, "getAllConvertersFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getConverterFile", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, "getConverterFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllMergersFiles", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, "getAllMergersFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getMergerFile", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, "getMergerFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllSchemasFiles", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, "getAllSchemasFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFormSchemas", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, "getFormSchemas"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllNormalizeFiles", [_dec10], Object.getOwnPropertyDescriptor(_class.prototype, "getAllNormalizeFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getNormalizeFile", [_dec11], Object.getOwnPropertyDescriptor(_class.prototype, "getNormalizeFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFLangNormalizeFile", [_dec12], Object.getOwnPropertyDescriptor(_class.prototype, "getFLangNormalizeFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllAttachmentPathsFileNames", [_dec13], Object.getOwnPropertyDescriptor(_class.prototype, "getAllAttachmentPathsFileNames"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAttachmentPathFile", [_dec14], Object.getOwnPropertyDescriptor(_class.prototype, "getAttachmentPathFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllUnmapFiles", [_dec15], Object.getOwnPropertyDescriptor(_class.prototype, "getAllUnmapFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getUnmapFile", [_dec16], Object.getOwnPropertyDescriptor(_class.prototype, "getUnmapFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllMapFiles", [_dec17], Object.getOwnPropertyDescriptor(_class.prototype, "getAllMapFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getMapFile", [_dec18], Object.getOwnPropertyDescriptor(_class.prototype, "getMapFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllPatchFiles", [_dec19], Object.getOwnPropertyDescriptor(_class.prototype, "getAllPatchFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getPatchFile", [_dec20], Object.getOwnPropertyDescriptor(_class.prototype, "getPatchFile"), _class.prototype)), _class));
158
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJyZXF1aXJlIiwicGF0aCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2ZzRXh0cmEiLCJfbG9kYXNoIiwiX01ldGhvZHMiLCJfTm90Rm91bmRXZWJFcnJvciIsIl9QYXJhbXMiLCJfUmVzdWx0cyIsIl9TdHJlYW1SZXN1bHRIYW5kbGVyIiwiX1NpbmdsZXRvbkNvbnRyb2xsZXIiLCJfRmFybURpcmVjdG9yeSIsIl9kZWMiLCJfZGVjMiIsIl9kZWMzIiwiX2RlYzQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2NsYXNzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzQ29udHJvbGxlciIsImV4cG9ydHMiLCJodHRwR2V0IiwiaHR0cFJldHVybiIsIkpzb24iLCJQbGFpblRleHQiLCJTdHJlYW1XaXRoTWltZSIsImh0dHBVcmxQYXJhbSIsImh0dHBUeXBlIiwiU3RyaW5nIiwiU3RyZWFtIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsImZsYW5nTm9ybWFsaXphdGlvblNvdXJjZXNQcm92aWRlciIsImdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIiLCJhbGxTY2hlbWFzRmlsZXMiLCJyZXNldEFsbFNjaGVtYUZpbGVzRGVib3VuY2VkIiwiYWxsRmFybURpcmVjdG9yaWVzIiwibWFwIiwiRmFybURpcmVjdG9yeSIsImZhcm1EaXJlY3RvcnkiLCJkZWJvdW5jZSIsInVuZGVmaW5lZCIsImdldEFsbEdmdnMiLCJQcm9taXNlIiwiYWxsIiwieCIsImZsYXQiLCJnZXRBbGxQaWNrbGlzdHMiLCJqb2luIiwiZ2V0UGlja2xpc3RzIiwicGlja2xpc3RGaWxlbmFtZSIsImFsbEZpbGVQYXRoIiwicGF0aEZpbGUiLCJwYXRoRXhpc3RzIiwiY3JlYXRlUmVhZFN0cmVhbSIsIkVycm9yIiwiZ2V0QWxsQ29udmVydGVyc0ZpbGVzIiwiZmxhdE1hcCIsImdldEFsbENvbnZlcnRlckZpbGVQYXRocyIsImJhc2VuYW1lIiwiZ2V0Q29udmVydGVyRmlsZSIsImZpbGVuYW1lIiwiZmlsZVBhdGgiLCJnZXRDb252ZXJ0ZXJGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZCIsIkZpbGVTdHJlYW1SZXN1bHQiLCJOb3RGb3VuZFdlYkVycm9yIiwiZ2V0QWxsTWVyZ2Vyc0ZpbGVzIiwiZ2V0QWxsTWVyZ2Vyc0ZpbGVQYXRocyIsImdldE1lcmdlckZpbGUiLCJnZXRNZXJnZXJzRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRBbGxTY2hlbWFzRmlsZXMiLCJnZXRBbGxTY2hlbWFzRmlsZVBhdGhzIiwiZ2V0Rm9ybVNjaGVtYXMiLCJnZXRTY2hlbWFGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZCIsImdldEFsbE5vcm1hbGl6ZUZpbGVzIiwiZmlsZXMiLCJnZXRBbGxOb3JtYWxpemVGaWxlUGF0aHMiLCJmbGFuZ0ZpbGVzIiwiZ2V0QWxsTm9ybWFsaXphdGlvbkZpbGVOYW1lcyIsImdldE5vcm1hbGl6ZUZpbGUiLCJnZnYiLCJnZXROb3JtYWxpemVGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZCIsImdldEZMYW5nTm9ybWFsaXplRmlsZSIsInN0cmVhbSIsImdldE5vcm1hbGl6YXRpb25GaWxlQ29udGVudCIsIlN0cmVhbVJlc3VsdCIsImdldEFsbEF0dGFjaG1lbnRQYXRoc0ZpbGVOYW1lcyIsImdldEFsbEF0dGFjaG1lbnRQYXRoRmlsZU5hbWVzIiwiZ2V0QXR0YWNobWVudFBhdGhGaWxlIiwiZ2V0QXR0YWNobWVudFBhdGhzRmlsZUNvbnRlbnQiLCJnZXRBbGxVbm1hcEZpbGVzIiwiZ2V0QWxsVW5tYXBGaWxlUGF0aHMiLCJnZXRVbm1hcEZpbGUiLCJnZXRVbm1hcEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsTWFwRmlsZXMiLCJnZXRBbGxNYXBGaWxlUGF0aHMiLCJnZXRNYXBGaWxlIiwiZ2V0TWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRBbGxQYXRjaEZpbGVzIiwiZ2V0QWxsUGF0Y2hGaWxlUGF0aHMiLCJnZXRQYXRjaEZpbGUiLCJnZXRQYXRjaEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcjIiLCJwcm90b3R5cGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRTZXJ2ZXIvUmVzb3VyY2VzQ29udHJvbGxlcnMvQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtLCBSZWFkU3RyZWFtIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBfLCB7IGRlYm91bmNlIH0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHsgRmFybUNvbmZpZyB9IGZyb20gXCJUb29scy9zcmMvQ2FuZHlDTElcIjtcblxuaW1wb3J0IHsgaHR0cEdldCB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9NZXRob2RzXCI7XG5pbXBvcnQgeyBOb3RGb3VuZFdlYkVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL05vdEZvdW5kV2ViRXJyb3JcIjtcbmltcG9ydCB7IGh0dHBUeXBlLCBodHRwVXJsUGFyYW0gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUGFyYW1zXCI7XG5pbXBvcnQgeyBodHRwUmV0dXJuIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHNcIjtcbmltcG9ydCB7XG4gICAgRmlsZVN0cmVhbVJlc3VsdCxcbiAgICBTdHJlYW1SZXN1bHQsXG59IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9SZXN1bHRzL1N0cmVhbVJlc3VsdEhhbmRsZXJcIjtcbmltcG9ydCB7IFNpbmdsZXRvbkNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0V4cHJlc3NXcmFwcGVyL1NpbmdsZXRvbkNvbnRyb2xsZXJcIjtcblxuaW1wb3J0IHsgSUdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIgfSBmcm9tIFwiLi9JR2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlclwiO1xuaW1wb3J0IHsgRmFybURpcmVjdG9yeSB9IGZyb20gXCIuL0RpcmVjdG9yaWVzL0Zhcm1EaXJlY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkU2VydmVyQmFja2VuZFJlc291cmNlc0NvbnRyb2xsZXIgZXh0ZW5kcyBTaW5nbGV0b25Db250cm9sbGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXI6IElHZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyO1xuICAgIHByaXZhdGUgYWxsU2NoZW1hc0ZpbGVzOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNldEFsbFNjaGVtYUZpbGVzRGVib3VuY2VkOiAoKSA9PiB2b2lkO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsRmFybURpcmVjdG9yaWVzOiBGYXJtRGlyZWN0b3J5W107XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxGYXJtQ29uZmlnOiBGYXJtQ29uZmlnW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGFsbEZhcm1Db25maWc6IEZhcm1Db25maWdbXSxcbiAgICAgICAgZmxhbmdOb3JtYWxpemF0aW9uU291cmNlc1Byb3ZpZGVyOiBJR2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlclxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIgPSBmbGFuZ05vcm1hbGl6YXRpb25Tb3VyY2VzUHJvdmlkZXI7XG4gICAgICAgIHRoaXMuYWxsRmFybUNvbmZpZyA9IGFsbEZhcm1Db25maWc7XG4gICAgICAgIHRoaXMuYWxsRmFybURpcmVjdG9yaWVzID0gYWxsRmFybUNvbmZpZy5tYXAoaSA9PiBuZXcgRmFybURpcmVjdG9yeShpLmZhcm1EaXJlY3RvcnkpKTtcbiAgICAgICAgdGhpcy5yZXNldEFsbFNjaGVtYUZpbGVzRGVib3VuY2VkID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxTY2hlbWFzRmlsZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0sIDUwMDApO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL2dmdnNcIiwgaHR0cFJldHVybi5Kc29uKVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxHZnZzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcy5tYXAoeCA9PiB4LmdldEFsbEdmdnMoKSkpKS5mbGF0KCk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvcGlja2xpc3RzXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxQaWNrbGlzdHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcy5tYXAoeCA9PiB4LmdldEFsbFBpY2tsaXN0cygpKSkpLmZsYXQoKS5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFxuICAgICAgICBcIi9waWNrbGlzdHMvOnBpY2tsaXN0RmlsZW5hbWVcIixcbiAgICAgICAgaHR0cFJldHVybi5TdHJlYW1XaXRoTWltZShcImFwcGxpY2F0aW9uL2pzb25cIiksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcInBpY2tsaXN0RmlsZW5hbWVcIiwgaHR0cFR5cGUuU3RyaW5nKVxuICAgIClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0UGlja2xpc3RzKHBpY2tsaXN0RmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8UmVhZFN0cmVhbT4ge1xuICAgICAgICBjb25zdCBhbGxGaWxlUGF0aCA9IHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoaSA9PiBwYXRoLmpvaW4oaS5mYXJtRGlyZWN0b3J5LCBcInBpY2tsaXN0c1wiLCBwaWNrbGlzdEZpbGVuYW1lKSk7XG4gICAgICAgIGZvciAoY29uc3QgcGF0aEZpbGUgb2YgYWxsRmlsZVBhdGgpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKHBhdGhGaWxlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWFkU3RyZWFtKHBhdGhGaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBFcnJvcihgbm90IGZvdW5kIHBpY2tsaXN0RmlsZW5hbWUgJHtwaWNrbGlzdEZpbGVuYW1lfWApO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL2NvbnZlcnRlcnNcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbENvbnZlcnRlcnNGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbENvbnZlcnRlckZpbGVQYXRocygpKSkpXG4gICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAubWFwKHggPT4gcGF0aC5iYXNlbmFtZSh4KSlcbiAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL2NvbnZlcnRlcnMvOmZpbGVuYW1lXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJmaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRDb252ZXJ0ZXJGaWxlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBmYXJtRGlyZWN0b3J5IG9mIHRoaXMuYWxsRmFybURpcmVjdG9yaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGF3YWl0IGZhcm1EaXJlY3RvcnkuZ2V0Q29udmVydGVyRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoICE9IG51bGwgJiYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRXZWJFcnJvcihcIkZpbGUgbm90IGZvdW5kXCIsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9tZXJnZXJzXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxNZXJnZXJzRmlsZXMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcy5mbGF0TWFwKHggPT4geC5nZXRBbGxNZXJnZXJzRmlsZVBhdGhzKCkpKSlcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXRoLmJhc2VuYW1lKHgpKVxuICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbWVyZ2Vycy86ZmlsZW5hbWVcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImZpbGVuYW1lXCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldE1lcmdlckZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1EaXJlY3Rvcnkgb2YgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZmFybURpcmVjdG9yeS5nZXRNZXJnZXJzRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoICE9IG51bGwgJiYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRXZWJFcnJvcihcIkZpbGUgbm90IGZvdW5kXCIsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9zY2hlbWFzXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxTY2hlbWFzRmlsZXMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKHRoaXMuYWxsU2NoZW1hc0ZpbGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsU2NoZW1hc0ZpbGVzID0gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbFNjaGVtYXNGaWxlUGF0aHMoKSkpKVxuICAgICAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgICAgICAubWFwKHggPT4gcGF0aC5iYXNlbmFtZSh4KSlcbiAgICAgICAgICAgICAgICAuam9pbihcIlxcblwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0QWxsU2NoZW1hRmlsZXNEZWJvdW5jZWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsU2NoZW1hc0ZpbGVzO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL3NjaGVtYXMvOmZpbGVuYW1lXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJmaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtU2NoZW1hcyhmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIGZvciAoY29uc3QgZmFybURpcmVjdG9yeSBvZiB0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBhd2FpdCBmYXJtRGlyZWN0b3J5LmdldFNjaGVtYUZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCAhPSBudWxsICYmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbm9ybWFsaXplXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxOb3JtYWxpemVGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBmaWxlcyA9IChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcy5mbGF0TWFwKHggPT4geC5nZXRBbGxOb3JtYWxpemVGaWxlUGF0aHMoKSkpKS5mbGF0KCk7XG4gICAgICAgIGNvbnN0IGZsYW5nRmlsZXMgPSBhd2FpdCB0aGlzLmdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIuZ2V0QWxsTm9ybWFsaXphdGlvbkZpbGVOYW1lcygpO1xuICAgICAgICByZXR1cm4gWy4uLmZpbGVzLm1hcCh4ID0+IHBhdGguYmFzZW5hbWUoeCkpLCAuLi5mbGFuZ0ZpbGVzXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL25vcm1hbGl6ZS86Z2Z2LnhtbFwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZ2Z2XCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldE5vcm1hbGl6ZUZpbGUoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBmYXJtRGlyZWN0b3J5IG9mIHRoaXMuYWxsRmFybURpcmVjdG9yaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGF3YWl0IGZhcm1EaXJlY3RvcnkuZ2V0Tm9ybWFsaXplRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoYCR7Z2Z2fS54bWxgKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCAhPSBudWxsICYmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbm9ybWFsaXplLzpnZnYubm9ybWFsaXplXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJnZnZcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RkxhbmdOb3JtYWxpemVGaWxlKGdmdjogc3RyaW5nKTogUHJvbWlzZTxTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgdGhpcy5nZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyLmdldE5vcm1hbGl6YXRpb25GaWxlQ29udGVudChnZnYpO1xuICAgICAgICBpZiAoc3RyZWFtID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RGb3VuZFdlYkVycm9yKFwiRmlsZSBub3QgZm91bmRcIiwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1SZXN1bHQoc3RyZWFtKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9hdHRhY2htZW50cGF0aHNcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEF0dGFjaG1lbnRQYXRoc0ZpbGVOYW1lcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBmbGFuZ0ZpbGVzID0gYXdhaXQgdGhpcy5nZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyLmdldEFsbEF0dGFjaG1lbnRQYXRoRmlsZU5hbWVzKCk7XG4gICAgICAgIHJldHVybiBmbGFuZ0ZpbGVzLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvYXR0YWNobWVudHBhdGhzLzpnZnYuanNvblwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZ2Z2XCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldEF0dGFjaG1lbnRQYXRoRmlsZShnZnY6IHN0cmluZyk6IFByb21pc2U8U3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtUmVzdWx0KGF3YWl0IHRoaXMuZ2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlci5nZXRBdHRhY2htZW50UGF0aHNGaWxlQ29udGVudChnZnYpKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi91bm1hcFwiLCBodHRwUmV0dXJuLlBsYWluVGV4dClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsVW5tYXBGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbFVubWFwRmlsZVBhdGhzKCkpKSlcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXRoLmJhc2VuYW1lKHgpKVxuICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvdW5tYXAvOmZpbGVuYW1lXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJmaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRVbm1hcEZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1EaXJlY3Rvcnkgb2YgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZmFybURpcmVjdG9yeS5nZXRVbm1hcEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCAhPSBudWxsICYmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbWFwXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxNYXBGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbE1hcEZpbGVQYXRocygpKSkpXG4gICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAubWFwKHggPT4gcGF0aC5iYXNlbmFtZSh4KSlcbiAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL21hcC86ZmlsZW5hbWVcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImZpbGVuYW1lXCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldE1hcEZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1EaXJlY3Rvcnkgb2YgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZmFybURpcmVjdG9yeS5nZXRNYXBGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGggIT0gbnVsbCAmJiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3RyZWFtUmVzdWx0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBOb3RGb3VuZFdlYkVycm9yKFwiRmlsZSBub3QgZm91bmRcIiwgZmFsc2UpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL3BhdGNoXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxQYXRjaEZpbGVzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMuZmxhdE1hcCh4ID0+IHguZ2V0QWxsUGF0Y2hGaWxlUGF0aHMoKSkpKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhdGguYmFzZW5hbWUoeCkpXG4gICAgICAgICAgICAuam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9wYXRjaC86ZmlsZW5hbWVcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImdmdlwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXRjaEZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1EaXJlY3Rvcnkgb2YgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZmFybURpcmVjdG9yeS5nZXRQYXRjaEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCAhPSBudWxsICYmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLEdBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLElBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUdBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGlCQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxRQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxvQkFBQSxHQUFBVCxPQUFBO0FBSUEsSUFBQVUsb0JBQUEsR0FBQVYsT0FBQTtBQUdBLElBQUFXLGNBQUEsR0FBQVgsT0FBQTtBQUE0RCxJQUFBWSxJQUFBLEVBQUFDLEtBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsS0FBQSxFQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsTUFBQSxFQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsTUFBQSxFQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsTUFBQSxFQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsTUFBQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9B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RCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLHlCQUFBekgsS0FBQSxHQUFBNEIsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLHlCQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLG9CQUFBeEgsS0FBQSxHQUFBMkIsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLG9CQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLHlCQUFBdkgsS0FBQSxHQUFBMEIsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLHlCQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLHFCQUFBdEgsS0FBQSxHQUFBeUIsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLHFCQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLDJCQUFBckgsTUFBQSxHQUFBd0IsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLDJCQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLHVCQUFBcEgsTUFBQSxHQUFBdUIsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLHVCQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLDRCQUFBbkgsTUFBQSxHQUFBc0IsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLDRCQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLHFDQUFBbEgsTUFBQSxHQUFBcUIsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLHFDQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLDRCQUFBakgsTUFBQSxHQUFBb0IsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLDRCQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLHVCQUFBaEgsTUFBQSxHQUFBbUIsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLHVCQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLG1CQUFBL0csTUFBQSxHQUFBa0IsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLG1CQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLHFCQUFBOUcsTUFBQSxHQUFBaUIsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLHFCQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLGlCQUFBN0csTUFBQSxHQUFBZ0IsTUFBQSxDQUFBRSx3QkFBQSxDQUFBZixNQUFBLENBQUEwRyxTQUFBLGlCQUFBMUcsTUFBQSxDQUFBMEcsU0FBQSxPQUFBRCwwQkFBQSxDQUFBbEcsT0FBQSxFQUFBUCxNQUFBLENBQUEwRyxTQUFBLHVCQUFBNUcsTUFBQSxHQUFBZSxNQUFBLENBQUFFLHdCQUFBLENBQUFmLE1BQUEsQ0FBQTBHLFNBQUEsdUJBQUExRyxNQUFBLENBQUEwRyxTQUFBLE9BQUFELDBCQUFBLENBQUFsRyxPQUFBLEVBQUFQLE1BQUEsQ0FBQTBHLFNBQUEsbUJBQUEzRyxNQUFBLEdBQUFjLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWYsTUFBQSxDQUFBMEcsU0FBQSxtQkFBQTFHLE1BQUEsQ0FBQTBHLFNBQUEsSUFBQTFHLE1BQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"BuildServerBackendResourcesController.js","names":["_fs","require","path","_interopRequireWildcard","_fsExtra","_lodash","_Methods","_NotFoundWebError","_Params","_Results","_StreamResultHandler","_SingletonController","_FarmDirectory","_dec","_dec2","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec10","_dec11","_dec12","_dec13","_dec14","_dec15","_dec16","_dec17","_dec18","_dec19","_dec20","_dec21","_dec22","_class","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","BuildServerBackendResourcesController","exports","httpGet","httpReturn","Json","PlainText","StreamWithMime","httpUrlParam","httpType","String","Stream","SingletonController","constructor","allFarmConfig","flangNormalizationSourcesProvider","generatedServerSideSourcesProvider","allSchemasFiles","resetAllSchemaFilesDebounced","allFarmDirectories","map","FarmDirectory","farmDirectory","debounce","undefined","getAllGfvs","Promise","all","x","flat","getAllPicklists","join","getPicklists","picklistFilename","allFilePath","pathFile","pathExists","createReadStream","Error","getAllConvertersFiles","flatMap","getAllConverterFilePaths","basename","getConverterFile","filename","filePath","getConverterFilePathByFileNameOrUndefined","FileStreamResult","NotFoundWebError","getAllMergersFiles","getAllMergersFilePaths","getMergerFile","getMergersFilePathByFileNameOrUndefined","getAllSchemasFiles","getAllSchemasFilePaths","getFormSchemas","getSchemaFilePathByFileNameOrUndefined","getAllFormPresentations","getAllPresentationsFileNames","getFormPresentations","gfv","getPresentationsFilePathByGfvOrUndefined","getAllNormalizeFiles","files","getAllNormalizeFilePaths","flangFiles","getAllNormalizationFileNames","getNormalizeFile","getNormalizeFilePathByFileNameOrUndefined","getFLangNormalizeFile","stream","getNormalizationFileContent","StreamResult","getAllAttachmentPathsFileNames","getAllAttachmentPathFileNames","getAttachmentPathFile","getAttachmentPathsFileContent","getAllUnmapFiles","getAllUnmapFilePaths","getUnmapFile","getUnmapFilePathByFileNameOrUndefined","getAllMapFiles","getAllMapFilePaths","getMapFile","getMapFilePathByFileNameOrUndefined","getAllPatchFiles","getAllPatchFilePaths","getPatchFile","getPatchFilePathByFileNameOrUndefined","_applyDecoratedDescriptor2","prototype"],"sources":["../../../../../../src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.ts"],"sourcesContent":["import { createReadStream, ReadStream } from \"fs\";\nimport * as path from \"path\";\n\nimport { pathExists } from \"fs-extra\";\nimport _, { debounce } from \"lodash\";\nimport { FarmConfig } from \"Tools/src/CandyCLI\";\n\nimport { httpGet } from \"../../../Commons/HttpServer/AttributeRouting/Methods\";\nimport { NotFoundWebError } from \"../../../Commons/HttpServer/AttributeRouting/NotFoundWebError\";\nimport { httpType, httpUrlParam } from \"../../../Commons/HttpServer/AttributeRouting/Params\";\nimport { httpReturn } from \"../../../Commons/HttpServer/AttributeRouting/Results\";\nimport {\n FileStreamResult,\n StreamResult,\n} from \"../../../Commons/HttpServer/AttributeRouting/Results/StreamResultHandler\";\nimport { SingletonController } from \"../../../Commons/HttpServer/ExpressWrapper/SingletonController\";\n\nimport { IGeneratedServerSideSourcesProvider } from \"./IGeneratedServerSideSourcesProvider\";\nimport { FarmDirectory } from \"./Directories/FarmDirectory\";\n\nexport class BuildServerBackendResourcesController extends SingletonController {\n private readonly generatedServerSideSourcesProvider: IGeneratedServerSideSourcesProvider;\n private allSchemasFiles: undefined | string;\n private readonly resetAllSchemaFilesDebounced: () => void;\n private readonly allFarmDirectories: FarmDirectory[];\n private readonly allFarmConfig: FarmConfig[];\n\n public constructor(\n allFarmConfig: FarmConfig[],\n flangNormalizationSourcesProvider: IGeneratedServerSideSourcesProvider\n ) {\n super();\n this.generatedServerSideSourcesProvider = flangNormalizationSourcesProvider;\n this.allFarmConfig = allFarmConfig;\n this.allFarmDirectories = allFarmConfig.map(i => new FarmDirectory(i.farmDirectory));\n this.resetAllSchemaFilesDebounced = debounce(() => {\n this.allSchemasFiles = undefined;\n }, 5000);\n }\n\n @httpGet(\"/gfvs\", httpReturn.Json)\n public async getAllGfvs(): Promise<string[]> {\n return (await Promise.all(this.allFarmDirectories.map(x => x.getAllGfvs()))).flat();\n }\n\n @httpGet(\"/picklists\", httpReturn.PlainText)\n public async getAllPicklists(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.map(x => x.getAllPicklists()))).flat().join(\"\\n\");\n }\n\n @httpGet(\n \"/picklists/:picklistFilename\",\n httpReturn.StreamWithMime(\"application/json\"),\n httpUrlParam(\"picklistFilename\", httpType.String)\n )\n public async getPicklists(picklistFilename: string): Promise<ReadStream> {\n const allFilePath = this.allFarmConfig.map(i => path.join(i.farmDirectory, \"picklists\", picklistFilename));\n for (const pathFile of allFilePath) {\n if (await pathExists(pathFile)) {\n return createReadStream(pathFile);\n }\n }\n throw Error(`not found picklistFilename ${picklistFilename}`);\n }\n\n @httpGet(\"/converters\", httpReturn.PlainText)\n public async getAllConvertersFiles(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllConverterFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n\n @httpGet(\"/converters/:filename\", httpReturn.Stream, httpUrlParam(\"filename\", httpType.String))\n public async getConverterFile(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getConverterFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/mergers\", httpReturn.PlainText)\n public async getAllMergersFiles(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllMergersFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n\n @httpGet(\"/mergers/:filename\", httpReturn.Stream, httpUrlParam(\"filename\", httpType.String))\n public async getMergerFile(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getMergersFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/schemas\", httpReturn.PlainText)\n public async getAllSchemasFiles(): Promise<string> {\n if (this.allSchemasFiles === undefined) {\n this.allSchemasFiles = (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllSchemasFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n this.resetAllSchemaFilesDebounced();\n return this.allSchemasFiles;\n }\n\n @httpGet(\"/schemas/:filename\", httpReturn.Stream, httpUrlParam(\"filename\", httpType.String))\n public async getFormSchemas(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getSchemaFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/presentations\", httpReturn.PlainText)\n public async getAllFormPresentations(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllPresentationsFileNames())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n\n @httpGet(\"/presentations/:gfv.presentations.json\", httpReturn.Stream, httpUrlParam(\"gfv\", httpType.String))\n public async getFormPresentations(gfv: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getPresentationsFilePathByGfvOrUndefined(gfv);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/normalize\", httpReturn.PlainText)\n public async getAllNormalizeFiles(): Promise<string> {\n const files = (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllNormalizeFilePaths()))).flat();\n const flangFiles = await this.generatedServerSideSourcesProvider.getAllNormalizationFileNames();\n return [...files.map(x => path.basename(x)), ...flangFiles].join(\"\\n\");\n }\n\n @httpGet(\"/normalize/:gfv.xml\", httpReturn.Stream, httpUrlParam(\"gfv\", httpType.String))\n public async getNormalizeFile(gfv: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getNormalizeFilePathByFileNameOrUndefined(`${gfv}.xml`);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/normalize/:gfv.normalize\", httpReturn.Stream, httpUrlParam(\"gfv\", httpType.String))\n public async getFLangNormalizeFile(gfv: string): Promise<StreamResult> {\n const stream = await this.generatedServerSideSourcesProvider.getNormalizationFileContent(gfv);\n if (stream == null) {\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n return new StreamResult(stream);\n }\n\n @httpGet(\"/attachmentpaths\", httpReturn.PlainText)\n public async getAllAttachmentPathsFileNames(): Promise<string> {\n const flangFiles = await this.generatedServerSideSourcesProvider.getAllAttachmentPathFileNames();\n return flangFiles.join(\"\\n\");\n }\n\n @httpGet(\"/attachmentpaths/:gfv.json\", httpReturn.Stream, httpUrlParam(\"gfv\", httpType.String))\n public async getAttachmentPathFile(gfv: string): Promise<StreamResult> {\n return new StreamResult(await this.generatedServerSideSourcesProvider.getAttachmentPathsFileContent(gfv));\n }\n\n @httpGet(\"/unmap\", httpReturn.PlainText)\n public async getAllUnmapFiles(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllUnmapFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n\n @httpGet(\"/unmap/:filename\", httpReturn.Stream, httpUrlParam(\"filename\", httpType.String))\n public async getUnmapFile(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getUnmapFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/map\", httpReturn.PlainText)\n public async getAllMapFiles(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllMapFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n\n @httpGet(\"/map/:filename\", httpReturn.Stream, httpUrlParam(\"filename\", httpType.String))\n public async getMapFile(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getMapFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/patch\", httpReturn.PlainText)\n public async getAllPatchFiles(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllPatchFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n\n @httpGet(\"/patch/:filename\", httpReturn.Stream, httpUrlParam(\"gfv\", httpType.String))\n public async getPatchFile(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getPatchFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BuildServerBackendResourcesController.js","names":["_fs","require","path","_interopRequireWildcard","_fsExtra","_lodash","_Methods","_NotFoundWebError","_Params","_Results","_StreamResultHandler","_SingletonController","_FarmDirectory","_dec","_dec2","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec10","_dec11","_dec12","_dec13","_dec14","_dec15","_dec16","_dec17","_dec18","_dec19","_dec20","_class","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","BuildServerBackendResourcesController","exports","httpGet","httpReturn","Json","PlainText","StreamWithMime","httpUrlParam","httpType","String","Stream","SingletonController","constructor","allFarmConfig","flangNormalizationSourcesProvider","generatedServerSideSourcesProvider","allSchemasFiles","resetAllSchemaFilesDebounced","allFarmDirectories","map","FarmDirectory","farmDirectory","debounce","undefined","getAllGfvs","Promise","all","x","flat","getAllPicklists","join","getPicklists","picklistFilename","allFilePath","pathFile","pathExists","createReadStream","Error","getAllConvertersFiles","flatMap","getAllConverterFilePaths","basename","getConverterFile","filename","filePath","getConverterFilePathByFileNameOrUndefined","FileStreamResult","NotFoundWebError","getAllMergersFiles","getAllMergersFilePaths","getMergerFile","getMergersFilePathByFileNameOrUndefined","getAllSchemasFiles","getAllSchemasFilePaths","getFormSchemas","getSchemaFilePathByFileNameOrUndefined","getAllNormalizeFiles","files","getAllNormalizeFilePaths","flangFiles","getAllNormalizationFileNames","getNormalizeFile","gfv","getNormalizeFilePathByFileNameOrUndefined","getFLangNormalizeFile","stream","getNormalizationFileContent","StreamResult","getAllAttachmentPathsFileNames","getAllAttachmentPathFileNames","getAttachmentPathFile","getAttachmentPathsFileContent","getAllUnmapFiles","getAllUnmapFilePaths","getUnmapFile","getUnmapFilePathByFileNameOrUndefined","getAllMapFiles","getAllMapFilePaths","getMapFile","getMapFilePathByFileNameOrUndefined","getAllPatchFiles","getAllPatchFilePaths","getPatchFile","getPatchFilePathByFileNameOrUndefined","_applyDecoratedDescriptor2","prototype"],"sources":["../../../../../../src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.ts"],"sourcesContent":["import { createReadStream, ReadStream } from \"fs\";\nimport * as path from \"path\";\n\nimport { pathExists } from \"fs-extra\";\nimport _, { debounce } from \"lodash\";\nimport { FarmConfig } from \"Tools/src/CandyCLI\";\n\nimport { httpGet } from \"../../../Commons/HttpServer/AttributeRouting/Methods\";\nimport { NotFoundWebError } from \"../../../Commons/HttpServer/AttributeRouting/NotFoundWebError\";\nimport { httpType, httpUrlParam } from \"../../../Commons/HttpServer/AttributeRouting/Params\";\nimport { httpReturn } from \"../../../Commons/HttpServer/AttributeRouting/Results\";\nimport {\n FileStreamResult,\n StreamResult,\n} from \"../../../Commons/HttpServer/AttributeRouting/Results/StreamResultHandler\";\nimport { SingletonController } from \"../../../Commons/HttpServer/ExpressWrapper/SingletonController\";\n\nimport { IGeneratedServerSideSourcesProvider } from \"./IGeneratedServerSideSourcesProvider\";\nimport { FarmDirectory } from \"./Directories/FarmDirectory\";\n\nexport class BuildServerBackendResourcesController extends SingletonController {\n private readonly generatedServerSideSourcesProvider: IGeneratedServerSideSourcesProvider;\n private allSchemasFiles: undefined | string;\n private readonly resetAllSchemaFilesDebounced: () => void;\n private readonly allFarmDirectories: FarmDirectory[];\n private readonly allFarmConfig: FarmConfig[];\n\n public constructor(\n allFarmConfig: FarmConfig[],\n flangNormalizationSourcesProvider: IGeneratedServerSideSourcesProvider\n ) {\n super();\n this.generatedServerSideSourcesProvider = flangNormalizationSourcesProvider;\n this.allFarmConfig = allFarmConfig;\n this.allFarmDirectories = allFarmConfig.map(i => new FarmDirectory(i.farmDirectory));\n this.resetAllSchemaFilesDebounced = debounce(() => {\n this.allSchemasFiles = undefined;\n }, 5000);\n }\n\n @httpGet(\"/gfvs\", httpReturn.Json)\n public async getAllGfvs(): Promise<string[]> {\n return (await Promise.all(this.allFarmDirectories.map(x => x.getAllGfvs()))).flat();\n }\n\n @httpGet(\"/picklists\", httpReturn.PlainText)\n public async getAllPicklists(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.map(x => x.getAllPicklists()))).flat().join(\"\\n\");\n }\n\n @httpGet(\n \"/picklists/:picklistFilename\",\n httpReturn.StreamWithMime(\"application/json\"),\n httpUrlParam(\"picklistFilename\", httpType.String)\n )\n public async getPicklists(picklistFilename: string): Promise<ReadStream> {\n const allFilePath = this.allFarmConfig.map(i => path.join(i.farmDirectory, \"picklists\", picklistFilename));\n for (const pathFile of allFilePath) {\n if (await pathExists(pathFile)) {\n return createReadStream(pathFile);\n }\n }\n throw Error(`not found picklistFilename ${picklistFilename}`);\n }\n\n @httpGet(\"/converters\", httpReturn.PlainText)\n public async getAllConvertersFiles(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllConverterFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n\n @httpGet(\"/converters/:filename\", httpReturn.Stream, httpUrlParam(\"filename\", httpType.String))\n public async getConverterFile(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getConverterFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/mergers\", httpReturn.PlainText)\n public async getAllMergersFiles(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllMergersFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n\n @httpGet(\"/mergers/:filename\", httpReturn.Stream, httpUrlParam(\"filename\", httpType.String))\n public async getMergerFile(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getMergersFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/schemas\", httpReturn.PlainText)\n public async getAllSchemasFiles(): Promise<string> {\n if (this.allSchemasFiles === undefined) {\n this.allSchemasFiles = (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllSchemasFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n this.resetAllSchemaFilesDebounced();\n return this.allSchemasFiles;\n }\n\n @httpGet(\"/schemas/:filename\", httpReturn.Stream, httpUrlParam(\"filename\", httpType.String))\n public async getFormSchemas(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getSchemaFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/normalize\", httpReturn.PlainText)\n public async getAllNormalizeFiles(): Promise<string> {\n const files = (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllNormalizeFilePaths()))).flat();\n const flangFiles = await this.generatedServerSideSourcesProvider.getAllNormalizationFileNames();\n return [...files.map(x => path.basename(x)), ...flangFiles].join(\"\\n\");\n }\n\n @httpGet(\"/normalize/:gfv.xml\", httpReturn.Stream, httpUrlParam(\"gfv\", httpType.String))\n public async getNormalizeFile(gfv: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getNormalizeFilePathByFileNameOrUndefined(`${gfv}.xml`);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/normalize/:gfv.normalize\", httpReturn.Stream, httpUrlParam(\"gfv\", httpType.String))\n public async getFLangNormalizeFile(gfv: string): Promise<StreamResult> {\n const stream = await this.generatedServerSideSourcesProvider.getNormalizationFileContent(gfv);\n if (stream == null) {\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n return new StreamResult(stream);\n }\n\n @httpGet(\"/attachmentpaths\", httpReturn.PlainText)\n public async getAllAttachmentPathsFileNames(): Promise<string> {\n const flangFiles = await this.generatedServerSideSourcesProvider.getAllAttachmentPathFileNames();\n return flangFiles.join(\"\\n\");\n }\n\n @httpGet(\"/attachmentpaths/:gfv.json\", httpReturn.Stream, httpUrlParam(\"gfv\", httpType.String))\n public async getAttachmentPathFile(gfv: string): Promise<StreamResult> {\n return new StreamResult(await this.generatedServerSideSourcesProvider.getAttachmentPathsFileContent(gfv));\n }\n\n @httpGet(\"/unmap\", httpReturn.PlainText)\n public async getAllUnmapFiles(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllUnmapFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n\n @httpGet(\"/unmap/:filename\", httpReturn.Stream, httpUrlParam(\"filename\", httpType.String))\n public async getUnmapFile(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getUnmapFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/map\", httpReturn.PlainText)\n public async getAllMapFiles(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllMapFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n\n @httpGet(\"/map/:filename\", httpReturn.Stream, httpUrlParam(\"filename\", httpType.String))\n public async getMapFile(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getMapFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n\n @httpGet(\"/patch\", httpReturn.PlainText)\n public async getAllPatchFiles(): Promise<string> {\n return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllPatchFilePaths())))\n .flat()\n .map(x => path.basename(x))\n .join(\"\\n\");\n }\n\n @httpGet(\"/patch/:filename\", httpReturn.Stream, httpUrlParam(\"gfv\", httpType.String))\n public async getPatchFile(filename: string): Promise<FileStreamResult> {\n for (const farmDirectory of this.allFarmDirectories) {\n const filePath = await farmDirectory.getPatchFilePathByFileNameOrUndefined(filename);\n if (filePath != null && (await pathExists(filePath))) {\n return new FileStreamResult(filePath);\n }\n }\n\n throw new NotFoundWebError(\"File not found\", false);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -26,13 +26,8 @@ let BuildServerBackendResourcesUpdatesController = exports.BuildServerBackendRes
26
26
  this.formWatchers = void 0;
27
27
  this.resourcesWatcher = void 0;
28
28
  this.allFarmConfig = void 0;
29
- this.farmWatchingRegexps = ["forms/*/schemas/*.rng.xml", "forms/*/converters/*", "forms/*/mergers/*",
30
- // NOTE Тут такое дело: почему-то иногда (иногда, то есть не всегда!), когда нам приходит запрос на
31
- // forms/*/presentations.json в этом классе возникает событие об измении этого файла и мы генерим очень много
32
- // лишних событий об измении ресурсов и CandyApi зависает. Я пока не смог разобраться почему это так.
33
- // "forms/*/presentations.json",
34
- `forms/*/${_WellKnownDirectories.WellKnownDirectories.FormJsonFileName}`, "forms/*/sugar/*.xml", "forms/*/normalize/*.xml", "forms/*/unmap/*.xml", "forms/*/map/*.xml", "forms/*/patch/*.xslt", "picklists/*"].map(_GlobToRegexp.globToRegexp);
35
- this.formsWatchingRegexps = [`forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/schemas/*.rng.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/converters/*`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/mergers/*`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/presentations.json`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/${_WellKnownDirectories.WellKnownDirectories.FormJsonFileName}`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/sugar/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/normalize/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/unmap/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/map/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/patch/*.xslt`].map(_GlobToRegexp.globToRegexp);
29
+ this.farmWatchingRegexps = ["forms/*/schemas/*.rng.xml", "forms/*/converters/*", "forms/*/mergers/*", `forms/*/${_WellKnownDirectories.WellKnownDirectories.FormJsonFileName}`, "forms/*/sugar/*.xml", "forms/*/normalize/*.xml", "forms/*/unmap/*.xml", "forms/*/map/*.xml", "forms/*/patch/*.xslt", "picklists/*"].map(_GlobToRegexp.globToRegexp);
30
+ this.formsWatchingRegexps = [`forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/schemas/*.rng.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/converters/*`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/mergers/*`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/${_WellKnownDirectories.WellKnownDirectories.FormJsonFileName}`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/sugar/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/normalize/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/unmap/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/map/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/patch/*.xslt`].map(_GlobToRegexp.globToRegexp);
36
31
  this.handleFarmFSUpdate = (eventType, filePath, rootDir) => {
37
32
  if (this.farmWatchingRegexps.some(x => x.test(filePath))) {
38
33
  (0, _fs.stat)(_path.default.join(rootDir, filePath), (err, fileStat) => {
@@ -101,4 +96,4 @@ class Monitor {
101
96
  }
102
97
  }
103
98
  }
104
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJyZXF1aXJlIiwiX3BhdGgiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvZGFzaCIsIl9Bc3luY1V0aWxzIiwiX01ldGhvZHMiLCJfUGFyYW1zIiwiX1Jlc3VsdHMiLCJfU2luZ2xldG9uQ29udHJvbGxlciIsIl9XZWxsS25vd25EaXJlY3RvcmllcyIsIl9HbG9iVG9SZWdleHAiLCJfZGVjIiwiX2NsYXNzIiwiQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIiLCJleHBvcnRzIiwiaHR0cEdldCIsImh0dHBSZXR1cm4iLCJQbGFpblRleHQiLCJodHRwUXVlcnlQYXJhbSIsImh0dHBUeXBlIiwiTnVtYmVyIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsImxhc3RVcGRhdGVUaW1lIiwidXBkYXRlTW9uaXRvciIsIk1vbml0b3IiLCJmYXJtV2F0Y2hlcnMiLCJmb3JtV2F0Y2hlcnMiLCJyZXNvdXJjZXNXYXRjaGVyIiwiZmFybVdhdGNoaW5nUmVnZXhwcyIsIldlbGxLbm93bkRpcmVjdG9yaWVzIiwiRm9ybUpzb25GaWxlTmFtZSIsIm1hcCIsImdsb2JUb1JlZ2V4cCIsImZvcm1zV2F0Y2hpbmdSZWdleHBzIiwiQ2FuZHlTdWJkaXJlY3RvcnlOYW1lIiwiaGFuZGxlRmFybUZTVXBkYXRlIiwiZXZlbnRUeXBlIiwiZmlsZVBhdGgiLCJyb290RGlyIiwic29tZSIsIngiLCJ0ZXN0Iiwic3RhdCIsInBhdGgiLCJqb2luIiwiZXJyIiwiZmlsZVN0YXQiLCJmaWxlVGlja3MiLCJNYXRoIiwibWF4IiwibXRpbWVNcyIsImN0aW1lTXMiLCJEYXRlIiwibm93IiwicHVsc2VBbGwiLCJoYW5kbGVGb3JtRlNVcGRhdGUiLCJiZWZvcmVTdGFydCIsImNvbmZpZyIsIndhdGNoIiwiZmFybURpcmVjdG9yeSIsInJlY3Vyc2l2ZSIsIl8iLCJkZWJvdW5jZSIsInkiLCJmb3JtUm9vdERpcmVjdG9yeSIsIm5vcm1hbGl6ZSIsIkZvcm1zRGlyZWN0b3J5IiwiZ2V0TGFzdFVwZGF0ZVRpbWUiLCJwcmV2TGFzdFVwZGF0ZVRpbWUiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsIlByb21pc2UiLCJyYWNlIiwid2FpdCIsImRlbGF5IiwiYWZ0ZXJTdG9wIiwiX3RoaXMkZmFybVdhdGNoZXJzIiwiX3RoaXMkZm9ybVdhdGNoZXJzIiwiX3RoaXMkcmVzb3VyY2VzV2F0Y2hlIiwiaSIsImNsb3NlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcjIiLCJkZWZhdWx0IiwicHJvdG90eXBlIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiYXdhaXRlcnMiLCJ3YWl0UHJvbWlzZUhhbmRsZXIiLCJyZXNvbHZlIiwicHVzaCIsImF3YWl0ZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRTZXJ2ZXIvUmVzb3VyY2VzQ29udHJvbGxlcnMvQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRlNXYXRjaGVyLCB3YXRjaCwgc3RhdCB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHsgRmFybUNvbmZpZyB9IGZyb20gXCJUb29scy9zcmMvQ2FuZHlDTElcIjtcblxuaW1wb3J0IHsgZGVsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0FzeW5jVXRpbHNcIjtcbmltcG9ydCB7IGh0dHBHZXQgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvTWV0aG9kc1wiO1xuaW1wb3J0IHsgaHR0cFF1ZXJ5UGFyYW0sIGh0dHBUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1BhcmFtc1wiO1xuaW1wb3J0IHsgaHR0cFJldHVybiB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9SZXN1bHRzXCI7XG5pbXBvcnQgeyBTaW5nbGV0b25Db250cm9sbGVyIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9FeHByZXNzV3JhcHBlci9TaW5nbGV0b25Db250cm9sbGVyXCI7XG5pbXBvcnQgeyBXZWxsS25vd25EaXJlY3RvcmllcyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vV2VsbEtub3duRGlyZWN0b3JpZXNcIjtcblxuaW1wb3J0IHsgZ2xvYlRvUmVnZXhwIH0gZnJvbSBcIi4vR2xvYlRvUmVnZXhwXCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNlcnZlckJhY2tlbmRSZXNvdXJjZXNVcGRhdGVzQ29udHJvbGxlciBleHRlbmRzIFNpbmdsZXRvbkNvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgbGFzdFVwZGF0ZVRpbWUgPSAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlTW9uaXRvcjogTW9uaXRvciA9IG5ldyBNb25pdG9yKCk7XG4gICAgcHJpdmF0ZSBmYXJtV2F0Y2hlcnM/OiBGU1dhdGNoZXJbXTtcbiAgICBwcml2YXRlIGZvcm1XYXRjaGVycz86IEZTV2F0Y2hlcltdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VzV2F0Y2hlcj86IEZTV2F0Y2hlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbEZhcm1Db25maWc6IEZhcm1Db25maWdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhcm1XYXRjaGluZ1JlZ2V4cHMgPSBbXG4gICAgICAgIFwiZm9ybXMvKi9zY2hlbWFzLyoucm5nLnhtbFwiLFxuICAgICAgICBcImZvcm1zLyovY29udmVydGVycy8qXCIsXG4gICAgICAgIFwiZm9ybXMvKi9tZXJnZXJzLypcIixcbiAgICAgICAgLy8gTk9URSDQotGD0YIg0YLQsNC60L7QtSDQtNC10LvQvjog0L/QvtGH0LXQvNGDLdGC0L4g0LjQvdC+0LPQtNCwICjQuNC90L7Qs9C00LAsINGC0L4g0LXRgdGC0Ywg0L3QtSDQstGB0LXQs9C00LAhKSwg0LrQvtCz0LTQsCDQvdCw0Lwg0L/RgNC40YXQvtC00LjRgiDQt9Cw0L/RgNC+0YEg0L3QsFxuICAgICAgICAvLyBmb3Jtcy8qL3ByZXNlbnRhdGlvbnMuanNvbiDQsiDRjdGC0L7QvCDQutC70LDRgdGB0LUg0LLQvtC30L3QuNC60LDQtdGCINGB0L7QsdGL0YLQuNC1INC+0LEg0LjQt9C80LXQvdC40Lgg0Y3RgtC+0LPQviDRhNCw0LnQu9CwINC4INC80Ysg0LPQtdC90LXRgNC40Lwg0L7Rh9C10L3RjCDQvNC90L7Qs9C+XG4gICAgICAgIC8vINC70LjRiNC90LjRhSDRgdC+0LHRi9GC0LjQuSDQvtCxINC40LfQvNC10L3QuNC4INGA0LXRgdGD0YDRgdC+0LIg0LggQ2FuZHlBcGkg0LfQsNCy0LjRgdCw0LXRgi4g0K8g0L/QvtC60LAg0L3QtSDRgdC80L7QsyDRgNCw0LfQvtCx0YDQsNGC0YzRgdGPINC/0L7Rh9C10LzRgyDRjdGC0L4g0YLQsNC6LlxuICAgICAgICAvLyBcImZvcm1zLyovcHJlc2VudGF0aW9ucy5qc29uXCIsXG4gICAgICAgIGBmb3Jtcy8qLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuRm9ybUpzb25GaWxlTmFtZX1gLFxuICAgICAgICBcImZvcm1zLyovc3VnYXIvKi54bWxcIixcbiAgICAgICAgXCJmb3Jtcy8qL25vcm1hbGl6ZS8qLnhtbFwiLFxuICAgICAgICBcImZvcm1zLyovdW5tYXAvKi54bWxcIixcbiAgICAgICAgXCJmb3Jtcy8qL21hcC8qLnhtbFwiLFxuICAgICAgICBcImZvcm1zLyovcGF0Y2gvKi54c2x0XCIsXG4gICAgICAgIFwicGlja2xpc3RzLypcIixcbiAgICBdLm1hcChnbG9iVG9SZWdleHApO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybXNXYXRjaGluZ1JlZ2V4cHMgPSBbXG4gICAgICAgIGBmb3Jtcy8qKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkNhbmR5U3ViZGlyZWN0b3J5TmFtZX0vc2NoZW1hcy8qLnJuZy54bWxgLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L2NvbnZlcnRlcnMvKmAsXG4gICAgICAgIGBmb3Jtcy8qKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkNhbmR5U3ViZGlyZWN0b3J5TmFtZX0vbWVyZ2Vycy8qYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9wcmVzZW50YXRpb25zLmpzb25gLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9LyR7V2VsbEtub3duRGlyZWN0b3JpZXMuRm9ybUpzb25GaWxlTmFtZX1gLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L3N1Z2FyLyoueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9ub3JtYWxpemUvKi54bWxgLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L3VubWFwLyoueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9tYXAvKi54bWxgLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L3BhdGNoLyoueHNsdGAsXG4gICAgXS5tYXAoZ2xvYlRvUmVnZXhwKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihhbGxGYXJtQ29uZmlnOiBGYXJtQ29uZmlnW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGxGYXJtQ29uZmlnID0gYWxsRmFybUNvbmZpZztcbiAgICAgICAgdGhpcy5sYXN0VXBkYXRlVGltZSA9IERhdGUubm93KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZm9yZVN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZhcm1XYXRjaGVycyA9IHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoY29uZmlnID0+XG4gICAgICAgICAgICB3YXRjaChcbiAgICAgICAgICAgICAgICBjb25maWcuZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICB7IHJlY3Vyc2l2ZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIF8uZGVib3VuY2UoKHg6IHN0cmluZywgeTogc3RyaW5nKSA9PiB0aGlzLmhhbmRsZUZhcm1GU1VwZGF0ZSh4LCB5LCBjb25maWcuZmFybURpcmVjdG9yeSksIDIwMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5mb3JtV2F0Y2hlcnMgPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtUm9vdERpcmVjdG9yeSA9IHBhdGgubm9ybWFsaXplKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihjb25maWcuZmFybURpcmVjdG9yeSwgXCIuLlwiLCBXZWxsS25vd25EaXJlY3Rvcmllcy5Gb3Jtc0RpcmVjdG9yeSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gd2F0Y2goXG4gICAgICAgICAgICAgICAgZm9ybVJvb3REaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgeyByZWN1cnNpdmU6IHRydWUgfSxcbiAgICAgICAgICAgICAgICBfLmRlYm91bmNlKCh4OiBzdHJpbmcsIHk6IHN0cmluZykgPT4gdGhpcy5oYW5kbGVGb3JtRlNVcGRhdGUoeCwgeSwgZm9ybVJvb3REaXJlY3RvcnkpLCAyMDApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcbiAgICAgICAgXCIvdXBkYXRlcy1vYnNlcnZlci9jaGVjay1sYXN0LXVwZGF0ZS1sb25nLXBvbGxcIixcbiAgICAgICAgaHR0cFJldHVybi5QbGFpblRleHQsXG4gICAgICAgIGh0dHBRdWVyeVBhcmFtKFwicHJldkxhc3RVcGRhdGVcIiwgaHR0cFR5cGUuTnVtYmVyKVxuICAgIClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0TGFzdFVwZGF0ZVRpbWUocHJldkxhc3RVcGRhdGVUaW1lPzogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKHByZXZMYXN0VXBkYXRlVGltZSA9PSB1bmRlZmluZWQgfHwgcHJldkxhc3RVcGRhdGVUaW1lIDwgdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdFVwZGF0ZVRpbWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW3RoaXMudXBkYXRlTW9uaXRvci53YWl0KCksIGRlbGF5KDYwMDAwKV0pO1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0VXBkYXRlVGltZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZmFybVdhdGNoZXJzPy5tYXAoaSA9PiBpLmNsb3NlKCkpO1xuICAgICAgICB0aGlzLmZvcm1XYXRjaGVycz8ubWFwKGkgPT4gaS5jbG9zZSgpKTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNXYXRjaGVyPy5jbG9zZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlRmFybUZTVXBkYXRlID0gKGV2ZW50VHlwZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nLCByb290RGlyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmFybVdhdGNoaW5nUmVnZXhwcy5zb21lKHggPT4geC50ZXN0KGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgIHN0YXQocGF0aC5qb2luKHJvb3REaXIsIGZpbGVQYXRoKSwgKGVyciwgZmlsZVN0YXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVGlja3MgPSBNYXRoLm1heChmaWxlU3RhdC5tdGltZU1zLCBmaWxlU3RhdC5jdGltZU1zKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZVRpY2tzID4gdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RVcGRhdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb25pdG9yLnB1bHNlQWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVGb3JtRlNVcGRhdGUgPSAoZXZlbnRUeXBlOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcsIHJvb3REaXI6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3Jtc1dhdGNoaW5nUmVnZXhwcy5zb21lKHggPT4geC50ZXN0KGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgIHN0YXQocGF0aC5qb2luKHJvb3REaXIsIGZpbGVQYXRoKSwgKGVyciwgZmlsZVN0YXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVGlja3MgPSBNYXRoLm1heChmaWxlU3RhdC5tdGltZU1zLCBmaWxlU3RhdC5jdGltZU1zKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZVRpY2tzID4gdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RVcGRhdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb25pdG9yLnB1bHNlQWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5jbGFzcyBNb25pdG9yIHtcbiAgICBwcml2YXRlIGF3YWl0ZXJzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gICAgcHVibGljIHdhaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSh0aGlzLndhaXRQcm9taXNlSGFuZGxlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHB1bHNlQWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhd2FpdGVycyA9IFsuLi50aGlzLmF3YWl0ZXJzXTtcbiAgICAgICAgdGhpcy5hd2FpdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGF3YWl0ZXIgb2YgYXdhaXRlcnMpIHtcbiAgICAgICAgICAgIGF3YWl0ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2FpdFByb21pc2VIYW5kbGVyID0gKHJlc29sdmU6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgICAgdGhpcy5hd2FpdGVycy5wdXNoKHJlc29sdmUpO1xuICAgIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsR0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsT0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBR0EsSUFBQUksV0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsb0JBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLHFCQUFBLEdBQUFULE9BQUE7QUFFQSxJQUFBVSxhQUFBLEdBQUFWLE9BQUE7QUFBOEMsSUFBQVcsSUFBQSxFQUFBQyxN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
99
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJyZXF1aXJlIiwiX3BhdGgiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvZGFzaCIsIl9Bc3luY1V0aWxzIiwiX01ldGhvZHMiLCJfUGFyYW1zIiwiX1Jlc3VsdHMiLCJfU2luZ2xldG9uQ29udHJvbGxlciIsIl9XZWxsS25vd25EaXJlY3RvcmllcyIsIl9HbG9iVG9SZWdleHAiLCJfZGVjIiwiX2NsYXNzIiwiQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIiLCJleHBvcnRzIiwiaHR0cEdldCIsImh0dHBSZXR1cm4iLCJQbGFpblRleHQiLCJodHRwUXVlcnlQYXJhbSIsImh0dHBUeXBlIiwiTnVtYmVyIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsImxhc3RVcGRhdGVUaW1lIiwidXBkYXRlTW9uaXRvciIsIk1vbml0b3IiLCJmYXJtV2F0Y2hlcnMiLCJmb3JtV2F0Y2hlcnMiLCJyZXNvdXJjZXNXYXRjaGVyIiwiZmFybVdhdGNoaW5nUmVnZXhwcyIsIldlbGxLbm93bkRpcmVjdG9yaWVzIiwiRm9ybUpzb25GaWxlTmFtZSIsIm1hcCIsImdsb2JUb1JlZ2V4cCIsImZvcm1zV2F0Y2hpbmdSZWdleHBzIiwiQ2FuZHlTdWJkaXJlY3RvcnlOYW1lIiwiaGFuZGxlRmFybUZTVXBkYXRlIiwiZXZlbnRUeXBlIiwiZmlsZVBhdGgiLCJyb290RGlyIiwic29tZSIsIngiLCJ0ZXN0Iiwic3RhdCIsInBhdGgiLCJqb2luIiwiZXJyIiwiZmlsZVN0YXQiLCJmaWxlVGlja3MiLCJNYXRoIiwibWF4IiwibXRpbWVNcyIsImN0aW1lTXMiLCJEYXRlIiwibm93IiwicHVsc2VBbGwiLCJoYW5kbGVGb3JtRlNVcGRhdGUiLCJiZWZvcmVTdGFydCIsImNvbmZpZyIsIndhdGNoIiwiZmFybURpcmVjdG9yeSIsInJlY3Vyc2l2ZSIsIl8iLCJkZWJvdW5jZSIsInkiLCJmb3JtUm9vdERpcmVjdG9yeSIsIm5vcm1hbGl6ZSIsIkZvcm1zRGlyZWN0b3J5IiwiZ2V0TGFzdFVwZGF0ZVRpbWUiLCJwcmV2TGFzdFVwZGF0ZVRpbWUiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsIlByb21pc2UiLCJyYWNlIiwid2FpdCIsImRlbGF5IiwiYWZ0ZXJTdG9wIiwiX3RoaXMkZmFybVdhdGNoZXJzIiwiX3RoaXMkZm9ybVdhdGNoZXJzIiwiX3RoaXMkcmVzb3VyY2VzV2F0Y2hlIiwiaSIsImNsb3NlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcjIiLCJkZWZhdWx0IiwicHJvdG90eXBlIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiYXdhaXRlcnMiLCJ3YWl0UHJvbWlzZUhhbmRsZXIiLCJyZXNvbHZlIiwicHVzaCIsImF3YWl0ZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRTZXJ2ZXIvUmVzb3VyY2VzQ29udHJvbGxlcnMvQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRlNXYXRjaGVyLCB3YXRjaCwgc3RhdCB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHsgRmFybUNvbmZpZyB9IGZyb20gXCJUb29scy9zcmMvQ2FuZHlDTElcIjtcblxuaW1wb3J0IHsgZGVsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0FzeW5jVXRpbHNcIjtcbmltcG9ydCB7IGh0dHBHZXQgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvTWV0aG9kc1wiO1xuaW1wb3J0IHsgaHR0cFF1ZXJ5UGFyYW0sIGh0dHBUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1BhcmFtc1wiO1xuaW1wb3J0IHsgaHR0cFJldHVybiB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9SZXN1bHRzXCI7XG5pbXBvcnQgeyBTaW5nbGV0b25Db250cm9sbGVyIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9FeHByZXNzV3JhcHBlci9TaW5nbGV0b25Db250cm9sbGVyXCI7XG5pbXBvcnQgeyBXZWxsS25vd25EaXJlY3RvcmllcyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vV2VsbEtub3duRGlyZWN0b3JpZXNcIjtcblxuaW1wb3J0IHsgZ2xvYlRvUmVnZXhwIH0gZnJvbSBcIi4vR2xvYlRvUmVnZXhwXCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNlcnZlckJhY2tlbmRSZXNvdXJjZXNVcGRhdGVzQ29udHJvbGxlciBleHRlbmRzIFNpbmdsZXRvbkNvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgbGFzdFVwZGF0ZVRpbWUgPSAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlTW9uaXRvcjogTW9uaXRvciA9IG5ldyBNb25pdG9yKCk7XG4gICAgcHJpdmF0ZSBmYXJtV2F0Y2hlcnM/OiBGU1dhdGNoZXJbXTtcbiAgICBwcml2YXRlIGZvcm1XYXRjaGVycz86IEZTV2F0Y2hlcltdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VzV2F0Y2hlcj86IEZTV2F0Y2hlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbEZhcm1Db25maWc6IEZhcm1Db25maWdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhcm1XYXRjaGluZ1JlZ2V4cHMgPSBbXG4gICAgICAgIFwiZm9ybXMvKi9zY2hlbWFzLyoucm5nLnhtbFwiLFxuICAgICAgICBcImZvcm1zLyovY29udmVydGVycy8qXCIsXG4gICAgICAgIFwiZm9ybXMvKi9tZXJnZXJzLypcIixcbiAgICAgICAgYGZvcm1zLyovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5Gb3JtSnNvbkZpbGVOYW1lfWAsXG4gICAgICAgIFwiZm9ybXMvKi9zdWdhci8qLnhtbFwiLFxuICAgICAgICBcImZvcm1zLyovbm9ybWFsaXplLyoueG1sXCIsXG4gICAgICAgIFwiZm9ybXMvKi91bm1hcC8qLnhtbFwiLFxuICAgICAgICBcImZvcm1zLyovbWFwLyoueG1sXCIsXG4gICAgICAgIFwiZm9ybXMvKi9wYXRjaC8qLnhzbHRcIixcbiAgICAgICAgXCJwaWNrbGlzdHMvKlwiLFxuICAgIF0ubWFwKGdsb2JUb1JlZ2V4cCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3Jtc1dhdGNoaW5nUmVnZXhwcyA9IFtcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9zY2hlbWFzLyoucm5nLnhtbGAsXG4gICAgICAgIGBmb3Jtcy8qKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkNhbmR5U3ViZGlyZWN0b3J5TmFtZX0vY29udmVydGVycy8qYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9tZXJnZXJzLypgLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9LyR7V2VsbEtub3duRGlyZWN0b3JpZXMuRm9ybUpzb25GaWxlTmFtZX1gLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L3N1Z2FyLyoueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9ub3JtYWxpemUvKi54bWxgLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L3VubWFwLyoueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9tYXAvKi54bWxgLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L3BhdGNoLyoueHNsdGAsXG4gICAgXS5tYXAoZ2xvYlRvUmVnZXhwKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihhbGxGYXJtQ29uZmlnOiBGYXJtQ29uZmlnW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGxGYXJtQ29uZmlnID0gYWxsRmFybUNvbmZpZztcbiAgICAgICAgdGhpcy5sYXN0VXBkYXRlVGltZSA9IERhdGUubm93KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZm9yZVN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZhcm1XYXRjaGVycyA9IHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoY29uZmlnID0+XG4gICAgICAgICAgICB3YXRjaChcbiAgICAgICAgICAgICAgICBjb25maWcuZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICB7IHJlY3Vyc2l2ZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIF8uZGVib3VuY2UoKHg6IHN0cmluZywgeTogc3RyaW5nKSA9PiB0aGlzLmhhbmRsZUZhcm1GU1VwZGF0ZSh4LCB5LCBjb25maWcuZmFybURpcmVjdG9yeSksIDIwMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5mb3JtV2F0Y2hlcnMgPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtUm9vdERpcmVjdG9yeSA9IHBhdGgubm9ybWFsaXplKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihjb25maWcuZmFybURpcmVjdG9yeSwgXCIuLlwiLCBXZWxsS25vd25EaXJlY3Rvcmllcy5Gb3Jtc0RpcmVjdG9yeSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gd2F0Y2goXG4gICAgICAgICAgICAgICAgZm9ybVJvb3REaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgeyByZWN1cnNpdmU6IHRydWUgfSxcbiAgICAgICAgICAgICAgICBfLmRlYm91bmNlKCh4OiBzdHJpbmcsIHk6IHN0cmluZykgPT4gdGhpcy5oYW5kbGVGb3JtRlNVcGRhdGUoeCwgeSwgZm9ybVJvb3REaXJlY3RvcnkpLCAyMDApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcbiAgICAgICAgXCIvdXBkYXRlcy1vYnNlcnZlci9jaGVjay1sYXN0LXVwZGF0ZS1sb25nLXBvbGxcIixcbiAgICAgICAgaHR0cFJldHVybi5QbGFpblRleHQsXG4gICAgICAgIGh0dHBRdWVyeVBhcmFtKFwicHJldkxhc3RVcGRhdGVcIiwgaHR0cFR5cGUuTnVtYmVyKVxuICAgIClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0TGFzdFVwZGF0ZVRpbWUocHJldkxhc3RVcGRhdGVUaW1lPzogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKHByZXZMYXN0VXBkYXRlVGltZSA9PSB1bmRlZmluZWQgfHwgcHJldkxhc3RVcGRhdGVUaW1lIDwgdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdFVwZGF0ZVRpbWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW3RoaXMudXBkYXRlTW9uaXRvci53YWl0KCksIGRlbGF5KDYwMDAwKV0pO1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0VXBkYXRlVGltZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZmFybVdhdGNoZXJzPy5tYXAoaSA9PiBpLmNsb3NlKCkpO1xuICAgICAgICB0aGlzLmZvcm1XYXRjaGVycz8ubWFwKGkgPT4gaS5jbG9zZSgpKTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNXYXRjaGVyPy5jbG9zZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlRmFybUZTVXBkYXRlID0gKGV2ZW50VHlwZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nLCByb290RGlyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmFybVdhdGNoaW5nUmVnZXhwcy5zb21lKHggPT4geC50ZXN0KGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgIHN0YXQocGF0aC5qb2luKHJvb3REaXIsIGZpbGVQYXRoKSwgKGVyciwgZmlsZVN0YXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVGlja3MgPSBNYXRoLm1heChmaWxlU3RhdC5tdGltZU1zLCBmaWxlU3RhdC5jdGltZU1zKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZVRpY2tzID4gdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RVcGRhdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb25pdG9yLnB1bHNlQWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVGb3JtRlNVcGRhdGUgPSAoZXZlbnRUeXBlOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcsIHJvb3REaXI6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3Jtc1dhdGNoaW5nUmVnZXhwcy5zb21lKHggPT4geC50ZXN0KGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgIHN0YXQocGF0aC5qb2luKHJvb3REaXIsIGZpbGVQYXRoKSwgKGVyciwgZmlsZVN0YXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVGlja3MgPSBNYXRoLm1heChmaWxlU3RhdC5tdGltZU1zLCBmaWxlU3RhdC5jdGltZU1zKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZVRpY2tzID4gdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RVcGRhdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb25pdG9yLnB1bHNlQWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5jbGFzcyBNb25pdG9yIHtcbiAgICBwcml2YXRlIGF3YWl0ZXJzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gICAgcHVibGljIHdhaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSh0aGlzLndhaXRQcm9taXNlSGFuZGxlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHB1bHNlQWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhd2FpdGVycyA9IFsuLi50aGlzLmF3YWl0ZXJzXTtcbiAgICAgICAgdGhpcy5hd2FpdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGF3YWl0ZXIgb2YgYXdhaXRlcnMpIHtcbiAgICAgICAgICAgIGF3YWl0ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2FpdFByb21pc2VIYW5kbGVyID0gKHJlc29sdmU6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgICAgdGhpcy5hd2FpdGVycy5wdXNoKHJlc29sdmUpO1xuICAgIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsR0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsT0FBQSxHQUFBRCxzQkFBQSxDQUFB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
@@ -1 +1 @@
1
- {"version":3,"file":"BuildServerBackendResourcesUpdatesController.js","names":["_fs","require","_path","_interopRequireDefault","_lodash","_AsyncUtils","_Methods","_Params","_Results","_SingletonController","_WellKnownDirectories","_GlobToRegexp","_dec","_class","BuildServerBackendResourcesUpdatesController","exports","httpGet","httpReturn","PlainText","httpQueryParam","httpType","Number","SingletonController","constructor","allFarmConfig","lastUpdateTime","updateMonitor","Monitor","farmWatchers","formWatchers","resourcesWatcher","farmWatchingRegexps","WellKnownDirectories","FormJsonFileName","map","globToRegexp","formsWatchingRegexps","CandySubdirectoryName","handleFarmFSUpdate","eventType","filePath","rootDir","some","x","test","stat","path","join","err","fileStat","fileTicks","Math","max","mtimeMs","ctimeMs","Date","now","pulseAll","handleFormFSUpdate","beforeStart","config","watch","farmDirectory","recursive","_","debounce","y","formRootDirectory","normalize","FormsDirectory","getLastUpdateTime","prevLastUpdateTime","undefined","toString","Promise","race","wait","delay","afterStop","_this$farmWatchers","_this$formWatchers","_this$resourcesWatche","i","close","_applyDecoratedDescriptor2","default","prototype","Object","getOwnPropertyDescriptor","awaiters","waitPromiseHandler","resolve","push","awaiter"],"sources":["../../../../../../src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.ts"],"sourcesContent":["import { FSWatcher, watch, stat } from \"fs\";\nimport path from \"path\";\n\nimport _ from \"lodash\";\nimport { FarmConfig } from \"Tools/src/CandyCLI\";\n\nimport { delay } from \"../../../../../Common/AsyncUtils\";\nimport { httpGet } from \"../../../Commons/HttpServer/AttributeRouting/Methods\";\nimport { httpQueryParam, httpType } from \"../../../Commons/HttpServer/AttributeRouting/Params\";\nimport { httpReturn } from \"../../../Commons/HttpServer/AttributeRouting/Results\";\nimport { SingletonController } from \"../../../Commons/HttpServer/ExpressWrapper/SingletonController\";\nimport { WellKnownDirectories } from \"../../../../../Common/WellKnownDirectories\";\n\nimport { globToRegexp } from \"./GlobToRegexp\";\n\nexport class BuildServerBackendResourcesUpdatesController extends SingletonController {\n private lastUpdateTime = 0;\n private readonly updateMonitor: Monitor = new Monitor();\n private farmWatchers?: FSWatcher[];\n private formWatchers?: FSWatcher[];\n private readonly resourcesWatcher?: FSWatcher;\n private readonly allFarmConfig: FarmConfig[];\n private readonly farmWatchingRegexps = [\n \"forms/*/schemas/*.rng.xml\",\n \"forms/*/converters/*\",\n \"forms/*/mergers/*\",\n // NOTE Тут такое дело: почему-то иногда (иногда, то есть не всегда!), когда нам приходит запрос на\n // forms/*/presentations.json в этом классе возникает событие об измении этого файла и мы генерим очень много\n // лишних событий об измении ресурсов и CandyApi зависает. Я пока не смог разобраться почему это так.\n // \"forms/*/presentations.json\",\n `forms/*/${WellKnownDirectories.FormJsonFileName}`,\n \"forms/*/sugar/*.xml\",\n \"forms/*/normalize/*.xml\",\n \"forms/*/unmap/*.xml\",\n \"forms/*/map/*.xml\",\n \"forms/*/patch/*.xslt\",\n \"picklists/*\",\n ].map(globToRegexp);\n private readonly formsWatchingRegexps = [\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/schemas/*.rng.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/converters/*`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/mergers/*`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/presentations.json`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/${WellKnownDirectories.FormJsonFileName}`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/sugar/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/normalize/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/unmap/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/map/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/patch/*.xslt`,\n ].map(globToRegexp);\n\n public constructor(allFarmConfig: FarmConfig[]) {\n super();\n this.allFarmConfig = allFarmConfig;\n this.lastUpdateTime = Date.now();\n }\n\n public async beforeStart(): Promise<void> {\n this.farmWatchers = this.allFarmConfig.map(config =>\n watch(\n config.farmDirectory,\n { recursive: true },\n _.debounce((x: string, y: string) => this.handleFarmFSUpdate(x, y, config.farmDirectory), 200)\n )\n );\n this.formWatchers = this.allFarmConfig.map(config => {\n const formRootDirectory = path.normalize(\n path.join(config.farmDirectory, \"..\", WellKnownDirectories.FormsDirectory)\n );\n return watch(\n formRootDirectory,\n { recursive: true },\n _.debounce((x: string, y: string) => this.handleFormFSUpdate(x, y, formRootDirectory), 200)\n );\n });\n }\n\n @httpGet(\n \"/updates-observer/check-last-update-long-poll\",\n httpReturn.PlainText,\n httpQueryParam(\"prevLastUpdate\", httpType.Number)\n )\n public async getLastUpdateTime(prevLastUpdateTime?: number): Promise<string> {\n if (prevLastUpdateTime == undefined || prevLastUpdateTime < this.lastUpdateTime) {\n return this.lastUpdateTime.toString();\n }\n await Promise.race([this.updateMonitor.wait(), delay(60000)]);\n return this.lastUpdateTime.toString();\n }\n\n public async afterStop(): Promise<void> {\n this.farmWatchers?.map(i => i.close());\n this.formWatchers?.map(i => i.close());\n this.resourcesWatcher?.close();\n }\n\n private readonly handleFarmFSUpdate = (eventType: string, filePath: string, rootDir: string) => {\n if (this.farmWatchingRegexps.some(x => x.test(filePath))) {\n stat(path.join(rootDir, filePath), (err, fileStat) => {\n const fileTicks = Math.max(fileStat.mtimeMs, fileStat.ctimeMs);\n if (fileTicks > this.lastUpdateTime) {\n this.lastUpdateTime = Date.now();\n this.updateMonitor.pulseAll();\n }\n });\n }\n };\n\n private readonly handleFormFSUpdate = (eventType: string, filePath: string, rootDir: string) => {\n if (this.formsWatchingRegexps.some(x => x.test(filePath))) {\n stat(path.join(rootDir, filePath), (err, fileStat) => {\n const fileTicks = Math.max(fileStat.mtimeMs, fileStat.ctimeMs);\n if (fileTicks > this.lastUpdateTime) {\n this.lastUpdateTime = Date.now();\n this.updateMonitor.pulseAll();\n }\n });\n }\n };\n}\n\nclass Monitor {\n private awaiters: Array<() => void> = [];\n\n public wait(): Promise<void> {\n return new Promise(this.waitPromiseHandler);\n }\n\n public pulseAll(): void {\n const awaiters = [...this.awaiters];\n this.awaiters = [];\n for (const awaiter of awaiters) {\n awaiter();\n }\n }\n\n private readonly waitPromiseHandler = (resolve: () => void) => {\n this.awaiters.push(resolve);\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BuildServerBackendResourcesUpdatesController.js","names":["_fs","require","_path","_interopRequireDefault","_lodash","_AsyncUtils","_Methods","_Params","_Results","_SingletonController","_WellKnownDirectories","_GlobToRegexp","_dec","_class","BuildServerBackendResourcesUpdatesController","exports","httpGet","httpReturn","PlainText","httpQueryParam","httpType","Number","SingletonController","constructor","allFarmConfig","lastUpdateTime","updateMonitor","Monitor","farmWatchers","formWatchers","resourcesWatcher","farmWatchingRegexps","WellKnownDirectories","FormJsonFileName","map","globToRegexp","formsWatchingRegexps","CandySubdirectoryName","handleFarmFSUpdate","eventType","filePath","rootDir","some","x","test","stat","path","join","err","fileStat","fileTicks","Math","max","mtimeMs","ctimeMs","Date","now","pulseAll","handleFormFSUpdate","beforeStart","config","watch","farmDirectory","recursive","_","debounce","y","formRootDirectory","normalize","FormsDirectory","getLastUpdateTime","prevLastUpdateTime","undefined","toString","Promise","race","wait","delay","afterStop","_this$farmWatchers","_this$formWatchers","_this$resourcesWatche","i","close","_applyDecoratedDescriptor2","default","prototype","Object","getOwnPropertyDescriptor","awaiters","waitPromiseHandler","resolve","push","awaiter"],"sources":["../../../../../../src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.ts"],"sourcesContent":["import { FSWatcher, watch, stat } from \"fs\";\nimport path from \"path\";\n\nimport _ from \"lodash\";\nimport { FarmConfig } from \"Tools/src/CandyCLI\";\n\nimport { delay } from \"../../../../../Common/AsyncUtils\";\nimport { httpGet } from \"../../../Commons/HttpServer/AttributeRouting/Methods\";\nimport { httpQueryParam, httpType } from \"../../../Commons/HttpServer/AttributeRouting/Params\";\nimport { httpReturn } from \"../../../Commons/HttpServer/AttributeRouting/Results\";\nimport { SingletonController } from \"../../../Commons/HttpServer/ExpressWrapper/SingletonController\";\nimport { WellKnownDirectories } from \"../../../../../Common/WellKnownDirectories\";\n\nimport { globToRegexp } from \"./GlobToRegexp\";\n\nexport class BuildServerBackendResourcesUpdatesController extends SingletonController {\n private lastUpdateTime = 0;\n private readonly updateMonitor: Monitor = new Monitor();\n private farmWatchers?: FSWatcher[];\n private formWatchers?: FSWatcher[];\n private readonly resourcesWatcher?: FSWatcher;\n private readonly allFarmConfig: FarmConfig[];\n private readonly farmWatchingRegexps = [\n \"forms/*/schemas/*.rng.xml\",\n \"forms/*/converters/*\",\n \"forms/*/mergers/*\",\n `forms/*/${WellKnownDirectories.FormJsonFileName}`,\n \"forms/*/sugar/*.xml\",\n \"forms/*/normalize/*.xml\",\n \"forms/*/unmap/*.xml\",\n \"forms/*/map/*.xml\",\n \"forms/*/patch/*.xslt\",\n \"picklists/*\",\n ].map(globToRegexp);\n private readonly formsWatchingRegexps = [\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/schemas/*.rng.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/converters/*`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/mergers/*`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/${WellKnownDirectories.FormJsonFileName}`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/sugar/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/normalize/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/unmap/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/map/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/patch/*.xslt`,\n ].map(globToRegexp);\n\n public constructor(allFarmConfig: FarmConfig[]) {\n super();\n this.allFarmConfig = allFarmConfig;\n this.lastUpdateTime = Date.now();\n }\n\n public async beforeStart(): Promise<void> {\n this.farmWatchers = this.allFarmConfig.map(config =>\n watch(\n config.farmDirectory,\n { recursive: true },\n _.debounce((x: string, y: string) => this.handleFarmFSUpdate(x, y, config.farmDirectory), 200)\n )\n );\n this.formWatchers = this.allFarmConfig.map(config => {\n const formRootDirectory = path.normalize(\n path.join(config.farmDirectory, \"..\", WellKnownDirectories.FormsDirectory)\n );\n return watch(\n formRootDirectory,\n { recursive: true },\n _.debounce((x: string, y: string) => this.handleFormFSUpdate(x, y, formRootDirectory), 200)\n );\n });\n }\n\n @httpGet(\n \"/updates-observer/check-last-update-long-poll\",\n httpReturn.PlainText,\n httpQueryParam(\"prevLastUpdate\", httpType.Number)\n )\n public async getLastUpdateTime(prevLastUpdateTime?: number): Promise<string> {\n if (prevLastUpdateTime == undefined || prevLastUpdateTime < this.lastUpdateTime) {\n return this.lastUpdateTime.toString();\n }\n await Promise.race([this.updateMonitor.wait(), delay(60000)]);\n return this.lastUpdateTime.toString();\n }\n\n public async afterStop(): Promise<void> {\n this.farmWatchers?.map(i => i.close());\n this.formWatchers?.map(i => i.close());\n this.resourcesWatcher?.close();\n }\n\n private readonly handleFarmFSUpdate = (eventType: string, filePath: string, rootDir: string) => {\n if (this.farmWatchingRegexps.some(x => x.test(filePath))) {\n stat(path.join(rootDir, filePath), (err, fileStat) => {\n const fileTicks = Math.max(fileStat.mtimeMs, fileStat.ctimeMs);\n if (fileTicks > this.lastUpdateTime) {\n this.lastUpdateTime = Date.now();\n this.updateMonitor.pulseAll();\n }\n });\n }\n };\n\n private readonly handleFormFSUpdate = (eventType: string, filePath: string, rootDir: string) => {\n if (this.formsWatchingRegexps.some(x => x.test(filePath))) {\n stat(path.join(rootDir, filePath), (err, fileStat) => {\n const fileTicks = Math.max(fileStat.mtimeMs, fileStat.ctimeMs);\n if (fileTicks > this.lastUpdateTime) {\n this.lastUpdateTime = Date.now();\n this.updateMonitor.pulseAll();\n }\n });\n }\n };\n}\n\nclass Monitor {\n private awaiters: Array<() => void> = [];\n\n public wait(): Promise<void> {\n return new Promise(this.waitPromiseHandler);\n }\n\n public pulseAll(): void {\n const awaiters = [...this.awaiters];\n this.awaiters = [];\n for (const awaiter of awaiters) {\n awaiter();\n }\n }\n\n private readonly waitPromiseHandler = (resolve: () => void) => {\n this.awaiters.push(resolve);\n };\n}\n"],"mappings":"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","ignoreList":[]}