@kontur.candy/tools 2.153.0 → 2.155.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 (272) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/distr/Common/AsyncUtils.js +1 -3
  3. package/distr/Common/CandyApiClient/CandyApiClient.js +25 -138
  4. package/distr/Common/CandyApiClient/CandyApiClientContext.js +1 -8
  5. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +1 -1
  6. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +1 -1
  7. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -2
  8. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +1 -1
  9. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -16
  10. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -12
  11. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -12
  12. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +1 -1
  13. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -13
  14. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +1 -3
  15. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +1 -1
  16. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +1 -8
  17. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -7
  18. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +9 -12
  19. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +1 -1
  20. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +1 -1
  21. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +4 -72
  22. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  23. package/distr/Common/CandyApiClient/IsBuffer.js +1 -2
  24. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +1 -1
  25. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +1 -1
  26. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +1 -1
  27. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +1 -1
  28. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +1 -1
  29. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +12 -7
  30. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +1 -1
  31. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
  32. package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +1 -3
  33. package/distr/Common/CandyApiClient/Types/DraftFullId.js +1 -1
  34. package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js +5 -6
  35. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +9 -12
  36. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +5 -6
  37. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +1 -1
  38. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +1 -1
  39. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +5 -6
  40. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +1 -1
  41. package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +1 -3
  42. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +1 -1
  43. package/distr/Common/CandyApiClient/Types/Guid.js +1 -1
  44. package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js +1 -1
  45. package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +1 -1
  46. package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js +6 -0
  47. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +5 -6
  48. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +1 -1
  49. package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +1 -1
  50. package/distr/Common/CandyApiClient/Types/Print/PrintType.js +5 -6
  51. package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js +1 -1
  52. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +1 -1
  53. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js +1 -1
  54. package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js +1 -1
  55. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +1 -1
  56. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +5 -6
  57. package/distr/Common/CandyApiClient/Types/TestClassification.js +1 -1
  58. package/distr/Common/CollectionUtils.js +1 -3
  59. package/distr/Common/CommonConstants/SectionNames.js +1 -3
  60. package/distr/Common/Comparers.js +2 -16
  61. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +1 -5
  62. package/distr/Common/EndPoints.js +1 -2
  63. package/distr/Common/Enums/ButtonSettingsTypeEnum.js +5 -6
  64. package/distr/Common/Errors.js +1 -19
  65. package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -3
  66. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +1 -1
  67. package/distr/Common/Funcs.js +1 -5
  68. package/distr/Common/GFV.js +1 -1
  69. package/distr/Common/Hooks/UseLocalStorage.js +3 -10
  70. package/distr/Common/HttpClient/AuthenticationMode.js +3 -7
  71. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +1 -3
  72. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +1 -3
  73. package/distr/Common/HttpClient/FetchImplementation/Fetch.js +1 -1
  74. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +1 -1
  75. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +6 -11
  76. package/distr/Common/HttpClient/HttpClient.js +9 -80
  77. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +1 -1
  78. package/distr/Common/HttpClient/IHttpClient.js +1 -1
  79. package/distr/Common/IndentString.js +1 -3
  80. package/distr/Common/IntRangeUtils.js +3 -10
  81. package/distr/Common/IterableUtils.js +3 -76
  82. package/distr/Common/KCLangRuntimeUtils.js +1 -87
  83. package/distr/Common/ModelPath/BuildIterationSequence.js +1 -5
  84. package/distr/Common/ModelPath/EachCurrentCollision.js +5 -6
  85. package/distr/Common/ModelPath/IEquatable.js +1 -1
  86. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +1 -8
  87. package/distr/Common/ModelPath/Map/Map2.js +2 -24
  88. package/distr/Common/ModelPath/Map/ModelPathMap.js +1 -8
  89. package/distr/Common/ModelPath/ModelPath.js +16 -140
  90. package/distr/Common/ModelPath/ModelPathBuilder.js +1 -14
  91. package/distr/Common/ModelPath/ModelPathHelper.js +1 -2
  92. package/distr/Common/ModelPath/PathMatcher.js +5 -24
  93. package/distr/Common/ModelPath/PathSplitHelper.js +1 -6
  94. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +1 -10
  95. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +1 -10
  96. package/distr/Common/ModelPath/Set/ModelPathSet.js +1 -10
  97. package/distr/Common/ModelPath/Set/Set2.js +1 -16
  98. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -9
  99. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +1 -1
  100. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -3
  101. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -17
  102. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -30
  103. package/distr/Common/NidusClient/INidusClient.js +1 -3
  104. package/distr/Common/NidusClient/NidusClientContext.js +1 -14
  105. package/distr/Common/NidusClient/NidusClientImpl.js +1 -18
  106. package/distr/Common/PathConstants.js +1 -3
  107. package/distr/Common/StringArrayKey.js +1 -8
  108. package/distr/Common/TypingUtils.js +7 -26
  109. package/distr/Common/UUID.js +1 -4
  110. package/distr/Common/UseAsyncEffect.js +3 -7
  111. package/distr/Common/UseShowOnce.js +1 -17
  112. package/distr/Common/UseTypedSelector.js +1 -3
  113. package/distr/Common/getRngSchemaFilename.js +18 -0
  114. package/distr/Common/hashUtils.js +1 -4
  115. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +1 -23
  116. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +3 -10
  117. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -10
  118. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +5 -23
  119. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +1 -27
  120. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -2
  121. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +3 -10
  122. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -9
  123. package/distr/Tools/src/BuildTasks/FSTask.js +1 -19
  124. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +1 -19
  125. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +1 -16
  126. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -11
  127. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +1 -10
  128. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +1 -10
  129. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -10
  130. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +5 -26
  131. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +1 -38
  132. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +2 -42
  133. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +4 -39
  134. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +4 -7
  135. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +4 -10
  136. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +9 -17
  137. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +3 -5
  138. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +1 -13
  139. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +1 -20
  140. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +3 -48
  141. package/distr/Tools/src/BuildTasks/ReadFormSource.js +7 -32
  142. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +5 -32
  143. package/distr/Tools/src/BuildTasks/Version.js +1 -10
  144. package/distr/Tools/src/BuildTasks/WriteFormMeta.js +1 -10
  145. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +5 -9
  146. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +1 -5
  147. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +22 -71
  148. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +1 -12
  149. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +1 -5
  150. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +1 -67
  151. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +3 -28
  152. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +3 -41
  153. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +3 -23
  154. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +3 -20
  155. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +1 -23
  156. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +1 -37
  157. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +1 -13
  158. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +1 -40
  159. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +8 -49
  160. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +1 -13
  161. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +1 -17
  162. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +1 -4
  163. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +10 -19
  164. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +12 -26
  165. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +1 -5
  166. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +1 -1
  167. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +1 -1
  168. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +10 -44
  169. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +1 -17
  170. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -5
  171. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +1 -1
  172. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -27
  173. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +11 -16
  174. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +1 -1
  175. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +1 -1
  176. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +1 -1
  177. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +1 -4
  178. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +13 -34
  179. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +1 -4
  180. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +1 -15
  181. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +3 -19
  182. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}.calc.js +1 -2
  183. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/setKppValue.js +1 -2
  184. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +1 -6
  185. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +1 -11
  186. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/kppValue.js +3 -4
  187. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +1 -4
  188. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +1 -23
  189. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +1 -4
  190. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +7 -23
  191. package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js +26 -0
  192. package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +48 -0
  193. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +1 -37
  194. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +1 -4
  195. package/distr/Tools/src/CandyCLI.js +7 -56
  196. package/distr/Tools/src/CheckNodeJsVersion.js +3 -10
  197. package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +1 -10
  198. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +4 -29
  199. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -6
  200. package/distr/Tools/src/Commons/ErrorUntyped.js +1 -1
  201. package/distr/Tools/src/Commons/EventObject.js +10 -20
  202. package/distr/Tools/src/Commons/ExecUtils.js +3 -9
  203. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -7
  204. package/distr/Tools/src/Commons/FormGlobsUtils.js +1 -33
  205. package/distr/Tools/src/Commons/FsUtils.js +1 -12
  206. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -8
  207. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +4 -15
  208. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -4
  209. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -5
  210. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +1 -1
  211. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -4
  212. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -5
  213. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +2 -5
  214. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -5
  215. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +1 -14
  216. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -4
  217. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -5
  218. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -4
  219. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -4
  220. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +1 -1
  221. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -4
  222. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -4
  223. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +1 -36
  224. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +1 -9
  225. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +5 -35
  226. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +9 -11
  227. package/distr/Tools/src/Commons/Locks/Lock.js +1 -8
  228. package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -5
  229. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +1 -9
  230. package/distr/Tools/src/Commons/Logging/ELKLogger.js +17 -22
  231. package/distr/Tools/src/Commons/Logging/ILogger.js +1 -5
  232. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +3 -21
  233. package/distr/Tools/src/Commons/Logging/Logger.js +9 -29
  234. package/distr/Tools/src/Commons/Logging/StaticLogger.js +11 -15
  235. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -1
  236. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +3 -37
  237. package/distr/Tools/src/Commons/PathPattern.js +1 -13
  238. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -4
  239. package/distr/Tools/src/Commons/TasksCore/BuildTask.js +1 -1
  240. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +13 -200
  241. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +1 -20
  242. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +7 -10
  243. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +1 -15
  244. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +1 -15
  245. package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -13
  246. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +5 -11
  247. package/distr/Tools/src/Commons/TimingUtils.js +1 -2
  248. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +13 -51
  249. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +4 -14
  250. package/distr/Tools/src/GenerateReadMe.js +1 -13
  251. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  252. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +10 -1
  253. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  254. package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +10 -1
  255. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  256. package/distr/Tools/src/Options/CandyToolOptions.js +3 -11
  257. package/distr/Tools/src/ReadFarmConfig.js +1 -5
  258. package/distr/Tools/src/SelfUpdate.js +4 -28
  259. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1506 -1257
  260. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.LICENSE.txt +1 -0
  261. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  262. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +843 -623
  263. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.LICENSE.txt +1 -0
  264. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  265. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +777 -1117
  266. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1665 -2015
  267. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +9 -55
  268. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +777 -1117
  269. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1665 -2015
  270. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +9 -55
  271. package/package.json +10 -10
  272. /package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/schemas/{{gfv}.rng.xml → {gfv}.0.rng.xml} +0 -0
@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ShellProcessHandle = void 0;
7
-
8
7
  var _child_process = require("child_process");
9
-
10
8
  var _ConsoleApplication = require("../../Commons/ConsoleApplication/ConsoleApplication");
11
-
12
9
  var _EventObject = require("../../Commons/EventObject");
13
-
14
10
  var _ProcessUtils = require("./ProcessUtils");
15
-
16
11
  class ShellProcessHandle {
17
12
  constructor(startInfo) {
18
13
  this.startInfo = void 0;
@@ -20,34 +15,26 @@ class ShellProcessHandle {
20
15
  this.onStdOut = (0, _EventObject.createEvent)();
21
16
  this.onStdErr = (0, _EventObject.createEvent)();
22
17
  this.subscription = void 0;
23
-
24
18
  this.handleExit = async () => {
25
19
  await this.kill();
26
20
  };
27
-
28
21
  this.startInfo = startInfo;
29
22
  }
30
-
31
23
  async kill() {
32
24
  var _processToKill$stderr, _processToKill$stdout;
33
-
34
25
  if (this.subscription != undefined) {
35
26
  this.subscription.unsubscribe();
36
27
  }
37
-
38
28
  const processToKill = this.process;
39
-
40
29
  if (processToKill == undefined) {
41
30
  throw new Error("Process not started");
42
31
  }
43
-
44
32
  const pid = processToKill.pid;
45
33
  this.process = undefined;
46
34
  (_processToKill$stderr = processToKill.stderr) === null || _processToKill$stderr === void 0 ? void 0 : _processToKill$stderr.pause();
47
35
  (_processToKill$stdout = processToKill.stdout) === null || _processToKill$stdout === void 0 ? void 0 : _processToKill$stdout.pause();
48
36
  await _ProcessUtils.ProcessUtils.killTreeAsync(pid);
49
37
  }
50
-
51
38
  waitOutputIncludesString(expectedString) {
52
39
  return new Promise(resolve => {
53
40
  const subscription = this.onStdOut.subscribe(output => {
@@ -58,10 +45,8 @@ class ShellProcessHandle {
58
45
  });
59
46
  });
60
47
  }
61
-
62
48
  start() {
63
49
  var _this$process$stdout, _this$process$stderr;
64
-
65
50
  this.subscription = _ConsoleApplication.ConsoleApplication.onExit.subscribe(this.handleExit);
66
51
  const [shellExe, shellArg] = process.platform === "win32" ? ["cmd.exe", "/c"] : ["/bin/sh", "-c"];
67
52
  this.process = (0, _child_process.spawn)(shellExe, [shellArg, this.startInfo.command, ...this.startInfo.args], {
@@ -75,10 +60,8 @@ class ShellProcessHandle {
75
60
  this.onStdErr.emit(data.toString());
76
61
  });
77
62
  }
78
-
79
63
  waitForExit() {
80
64
  const currentProcess = this.process;
81
-
82
65
  if (currentProcess != undefined) {
83
66
  return new Promise(resolve => {
84
67
  currentProcess.on("exit", code => {
@@ -89,8 +72,6 @@ class ShellProcessHandle {
89
72
  throw new Error("No process started");
90
73
  }
91
74
  }
92
-
93
75
  }
94
-
95
76
  exports.ShellProcessHandle = ShellProcessHandle;
96
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL1Byb2Nlc3NVdGlscy9TaGVsbFByb2Nlc3NIYW5kbGUudHMiXSwibmFtZXMiOlsiU2hlbGxQcm9jZXNzSGFuZGxlIiwiY29uc3RydWN0b3IiLCJzdGFydEluZm8iLCJwcm9jZXNzIiwib25TdGRPdXQiLCJvblN0ZEVyciIsInN1YnNjcmlwdGlvbiIsImhhbmRsZUV4aXQiLCJraWxsIiwidW5kZWZpbmVkIiwidW5zdWJzY3JpYmUiLCJwcm9jZXNzVG9LaWxsIiwiRXJyb3IiLCJwaWQiLCJzdGRlcnIiLCJwYXVzZSIsInN0ZG91dCIsIlByb2Nlc3NVdGlscyIsImtpbGxUcmVlQXN5bmMiLCJ3YWl0T3V0cHV0SW5jbHVkZXNTdHJpbmciLCJleHBlY3RlZFN0cmluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwic3Vic2NyaWJlIiwib3V0cHV0IiwiaW5jbHVkZXMiLCJzdGFydCIsIkNvbnNvbGVBcHBsaWNhdGlvbiIsIm9uRXhpdCIsInNoZWxsRXhlIiwic2hlbGxBcmciLCJwbGF0Zm9ybSIsImNvbW1hbmQiLCJhcmdzIiwiY3dkIiwid29ya2luZ0RpcmVjdG9yeSIsInN0ZGlvIiwib24iLCJkYXRhIiwiZW1pdCIsInRvU3RyaW5nIiwid2FpdEZvckV4aXQiLCJjdXJyZW50UHJvY2VzcyIsImNvZGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFRTyxNQUFNQSxrQkFBTixDQUF5QjtBQVFyQkMsRUFBQUEsV0FBVyxDQUFDQyxTQUFELEVBQW1DO0FBQUEsU0FQcENBLFNBT29DO0FBQUEsU0FON0NDLE9BTTZDO0FBQUEsU0FKckNDLFFBSXFDLEdBSjFCLCtCQUkwQjtBQUFBLFNBSHJDQyxRQUdxQyxHQUgxQiwrQkFHMEI7QUFBQSxTQUY3Q0MsWUFFNkM7O0FBQUEsU0EwRHBDQyxVQTFEb0MsR0EwRHZCLFlBQTJCO0FBQ3JELFlBQU0sS0FBS0MsSUFBTCxFQUFOO0FBQ0gsS0E1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Q0o7O0FBaEUyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoaWxkUHJvY2Vzcywgc3Bhd24gfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuXG5pbXBvcnQgeyBDb25zb2xlQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Db25zb2xlQXBwbGljYXRpb24vQ29uc29sZUFwcGxpY2F0aW9uXCI7XG5pbXBvcnQgeyBjcmVhdGVFdmVudCwgSUV2ZW50U3Vic2NyaXB0aW9uIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvRXZlbnRPYmplY3RcIjtcblxuaW1wb3J0IHsgUHJvY2Vzc1V0aWxzIH0gZnJvbSBcIi4vUHJvY2Vzc1V0aWxzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hlbGxQcm9jZXNzU3RhcnRJbmZvIHtcbiAgICBjb21tYW5kOiBzdHJpbmc7XG4gICAgYXJnczogc3RyaW5nW107XG4gICAgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFNoZWxsUHJvY2Vzc0hhbmRsZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGFydEluZm86IFNoZWxsUHJvY2Vzc1N0YXJ0SW5mbztcbiAgICBwcml2YXRlIHByb2Nlc3M/OiBDaGlsZFByb2Nlc3M7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgb25TdGRPdXQgPSBjcmVhdGVFdmVudDxbc3RyaW5nXT4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgb25TdGRFcnIgPSBjcmVhdGVFdmVudDxbc3RyaW5nXT4oKTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IElFdmVudFN1YnNjcmlwdGlvbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzdGFydEluZm86IFNoZWxsUHJvY2Vzc1N0YXJ0SW5mbykge1xuICAgICAgICB0aGlzLnN0YXJ0SW5mbyA9IHN0YXJ0SW5mbztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMga2lsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9jZXNzVG9LaWxsID0gdGhpcy5wcm9jZXNzO1xuICAgICAgICBpZiAocHJvY2Vzc1RvS2lsbCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb2Nlc3Mgbm90IHN0YXJ0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGlkID0gcHJvY2Vzc1RvS2lsbC5waWQ7XG4gICAgICAgIHRoaXMucHJvY2VzcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgcHJvY2Vzc1RvS2lsbC5zdGRlcnI/LnBhdXNlKCk7XG4gICAgICAgIHByb2Nlc3NUb0tpbGwuc3Rkb3V0Py5wYXVzZSgpO1xuICAgICAgICBhd2FpdCBQcm9jZXNzVXRpbHMua2lsbFRyZWVBc3luYyhwaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YWl0T3V0cHV0SW5jbHVkZXNTdHJpbmcoZXhwZWN0ZWRTdHJpbmc6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLm9uU3RkT3V0LnN1YnNjcmliZShvdXRwdXQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvdXRwdXQuaW5jbHVkZXMoZXhwZWN0ZWRTdHJpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGFydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBDb25zb2xlQXBwbGljYXRpb24ub25FeGl0LnN1YnNjcmliZSh0aGlzLmhhbmRsZUV4aXQpO1xuICAgICAgICBjb25zdCBbc2hlbGxFeGUsIHNoZWxsQXJnXSA9IHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIiA/IFtcImNtZC5leGVcIiwgXCIvY1wiXSA6IFtcIi9iaW4vc2hcIiwgXCItY1wiXTtcbiAgICAgICAgdGhpcy5wcm9jZXNzID0gc3Bhd24oc2hlbGxFeGUsIFtzaGVsbEFyZywgdGhpcy5zdGFydEluZm8uY29tbWFuZCwgLi4udGhpcy5zdGFydEluZm8uYXJnc10sIHtcbiAgICAgICAgICAgIGN3ZDogdGhpcy5zdGFydEluZm8ud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgICAgIHN0ZGlvOiBcInBpcGVcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJvY2Vzcy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU3RkT3V0LmVtaXQoZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJvY2Vzcy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU3RkRXJyLmVtaXQoZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdhaXRGb3JFeGl0KCk6IFByb21pc2U8bnVsbCB8IG51bWJlcj4ge1xuICAgICAgICBjb25zdCBjdXJyZW50UHJvY2VzcyA9IHRoaXMucHJvY2VzcztcbiAgICAgICAgaWYgKGN1cnJlbnRQcm9jZXNzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPG51bGwgfCBudW1iZXI+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9jZXNzLm9uKFwiZXhpdFwiLCBjb2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcHJvY2VzcyBzdGFydGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVFeGl0ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmtpbGwoKTtcbiAgICB9O1xufVxuIl19
77
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hpbGRfcHJvY2VzcyIsInJlcXVpcmUiLCJfQ29uc29sZUFwcGxpY2F0aW9uIiwiX0V2ZW50T2JqZWN0IiwiX1Byb2Nlc3NVdGlscyIsIlNoZWxsUHJvY2Vzc0hhbmRsZSIsImNvbnN0cnVjdG9yIiwic3RhcnRJbmZvIiwicHJvY2VzcyIsIm9uU3RkT3V0IiwiY3JlYXRlRXZlbnQiLCJvblN0ZEVyciIsInN1YnNjcmlwdGlvbiIsImhhbmRsZUV4aXQiLCJraWxsIiwiX3Byb2Nlc3NUb0tpbGwkc3RkZXJyIiwiX3Byb2Nlc3NUb0tpbGwkc3Rkb3V0IiwidW5kZWZpbmVkIiwidW5zdWJzY3JpYmUiLCJwcm9jZXNzVG9LaWxsIiwiRXJyb3IiLCJwaWQiLCJzdGRlcnIiLCJwYXVzZSIsInN0ZG91dCIsIlByb2Nlc3NVdGlscyIsImtpbGxUcmVlQXN5bmMiLCJ3YWl0T3V0cHV0SW5jbHVkZXNTdHJpbmciLCJleHBlY3RlZFN0cmluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwic3Vic2NyaWJlIiwib3V0cHV0IiwiaW5jbHVkZXMiLCJzdGFydCIsIl90aGlzJHByb2Nlc3Mkc3Rkb3V0IiwiX3RoaXMkcHJvY2VzcyRzdGRlcnIiLCJDb25zb2xlQXBwbGljYXRpb24iLCJvbkV4aXQiLCJzaGVsbEV4ZSIsInNoZWxsQXJnIiwicGxhdGZvcm0iLCJzcGF3biIsImNvbW1hbmQiLCJhcmdzIiwiY3dkIiwid29ya2luZ0RpcmVjdG9yeSIsInN0ZGlvIiwib24iLCJkYXRhIiwiZW1pdCIsInRvU3RyaW5nIiwid2FpdEZvckV4aXQiLCJjdXJyZW50UHJvY2VzcyIsImNvZGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL0J1aWxkVGFza3MvUHJvY2Vzc1V0aWxzL1NoZWxsUHJvY2Vzc0hhbmRsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGlsZFByb2Nlc3MsIHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcblxuaW1wb3J0IHsgQ29uc29sZUFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvQ29uc29sZUFwcGxpY2F0aW9uL0NvbnNvbGVBcHBsaWNhdGlvblwiO1xuaW1wb3J0IHsgY3JlYXRlRXZlbnQsIElFdmVudFN1YnNjcmlwdGlvbiB9IGZyb20gXCIuLi8uLi9Db21tb25zL0V2ZW50T2JqZWN0XCI7XG5cbmltcG9ydCB7IFByb2Nlc3NVdGlscyB9IGZyb20gXCIuL1Byb2Nlc3NVdGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNoZWxsUHJvY2Vzc1N0YXJ0SW5mbyB7XG4gICAgY29tbWFuZDogc3RyaW5nO1xuICAgIGFyZ3M6IHN0cmluZ1tdO1xuICAgIHdvcmtpbmdEaXJlY3Rvcnk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTaGVsbFByb2Nlc3NIYW5kbGUge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhcnRJbmZvOiBTaGVsbFByb2Nlc3NTdGFydEluZm87XG4gICAgcHJpdmF0ZSBwcm9jZXNzPzogQ2hpbGRQcm9jZXNzO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IG9uU3RkT3V0ID0gY3JlYXRlRXZlbnQ8W3N0cmluZ10+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5IG9uU3RkRXJyID0gY3JlYXRlRXZlbnQ8W3N0cmluZ10+KCk7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBJRXZlbnRTdWJzY3JpcHRpb247XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc3RhcnRJbmZvOiBTaGVsbFByb2Nlc3NTdGFydEluZm8pIHtcbiAgICAgICAgdGhpcy5zdGFydEluZm8gPSBzdGFydEluZm87XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGtpbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvY2Vzc1RvS2lsbCA9IHRoaXMucHJvY2VzcztcbiAgICAgICAgaWYgKHByb2Nlc3NUb0tpbGwgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9jZXNzIG5vdCBzdGFydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBpZCA9IHByb2Nlc3NUb0tpbGwucGlkO1xuICAgICAgICB0aGlzLnByb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIHByb2Nlc3NUb0tpbGwuc3RkZXJyPy5wYXVzZSgpO1xuICAgICAgICBwcm9jZXNzVG9LaWxsLnN0ZG91dD8ucGF1c2UoKTtcbiAgICAgICAgYXdhaXQgUHJvY2Vzc1V0aWxzLmtpbGxUcmVlQXN5bmMocGlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2FpdE91dHB1dEluY2x1ZGVzU3RyaW5nKGV4cGVjdGVkU3RyaW5nOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5vblN0ZE91dC5zdWJzY3JpYmUob3V0cHV0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3V0cHV0LmluY2x1ZGVzKGV4cGVjdGVkU3RyaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gQ29uc29sZUFwcGxpY2F0aW9uLm9uRXhpdC5zdWJzY3JpYmUodGhpcy5oYW5kbGVFeGl0KTtcbiAgICAgICAgY29uc3QgW3NoZWxsRXhlLCBzaGVsbEFyZ10gPSBwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIgPyBbXCJjbWQuZXhlXCIsIFwiL2NcIl0gOiBbXCIvYmluL3NoXCIsIFwiLWNcIl07XG4gICAgICAgIHRoaXMucHJvY2VzcyA9IHNwYXduKHNoZWxsRXhlLCBbc2hlbGxBcmcsIHRoaXMuc3RhcnRJbmZvLmNvbW1hbmQsIC4uLnRoaXMuc3RhcnRJbmZvLmFyZ3NdLCB7XG4gICAgICAgICAgICBjd2Q6IHRoaXMuc3RhcnRJbmZvLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICAgICAgICBzdGRpbzogXCJwaXBlXCIsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb2Nlc3Muc3Rkb3V0Py5vbihcImRhdGFcIiwgKGRhdGE6IEJ1ZmZlciB8IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblN0ZE91dC5lbWl0KGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb2Nlc3Muc3RkZXJyPy5vbihcImRhdGFcIiwgKGRhdGE6IEJ1ZmZlciB8IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblN0ZEVyci5lbWl0KGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YWl0Rm9yRXhpdCgpOiBQcm9taXNlPG51bGwgfCBudW1iZXI+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFByb2Nlc3MgPSB0aGlzLnByb2Nlc3M7XG4gICAgICAgIGlmIChjdXJyZW50UHJvY2VzcyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxudWxsIHwgbnVtYmVyPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJvY2Vzcy5vbihcImV4aXRcIiwgY29kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29kZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHByb2Nlc3Mgc3RhcnRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlRXhpdCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5raWxsKCk7XG4gICAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsY0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsbUJBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLGFBQUEsR0FBQUgsT0FBQTtBQVFPLE1BQU1JLGtCQUFrQixDQUFDO0VBUXJCQyxXQUFXQSxDQUFDQyxTQUFnQyxFQUFFO0lBQUEsS0FQcENBLFNBQVM7SUFBQSxLQUNsQkMsT0FBTztJQUFBLEtBRUNDLFFBQVEsR0FBRyxJQUFBQyx3QkFBVyxFQUFXLENBQUM7SUFBQSxLQUNsQ0MsUUFBUSxHQUFHLElBQUFELHdCQUFXLEVBQVcsQ0FBQztJQUFBLEtBQzFDRSxZQUFZO0lBQUEsS0E0REhDLFVBQVUsR0FBRyxZQUEyQjtNQUNyRCxNQUFNLElBQUksQ0FBQ0MsSUFBSSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQTNERyxJQUFJLENBQUNQLFNBQVMsR0FBR0EsU0FBUztFQUM5QjtFQUVBLE1BQWFPLElBQUlBLENBQUEsRUFBa0I7SUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxxQkFBQTtJQUMvQixJQUFJLElBQUksQ0FBQ0osWUFBWSxJQUFJSyxTQUFTLEVBQUU7TUFDaEMsSUFBSSxDQUFDTCxZQUFZLENBQUNNLFdBQVcsQ0FBQyxDQUFDO0lBQ25DO0lBQ0EsTUFBTUMsYUFBYSxHQUFHLElBQUksQ0FBQ1gsT0FBTztJQUNsQyxJQUFJVyxhQUFhLElBQUlGLFNBQVMsRUFBRTtNQUM1QixNQUFNLElBQUlHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQztJQUMxQztJQUNBLE1BQU1DLEdBQUcsR0FBR0Ys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
@@ -14,100 +14,73 @@ exports.resolveEngineVersion = resolveEngineVersion;
14
14
  exports.resolveGeneratorVersion = resolveGeneratorVersion;
15
15
  exports.resolveLocalEngineSource = resolveLocalEngineSource;
16
16
  exports.resolveLocalGeneratorSource = resolveLocalGeneratorSource;
17
-
18
17
  var semver = _interopRequireWildcard(require("semver"));
19
-
20
18
  var _shelljs = require("shelljs");
21
-
22
19
  var _StaticLogger = require("../Commons/Logging/StaticLogger");
23
-
24
20
  var _Version = require("./Version");
25
-
26
21
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
-
28
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
-
30
23
  const candyGeneratorPackageName = "@kontur.candy/generator";
31
24
  const candyEnginePackageName = "@kontur.candy/engine";
32
-
33
25
  function isStableVersion(version) {
34
26
  const parsedVersion = semver.parse(version);
35
-
36
27
  if (parsedVersion == undefined) {
37
28
  return false;
38
29
  }
39
-
40
30
  const {
41
31
  prerelease
42
32
  } = parsedVersion;
43
33
  return prerelease.length === 0;
44
34
  }
45
-
46
35
  function isPrereleaseVersionWithPreId(version, preid) {
47
36
  const parsedVersion = semver.parse(version);
48
-
49
37
  if (parsedVersion == undefined) {
50
38
  return false;
51
39
  }
52
-
53
40
  const {
54
41
  prerelease
55
42
  } = parsedVersion;
56
43
  return prerelease.length > 0 && prerelease[0] === preid;
57
44
  }
58
-
59
45
  async function isEngineVersionExists(version) {
60
46
  return (await getPackageVersionsInReverseOrder(candyEnginePackageName)).includes(version);
61
47
  }
62
-
63
48
  async function getLastStableEngineVersion() {
64
49
  const sortedVersions = await getPackageVersionsInReverseOrder(candyEnginePackageName);
65
-
66
50
  for (const version of sortedVersions) {
67
51
  if (isStableVersion(version)) {
68
52
  return version;
69
53
  }
70
54
  }
71
-
72
55
  throw new Error("Cannot find last stable engine version");
73
56
  }
74
-
75
57
  async function getLastStableGeneratorVersion() {
76
58
  const sortedVersions = await getPackageVersionsInReverseOrder(candyGeneratorPackageName);
77
-
78
59
  for (const version of sortedVersions) {
79
60
  if (isStableVersion(version)) {
80
61
  return version;
81
62
  }
82
63
  }
83
-
84
64
  throw new Error("Cannot find last stable generator version");
85
65
  }
86
-
87
66
  async function getLastEnginePrereleaseVersion(preid) {
88
67
  const sortedVersions = await getPackageVersionsInReverseOrder(candyEnginePackageName);
89
-
90
68
  for (const version of sortedVersions) {
91
69
  if (isPrereleaseVersionWithPreId(version, preid)) {
92
70
  return version;
93
71
  }
94
72
  }
95
-
96
73
  throw new Error(`Cannot find prerelease for pre:${preid} engine version`);
97
74
  }
98
-
99
75
  async function getLastGeneratorPrereleaseVersion(preid) {
100
76
  const sortedVersions = await getPackageVersionsInReverseOrder(candyGeneratorPackageName);
101
-
102
77
  for (const version of sortedVersions) {
103
78
  if (isPrereleaseVersionWithPreId(version, preid)) {
104
79
  return version;
105
80
  }
106
81
  }
107
-
108
82
  throw new Error(`Cannot find prerelease for pre:${preid} generator version`);
109
83
  }
110
-
111
84
  async function resolveGeneratorVersion(versionSpec, logger = (0, _StaticLogger.getLogger)()) {
112
85
  const version = await getSuitableVersion(versionSpec, candyGeneratorPackageName);
113
86
  logger.withPrefix("GENERATOR").log(`Resolved version ${(0, _Version.candyVersionSpecToString)(versionSpec)} to ${version}`);
@@ -116,7 +89,6 @@ async function resolveGeneratorVersion(versionSpec, logger = (0, _StaticLogger.g
116
89
  version: version
117
90
  };
118
91
  }
119
-
120
92
  function resolveLocalGeneratorSource(engineDirectory, logger = (0, _StaticLogger.getLogger)()) {
121
93
  logger.withPrefix("GENERATOR").log(`Resolved version 'local'`);
122
94
  return {
@@ -124,7 +96,6 @@ function resolveLocalGeneratorSource(engineDirectory, logger = (0, _StaticLogger
124
96
  path: engineDirectory
125
97
  };
126
98
  }
127
-
128
99
  function resolveLocalEngineSource(engineDirectory, logger = (0, _StaticLogger.getLogger)()) {
129
100
  logger.withPrefix("ENGINE").log(`Resolved version 'local'`);
130
101
  return {
@@ -132,7 +103,6 @@ function resolveLocalEngineSource(engineDirectory, logger = (0, _StaticLogger.ge
132
103
  path: engineDirectory
133
104
  };
134
105
  }
135
-
136
106
  async function resolveEngineVersion(versionSpec, logger = (0, _StaticLogger.getLogger)()) {
137
107
  const version = await getSuitableVersion(versionSpec, candyEnginePackageName);
138
108
  logger.withPrefix("ENGINE").log(`Resolved version ${(0, _Version.candyVersionSpecToString)(versionSpec)} to ${version}`);
@@ -141,57 +111,42 @@ async function resolveEngineVersion(versionSpec, logger = (0, _StaticLogger.getL
141
111
  version: version
142
112
  };
143
113
  }
144
-
145
114
  async function getSuitableVersion(versionSpec, packageName) {
146
115
  const sortedVersions = await getPackageVersionsInReverseOrder(packageName);
147
-
148
116
  if (versionSpec.type === "pre") {
149
117
  const expectedPrerelease = versionSpec.preId;
150
-
151
118
  for (const version of sortedVersions) {
152
119
  const parsedVersion = semver.parse(version);
153
-
154
120
  if (parsedVersion == undefined) {
155
121
  continue;
156
122
  }
157
-
158
123
  const {
159
124
  prerelease
160
125
  } = parsedVersion;
161
-
162
126
  if (prerelease.length > 0) {
163
127
  if (prerelease[0] === expectedPrerelease) {
164
128
  return version;
165
129
  }
166
130
  }
167
131
  }
168
-
169
132
  throw new Error(`Package ${packageName} does not contains version satisfies pre:${versionSpec.preId}`);
170
133
  }
171
-
172
134
  const result = sortedVersions.find(x => semver.satisfies(x, versionSpec.version));
173
-
174
135
  if (result == undefined) {
175
136
  throw new Error(`Package ${packageName} does not contains version satisfies ${versionSpec.version}`);
176
137
  }
177
-
178
138
  return result;
179
139
  }
180
-
181
140
  async function getPrereleaseVersionFormJson(usePrereleaseVersion) {
182
141
  const prereleaseVersion = await getLastEnginePrereleaseVersion(usePrereleaseVersion);
183
142
  return prereleaseVersion != undefined ? `pre:${usePrereleaseVersion}` : undefined;
184
143
  }
185
-
186
144
  const packageVersionsCache = new Map();
187
-
188
145
  async function getPackageVersionsInReverseOrder(packageName) {
189
146
  const cachedResult = packageVersionsCache.get(packageName);
190
-
191
147
  if (cachedResult != undefined) {
192
148
  return cachedResult;
193
149
  }
194
-
195
150
  const output = await new Promise((resolve, reject) => {
196
151
  (0, _shelljs.exec)(`npm view ${packageName} versions --json`, {
197
152
  async: true,
@@ -203,11 +158,11 @@ async function getPackageVersionsInReverseOrder(packageName) {
203
158
  resolve(stdout);
204
159
  }
205
160
  });
206
- }); // tslint:disable-next-line no-unsafe-any
207
-
161
+ });
162
+ // tslint:disable-next-line no-unsafe-any
208
163
  const versions = JSON.parse(output.trim());
209
164
  const sortedVersions = versions.sort(semver.compare).reverse();
210
165
  packageVersionsCache.set(packageName, sortedVersions);
211
166
  return sortedVersions;
212
167
  }
213
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL1B1Ymxpc2hlZFZlcnNpb25VdGlscy50cyJdLCJuYW1lcyI6WyJjYW5keUdlbmVyYXRvclBhY2thZ2VOYW1lIiwiY2FuZHlFbmdpbmVQYWNrYWdlTmFtZSIsImlzU3RhYmxlVmVyc2lvbiIsInZlcnNpb24iLCJwYXJzZWRWZXJzaW9uIiwic2VtdmVyIiwicGFyc2UiLCJ1bmRlZmluZWQiLCJwcmVyZWxlYXNlIiwibGVuZ3RoIiwiaXNQcmVyZWxlYXNlVmVyc2lvbldpdGhQcmVJZCIsInByZWlkIiwiaXNFbmdpbmVWZXJzaW9uRXhpc3RzIiwiZ2V0UGFja2FnZVZlcnNpb25zSW5SZXZlcnNlT3JkZXIiLCJpbmNsdWRlcyIsImdldExhc3RTdGFibGVFbmdpbmVWZXJzaW9uIiwic29ydGVkVmVyc2lvbnMiLCJFcnJvciIsImdldExhc3RTdGFibGVHZW5lcmF0b3JWZXJzaW9uIiwiZ2V0TGFzdEVuZ2luZVByZXJlbGVhc2VWZXJzaW9uIiwiZ2V0TGFzdEdlbmVyYXRvclByZXJlbGVhc2VWZXJzaW9uIiwicmVzb2x2ZUdlbmVyYXRvclZlcnNpb24iLCJ2ZXJzaW9uU3BlYyIsImxvZ2dlciIsImdldFN1aXRhYmxlVmVyc2lvbiIsIndpdGhQcmVmaXgiLCJsb2ciLCJ0eXBlIiwicmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlIiwiZW5naW5lRGlyZWN0b3J5IiwicGF0aCIsInJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZSIsInJlc29sdmVFbmdpbmVWZXJzaW9uIiwicGFja2FnZU5hbWUiLCJleHBlY3RlZFByZXJlbGVhc2UiLCJwcmVJZCIsInJlc3VsdCIsImZpbmQiLCJ4Iiwic2F0aXNmaWVzIiwiZ2V0UHJlcmVsZWFzZVZlcnNpb25Gb3JtSnNvbiIsInVzZVByZXJlbGVhc2VWZXJzaW9uIiwicHJlcmVsZWFzZVZlcnNpb24iLCJwYWNrYWdlVmVyc2lvbnNDYWNoZSIsIk1hcCIsImNhY2hlZFJlc3VsdCIsImdldCIsIm91dHB1dCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiYXN5bmMiLCJzaWxlbnQiLCJjb2RlIiwic3Rkb3V0Iiwic3RkZXJyIiwidmVyc2lvbnMiLCJKU09OIiwidHJpbSIsInNvcnQiLCJjb21wYXJlIiwicmV2ZXJzZSIsInNldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7QUFJQTs7Ozs7O0FBRUEsTUFBTUEseUJBQXlCLEdBQUcseUJBQWxDO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsc0JBQS9COztBQUVBLFNBQVNDLGVBQVQsQ0FBeUJDLE9BQXpCLEVBQW1EO0FBQy9DLFFBQU1DLGFBQWEsR0FBR0MsTUFBTSxDQUFDQyxLQUFQLENBQWFILE9BQWIsQ0FBdEI7O0FBQ0EsTUFBSUMsYUFBYSxJQUFJRyxTQUFyQixFQUFnQztBQUM1QixXQUFPLEtBQVA7QUFDSDs7QUFDRCxRQUFNO0FBQUVDLElBQUFBO0FBQUYsTUFBaUJKLGFBQXZCO0FBQ0EsU0FBT0ksVUFBVSxDQUFDQyxNQUFYLEtBQXNCLENBQTdCO0FBQ0g7O0FBRUQsU0FBU0MsNEJBQVQsQ0FBc0NQLE9BQXRDLEVBQXVEUSxLQUF2RCxFQUErRTtBQUMzRSxRQUFNUCxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhSCxPQUFiLENBQXRCOztBQUNBLE1BQUlDLGFBQWEsSUFBSUcsU0FBckIsRUFBZ0M7QUFDNUIsV0FBTyxLQUFQO0FBQ0g7O0FBQ0QsUUFBTTtBQUFFQyxJQUFBQTtBQUFGLE1BQWlCSixhQUF2QjtBQUNBLFNBQU9JLFVBQVUsQ0FBQ0MsTUFBWCxHQUFvQixDQUFwQixJQUF5QkQsVUFBVSxDQUFDLENBQUQsQ0FBVixLQUFrQkcsS0FBbEQ7QUFDSDs7QUFFTSxlQUFlQyxxQkFBZixDQUFxQ1QsT0FBckMsRUFBd0U7QUFDM0UsU0FBTyxDQUFDLE1BQU1VLGdDQUFnQyxDQUFDWixzQkFBRCxDQUF2QyxFQUFpRWEsUUFBakUsQ0FBMEVYLE9BQTFFLENBQVA7QUFDSDs7QUFF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SixLQU5EO0FBT0gsR0FSb0IsQ0FBckIsQ0FMb0YsQ0FjcEY7O0FBQ0EsUUFBTUUsUUFBa0IsR0FBR0MsSUFBSSxDQUFDbkQsS0FBTCxDQUFXeUMsTUFBTSxDQUFDVyxJQUFQLEVBQVgsQ0FBM0I7QUFDQSxRQUFNMUMsY0FBYyxHQUFHd0MsUUFBUSxDQUFDRyxJQUFULENBQWN0RCxNQUFNLENBQUN1RCxPQUFyQixFQUE4QkMsT0FBOUIsRUFBdkI7QUFDQWxCLEVBQUFBLG9CQUFvQixDQUFDbUIsR0FBckIsQ0FBeUI3QixXQUF6QixFQUFzQ2pCLGNBQXRDO0FBQ0EsU0FBT0EsY0FBUDtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwic2hlbGxqc1wiO1xuXG5pbXBvcnQgeyBJTG9nZ2VyIH0gZnJvbSBcIi4uL0NvbW1vbnMvTG9nZ2luZy9JTG9nZ2VyXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiLi4vQ29tbW9ucy9Mb2dnaW5nL1N0YXRpY0xvZ2dlclwiO1xuXG5pbXBvcnQgeyBFbmdpbmVTb3VyY2UgfSBmcm9tIFwiLi9FbmdpbmUvRW5naW5lU291cmNlXCI7XG5pbXBvcnQgeyBHZW5lcmF0b3JTb3VyY2UgfSBmcm9tIFwiLi9HZW5lcmF0b3IvQWNxdWlyZUZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7IENhbmR5VmVyc2lvblNwZWMsIGNhbmR5VmVyc2lvblNwZWNUb1N0cmluZyB9IGZyb20gXCIuL1ZlcnNpb25cIjtcblxuY29uc3QgY2FuZHlHZW5lcmF0b3JQYWNrYWdlTmFtZSA9IFwiQGtvbnR1ci5jYW5keS9nZW5lcmF0b3JcIjtcbmNvbnN0IGNhbmR5RW5naW5lUGFja2FnZU5hbWUgPSBcIkBrb250dXIuY2FuZHkvZW5naW5lXCI7XG5cbmZ1bmN0aW9uIGlzU3RhYmxlVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYXJzZWRWZXJzaW9uID0gc2VtdmVyLnBhcnNlKHZlcnNpb24pO1xuICAgIGlmIChwYXJzZWRWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHsgcHJlcmVsZWFzZSB9ID0gcGFyc2VkVmVyc2lvbjtcbiAgICByZXR1cm4gcHJlcmVsZWFzZS5sZW5ndGggPT09IDA7XG59XG5cbmZ1bmN0aW9uIGlzUHJlcmVsZWFzZVZlcnNpb25XaXRoUHJlSWQodmVyc2lvbjogc3RyaW5nLCBwcmVpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyc2VkVmVyc2lvbiA9IHNlbXZlci5wYXJzZSh2ZXJzaW9uKTtcbiAgICBpZiAocGFyc2VkVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB7IHByZXJlbGVhc2UgfSA9IHBhcnNlZFZlcnNpb247XG4gICAgcmV0dXJuIHByZXJlbGVhc2UubGVuZ3RoID4gMCAmJiBwcmVyZWxlYXNlWzBdID09PSBwcmVpZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzRW5naW5lVmVyc2lvbkV4aXN0cyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IGdldFBhY2thZ2VWZXJzaW9uc0luUmV2ZXJzZU9yZGVyKGNhbmR5RW5naW5lUGFja2FnZU5hbWUpKS5pbmNsdWRlcyh2ZXJzaW9uKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExhc3RTdGFibGVFbmdpbmVWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgc29ydGVkVmVyc2lvbnMgPSBhd2FpdCBnZXRQYWNrYWdlVmVyc2lvbnNJblJldmVyc2VPcmRlcihjYW5keUVuZ2luZVBhY2thZ2VOYW1lKTtcbiAgICBmb3IgKGNvbnN0IHZlcnNpb24gb2Ygc29ydGVkVmVyc2lvbnMpIHtcbiAgICAgICAgaWYgKGlzU3RhYmxlVmVyc2lvbih2ZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbGFzdCBzdGFibGUgZW5naW5lIHZlcnNpb25cIik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRMYXN0U3RhYmxlR2VuZXJhdG9yVmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHNvcnRlZFZlcnNpb25zID0gYXdhaXQgZ2V0UGFja2FnZVZlcnNpb25zSW5SZXZlcnNlT3JkZXIoY2FuZHlHZW5lcmF0b3JQYWNrYWdlTmFtZSk7XG4gICAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIHNvcnRlZFZlcnNpb25zKSB7XG4gICAgICAgIGlmIChpc1N0YWJsZVZlcnNpb24odmVyc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIGxhc3Qgc3RhYmxlIGdlbmVyYXRvciB2ZXJzaW9uXCIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGFzdEVuZ2luZVByZXJlbGVhc2VWZXJzaW9uKHByZWlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHNvcnRlZFZlcnNpb25zID0gYXdhaXQgZ2V0UGFja2FnZVZlcnNpb25zSW5SZXZlcnNlT3JkZXIoY2FuZHlFbmdpbmVQYWNrYWdlTmFtZSk7XG4gICAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIHNvcnRlZFZlcnNpb25zKSB7XG4gICAgICAgIGlmIChpc1ByZXJlbGVhc2VWZXJzaW9uV2l0aFByZUlkKHZlcnNpb24sIHByZWlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBwcmVyZWxlYXNlIGZvciBwcmU6JHtwcmVpZH0gZW5naW5lIHZlcnNpb25gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExhc3RHZW5lcmF0b3JQcmVyZWxlYXNlVmVyc2lvbihwcmVpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzb3J0ZWRWZXJzaW9ucyA9IGF3YWl0IGdldFBhY2thZ2VWZXJzaW9uc0luUmV2ZXJzZU9yZGVyKGNhbmR5R2VuZXJhdG9yUGFja2FnZU5hbWUpO1xuICAgIGZvciAoY29uc3QgdmVyc2lvbiBvZiBzb3J0ZWRWZXJzaW9ucykge1xuICAgICAgICBpZiAoaXNQcmVyZWxlYXNlVmVyc2lvbldpdGhQcmVJZCh2ZXJzaW9uLCBwcmVpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcHJlcmVsZWFzZSBmb3IgcHJlOiR7cHJlaWR9IGdlbmVyYXRvciB2ZXJzaW9uYCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbihcbiAgICB2ZXJzaW9uU3BlYzogQ2FuZHlWZXJzaW9uU3BlYyxcbiAgICBsb2dnZXI6IElMb2dnZXIgPSBnZXRMb2dnZXIoKVxuKTogUHJvbWlzZTxHZW5lcmF0b3JTb3VyY2U+IHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0U3VpdGFibGVWZXJzaW9uKHZlcnNpb25TcGVjLCBjYW5keUdlbmVyYXRvclBhY2thZ2VOYW1lKTtcbiAgICBsb2dnZXIud2l0aFByZWZpeChcIkdFTkVSQVRPUlwiKS5sb2coYFJlc29sdmVkIHZlcnNpb24gJHtjYW5keVZlcnNpb25TcGVjVG9TdHJpbmcodmVyc2lvblNwZWMpfSB0byAke3ZlcnNpb259YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJQdWJsaXNoZWRHZW5lcmF0b3JcIixcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbixcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlKGVuZ2luZURpcmVjdG9yeTogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgPSBnZXRMb2dnZXIoKSk6IEdlbmVyYXRvclNvdXJjZSB7XG4gICAgbG9nZ2VyLndpdGhQcmVmaXgoXCJHRU5FUkFUT1JcIikubG9nKGBSZXNvbHZlZCB2ZXJzaW9uICdsb2NhbCdgKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkdlbmVyYXRvclNvdXJjZXNcIixcbiAgICAgICAgcGF0aDogZW5naW5lRGlyZWN0b3J5LFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTG9jYWxFbmdpbmVTb3VyY2UoZW5naW5lRGlyZWN0b3J5OiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciA9IGdldExvZ2dlcigpKTogRW5naW5lU291cmNlIHtcbiAgICBsb2dnZXIud2l0aFByZWZpeChcIkVOR0lORVwiKS5sb2coYFJlc29sdmVkIHZlcnNpb24gJ2xvY2FsJ2ApO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiTG9jYWxFbmdpbmVTb3VyY2VzXCIsXG4gICAgICAgIHBhdGg6IGVuZ2luZURpcmVjdG9yeSxcbiAgICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUVuZ2luZVZlcnNpb24oXG4gICAgdmVyc2lvblNwZWM6IENhbmR5VmVyc2lvblNwZWMsXG4gICAgbG9nZ2VyOiBJTG9nZ2VyID0gZ2V0TG9nZ2VyKClcbik6IFByb21pc2U8RW5naW5lU291cmNlPiB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldFN1aXRhYmxlVmVyc2lvbih2ZXJzaW9uU3BlYywgY2FuZHlFbmdpbmVQYWNrYWdlTmFtZSk7XG4gICAgbG9nZ2VyLndpdGhQcmVmaXgoXCJFTkdJTkVcIikubG9nKGBSZXNvbHZlZCB2ZXJzaW9uICR7Y2FuZHlWZXJzaW9uU3BlY1RvU3RyaW5nKHZlcnNpb25TcGVjKX0gdG8gJHt2ZXJzaW9ufWApO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiUHVibGlzaGVkRW5naW5lXCIsXG4gICAgICAgIHZlcnNpb246IHZlcnNpb24sXG4gICAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFN1aXRhYmxlVmVyc2lvbih2ZXJzaW9uU3BlYzogQ2FuZHlWZXJzaW9uU3BlYywgcGFja2FnZU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgc29ydGVkVmVyc2lvbnMgPSBhd2FpdCBnZXRQYWNrYWdlVmVyc2lvbnNJblJldmVyc2VPcmRlcihwYWNrYWdlTmFtZSk7XG4gICAgaWYgKHZlcnNpb25TcGVjLnR5cGUgPT09IFwicHJlXCIpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRQcmVyZWxlYXNlID0gdmVyc2lvblNwZWMucHJlSWQ7XG4gICAgICAgIGZvciAoY29uc3QgdmVyc2lvbiBvZiBzb3J0ZWRWZXJzaW9ucykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmVyc2lvbiA9IHNlbXZlci5wYXJzZSh2ZXJzaW9uKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBwcmVyZWxlYXNlIH0gPSBwYXJzZWRWZXJzaW9uO1xuICAgICAgICAgICAgaWYgKHByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChwcmVyZWxlYXNlWzBdID09PSBleHBlY3RlZFByZXJlbGVhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFja2FnZSAke3BhY2thZ2VOYW1lfSBkb2VzIG5vdCBjb250YWlucyB2ZXJzaW9uIHNhdGlzZmllcyBwcmU6JHt2ZXJzaW9uU3BlYy5wcmVJZH1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gc29ydGVkVmVyc2lvbnMuZmluZCh4ID0+IHNlbXZlci5zYXRpc2ZpZXMoeCwgdmVyc2lvblNwZWMudmVyc2lvbikpO1xuICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFja2FnZSAke3BhY2thZ2VOYW1lfSBkb2VzIG5vdCBjb250YWlucyB2ZXJzaW9uIHNhdGlzZmllcyAke3ZlcnNpb25TcGVjLnZlcnNpb259YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcmVyZWxlYXNlVmVyc2lvbkZvcm1Kc29uKHVzZVByZXJlbGVhc2VWZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHByZXJlbGVhc2VWZXJzaW9uID0gYXdhaXQgZ2V0TGFzdEVuZ2luZVByZXJlbGVhc2VWZXJzaW9uKHVzZVByZXJlbGVhc2VWZXJzaW9uKTtcblxuICAgIHJldHVybiBwcmVyZWxlYXNlVmVyc2lvbiAhPSB1bmRlZmluZWQgPyBgcHJlOiR7dXNlUHJlcmVsZWFzZVZlcnNpb259YCA6IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgcGFja2FnZVZlcnNpb25zQ2FjaGU6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiA9IG5ldyBNYXAoKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb25zSW5SZXZlcnNlT3JkZXIocGFja2FnZU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBwYWNrYWdlVmVyc2lvbnNDYWNoZS5nZXQocGFja2FnZU5hbWUpO1xuICAgIGlmIChjYWNoZWRSZXN1bHQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBleGVjKGBucG0gdmlldyAke3BhY2thZ2VOYW1lfSB2ZXJzaW9ucyAtLWpzb25gLCB7IGFzeW5jOiB0cnVlLCBzaWxlbnQ6IHRydWUgfSwgKGNvZGUsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3Ioc3RkZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1hbnlcbiAgICBjb25zdCB2ZXJzaW9uczogc3RyaW5nW10gPSBKU09OLnBhcnNlKG91dHB1dC50cmltKCkpO1xuICAgIGNvbnN0IHNvcnRlZFZlcnNpb25zID0gdmVyc2lvbnMuc29ydChzZW12ZXIuY29tcGFyZSkucmV2ZXJzZSgpO1xuICAgIHBhY2thZ2VWZXJzaW9uc0NhY2hlLnNldChwYWNrYWdlTmFtZSwgc29ydGVkVmVyc2lvbnMpO1xuICAgIHJldHVybiBzb3J0ZWRWZXJzaW9ucztcbn1cbiJdfQ==
168
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZW12ZXIiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc2hlbGxqcyIsIl9TdGF0aWNMb2dnZXIiLCJfVmVyc2lvbiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJjYW5keUdlbmVyYXRvclBhY2thZ2VOYW1lIiwiY2FuZHlFbmdpbmVQYWNrYWdlTmFtZSIsImlzU3RhYmxlVmVyc2lvbiIsInZlcnNpb24iLCJwYXJzZWRWZXJzaW9uIiwicGFyc2UiLCJ1bmRlZmluZWQiLCJwcmVyZWxlYXNlIiwibGVuZ3RoIiwiaXNQcmVyZWxlYXNlVmVyc2lvbldpdGhQcmVJZCIsInByZWlkIiwiaXNFbmdpbmVWZXJzaW9uRXhpc3RzIiwiZ2V0UGFja2FnZVZlcnNpb25zSW5SZXZlcnNlT3JkZXIiLCJpbmNsdWRlcyIsImdldExhc3RTdGFibGVFbmdpbmVWZXJzaW9uIiwic29ydGVkVmVyc2lvbnMiLCJFcnJvciIsImdldExhc3RTdGFibGVHZW5lcmF0b3JWZXJzaW9uIiwiZ2V0TGFzdEVuZ2luZVByZXJlbGVhc2VWZXJzaW9uIiwiZ2V0TGFzdEdlbmVyYXRvclByZXJlbGVhc2VWZXJzaW9uIiwicmVzb2x2ZUdlbmVyYXRvclZlcnNpb24iLCJ2ZXJzaW9uU3BlYyIsImxvZ2dlciIsImdldExvZ2dlciIsImdldFN1aXRhYmxlVmVyc2lvbiIsIndpdGhQcmVmaXgiLCJsb2ciLCJjYW5keVZlcnNpb25TcGVjVG9TdHJpbmciLCJ0eXBlIiwicmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlIiwiZW5naW5lRGlyZWN0b3J5IiwicGF0aCIsInJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZSIsInJlc29sdmVFbmdpbmVWZXJzaW9uIiwicGFja2FnZU5hbWUiLCJleHBlY3RlZFByZXJlbGVhc2UiLCJwcmVJZCIsInJlc3VsdCIsImZpbmQiLCJ4Iiwic2F0aXNmaWVzIiwiZ2V0UHJlcmVsZWFzZVZlcnNpb25Gb3JtSnNvbiIsInVzZVByZXJlbGVhc2VWZXJzaW9uIiwicHJlcmVsZWFzZVZlcnNpb24iLCJwYWNrYWdlVmVyc2lvbnNDYWNoZSIsIk1hcCIsImNhY2hlZFJlc3VsdCIsIm91dHB1dCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXhlYyIsImFzeW5jIiwic2lsZW50IiwiY29kZSIsInN0ZG91dCIsInN0ZGVyciIsInZlcnNpb25zIiwiSlNPTiIsInRyaW0iLCJzb3J0IiwiY29tcGFyZSIsInJldmVyc2UiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQnVpbGRUYXNrcy9QdWJsaXNoZWRWZXJzaW9uVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwic2hlbGxqc1wiO1xuXG5pbXBvcnQgeyBJTG9nZ2VyIH0gZnJvbSBcIi4uL0NvbW1vbnMvTG9nZ2luZy9JTG9nZ2VyXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiLi4vQ29tbW9ucy9Mb2dnaW5nL1N0YXRpY0xvZ2dlclwiO1xuXG5pbXBvcnQgeyBFbmdpbmVTb3VyY2UgfSBmcm9tIFwiLi9FbmdpbmUvRW5naW5lU291cmNlXCI7XG5pbXBvcnQgeyBHZW5lcmF0b3JTb3VyY2UgfSBmcm9tIFwiLi9HZW5lcmF0b3IvQWNxdWlyZUZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7IENhbmR5VmVyc2lvblNwZWMsIGNhbmR5VmVyc2lvblNwZWNUb1N0cmluZyB9IGZyb20gXCIuL1ZlcnNpb25cIjtcblxuY29uc3QgY2FuZHlHZW5lcmF0b3JQYWNrYWdlTmFtZSA9IFwiQGtvbnR1ci5jYW5keS9nZW5lcmF0b3JcIjtcbmNvbnN0IGNhbmR5RW5naW5lUGFja2FnZU5hbWUgPSBcIkBrb250dXIuY2FuZHkvZW5naW5lXCI7XG5cbmZ1bmN0aW9uIGlzU3RhYmxlVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYXJzZWRWZXJzaW9uID0gc2VtdmVyLnBhcnNlKHZlcnNpb24pO1xuICAgIGlmIChwYXJzZWRWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHsgcHJlcmVsZWFzZSB9ID0gcGFyc2VkVmVyc2lvbjtcbiAgICByZXR1cm4gcHJlcmVsZWFzZS5sZW5ndGggPT09IDA7XG59XG5cbmZ1bmN0aW9uIGlzUHJlcmVsZWFzZVZlcnNpb25XaXRoUHJlSWQodmVyc2lvbjogc3RyaW5nLCBwcmVpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyc2VkVmVyc2lvbiA9IHNlbXZlci5wYXJzZSh2ZXJzaW9uKTtcbiAgICBpZiAocGFyc2VkVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB7IHByZXJlbGVhc2UgfSA9IHBhcnNlZFZlcnNpb247XG4gICAgcmV0dXJuIHByZXJlbGVhc2UubGVuZ3RoID4gMCAmJiBwcmVyZWxlYXNlWzBdID09PSBwcmVpZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzRW5naW5lVmVyc2lvbkV4aXN0cyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IGdldFBhY2thZ2VWZXJzaW9uc0luUmV2ZXJzZU9yZGVyKGNhbmR5RW5naW5lUGFja2FnZU5hbWUpKS5pbmNsdWRlcyh2ZXJzaW9uKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExhc3RTdGFibGVFbmdpbmVWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgc29ydGVkVmVyc2lvbnMgPSBhd2FpdCBnZXRQYWNrYWdlVmVyc2lvbnNJblJldmVyc2VPcmRlcihjYW5keUVuZ2luZVBhY2thZ2VOYW1lKTtcbiAgICBmb3IgKGNvbnN0IHZlcnNpb24gb2Ygc29ydGVkVmVyc2lvbnMpIHtcbiAgICAgICAgaWYgKGlzU3RhYmxlVmVyc2lvbih2ZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbGFzdCBzdGFibGUgZW5naW5lIHZlcnNpb25cIik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRMYXN0U3RhYmxlR2VuZXJhdG9yVmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHNvcnRlZFZlcnNpb25zID0gYXdhaXQgZ2V0UGFja2FnZVZlcnNpb25zSW5SZXZlcnNlT3JkZXIoY2FuZHlHZW5lcmF0b3JQYWNrYWdlTmFtZSk7XG4gICAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIHNvcnRlZFZlcnNpb25zKSB7XG4gICAgICAgIGlmIChpc1N0YWJsZVZlcnNpb24odmVyc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIGxhc3Qgc3RhYmxlIGdlbmVyYXRvciB2ZXJzaW9uXCIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGFzdEVuZ2luZVByZXJlbGVhc2VWZXJzaW9uKHByZWlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHNvcnRlZFZlcnNpb25zID0gYXdhaXQgZ2V0UGFja2FnZVZlcnNpb25zSW5SZXZlcnNlT3JkZXIoY2FuZHlFbmdpbmVQYWNrYWdlTmFtZSk7XG4gICAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIHNvcnRlZFZlcnNpb25zKSB7XG4gICAgICAgIGlmIChpc1ByZXJlbGVhc2VWZXJzaW9uV2l0aFByZUlkKHZlcnNpb24sIHByZWlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBwcmVyZWxlYXNlIGZvciBwcmU6JHtwcmVpZH0gZW5naW5lIHZlcnNpb25gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExhc3RHZW5lcmF0b3JQcmVyZWxlYXNlVmVyc2lvbihwcmVpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzb3J0ZWRWZXJzaW9ucyA9IGF3YWl0IGdldFBhY2thZ2VWZXJzaW9uc0luUmV2ZXJzZU9yZGVyKGNhbmR5R2VuZXJhdG9yUGFja2FnZU5hbWUpO1xuICAgIGZvciAoY29uc3QgdmVyc2lvbiBvZiBzb3J0ZWRWZXJzaW9ucykge1xuICAgICAgICBpZiAoaXNQcmVyZWxlYXNlVmVyc2lvbldpdGhQcmVJZCh2ZXJzaW9uLCBwcmVpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcHJlcmVsZWFzZSBmb3IgcHJlOiR7cHJlaWR9IGdlbmVyYXRvciB2ZXJzaW9uYCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbihcbiAgICB2ZXJzaW9uU3BlYzogQ2FuZHlWZXJzaW9uU3BlYyxcbiAgICBsb2dnZXI6IElMb2dnZXIgPSBnZXRMb2dnZXIoKVxuKTogUHJvbWlzZTxHZW5lcmF0b3JTb3VyY2U+IHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0U3VpdGFibGVWZXJzaW9uKHZlcnNpb25TcGVjLCBjYW5keUdlbmVyYXRvclBhY2thZ2VOYW1lKTtcbiAgICBsb2dnZXIud2l0aFByZWZpeChcIkdFTkVSQVRPUlwiKS5sb2coYFJlc29sdmVkIHZlcnNpb24gJHtjYW5keVZlcnNpb25TcGVjVG9TdHJpbmcodmVyc2lvblNwZWMpfSB0byAke3ZlcnNpb259YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJQdWJsaXNoZWRHZW5lcmF0b3JcIixcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbixcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlKGVuZ2luZURpcmVjdG9yeTogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgPSBnZXRMb2dnZXIoKSk6IEdlbmVyYXRvclNvdXJjZSB7XG4gICAgbG9nZ2VyLndpdGhQcmVmaXgoXCJHRU5FUkFUT1JcIikubG9nKGBSZXNvbHZlZCB2ZXJzaW9uICdsb2NhbCdgKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkdlbmVyYXRvclNvdXJjZXNcIixcbiAgICAgICAgcGF0aDogZW5naW5lRGlyZWN0b3J5LFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTG9jYWxFbmdpbmVTb3VyY2UoZW5naW5lRGlyZWN0b3J5OiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciA9IGdldExvZ2dlcigpKTogRW5naW5lU291cmNlIHtcbiAgICBsb2dnZXIud2l0aFByZWZpeChcIkVOR0lORVwiKS5sb2coYFJlc29sdmVkIHZlcnNpb24gJ2xvY2FsJ2ApO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiTG9jYWxFbmdpbmVTb3VyY2VzXCIsXG4gICAgICAgIHBhdGg6IGVuZ2luZURpcmVjdG9yeSxcbiAgICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUVuZ2luZVZlcnNpb24oXG4gICAgdmVyc2lvblNwZWM6IENhbmR5VmVyc2lvblNwZWMsXG4gICAgbG9nZ2VyOiBJTG9nZ2VyID0gZ2V0TG9nZ2VyKClcbik6IFByb21pc2U8RW5naW5lU291cmNlPiB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldFN1aXRhYmxlVmVyc2lvbih2ZXJzaW9uU3BlYywgY2FuZHlFbmdpbmVQYWNrYWdlTmFtZSk7XG4gICAgbG9nZ2VyLndpdGhQcmVmaXgoXCJFTkdJTkVcIikubG9nKGBSZXNvbHZlZCB2ZXJzaW9uICR7Y2FuZHlWZXJzaW9uU3BlY1RvU3RyaW5nKHZlcnNpb25TcGVjKX0gdG8gJHt2ZXJzaW9ufWApO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiUHVibGlzaGVkRW5naW5lXCIsXG4gICAgICAgIHZlcnNpb246IHZlcnNpb24sXG4gICAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFN1aXRhYmxlVmVyc2lvbih2ZXJzaW9uU3BlYzogQ2FuZHlWZXJzaW9uU3BlYywgcGFja2FnZU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgc29ydGVkVmVyc2lvbnMgPSBhd2FpdCBnZXRQYWNrYWdlVmVyc2lvbnNJblJldmVyc2VPcmRlcihwYWNrYWdlTmFtZSk7XG4gICAgaWYgKHZlcnNpb25TcGVjLnR5cGUgPT09IFwicHJlXCIpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRQcmVyZWxlYXNlID0gdmVyc2lvblNwZWMucHJlSWQ7XG4gICAgICAgIGZvciAoY29uc3QgdmVyc2lvbiBvZiBzb3J0ZWRWZXJzaW9ucykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmVyc2lvbiA9IHNlbXZlci5wYXJzZSh2ZXJzaW9uKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBwcmVyZWxlYXNlIH0gPSBwYXJzZWRWZXJzaW9uO1xuICAgICAgICAgICAgaWYgKHByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChwcmVyZWxlYXNlWzBdID09PSBleHBlY3RlZFByZXJlbGVhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFja2FnZSAke3BhY2thZ2VOYW1lfSBkb2VzIG5vdCBjb250YWlucyB2ZXJzaW9uIHNhdGlzZmllcyBwcmU6JHt2ZXJzaW9uU3BlYy5wcmVJZH1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gc29ydGVkVmVyc2lvbnMuZmluZCh4ID0+IHNlbXZlci5zYXRpc2ZpZXMoeCwgdmVyc2lvblNwZWMudmVyc2lvbikpO1xuICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFja2FnZSAke3BhY2thZ2VOYW1lfSBkb2VzIG5vdCBjb250YWlucyB2ZXJzaW9uIHNhdGlzZmllcyAke3ZlcnNpb25TcGVjLnZlcnNpb259YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcmVyZWxlYXNlVmVyc2lvbkZvcm1Kc29uKHVzZVByZXJlbGVhc2VWZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHByZXJlbGVhc2VWZXJzaW9uID0gYXdhaXQgZ2V0TGFzdEVuZ2luZVByZXJlbGVhc2VWZXJzaW9uKHVzZVByZXJlbGVhc2VWZXJzaW9uKTtcblxuICAgIHJldHVybiBwcmVyZWxlYXNlVmVyc2lvbiAhPSB1bmRlZmluZWQgPyBgcHJlOiR7dXNlUHJlcmVsZWFzZVZlcnNpb259YCA6IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgcGFja2FnZVZlcnNpb25zQ2FjaGU6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiA9IG5ldyBNYXAoKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb25zSW5SZXZlcnNlT3JkZXIocGFja2FnZU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBwYWNrYWdlVmVyc2lvbnNDYWNoZS5nZXQocGFja2FnZU5hbWUpO1xuICAgIGlmIChjYWNoZWRSZXN1bHQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBleGVjKGBucG0gdmlldyAke3BhY2thZ2VOYW1lfSB2ZXJzaW9ucyAtLWpzb25gLCB7IGFzeW5jOiB0cnVlLCBzaWxlbnQ6IHRydWUgfSwgKGNvZGUsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3Ioc3RkZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1hbnlcbiAgICBjb25zdCB2ZXJzaW9uczogc3RyaW5nW10gPSBKU09OLnBhcnNlKG91dHB1dC50cmltKCkpO1xuICAgIGNvbnN0IHNvcnRlZFZlcnNpb25zID0gdmVyc2lvbnMuc29ydChzZW12ZXIuY29tcGFyZSkucmV2ZXJzZSgpO1xuICAgIHBhY2thZ2VWZXJzaW9uc0NhY2hlLnNldChwYWNrYWdlTmFtZSwgc29ydGVkVmVyc2lvbnMpO1xuICAgIHJldHVybiBzb3J0ZWRWZXJzaW9ucztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7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
@@ -1,25 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.readFormSource = readFormSource;
9
-
10
8
  var _path = _interopRequireDefault(require("path"));
11
-
12
9
  var _fsExtra = require("fs-extra");
13
-
14
10
  var _recursiveReaddir = _interopRequireDefault(require("recursive-readdir"));
15
-
16
11
  var _FsUtils = require("../Commons/FsUtils");
17
-
12
+ var _getRngSchemaFilename = require("../../../Common/getRngSchemaFilename");
18
13
  async function readFormSource(formSourcesPath, farmDirectory, hlFarmDirectoryPath) {
19
14
  const rootPath = farmDirectory;
20
-
21
15
  const formName = _path.default.basename(formSourcesPath);
22
-
23
16
  const sugarContent = await readSugarFiles(_path.default.join(formSourcesPath, "sugar"));
24
17
  const result = {
25
18
  sugarContent: sugarContent,
@@ -39,58 +32,45 @@ async function readFormSource(formSourcesPath, farmDirectory, hlFarmDirectoryPat
39
32
  customControlsContent: await readCustomControlsFiles(_path.default.join(formSourcesPath, "controls"))
40
33
  }
41
34
  };
42
-
43
35
  if (formName.startsWith("4")) {
44
- const commonResourcesPath = _path.default.join(formSourcesPath, "..", "..", "commonResources"); // eslint-disable-next-line @typescript-eslint/no-var-requires
45
-
46
-
36
+ const commonResourcesPath = _path.default.join(formSourcesPath, "..", "..", "commonResources");
37
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
47
38
  const {
48
39
  elements
49
40
  } = require(_path.default.join(commonResourcesPath, "statTitle.js"));
50
-
51
41
  const hasRegionalForm = Object.values(sugarContent).find(sugar => sugar.includes('hasRegionalForms="true"'));
52
-
53
42
  if (!result.resources.hooksContent && hasRegionalForm) {
54
43
  result.resources.hooksContent = await readFileWithDefault(commonResourcesPath, "regionStatHooks.js");
55
44
  }
56
-
57
- result.resources.preprocessor = { ...elements
45
+ result.resources.preprocessor = {
46
+ ...elements
58
47
  };
59
48
  }
60
-
61
49
  return result;
62
50
  }
63
-
64
51
  async function readSugarFiles(formSugarDirectoryPath) {
65
52
  const fileNames = await (0, _fsExtra.readdir)(formSugarDirectoryPath);
66
53
  const result = {};
67
-
68
54
  for (const fileName of fileNames) {
69
55
  const sugarModuleName = fileName.replace(".sugar.xml", "");
70
56
  const sugarModuleContent = await (0, _fsExtra.readFile)(_path.default.join(formSugarDirectoryPath, fileName), "utf-8");
71
57
  result[sugarModuleName] = sugarModuleContent;
72
58
  }
73
-
74
59
  return result;
75
60
  }
76
-
77
61
  async function readCustomControlsFiles(formSugarDirectoryPath) {
78
62
  if (!(await (0, _FsUtils.isDirectoryExists)(formSugarDirectoryPath))) {
79
63
  return {};
80
64
  }
81
-
82
65
  const fileNames = await (0, _recursiveReaddir.default)(formSugarDirectoryPath);
83
66
  const result = {};
84
-
85
67
  for (const fileName of fileNames) {
86
68
  const sugarModuleContent = await (0, _fsExtra.readFile)(fileName, "utf-8");
87
69
  const relativeFileName = ("controls\\" + fileName.replace(formSugarDirectoryPath + "\\", "")).replace(/\\/g, "/");
88
70
  result[relativeFileName] = sugarModuleContent;
89
71
  }
90
-
91
72
  return result;
92
73
  }
93
-
94
74
  async function readAutoCalcFiles(formAutoCalcPath) {
95
75
  try {
96
76
  const files = await (0, _fsExtra.readdir)(formAutoCalcPath);
@@ -100,7 +80,6 @@ async function readAutoCalcFiles(formAutoCalcPath) {
100
80
  return [];
101
81
  }
102
82
  }
103
-
104
83
  async function readJavaScriptFilesWithNames(formJavaScriptFilesPath) {
105
84
  try {
106
85
  const files = await (0, _fsExtra.readdir)(formJavaScriptFilesPath);
@@ -113,19 +92,15 @@ async function readJavaScriptFilesWithNames(formJavaScriptFilesPath) {
113
92
  return [];
114
93
  }
115
94
  }
116
-
117
95
  function readSchemaRngFile(formSchemasPath, gfv) {
118
- return (0, _fsExtra.readFile)(_path.default.join(formSchemasPath, `${gfv}.rng.xml`), "utf-8");
96
+ return (0, _fsExtra.readFile)(_path.default.join(formSchemasPath, `${gfv}${(0, _getRngSchemaFilename.getRngSchemaFilename)(formSchemasPath, gfv)}`), "utf-8");
119
97
  }
120
-
121
98
  function readNormativeHelpFile(hlFarmDirectoryPath) {
122
99
  return (0, _fsExtra.readFile)(_path.default.join(hlFarmDirectoryPath, "Forms", "helpid_normativ.xml"), "utf-8");
123
100
  }
124
-
125
101
  function readHooksFile(formDirectoryPath) {
126
102
  return (0, _fsExtra.readFile)(_path.default.join(formDirectoryPath, "hooks.js"), "utf-8").catch(() => "");
127
103
  }
128
-
129
104
  async function readFileWithDefault(filePath, filename, defaultValue) {
130
105
  try {
131
106
  return await (0, _fsExtra.readFile)(_path.default.join(filePath, filename), "utf-8");
@@ -133,4 +108,4 @@ async function readFileWithDefault(filePath, filename, defaultValue) {
133
108
  return defaultValue;
134
109
  }
135
110
  }
136
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL1JlYWRGb3JtU291cmNlLnRzIl0sIm5hbWVzIjpbInJlYWRGb3JtU291cmNlIiwiZm9ybVNvdXJjZXNQYXRoIiwiZmFybURpcmVjdG9yeSIsImhsRmFybURpcmVjdG9yeVBhdGgiLCJyb290UGF0aCIsImZvcm1OYW1lIiwicGF0aCIsImJhc2VuYW1lIiwic3VnYXJDb250ZW50IiwicmVhZFN1Z2FyRmlsZXMiLCJqb2luIiwicmVzdWx0IiwicmVzb3VyY2VzIiwiZ2Z2IiwiYWRkaXRpb25hbFNldHRpbmdzIiwicmVhZEZpbGVXaXRoRGVmYXVsdCIsImF1dG9jYWxjc0NvbnRlbnQiLCJyZWFkQXV0b0NhbGNGaWxlcyIsImhlbHBlcnNDb250ZW50IiwicmVhZEphdmFTY3JpcHRGaWxlc1dpdGhOYW1lcyIsImNvbW1vbkhlbHBlcnNDb250ZW50IiwidmFsaWRhdGlvbnNDb250ZW50Iiwic2NoZW1hUm5nQ29udGVudCIsInJlYWRTY2hlbWFSbmdGaWxlIiwia2NKc1htbENvbnRlbnQiLCJrY0xhbmdDb250ZW50Iiwibm9ybWF0aXZlSGVscENvbnRlbnQiLCJyZWFkTm9ybWF0aXZlSGVscEZpbGUiLCJ0b3VyU3RlcHMiLCJob29rc0NvbnRlbnQiLCJyZWFkSG9va3NGaWxlIiwiY3VzdG9tQ29udHJvbHNDb250ZW50IiwicmVhZEN1c3RvbUNvbnRyb2xzRmlsZXMiLCJzdGFydHNXaXRoIiwiY29tbW9uUmVzb3VyY2VzUGF0aCIsImVsZW1lbnRzIiwicmVxdWlyZSIsImhhc1JlZ2lvbmFsRm9ybSIsIk9iamVjdCIsInZhbHVlcyIsImZpbmQiLCJzdWdhciIsImluY2x1ZGVzIiwicHJlcHJvY2Vzc29yIiwiZm9ybVN1Z2FyRGlyZWN0b3J5UGF0aCIsImZpbGVOYW1lcyIsImZpbGVOYW1lIiwic3VnYXJNb2R1bGVOYW1lIiwicmVwbGFjZSIsInN1Z2FyTW9kdWxlQ29udGVudCIsInJlbGF0aXZlRmlsZU5hbWUiLCJmb3JtQXV0b0NhbGNQYXRoIiwiZmlsZXMiLCJqc0ZpbGVzIiwiZmlsdGVyIiwiZmlsZW5hbWUiLCJ0ZXN0IiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImlnbm9yZUVycm9yIiwiZm9ybUphdmFTY3JpcHRGaWxlc1BhdGgiLCJwYXJzZSIsIm5hbWUiLCJjb250ZW50IiwiZm9ybVNjaGVtYXNQYXRoIiwiZm9ybURpcmVjdG9yeVBhdGgiLCJjYXRjaCIsImZpbGVQYXRoIiwiZGVmYXVsdFZhbHVlIiwiaW5nb3JlRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBOztBQUNBOztBQUVBOztBQWlDTyxlQUFlQSxjQUFmLENBQ0hDLGVBREcsRUFFSEMsYUFGRyxFQUdIQyxtQkFIRyxFQUlnQjtBQUNuQixRQUFNQyxRQUFRLEdBQUdGLGFBQWpCOztBQUNBLFFBQU1HLFFBQVEsR0FBR0MsY0FBS0MsUUFBTCxDQUFjTixlQUFkLENBQWpCOztBQUNBLFFBQU1PLFlBQVksR0FBRyxNQUFNQyxjQUFjLENBQUNILGNBQUtJLElBQUwsQ0FBVVQsZUFBVixFQUEyQixPQUEzQixDQUFELENBQXpDO0FBQ0EsUUFBTVUsTUFBa0IsR0FBRztBQUN2QkgsSUFBQUEsWUFBWSxFQUFFQSxZQURTO0FBRXZCSSxJQUFBQSxTQUFTLEVBQUU7QUFDUEMsTUFBQUEsR0FBRyxFQUFFUCxjQUFLQyxRQUFMLENBQWNOLGVBQWQsQ0FERTtBQUVQYSxNQUFBQSxrQkFBa0IsRUFBRSxNQUFNQyxtQkFBbUIsQ0FBQ2QsZUFBRCxFQUFrQixlQUFsQixFQUFtQyxJQUFuQyxDQUZ0QztBQUdQZSxNQUFBQSxnQkFBZ0IsRUFBRSxNQUFNQyxpQkFBaUIsQ0FBQ1gsY0FBS0ksSUFBTCxDQUFVVCxlQUFWLEVBQTJCLFVBQTNCLENBQUQsQ0FIbEM7QUFJUGlCLE1BQUFBLGNBQWMsRUFBRSxNQUFNQyw0QkFBNEIsQ0FBQ2IsY0FBS0ksSUFBTCxDQUFVVCxlQUFWLEVBQTJCLFNBQTNCLENBQUQsQ0FKM0M7QUFLUG1CLE1BQUFBLG9CQUFvQixFQUFF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LGlCQUFWLEVBQTZCLFVBQTdCLENBQVQsRUFBbUQsT0FBbkQsRUFBNERDLEtBQTVELENBQWtFLE1BQU0sRUFBeEUsQ0FBUDtBQUNIOztBQUVELGVBQWVwRCxtQkFBZixDQUNJcUQsUUFESixFQUVJYixRQUZKLEVBR0ljLFlBSEosRUFJK0I7QUFDM0IsTUFBSTtBQUNBLFdBQU8sTUFBTSx1QkFBUy9ELGNBQUtJLElBQUwsQ0FBVTBELFFBQVYsRUFBb0JiLFFBQXBCLENBQVQsRUFBd0MsT0FBeEMsQ0FBYjtBQUNILEdBRkQsQ0FFRSxPQUFPZSxXQUFQLEVBQW9CO0FBQ2xCLFdBQU9ELFlBQVA7QUFDSDtBQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgcmVhZGRpciwgcmVhZEZpbGUgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCByZWN1cnNpdmVSZWFkZGlyIGZyb20gXCJyZWN1cnNpdmUtcmVhZGRpclwiO1xuXG5pbXBvcnQgeyBpc0RpcmVjdG9yeUV4aXN0cyB9IGZyb20gXCIuLi9Db21tb25zL0ZzVXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTdWdhckNvbnRlbnQge1xuICAgIFtzdWdhckZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbjogc3RyaW5nXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUNvbnRyb2xzQ29udGVudCB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1SZXNvdXJjZXMge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGFkZGl0aW9uYWxTZXR0aW5nczogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICAgIGF1dG9jYWxjc0NvbnRlbnQ6IHN0cmluZ1tdO1xuICAgIGhlbHBlcnNDb250ZW50OiBBcnJheTx7IGZpbGVuYW1lOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PjtcbiAgICBjb21tb25IZWxwZXJzQ29udGVudDogQXJyYXk8eyBmaWxlbmFtZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT47XG4gICAgdmFsaWRhdGlvbnNDb250ZW50OiBBcnJheTx7IGZpbGVuYW1lOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PjtcbiAgICBzY2hlbWFSbmdDb250ZW50OiBzdHJpbmc7XG4gICAga2NKc1htbENvbnRlbnQ6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBrY0xhbmdDb250ZW50OiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgbm9ybWF0aXZlSGVscENvbnRlbnQ6IHN0cmluZztcbiAgICB0b3VyU3RlcHM6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBob29rc0NvbnRlbnQ6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBjdXN0b21Db250cm9sc0NvbnRlbnQ6IEN1c3RvbUNvbnRyb2xzQ29udGVudDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByZXByb2Nlc3Nvcj86IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1Tb3VyY2Uge1xuICAgIHN1Z2FyQ29udGVudDogU3VnYXJDb250ZW50O1xuICAgIHJlc291cmNlczogRm9ybVJlc291cmNlcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRGb3JtU291cmNlKFxuICAgIGZvcm1Tb3VyY2VzUGF0aDogc3RyaW5nLFxuICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBobEZhcm1EaXJlY3RvcnlQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8Rm9ybVNvdXJjZT4ge1xuICAgIGNvbnN0IHJvb3RQYXRoID0gZmFybURpcmVjdG9yeTtcbiAgICBjb25zdCBmb3JtTmFtZSA9IHBhdGguYmFzZW5hbWUoZm9ybVNvdXJjZXNQYXRoKTtcbiAgICBjb25zdCBzdWdhckNvbnRlbnQgPSBhd2FpdCByZWFkU3VnYXJGaWxlcyhwYXRoLmpvaW4oZm9ybVNvdXJjZXNQYXRoLCBcInN1Z2FyXCIpKTtcbiAgICBjb25zdCByZXN1bHQ6IEZvcm1Tb3VyY2UgPSB7XG4gICAgICAgIHN1Z2FyQ29udGVudDogc3VnYXJDb250ZW50LFxuICAgICAgICByZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIGdmdjogcGF0aC5iYXNlbmFtZShmb3JtU291cmNlc1BhdGgpLFxuICAgICAgICAgICAgYWRkaXRpb25hbFNldHRpbmdzOiBhd2FpdCByZWFkRmlsZVdpdGhEZWZhdWx0KGZvcm1Tb3VyY2VzUGF0aCwgXCJzZXR0aW5ncy5qc29uXCIsIFwie31cIiksXG4gICAgICAgICAgICBhdXRvY2FsY3NDb250ZW50OiBhd2FpdCByZWFkQXV0b0NhbGNGaWxlcyhwYXRoLmpvaW4oZm9ybVNvdXJjZXNQYXRoLCBcImF1dG9jYWxjXCIpKSxcbiAgICAgICAgICAgIGhlbHBlcnNDb250ZW50OiBhd2FpdCByZWFkSmF2YVNjcmlwdEZpbGVzV2l0aE5hbWVzKHBhdGguam9pbihmb3JtU291cmNlc1BhdGgsIFwiaGVscGVyc1wiKSksXG4gICAgICAgICAgICBjb21tb25IZWxwZXJzQ29udGVudDogYXdhaXQgcmVhZEphdmFTY3JpcHRGaWxlc1dpdGhOYW1lcyhwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJqc0hlbHBlcnNcIikpLFxuICAgICAgICAgICAgdmFsaWRhdGlvbnNDb250ZW50OiBhd2FpdCByZWFkSmF2YVNjcmlwdEZpbGVzV2l0aE5hbWVzKHBhdGguam9pbihmb3JtU291cmNlc1BhdGgsIFwidmFsaWRhdGlvbnNcIikpLFxuICAgICAgICAgICAgc2NoZW1hUm5nQ29udGVudDogYXdhaXQgcmVhZFNjaGVtYVJuZ0ZpbGUocGF0aC5qb2luKGZvcm1Tb3VyY2VzUGF0aCwgXCJzY2hlbWFzXCIpLCBmb3JtTmFtZSksXG4gICAgICAgICAgICBrY0pzWG1sQ29udGVudDogYXdhaXQgcmVhZEZpbGVXaXRoRGVmYXVsdChcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oZm9ybVNvdXJjZXNQYXRoLCBcImF1dG9jYWxjXCIpLFxuICAgICAgICAgICAgICAgIGAke2Zvcm1OYW1lfS7QmtChLmNhbmR5LmpzLnhtbGAsXG4gICAgICAgICAgICAgICAgXCI8ZHVtbXkvPlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAga2NMYW5nQ29udGVudDogYXdhaXQgcmVhZEZpbGVXaXRoRGVmYXVsdChcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oZm9ybVNvdXJjZXNQYXRoLCBcImF1dG9jYWxjXCIpLFxuICAgICAgICAgICAgICAgIGAke2Zvcm1OYW1lfS7QmtChLmNhbmR5LmpzLmtjbGFuZ2AsXG4gICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG5vcm1hdGl2ZUhlbHBDb250ZW50OiBhd2FpdCByZWFkTm9ybWF0aXZlSGVscEZpbGUoaGxGYXJtRGlyZWN0b3J5UGF0aCksXG4gICAgICAgICAgICB0b3VyU3RlcHM6IGF3YWl0IHJlYWRGaWxlV2l0aERlZmF1bHQocGF0aC5qb2luKHJvb3RQYXRoLCBcInRvdXJcIiksIFwidG91ci5qc1wiLCBcInt9XCIpLFxuICAgICAgICAgICAgaG9va3NDb250ZW50OiBhd2FpdCByZWFkSG9va3NGaWxlKGZvcm1Tb3VyY2VzUGF0aCksXG4gICAgICAgICAgICBjdXN0b21Db250cm9sc0NvbnRlbnQ6IGF3YWl0IHJlYWRDdXN0b21Db250cm9sc0ZpbGVzKHBhdGguam9pbihmb3JtU291cmNlc1BhdGgsIFwiY29udHJvbHNcIikpLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgaWYgKGZvcm1OYW1lLnN0YXJ0c1dpdGgoXCI0XCIpKSB7XG4gICAgICAgIGNvbnN0IGNvbW1vblJlc291cmNlc1BhdGggPSBwYXRoLmpvaW4oZm9ybVNvdXJjZXNQYXRoLCBcIi4uXCIsIFwiLi5cIiwgXCJjb21tb25SZXNvdXJjZXNcIik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgICAgIGNvbnN0IHsgZWxlbWVudHMgfSA9IHJlcXVpcmUocGF0aC5qb2luKGNvbW1vblJlc291cmNlc1BhdGgsIFwic3RhdFRpdGxlLmpzXCIpKTtcbiAgICAgICAgY29uc3QgaGFzUmVnaW9uYWxGb3JtID0gT2JqZWN0LnZhbHVlcyhzdWdhckNvbnRlbnQpLmZpbmQoc3VnYXIgPT4gc3VnYXIuaW5jbHVkZXMoJ2hhc1JlZ2lvbmFsRm9ybXM9XCJ0cnVlXCInKSk7XG5cbiAgICAgICAgaWYgKCFyZXN1bHQucmVzb3VyY2VzLmhvb2tzQ29udGVudCAmJiBoYXNSZWdpb25hbEZvcm0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5yZXNvdXJjZXMuaG9va3NDb250ZW50ID0gYXdhaXQgcmVhZEZpbGVXaXRoRGVmYXVsdChjb21tb25SZXNvdXJjZXNQYXRoLCBcInJlZ2lvblN0YXRIb29rcy5qc1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucmVzb3VyY2VzLnByZXByb2Nlc3NvciA9IHsgLi4uZWxlbWVudHMgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFN1Z2FyRmlsZXMoZm9ybVN1Z2FyRGlyZWN0b3J5UGF0aDogc3RyaW5nKTogUHJvbWlzZTxTdWdhckNvbnRlbnQ+IHtcbiAgICBjb25zdCBmaWxlTmFtZXMgPSBhd2FpdCByZWFkZGlyKGZvcm1TdWdhckRpcmVjdG9yeVBhdGgpO1xuICAgIGNvbnN0IHJlc3VsdDogU3VnYXJDb250ZW50ID0ge307XG4gICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlTmFtZXMpIHtcbiAgICAgICAgY29uc3Qgc3VnYXJNb2R1bGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZShcIi5zdWdhci54bWxcIiwgXCJcIik7XG4gICAgICAgIGNvbnN0IHN1Z2FyTW9kdWxlQ29udGVudCA9IGF3YWl0IHJlYWRGaWxlKHBhdGguam9pbihmb3JtU3VnYXJEaXJlY3RvcnlQYXRoLCBmaWxlTmFtZSksIFwidXRmLThcIik7XG4gICAgICAgIHJlc3VsdFtzdWdhck1vZHVsZU5hbWVdID0gc3VnYXJNb2R1bGVDb250ZW50O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkQ3VzdG9tQ29udHJvbHNGaWxlcyhmb3JtU3VnYXJEaXJlY3RvcnlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEN1c3RvbUNvbnRyb2xzQ29udGVudD4ge1xuICAgIGlmICghKGF3YWl0IGlzRGlyZWN0b3J5RXhpc3RzKGZvcm1TdWdhckRpcmVjdG9yeVBhdGgpKSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGZpbGVOYW1lcyA9IGF3YWl0IHJlY3Vyc2l2ZVJlYWRkaXIoZm9ybVN1Z2FyRGlyZWN0b3J5UGF0aCk7XG4gICAgY29uc3QgcmVzdWx0OiBDdXN0b21Db250cm9sc0NvbnRlbnQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVOYW1lcykge1xuICAgICAgICBjb25zdCBzdWdhck1vZHVsZUNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShmaWxlTmFtZSwgXCJ1dGYtOFwiKTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVGaWxlTmFtZSA9IChcImNvbnRyb2xzXFxcXFwiICsgZmlsZU5hbWUucmVwbGFjZShmb3JtU3VnYXJEaXJlY3RvcnlQYXRoICsgXCJcXFxcXCIsIFwiXCIpKS5yZXBsYWNlKFxuICAgICAgICAgICAgL1xcXFwvZyxcbiAgICAgICAgICAgIFwiL1wiXG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdFtyZWxhdGl2ZUZpbGVOYW1lXSA9IHN1Z2FyTW9kdWxlQ29udGVudDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEF1dG9DYWxjRmlsZXMoZm9ybUF1dG9DYWxjUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcihmb3JtQXV0b0NhbGNQYXRoKTtcbiAgICAgICAgY29uc3QganNGaWxlcyA9IGZpbGVzLmZpbHRlcihmaWxlbmFtZSA9PiAvXFwuanMkLy50ZXN0KGZpbGVuYW1lKSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChqc0ZpbGVzLm1hcChmaWxlbmFtZSA9PiByZWFkRmlsZShwYXRoLmpvaW4oZm9ybUF1dG9DYWxjUGF0aCwgZmlsZW5hbWUpLCBcInV0Zi04XCIpKSk7XG4gICAgfSBjYXRjaCAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEphdmFTY3JpcHRGaWxlc1dpdGhOYW1lcyhcbiAgICBmb3JtSmF2YVNjcmlwdEZpbGVzUGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPEFycmF5PHsgZmlsZW5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCByZWFkZGlyKGZvcm1KYXZhU2NyaXB0RmlsZXNQYXRoKTtcbiAgICAgICAgY29uc3QganNGaWxlcyA9IGZpbGVzLmZpbHRlcihmaWxlbmFtZSA9PiAvXFwuanMkLy50ZXN0KGZpbGVuYW1lKSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIGpzRmlsZXMubWFwKGFzeW5jIGZpbGVuYW1lID0+ICh7XG4gICAgICAgICAgICAgICAgZmlsZW5hbWU6IHBhdGgucGFyc2UoZmlsZW5hbWUpLm5hbWUsXG4gICAgICAgICAgICAgICAgY29udGVudDogYXdhaXQgcmVhZEZpbGUocGF0aC5qb2luKGZvcm1KYXZhU2NyaXB0RmlsZXNQYXRoLCBmaWxlbmFtZSksIFwidXRmLThcIiksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChpZ25vcmVFcnJvcikge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWFkU2NoZW1hUm5nRmlsZShmb3JtU2NoZW1hc1BhdGg6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiByZWFkRmlsZShwYXRoLmpvaW4oZm9ybVNjaGVtYXNQYXRoLCBgJHtnZnZ9LnJuZy54bWxgKSwgXCJ1dGYtOFwiKTtcbn1cblxuZnVuY3Rpb24gcmVhZE5vcm1hdGl2ZUhlbHBGaWxlKGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHJlYWRGaWxlKHBhdGguam9pbihobEZhcm1EaXJlY3RvcnlQYXRoLCBcIkZvcm1zXCIsIFwiaGVscGlkX25vcm1hdGl2LnhtbFwiKSwgXCJ1dGYtOFwiKTtcbn1cblxuZnVuY3Rpb24gcmVhZEhvb2tzRmlsZShmb3JtRGlyZWN0b3J5UGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gcmVhZEZpbGUocGF0aC5qb2luKGZvcm1EaXJlY3RvcnlQYXRoLCBcImhvb2tzLmpzXCIpLCBcInV0Zi04XCIpLmNhdGNoKCgpID0+IFwiXCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkRmlsZVdpdGhEZWZhdWx0KFxuICAgIGZpbGVQYXRoOiBzdHJpbmcsXG4gICAgZmlsZW5hbWU6IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmdcbik6IFByb21pc2U8dW5kZWZpbmVkIHwgc3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRGaWxlKHBhdGguam9pbihmaWxlUGF0aCwgZmlsZW5hbWUpLCBcInV0Zi04XCIpO1xuICAgIH0gY2F0Y2ggKGluZ29yZUVycm9yKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxufVxuIl19
111
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2ZzRXh0cmEiLCJfcmVjdXJzaXZlUmVhZGRpciIsIl9Gc1V0aWxzIiwiX2dldFJuZ1NjaGVtYUZpbGVuYW1lIiwicmVhZEZvcm1Tb3VyY2UiLCJmb3JtU291cmNlc1BhdGgiLCJmYXJtRGlyZWN0b3J5IiwiaGxGYXJtRGlyZWN0b3J5UGF0aCIsInJvb3RQYXRoIiwiZm9ybU5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJzdWdhckNvbnRlbnQiLCJyZWFkU3VnYXJGaWxlcyIsImpvaW4iLCJyZXN1bHQiLCJyZXNvdXJjZXMiLCJnZnYiLCJhZGRpdGlvbmFsU2V0dGluZ3MiLCJyZWFkRmlsZVdpdGhEZWZhdWx0IiwiYXV0b2NhbGNzQ29udGVudCIsInJlYWRBdXRvQ2FsY0ZpbGVzIiwiaGVscGVyc0NvbnRlbnQiLCJyZWFkSmF2YVNjcmlwdEZpbGVzV2l0aE5hbWVzIiwiY29tbW9uSGVscGVyc0NvbnRlbnQiLCJ2YWxpZGF0aW9uc0NvbnRlbnQiLCJzY2hlbWFSbmdDb250ZW50IiwicmVhZFNjaGVtYVJuZ0ZpbGUiLCJrY0pzWG1sQ29udGVudCIsImtjTGFuZ0NvbnRlbnQiLCJub3JtYXRpdmVIZWxwQ29udGVudCIsInJlYWROb3JtYXRpdmVIZWxwRmlsZSIsInRvdXJTdGVwcyIsImhvb2tzQ29udGVudCIsInJlYWRIb29rc0ZpbGUiLCJjdXN0b21Db250cm9sc0NvbnRlbnQiLCJyZWFkQ3VzdG9tQ29udHJvbHNGaWxlcyIsInN0YXJ0c1dpdGgiLCJjb21tb25SZXNvdXJjZXNQYXRoIiwiZWxlbWVudHMiLCJoYXNSZWdpb25hbEZvcm0iLCJPYmplY3QiLCJ2YWx1ZXMiLCJmaW5kIiwic3VnYXIiLCJpbmNsdWRlcyIsInByZXByb2Nlc3NvciIsImZvcm1TdWdhckRpcmVjdG9yeVBhdGgiLCJmaWxlTmFtZXMiLCJyZWFkZGlyIiwiZmlsZU5hbWUiLCJzdWdhck1vZHVsZU5hbWUiLCJyZXBsYWNlIiwic3VnYXJNb2R1bGVDb250ZW50IiwicmVhZEZpbGUiLCJpc0RpcmVjdG9yeUV4aXN0cyIsInJlY3Vyc2l2ZVJlYWRkaXIiLCJyZWxhdGl2ZUZpbGVOYW1lIiwiZm9ybUF1dG9DYWxjUGF0aCIsImZpbGVzIiwianNGaWxlcyIsImZpbHRlciIsImZpbGVuYW1lIiwidGVzdCIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJpZ25vcmVFcnJvciIsImZvcm1KYXZhU2NyaXB0RmlsZXNQYXRoIiwicGFyc2UiLCJuYW1lIiwiY29udGVudCIsImZvcm1TY2hlbWFzUGF0aCIsImdldFJuZ1NjaGVtYUZpbGVuYW1lIiwiZm9ybURpcmVjdG9yeVBhdGgiLCJjYXRjaCIsImZpbGVQYXRoIiwiZGVmYXVsdFZhbHVlIiwiaW5nb3JlRXJyb3IiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQnVpbGRUYXNrcy9SZWFkRm9ybVNvdXJjZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSB9IGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHJlY3Vyc2l2ZVJlYWRkaXIgZnJvbSBcInJlY3Vyc2l2ZS1yZWFkZGlyXCI7XG5cbmltcG9ydCB7IGlzRGlyZWN0b3J5RXhpc3RzIH0gZnJvbSBcIi4uL0NvbW1vbnMvRnNVdGlsc1wiO1xuaW1wb3J0IHsgZ2V0Um5nU2NoZW1hRmlsZW5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9uL2dldFJuZ1NjaGVtYUZpbGVuYW1lXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VnYXJDb250ZW50IHtcbiAgICBbc3VnYXJGaWxlTmFtZVdpdGhvdXRFeHRlbnNpb246IHN0cmluZ106IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21Db250cm9sc0NvbnRlbnQge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtUmVzb3VyY2VzIHtcbiAgICBnZnY6IHN0cmluZztcbiAgICBhZGRpdGlvbmFsU2V0dGluZ3M6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBhdXRvY2FsY3NDb250ZW50OiBzdHJpbmdbXTtcbiAgICBoZWxwZXJzQ29udGVudDogQXJyYXk8eyBmaWxlbmFtZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT47XG4gICAgY29tbW9uSGVscGVyc0NvbnRlbnQ6IEFycmF5PHsgZmlsZW5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+O1xuICAgIHZhbGlkYXRpb25zQ29udGVudDogQXJyYXk8eyBmaWxlbmFtZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT47XG4gICAgc2NoZW1hUm5nQ29udGVudDogc3RyaW5nO1xuICAgIGtjSnNYbWxDb250ZW50OiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAga2NMYW5nQ29udGVudDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICAgIG5vcm1hdGl2ZUhlbHBDb250ZW50OiBzdHJpbmc7XG4gICAgdG91clN0ZXBzOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgaG9va3NDb250ZW50OiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgY3VzdG9tQ29udHJvbHNDb250ZW50OiBDdXN0b21Db250cm9sc0NvbnRlbnQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcmVwcm9jZXNzb3I/OiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtU291cmNlIHtcbiAgICBzdWdhckNvbnRlbnQ6IFN1Z2FyQ29udGVudDtcbiAgICByZXNvdXJjZXM6IEZvcm1SZXNvdXJjZXM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkRm9ybVNvdXJjZShcbiAgICBmb3JtU291cmNlc1BhdGg6IHN0cmluZyxcbiAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPEZvcm1Tb3VyY2U+IHtcbiAgICBjb25zdCByb290UGF0aCA9IGZhcm1EaXJlY3Rvcnk7XG4gICAgY29uc3QgZm9ybU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZvcm1Tb3VyY2VzUGF0aCk7XG4gICAgY29uc3Qgc3VnYXJDb250ZW50ID0gYXdhaXQgcmVhZFN1Z2FyRmlsZXMocGF0aC5qb2luKGZvcm1Tb3VyY2VzUGF0aCwgXCJzdWdhclwiKSk7XG4gICAgY29uc3QgcmVzdWx0OiBGb3JtU291cmNlID0ge1xuICAgICAgICBzdWdhckNvbnRlbnQ6IHN1Z2FyQ29udGVudCxcbiAgICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgICAgICBnZnY6IHBhdGguYmFzZW5hbWUoZm9ybVNvdXJjZXNQYXRoKSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxTZXR0aW5nczogYXdhaXQgcmVhZEZpbGVXaXRoRGVmYXVsdChmb3JtU291cmNlc1BhdGgsIFwic2V0dGluZ3MuanNvblwiLCBcInt9XCIpLFxuICAgICAgICAgICAgYXV0b2NhbGNzQ29udGVudDogYXdhaXQgcmVhZEF1dG9DYWxjRmlsZXMocGF0aC5qb2luKGZvcm1Tb3VyY2VzUGF0aCwgXCJhdXRvY2FsY1wiKSksXG4gICAgICAgICAgICBoZWxwZXJzQ29udGVudDogYXdhaXQgcmVhZEphdmFTY3JpcHRGaWxlc1dpdGhOYW1lcyhwYXRoLmpvaW4oZm9ybVNvdXJjZXNQYXRoLCBcImhlbHBlcnNcIikpLFxuICAgICAgICAgICAgY29tbW9uSGVscGVyc0NvbnRlbnQ6IGF3YWl0IHJlYWRKYXZhU2NyaXB0RmlsZXNXaXRoTmFtZXMocGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwianNIZWxwZXJzXCIpKSxcbiAgICAgICAgICAgIHZhbGlkYXRpb25zQ29udGVudDogYXdhaXQgcmVhZEphdmFTY3JpcHRGaWxlc1dpdGhOYW1lcyhwYXRoLmpvaW4oZm9ybVNvdXJjZXNQYXRoLCBcInZhbGlkYXRpb25zXCIpKSxcbiAgICAgICAgICAgIHNjaGVtYVJuZ0NvbnRlbnQ6IGF3YWl0IHJlYWRTY2hlbWFSbmdGaWxlKHBhdGguam9pbihmb3JtU291cmNlc1BhdGgsIFwic2NoZW1hc1wiKSwgZm9ybU5hbWUpLFxuICAgICAgICAgICAga2NKc1htbENvbnRlbnQ6IGF3YWl0IHJlYWRGaWxlV2l0aERlZmF1bHQoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGZvcm1Tb3VyY2VzUGF0aCwgXCJhdXRvY2FsY1wiKSxcbiAgICAgICAgICAgICAgICBgJHtmb3JtTmFtZX0u0JrQoS5jYW5keS5qcy54bWxgLFxuICAgICAgICAgICAgICAgIFwiPGR1bW15Lz5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGtjTGFuZ0NvbnRlbnQ6IGF3YWl0IHJlYWRGaWxlV2l0aERlZmF1bHQoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGZvcm1Tb3VyY2VzUGF0aCwgXCJhdXRvY2FsY1wiKSxcbiAgICAgICAgICAgICAgICBgJHtmb3JtTmFtZX0u0JrQoS5jYW5keS5qcy5rY2xhbmdgLFxuICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBub3JtYXRpdmVIZWxwQ29udGVudDogYXdhaXQgcmVhZE5vcm1hdGl2ZUhlbHBGaWxlKGhsRmFybURpcmVjdG9yeVBhdGgpLFxuICAgICAgICAgICAgdG91clN0ZXBzOiBhd2FpdCByZWFkRmlsZVdpdGhEZWZhdWx0KHBhdGguam9pbihyb290UGF0aCwgXCJ0b3VyXCIpLCBcInRvdXIuanNcIiwgXCJ7fVwiKSxcbiAgICAgICAgICAgIGhvb2tzQ29udGVudDogYXdhaXQgcmVhZEhvb2tzRmlsZShmb3JtU291cmNlc1BhdGgpLFxuICAgICAgICAgICAgY3VzdG9tQ29udHJvbHNDb250ZW50OiBhd2FpdCByZWFkQ3VzdG9tQ29udHJvbHNGaWxlcyhwYXRoLmpvaW4oZm9ybVNvdXJjZXNQYXRoLCBcImNvbnRyb2xzXCIpKSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChmb3JtTmFtZS5zdGFydHNXaXRoKFwiNFwiKSkge1xuICAgICAgICBjb25zdCBjb21tb25SZXNvdXJjZXNQYXRoID0gcGF0aC5qb2luKGZvcm1Tb3VyY2VzUGF0aCwgXCIuLlwiLCBcIi4uXCIsIFwiY29tbW9uUmVzb3VyY2VzXCIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgICAgICBjb25zdCB7IGVsZW1lbnRzIH0gPSByZXF1aXJlKHBhdGguam9pbihjb21tb25SZXNvdXJjZXNQYXRoLCBcInN0YXRUaXRsZS5qc1wiKSk7XG4gICAgICAgIGNvbnN0IGhhc1JlZ2lvbmFsRm9ybSA9IE9iamVjdC52YWx1ZXMoc3VnYXJDb250ZW50KS5maW5kKHN1Z2FyID0+IHN1Z2FyLmluY2x1ZGVzKCdoYXNSZWdpb25hbEZvcm1zPVwidHJ1ZVwiJykpO1xuXG4gICAgICAgIGlmICghcmVzdWx0LnJlc291cmNlcy5ob29rc0NvbnRlbnQgJiYgaGFzUmVnaW9uYWxGb3JtKSB7XG4gICAgICAgICAgICByZXN1bHQucmVzb3VyY2VzLmhvb2tzQ29udGVudCA9IGF3YWl0IHJlYWRGaWxlV2l0aERlZmF1bHQoY29tbW9uUmVzb3VyY2VzUGF0aCwgXCJyZWdpb25TdGF0SG9va3MuanNcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnJlc291cmNlcy5wcmVwcm9jZXNzb3IgPSB7IC4uLmVsZW1lbnRzIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRTdWdhckZpbGVzKGZvcm1TdWdhckRpcmVjdG9yeVBhdGg6IHN0cmluZyk6IFByb21pc2U8U3VnYXJDb250ZW50PiB7XG4gICAgY29uc3QgZmlsZU5hbWVzID0gYXdhaXQgcmVhZGRpcihmb3JtU3VnYXJEaXJlY3RvcnlQYXRoKTtcbiAgICBjb25zdCByZXN1bHQ6IFN1Z2FyQ29udGVudCA9IHt9O1xuICAgIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZU5hbWVzKSB7XG4gICAgICAgIGNvbnN0IHN1Z2FyTW9kdWxlTmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UoXCIuc3VnYXIueG1sXCIsIFwiXCIpO1xuICAgICAgICBjb25zdCBzdWdhck1vZHVsZUNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShwYXRoLmpvaW4oZm9ybVN1Z2FyRGlyZWN0b3J5UGF0aCwgZmlsZU5hbWUpLCBcInV0Zi04XCIpO1xuICAgICAgICByZXN1bHRbc3VnYXJNb2R1bGVOYW1lXSA9IHN1Z2FyTW9kdWxlQ29udGVudDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEN1c3RvbUNvbnRyb2xzRmlsZXMoZm9ybVN1Z2FyRGlyZWN0b3J5UGF0aDogc3RyaW5nKTogUHJvbWlzZTxDdXN0b21Db250cm9sc0NvbnRlbnQ+IHtcbiAgICBpZiAoIShhd2FpdCBpc0RpcmVjdG9yeUV4aXN0cyhmb3JtU3VnYXJEaXJlY3RvcnlQYXRoKSkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBmaWxlTmFtZXMgPSBhd2FpdCByZWN1cnNpdmVSZWFkZGlyKGZvcm1TdWdhckRpcmVjdG9yeVBhdGgpO1xuICAgIGNvbnN0IHJlc3VsdDogQ3VzdG9tQ29udHJvbHNDb250ZW50ID0ge307XG4gICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlTmFtZXMpIHtcbiAgICAgICAgY29uc3Qgc3VnYXJNb2R1bGVDb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoZmlsZU5hbWUsIFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlRmlsZU5hbWUgPSAoXCJjb250cm9sc1xcXFxcIiArIGZpbGVOYW1lLnJlcGxhY2UoZm9ybVN1Z2FyRGlyZWN0b3J5UGF0aCArIFwiXFxcXFwiLCBcIlwiKSkucmVwbGFjZShcbiAgICAgICAgICAgIC9cXFxcL2csXG4gICAgICAgICAgICBcIi9cIlxuICAgICAgICApO1xuICAgICAgICByZXN1bHRbcmVsYXRpdmVGaWxlTmFtZV0gPSBzdWdhck1vZHVsZUNvbnRlbnQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRBdXRvQ2FsY0ZpbGVzKGZvcm1BdXRvQ2FsY1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIoZm9ybUF1dG9DYWxjUGF0aCk7XG4gICAgICAgIGNvbnN0IGpzRmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZW5hbWUgPT4gL1xcLmpzJC8udGVzdChmaWxlbmFtZSkpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoanNGaWxlcy5tYXAoZmlsZW5hbWUgPT4gcmVhZEZpbGUocGF0aC5qb2luKGZvcm1BdXRvQ2FsY1BhdGgsIGZpbGVuYW1lKSwgXCJ1dGYtOFwiKSkpO1xuICAgIH0gY2F0Y2ggKGlnbm9yZUVycm9yKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRKYXZhU2NyaXB0RmlsZXNXaXRoTmFtZXMoXG4gICAgZm9ybUphdmFTY3JpcHRGaWxlc1BhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTxBcnJheTx7IGZpbGVuYW1lOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9Pj4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcihmb3JtSmF2YVNjcmlwdEZpbGVzUGF0aCk7XG4gICAgICAgIGNvbnN0IGpzRmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZW5hbWUgPT4gL1xcLmpzJC8udGVzdChmaWxlbmFtZSkpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBqc0ZpbGVzLm1hcChhc3luYyBmaWxlbmFtZSA9PiAoe1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBwYXRoLnBhcnNlKGZpbGVuYW1lKS5uYW1lLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGF3YWl0IHJlYWRGaWxlKHBhdGguam9pbihmb3JtSmF2YVNjcmlwdEZpbGVzUGF0aCwgZmlsZW5hbWUpLCBcInV0Zi04XCIpLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVhZFNjaGVtYVJuZ0ZpbGUoZm9ybVNjaGVtYXNQYXRoOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gcmVhZEZpbGUocGF0aC5qb2luKGZvcm1TY2hlbWFzUGF0aCwgYCR7Z2Z2fSR7Z2V0Um5nU2NoZW1hRmlsZW5hbWUoZm9ybVNjaGVtYXNQYXRoLCBnZnYpfWApLCBcInV0Zi04XCIpO1xufVxuXG5mdW5jdGlvbiByZWFkTm9ybWF0aXZlSGVscEZpbGUoaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gcmVhZEZpbGUocGF0aC5qb2luKGhsRmFybURpcmVjdG9yeVBhdGgsIFwiRm9ybXNcIiwgXCJoZWxwaWRfbm9ybWF0aXYueG1sXCIpLCBcInV0Zi04XCIpO1xufVxuXG5mdW5jdGlvbiByZWFkSG9va3NGaWxlKGZvcm1EaXJlY3RvcnlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiByZWFkRmlsZShwYXRoLmpvaW4oZm9ybURpcmVjdG9yeVBhdGgsIFwiaG9va3MuanNcIiksIFwidXRmLThcIikuY2F0Y2goKCkgPT4gXCJcIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRGaWxlV2l0aERlZmF1bHQoXG4gICAgZmlsZVBhdGg6IHN0cmluZyxcbiAgICBmaWxlbmFtZTogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZ1xuKTogUHJvbWlzZTx1bmRlZmluZWQgfCBzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZEZpbGUocGF0aC5qb2luKGZpbGVQYXRoLCBmaWxlbmFtZSksIFwidXRmLThcIik7XG4gICAgfSBjYXRjaCAoaW5nb3JlRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxpQkFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUcsUUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUkscUJBQUEsR0FBQUosT0FBQTtBQWlDTyxlQUFlSyxjQUFjQSxDQUNoQ0MsZUFBdUIsRUFDdkJDLGFBQXFCLEVBQ3JCQyxtQkFBMkIsRUFDUjtFQUNuQixNQUFNQyxRQUFRLEdBQUdGLGFBQWE7RUFDOUIsTUFBTUcsUUFBUSxHQUFHQyxhQUFJLENBQUNDLFFBQVEsQ0FBQ04sZUFBZSxDQUFDO0VBQy9DLE1BQU1PLFlBQVksR0FBRyxNQUFNQyxjQUFjLENBQUNILGFBQUksQ0FBQ0ksSUFBSSxDQUFDVCxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDOUUsTUFBTVUsTUFBa0IsR0FBRztJQUN2QkgsWUFBWSxFQUFFQSxZQUFZO0lBQzFCSSxTQUFTLEVBQUU7TUFDUEMsR0FBRyxFQUFFUCxhQUFJLENBQUNDLFFBQVEsQ0FBQ04sZUFBZSxDQUFDO01BQ25DYSxrQkFBa0IsRUFBRSxNQUFNQyxtQkFBbUIsQ0FBQ2QsZUFBZSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUM7TUFDckZlLGdCQUFnQixFQUFFLE1BQU1DLGlCQUFpQixDQUFDWCxhQUFJLENBQUNJLElBQUksQ0FBQ1QsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ2pGaUIsY0FBYyxFQUFFLE1BQU1DLDRCQUE0QixDQUFDYixhQUFJLENBQUNJ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