testcafe 1.13.0 → 1.14.2

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 (336) hide show
  1. package/CHANGELOG.md +88 -10
  2. package/LICENSE +21 -21
  3. package/README.md +52 -48
  4. package/bin/testcafe-with-v8-flag-filter.js +0 -0
  5. package/lib/api/exportable-lib/index.js +50 -50
  6. package/lib/api/request-hooks/assert-type.js +7 -7
  7. package/lib/api/request-hooks/hook-method-names.js +11 -0
  8. package/lib/api/request-hooks/hook.js +33 -39
  9. package/lib/api/request-hooks/interfaces.js +3 -3
  10. package/lib/api/request-hooks/request-logger.js +113 -111
  11. package/lib/api/request-hooks/request-mock/create-request-mock.js +12 -0
  12. package/lib/api/request-hooks/request-mock/index.js +46 -0
  13. package/lib/api/request-hooks/request-mock.js +47 -48
  14. package/lib/api/structure/base-unit.js +11 -11
  15. package/lib/api/structure/fixture.js +75 -75
  16. package/lib/api/structure/interfaces.js +2 -2
  17. package/lib/api/structure/test-file.js +31 -31
  18. package/lib/api/structure/test-timeout.js +9 -9
  19. package/lib/api/structure/test.js +85 -85
  20. package/lib/api/structure/testing-unit.js +89 -89
  21. package/lib/api/structure/unit-type.js +9 -9
  22. package/lib/api/test-controller/assertion.js +88 -88
  23. package/lib/api/test-controller/execution-context.js +82 -82
  24. package/lib/api/test-controller/index.js +359 -319
  25. package/lib/api/test-controller/proxy.js +28 -28
  26. package/lib/api/test-page-url.js +60 -60
  27. package/lib/api/test-run-tracker.js +68 -68
  28. package/lib/api/wrap-test-function.js +49 -49
  29. package/lib/assertions/executor.js +74 -74
  30. package/lib/assertions/get-fn.js +46 -46
  31. package/lib/assertions/type.js +20 -20
  32. package/lib/assets/content-types.js +9 -9
  33. package/lib/assets/injectables.js +18 -18
  34. package/lib/browser/connection/command.js +10 -10
  35. package/lib/browser/connection/error-hints.js +9 -9
  36. package/lib/browser/connection/gateway.js +159 -159
  37. package/lib/browser/connection/get-hints.js +33 -33
  38. package/lib/browser/connection/heartbeat-status.js +8 -8
  39. package/lib/browser/connection/index.js +328 -328
  40. package/lib/browser/connection/remotes-queue.js +46 -46
  41. package/lib/browser/connection/service-routes.js +12 -12
  42. package/lib/browser/connection/status.js +12 -12
  43. package/lib/browser/interfaces.js +2 -2
  44. package/lib/browser/provider/built-in/dedicated/base.js +80 -80
  45. package/lib/browser/provider/built-in/dedicated/chrome/browser-client.js +204 -204
  46. package/lib/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +17 -17
  47. package/lib/browser/provider/built-in/dedicated/chrome/config.js +110 -110
  48. package/lib/browser/provider/built-in/dedicated/chrome/create-temp-profile.js +45 -45
  49. package/lib/browser/provider/built-in/dedicated/chrome/elapsed-upperbounds.js +15 -15
  50. package/lib/browser/provider/built-in/dedicated/chrome/index.js +102 -102
  51. package/lib/browser/provider/built-in/dedicated/chrome/interfaces.js +2 -2
  52. package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +24 -24
  53. package/lib/browser/provider/built-in/dedicated/chrome/runtime-info.js +29 -29
  54. package/lib/browser/provider/built-in/dedicated/edge/index.js +10 -10
  55. package/lib/browser/provider/built-in/dedicated/edge/runtime-info.js +29 -29
  56. package/lib/browser/provider/built-in/dedicated/firefox/config.js +33 -33
  57. package/lib/browser/provider/built-in/dedicated/firefox/create-temp-profile.js +78 -78
  58. package/lib/browser/provider/built-in/dedicated/firefox/index.js +73 -73
  59. package/lib/browser/provider/built-in/dedicated/firefox/local-firefox.js +36 -36
  60. package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/commands.js +13 -13
  61. package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/index.js +200 -200
  62. package/lib/browser/provider/built-in/dedicated/firefox/runtime-info.js +17 -17
  63. package/lib/browser/provider/built-in/index.js +21 -21
  64. package/lib/browser/provider/built-in/locally-installed.js +30 -30
  65. package/lib/browser/provider/built-in/path.js +47 -47
  66. package/lib/browser/provider/built-in/remote.js +58 -58
  67. package/lib/browser/provider/index.js +303 -303
  68. package/lib/browser/provider/parse-provider-name.js +16 -16
  69. package/lib/browser/provider/plugin-host.js +121 -121
  70. package/lib/browser/provider/pool.js +115 -115
  71. package/lib/browser/provider/utils/argument-parsing.js +74 -74
  72. package/lib/browser/provider/utils/browser-starter.js +34 -34
  73. package/lib/browser/provider/utils/client-functions.js +24 -24
  74. package/lib/browser/provider/utils/get-maximized-headless-window-size.js +9 -9
  75. package/lib/cli/argument-parser.js +284 -279
  76. package/lib/cli/authentication-helper.js +35 -35
  77. package/lib/cli/cli.js +134 -134
  78. package/lib/cli/correct-browsers-and-sources.js +40 -40
  79. package/lib/cli/index.js +19 -19
  80. package/lib/cli/log.js +43 -43
  81. package/lib/cli/remotes-wizard.js +36 -36
  82. package/lib/cli/termination-handler.js +38 -38
  83. package/lib/client/automation/index.js +144 -46
  84. package/lib/client/automation/index.min.js +1 -1
  85. package/lib/client/browser/idle-page/index.html.mustache +35 -35
  86. package/lib/client/browser/idle-page/logo.svg +86 -86
  87. package/lib/client/browser/service-worker.js +4 -6
  88. package/lib/client/core/index.js +19 -13
  89. package/lib/client/core/index.min.js +1 -1
  90. package/lib/client/driver/index.js +1807 -451
  91. package/lib/client/driver/index.min.js +1 -1
  92. package/lib/client/driver/internal-properties.js +9 -9
  93. package/lib/client/test-run/iframe.js.mustache +17 -17
  94. package/lib/client/test-run/index.js.mustache +51 -51
  95. package/lib/client/ui/index.js +14 -12
  96. package/lib/client/ui/index.min.js +1 -1
  97. package/lib/client/ui/sprite.svg +42 -42
  98. package/lib/client-functions/builder-symbol.js +4 -4
  99. package/lib/client-functions/client-function-builder.js +156 -135
  100. package/lib/client-functions/replicator.js +61 -61
  101. package/lib/client-functions/return-single-prop-mode.js +8 -8
  102. package/lib/client-functions/selector-api-execution-mode.js +22 -0
  103. package/lib/client-functions/selectors/add-api.js +646 -588
  104. package/lib/client-functions/selectors/create-snapshot-methods.js +13 -13
  105. package/lib/client-functions/selectors/prepare-api-args.js +20 -20
  106. package/lib/client-functions/selectors/selector-attribute-filter.js +22 -22
  107. package/lib/client-functions/selectors/selector-builder.js +154 -150
  108. package/lib/client-functions/selectors/selector-text-filter.js +43 -43
  109. package/lib/client-functions/selectors/snapshot-properties.js +48 -48
  110. package/lib/client-functions/types.js +18 -18
  111. package/lib/compiler/babel/format-babel-produced-code.js +10 -10
  112. package/lib/compiler/babel/get-base-babel-options.js +11 -11
  113. package/lib/compiler/babel/load-libs.js +64 -62
  114. package/lib/compiler/babel/preset-stage-2.js +19 -19
  115. package/lib/compiler/compile-client-function.js +73 -73
  116. package/lib/compiler/compilers.js +33 -33
  117. package/lib/compiler/index.js +92 -92
  118. package/lib/compiler/interfaces.js +2 -2
  119. package/lib/compiler/test-file/api-based.js +146 -146
  120. package/lib/compiler/test-file/base.js +36 -36
  121. package/lib/compiler/test-file/exportble-lib-path.js +5 -5
  122. package/lib/compiler/test-file/formats/coffeescript/compiler.js +38 -38
  123. package/lib/compiler/test-file/formats/coffeescript/get-test-list.js +29 -29
  124. package/lib/compiler/test-file/formats/es-next/compiler.js +43 -43
  125. package/lib/compiler/test-file/formats/es-next/get-test-list.js +166 -166
  126. package/lib/compiler/test-file/formats/es-next/is-flow-code.js +7 -7
  127. package/lib/compiler/test-file/formats/raw.js +85 -85
  128. package/lib/compiler/test-file/formats/typescript/compiler.js +135 -135
  129. package/lib/compiler/test-file/formats/typescript/get-test-list.js +185 -185
  130. package/lib/compiler/test-file/test-file-parser-base.js +214 -214
  131. package/lib/configuration/configuration-base.js +165 -165
  132. package/lib/configuration/constants.js +9 -9
  133. package/lib/configuration/customizable-compilers.js +7 -7
  134. package/lib/configuration/default-values.js +51 -51
  135. package/lib/configuration/interfaces.js +3 -3
  136. package/lib/configuration/option-names.js +53 -53
  137. package/lib/configuration/option-source.js +9 -9
  138. package/lib/configuration/option.js +14 -14
  139. package/lib/configuration/quarantine-option-names.js +10 -0
  140. package/lib/configuration/run-option-names.js +26 -26
  141. package/lib/configuration/screenshot-option-names.js +10 -10
  142. package/lib/configuration/testcafe-configuration.js +164 -165
  143. package/lib/configuration/types.js +2 -2
  144. package/lib/configuration/typescript-configuration.js +62 -62
  145. package/lib/custom-client-scripts/assert-type.js +7 -7
  146. package/lib/custom-client-scripts/client-script-init.js +3 -3
  147. package/lib/custom-client-scripts/client-script.js +107 -108
  148. package/lib/custom-client-scripts/get-code.js +11 -11
  149. package/lib/custom-client-scripts/get-url.js +6 -6
  150. package/lib/custom-client-scripts/load.js +15 -15
  151. package/lib/custom-client-scripts/problematic-scripts.js +2 -2
  152. package/lib/custom-client-scripts/routing.js +36 -36
  153. package/lib/custom-client-scripts/utils.js +60 -60
  154. package/lib/embedding-utils.js +83 -83
  155. package/lib/errors/create-stack-filter.js +18 -18
  156. package/lib/errors/error-list.js +26 -26
  157. package/lib/errors/get-callsite.js +31 -31
  158. package/lib/errors/internal-modules-prefix.js +8 -8
  159. package/lib/errors/is-internal-stack-frame.js +46 -46
  160. package/lib/errors/process-test-fn-error.js +37 -37
  161. package/lib/errors/runtime/index.js +123 -123
  162. package/lib/errors/runtime/templates.js +116 -114
  163. package/lib/errors/runtime/type-assertions.js +112 -112
  164. package/lib/errors/stack-cleaning-hook.js +64 -64
  165. package/lib/errors/test-run/formattable-adapter.js +59 -59
  166. package/lib/errors/test-run/index.js +302 -302
  167. package/lib/errors/test-run/render-error-template.js +31 -31
  168. package/lib/errors/test-run/templates.js +93 -95
  169. package/lib/errors/test-run/utils.js +90 -85
  170. package/lib/errors/types.js +157 -155
  171. package/lib/index.js +81 -81
  172. package/lib/live/bootstrapper.js +44 -44
  173. package/lib/live/controller.js +107 -107
  174. package/lib/live/file-watcher/index.js +67 -67
  175. package/lib/live/file-watcher/modules-graph.js +58 -58
  176. package/lib/live/keyboard-observer.js +76 -76
  177. package/lib/live/logger/index.js +64 -64
  178. package/lib/live/test-run-controller.js +96 -96
  179. package/lib/live/test-run-state.js +6 -6
  180. package/lib/live/test-run.js +56 -56
  181. package/lib/live/test-runner.js +168 -168
  182. package/lib/load-assets.js +29 -29
  183. package/lib/notifications/add-rendered-warning.js +16 -16
  184. package/lib/notifications/debug-logger.js +78 -78
  185. package/lib/notifications/deprecated.js +24 -24
  186. package/lib/notifications/information-message.js +12 -12
  187. package/lib/notifications/warning-log.js +32 -31
  188. package/lib/notifications/warning-message.js +48 -48
  189. package/lib/reporter/command/command-formatter.js +120 -109
  190. package/lib/reporter/command/format-command.js +8 -8
  191. package/lib/reporter/command/interfaces.js +2 -2
  192. package/lib/reporter/index.js +319 -314
  193. package/lib/reporter/interfaces.js +2 -2
  194. package/lib/reporter/plugin-host.js +136 -137
  195. package/lib/reporter/plugin-methods.js +12 -12
  196. package/lib/role/index.js +74 -74
  197. package/lib/role/marker-symbol.js +7 -7
  198. package/lib/role/phase.js +9 -9
  199. package/lib/runner/bootstrapper.js +272 -272
  200. package/lib/runner/browser-job-result.js +9 -9
  201. package/lib/runner/browser-job.js +153 -123
  202. package/lib/runner/browser-set.js +114 -114
  203. package/lib/runner/fixture-hook-controller.js +85 -85
  204. package/lib/runner/index.js +450 -442
  205. package/lib/runner/interfaces.js +3 -3
  206. package/lib/runner/reporter-stream-controller.js +28 -28
  207. package/lib/runner/task/index.js +152 -133
  208. package/lib/runner/task/phase.js +9 -9
  209. package/lib/runner/test-run-controller.js +166 -185
  210. package/lib/runner/tested-app.js +73 -72
  211. package/lib/screenshots/capturer.js +141 -141
  212. package/lib/screenshots/constants.js +11 -11
  213. package/lib/screenshots/crop.js +111 -111
  214. package/lib/screenshots/default-extension.js +4 -4
  215. package/lib/screenshots/index.js +67 -67
  216. package/lib/screenshots/utils.js +39 -39
  217. package/lib/services/compiler/host.js +190 -106
  218. package/lib/services/compiler/io.js +9 -9
  219. package/lib/services/compiler/protocol.js +17 -16
  220. package/lib/services/compiler/service.js +225 -106
  221. package/lib/services/compiler/test-run-proxy.js +111 -73
  222. package/lib/services/interfaces.js +3 -0
  223. package/lib/services/process-title.js +8 -8
  224. package/lib/services/serialization/prepare-options.js +17 -17
  225. package/lib/services/serialization/replicator/create-replicator.js +27 -0
  226. package/lib/services/serialization/replicator/custom-error-transform.js +28 -0
  227. package/lib/services/serialization/test-structure.js +93 -77
  228. package/lib/services/utils/ipc/interfaces.js +30 -30
  229. package/lib/services/utils/ipc/io.js +108 -108
  230. package/lib/services/utils/ipc/message.js +76 -73
  231. package/lib/services/utils/ipc/packet.js +55 -55
  232. package/lib/services/utils/ipc/proxy.js +110 -118
  233. package/lib/services/utils/ipc/transport.js +64 -64
  234. package/lib/shared/errors/index.js +382 -382
  235. package/lib/shared/node-modules-folder-name.js +4 -4
  236. package/lib/test-run/bookmark.js +90 -90
  237. package/lib/test-run/browser-console-messages.js +73 -73
  238. package/lib/test-run/browser-manipulation-queue.js +92 -92
  239. package/lib/test-run/client-messages.js +9 -9
  240. package/lib/test-run/commands/actions.js +486 -425
  241. package/lib/test-run/commands/assertion.js +45 -45
  242. package/lib/test-run/commands/base.js +14 -14
  243. package/lib/test-run/commands/browser-manipulation.js +95 -95
  244. package/lib/test-run/commands/from-object.js +82 -82
  245. package/lib/test-run/commands/observation.js +61 -61
  246. package/lib/test-run/commands/options.js +231 -215
  247. package/lib/test-run/commands/service.js +54 -48
  248. package/lib/test-run/commands/type.js +65 -60
  249. package/lib/test-run/commands/utils.js +87 -87
  250. package/lib/test-run/commands/validations/argument.js +90 -90
  251. package/lib/test-run/commands/validations/factories.js +47 -47
  252. package/lib/test-run/commands/validations/initializers.js +44 -44
  253. package/lib/test-run/debug-log.js +32 -32
  254. package/lib/test-run/execute-js-expression.js +74 -74
  255. package/lib/test-run/index.js +823 -752
  256. package/lib/test-run/marker-symbol.js +7 -7
  257. package/lib/test-run/observed-callsites-storage.js +17 -17
  258. package/lib/test-run/phase.js +16 -16
  259. package/lib/test-run/session-controller.js +104 -104
  260. package/lib/testcafe.js +119 -114
  261. package/lib/utils/assignable.js +39 -39
  262. package/lib/utils/async-event-emitter.js +28 -28
  263. package/lib/utils/async-queue.js +14 -14
  264. package/lib/utils/browser-connection-timeouts.js +19 -19
  265. package/lib/utils/callsite.js +17 -17
  266. package/lib/utils/check-file-path.js +31 -31
  267. package/lib/utils/check-url.js +51 -51
  268. package/lib/utils/convert-to-best-fit-type.js +16 -16
  269. package/lib/utils/correct-file-path.js +21 -21
  270. package/lib/utils/define-lazy-property.js +13 -13
  271. package/lib/utils/delay.js +6 -6
  272. package/lib/utils/delegated-api.js +44 -44
  273. package/lib/utils/detect-display.js +6 -6
  274. package/lib/utils/detect-ffmpeg.js +44 -44
  275. package/lib/utils/diff/colors.js +29 -29
  276. package/lib/utils/diff/index.js +53 -53
  277. package/lib/utils/diff/util.js +24 -22
  278. package/lib/utils/diff.js +29 -29
  279. package/lib/utils/escape-user-agent.js +10 -10
  280. package/lib/utils/flag-list.js +17 -17
  281. package/lib/utils/get-any-key.js +8 -8
  282. package/lib/utils/get-browser.js +8 -8
  283. package/lib/utils/get-common-path.js +34 -34
  284. package/lib/utils/get-filter-fn.js +40 -40
  285. package/lib/utils/get-options/base.js +36 -36
  286. package/lib/utils/get-options/compiler.js +33 -33
  287. package/lib/utils/get-options/grep.js +15 -15
  288. package/lib/utils/get-options/index.js +21 -19
  289. package/lib/utils/get-options/meta.js +22 -22
  290. package/lib/utils/get-options/quarantine.js +92 -0
  291. package/lib/utils/get-options/screenshot.js +17 -17
  292. package/lib/utils/get-options/ssl.js +45 -45
  293. package/lib/utils/get-options/video.js +10 -10
  294. package/lib/utils/get-viewport-width.js +18 -18
  295. package/lib/utils/guard-time-execution.js +10 -10
  296. package/lib/utils/handle-errors.js +74 -74
  297. package/lib/utils/handle-tag-args.js +8 -8
  298. package/lib/utils/http.js +30 -30
  299. package/lib/utils/is-localhost.js +11 -11
  300. package/lib/utils/is-password-input.js +11 -0
  301. package/lib/utils/is-repl.js +12 -0
  302. package/lib/utils/is-window-in-iframe.js +6 -6
  303. package/lib/utils/limit-number.js +10 -10
  304. package/lib/utils/make-reg-exp.js +7 -7
  305. package/lib/utils/moment-loader.js +20 -20
  306. package/lib/utils/parse-file-list.js +71 -71
  307. package/lib/utils/parse-user-agent.js +55 -55
  308. package/lib/utils/path-pattern.js +114 -114
  309. package/lib/utils/prepare-reporters.js +30 -30
  310. package/lib/utils/prerender-callsite.js +18 -18
  311. package/lib/utils/process.js +119 -119
  312. package/lib/utils/promisified-functions.js +46 -46
  313. package/lib/utils/re-executable-promise.js +39 -39
  314. package/lib/utils/render-callsite-sync.js +29 -29
  315. package/lib/utils/render-template.js +10 -10
  316. package/lib/utils/reporter.js +30 -30
  317. package/lib/utils/resolve-path-relatively-cwd.js +7 -7
  318. package/lib/utils/string.js +105 -105
  319. package/lib/utils/temp-directory/cleanup-process/commands.js +7 -7
  320. package/lib/utils/temp-directory/cleanup-process/index.js +143 -143
  321. package/lib/utils/temp-directory/cleanup-process/worker.js +58 -58
  322. package/lib/utils/temp-directory/index.js +87 -87
  323. package/lib/utils/temp-directory/lockfile.js +56 -56
  324. package/lib/utils/thennable.js +7 -7
  325. package/lib/utils/timer.js +15 -15
  326. package/lib/utils/to-posix-path.js +8 -8
  327. package/lib/utils/types.js +2 -2
  328. package/lib/video-recorder/interfaces.js +2 -2
  329. package/lib/video-recorder/process.js +126 -126
  330. package/lib/video-recorder/recorder.js +136 -136
  331. package/lib/video-recorder/test-run-video-recorder.js +69 -69
  332. package/lib/video-recorder/videos.js +37 -37
  333. package/package.json +7 -7
  334. package/ts-defs/index.d.ts +109 -17
  335. package/ts-defs/selectors.d.ts +95 -7
  336. package/ts-defs/testcafe-scripts.d.ts +96 -8
@@ -1,166 +1,165 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const configuration_base_1 = __importDefault(require("./configuration-base"));
7
- const lodash_1 = require("lodash");
8
- const get_options_1 = require("../utils/get-options");
9
- const option_names_1 = __importDefault(require("./option-names"));
10
- const get_filter_fn_1 = __importDefault(require("../utils/get-filter-fn"));
11
- const prepare_reporters_1 = __importDefault(require("../utils/prepare-reporters"));
12
- const string_1 = require("../utils/string");
13
- const render_template_1 = __importDefault(require("../utils/render-template"));
14
- const warning_message_1 = __importDefault(require("../notifications/warning-message"));
15
- const resolve_path_relatively_cwd_1 = __importDefault(require("../utils/resolve-path-relatively-cwd"));
16
- const default_values_1 = require("./default-values");
17
- const option_source_1 = __importDefault(require("./option-source"));
18
- const customizable_compilers_1 = __importDefault(require("./customizable-compilers"));
19
- const deprecated_1 = require("../notifications/deprecated");
20
- const CONFIGURATION_FILENAME = '.testcaferc.json';
21
- const DEFAULT_SCREENSHOTS_DIRECTORY = 'screenshots';
22
- const OPTION_FLAG_NAMES = [
23
- option_names_1.default.skipJsErrors,
24
- option_names_1.default.quarantineMode,
25
- option_names_1.default.debugMode,
26
- option_names_1.default.debugOnFail,
27
- option_names_1.default.skipUncaughtErrors,
28
- option_names_1.default.stopOnFirstFail,
29
- option_names_1.default.takeScreenshotsOnFails,
30
- option_names_1.default.disablePageCaching,
31
- option_names_1.default.disablePageReloads,
32
- option_names_1.default.disableScreenshots,
33
- option_names_1.default.disableMultipleWindows
34
- ];
35
- const OPTION_INIT_FLAG_NAMES = [
36
- option_names_1.default.developmentMode,
37
- option_names_1.default.retryTestPages,
38
- option_names_1.default.cache
39
- ];
40
- class TestCafeConfiguration extends configuration_base_1.default {
41
- constructor(configFile = CONFIGURATION_FILENAME) {
42
- super(configFile);
43
- }
44
- async init(options) {
45
- options = options || {};
46
- await super.init();
47
- const opts = await this._load();
48
- if (opts) {
49
- this._options = configuration_base_1.default._fromObj(opts);
50
- await this._normalizeOptionsAfterLoad();
51
- }
52
- this.mergeOptions(options);
53
- }
54
- prepare() {
55
- this._prepareFlags();
56
- this._setDefaultValues();
57
- this._prepareCompilerOptions();
58
- }
59
- notifyAboutOverriddenOptions() {
60
- if (!this._overriddenOptions.length)
61
- return;
62
- const optionsStr = string_1.getConcatenatedValuesString(this._overriddenOptions);
63
- const optionsSuffix = string_1.getPluralSuffix(this._overriddenOptions);
64
- configuration_base_1.default._showConsoleWarning(render_template_1.default(warning_message_1.default.configOptionsWereOverridden, optionsStr, optionsSuffix));
65
- this._overriddenOptions = [];
66
- }
67
- notifyAboutDeprecatedOptions(warningLog) {
68
- const deprecatedOptions = this.getOptions((name, option) => name in deprecated_1.DEPRECATED && option.value !== void 0);
69
- for (const optionName in deprecatedOptions)
70
- warningLog.addWarning(deprecated_1.getDeprecationMessage(deprecated_1.DEPRECATED[optionName]));
71
- }
72
- get startOptions() {
73
- const result = {
74
- hostname: this.getOption(option_names_1.default.hostname),
75
- port1: this.getOption(option_names_1.default.port1),
76
- port2: this.getOption(option_names_1.default.port2),
77
- options: {
78
- ssl: this.getOption(option_names_1.default.ssl),
79
- developmentMode: this.getOption(option_names_1.default.developmentMode),
80
- retryTestPages: this.getOption(option_names_1.default.retryTestPages),
81
- cache: this.getOption(option_names_1.default.cache)
82
- }
83
- };
84
- return result;
85
- }
86
- _prepareFlag(name) {
87
- const option = this._ensureOption(name, void 0, option_source_1.default.Configuration);
88
- option.value = !!option.value;
89
- }
90
- _prepareFlags() {
91
- OPTION_FLAG_NAMES.forEach(name => this._prepareFlag(name));
92
- }
93
- _prepareInitFlags() {
94
- OPTION_INIT_FLAG_NAMES.forEach(name => this._prepareFlag(name));
95
- }
96
- async _normalizeOptionsAfterLoad() {
97
- await this._prepareSslOptions();
98
- this._prepareInitFlags();
99
- this._prepareFilterFn();
100
- this._ensureArrayOption(option_names_1.default.src);
101
- this._ensureArrayOption(option_names_1.default.browsers);
102
- this._ensureArrayOption(option_names_1.default.clientScripts);
103
- this._prepareReporters();
104
- }
105
- _prepareFilterFn() {
106
- const filterOption = this._ensureOption(option_names_1.default.filter, null, option_source_1.default.Configuration);
107
- if (!filterOption.value)
108
- return;
109
- const filterOptionValue = filterOption.value;
110
- if (filterOptionValue.testGrep)
111
- filterOptionValue.testGrep = get_options_1.getGrepOptions(option_names_1.default.filterTestGrep, filterOptionValue.testGrep);
112
- if (filterOptionValue.fixtureGrep)
113
- filterOptionValue.fixtureGrep = get_options_1.getGrepOptions(option_names_1.default.filterFixtureGrep, filterOptionValue.fixtureGrep);
114
- filterOption.value = get_filter_fn_1.default(filterOption.value);
115
- }
116
- _ensureScreenshotPath() {
117
- const path = resolve_path_relatively_cwd_1.default(DEFAULT_SCREENSHOTS_DIRECTORY);
118
- const screenshots = this._ensureOption(option_names_1.default.screenshots, {}, option_source_1.default.Configuration).value;
119
- if (!screenshots.path)
120
- screenshots.path = path;
121
- }
122
- _prepareReporters() {
123
- const reporterOption = this._options[option_names_1.default.reporter];
124
- if (!reporterOption)
125
- return;
126
- const optionValue = lodash_1.castArray(reporterOption.value);
127
- reporterOption.value = prepare_reporters_1.default(optionValue);
128
- }
129
- async _prepareSslOptions() {
130
- const sslOptions = this._options[option_names_1.default.ssl];
131
- if (!sslOptions)
132
- return;
133
- sslOptions.value = await get_options_1.getSSLOptions(sslOptions.value);
134
- }
135
- _setDefaultValues() {
136
- this._ensureOptionWithValue(option_names_1.default.selectorTimeout, default_values_1.DEFAULT_TIMEOUT.selector, option_source_1.default.Configuration);
137
- this._ensureOptionWithValue(option_names_1.default.assertionTimeout, default_values_1.DEFAULT_TIMEOUT.assertion, option_source_1.default.Configuration);
138
- this._ensureOptionWithValue(option_names_1.default.pageLoadTimeout, default_values_1.DEFAULT_TIMEOUT.pageLoad, option_source_1.default.Configuration);
139
- this._ensureOptionWithValue(option_names_1.default.speed, default_values_1.DEFAULT_SPEED_VALUE, option_source_1.default.Configuration);
140
- this._ensureOptionWithValue(option_names_1.default.appInitDelay, default_values_1.DEFAULT_APP_INIT_DELAY, option_source_1.default.Configuration);
141
- this._ensureOptionWithValue(option_names_1.default.concurrency, default_values_1.DEFAULT_CONCURRENCY_VALUE, option_source_1.default.Configuration);
142
- this._ensureOptionWithValue(option_names_1.default.src, default_values_1.DEFAULT_SOURCE_DIRECTORIES, option_source_1.default.Configuration);
143
- this._ensureOptionWithValue(option_names_1.default.developmentMode, default_values_1.DEFAULT_DEVELOPMENT_MODE, option_source_1.default.Configuration);
144
- this._ensureOptionWithValue(option_names_1.default.retryTestPages, default_values_1.DEFAULT_RETRY_TEST_PAGES, option_source_1.default.Configuration);
145
- this._ensureScreenshotPath();
146
- }
147
- _prepareCompilerOptions() {
148
- const compilerOptions = this._ensureOption(option_names_1.default.compilerOptions, default_values_1.getDefaultCompilerOptions(), option_source_1.default.Configuration);
149
- compilerOptions.value = compilerOptions.value || default_values_1.getDefaultCompilerOptions();
150
- const tsConfigPath = this.getOption(option_names_1.default.tsConfigPath);
151
- if (tsConfigPath) {
152
- const compilerOptionValue = compilerOptions.value;
153
- let typeScriptCompilerOptions = compilerOptionValue[customizable_compilers_1.default.typescript];
154
- typeScriptCompilerOptions = Object.assign({
155
- configPath: tsConfigPath
156
- }, typeScriptCompilerOptions);
157
- compilerOptions.value[customizable_compilers_1.default.typescript] = typeScriptCompilerOptions;
158
- }
159
- }
160
- static get FILENAME() {
161
- return CONFIGURATION_FILENAME;
162
- }
163
- }
164
- exports.default = TestCafeConfiguration;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const configuration_base_1 = __importDefault(require("./configuration-base"));
7
+ const lodash_1 = require("lodash");
8
+ const get_options_1 = require("../utils/get-options");
9
+ const option_names_1 = __importDefault(require("./option-names"));
10
+ const get_filter_fn_1 = __importDefault(require("../utils/get-filter-fn"));
11
+ const prepare_reporters_1 = __importDefault(require("../utils/prepare-reporters"));
12
+ const string_1 = require("../utils/string");
13
+ const render_template_1 = __importDefault(require("../utils/render-template"));
14
+ const warning_message_1 = __importDefault(require("../notifications/warning-message"));
15
+ const resolve_path_relatively_cwd_1 = __importDefault(require("../utils/resolve-path-relatively-cwd"));
16
+ const default_values_1 = require("./default-values");
17
+ const option_source_1 = __importDefault(require("./option-source"));
18
+ const customizable_compilers_1 = __importDefault(require("./customizable-compilers"));
19
+ const deprecated_1 = require("../notifications/deprecated");
20
+ const CONFIGURATION_FILENAME = '.testcaferc.json';
21
+ const DEFAULT_SCREENSHOTS_DIRECTORY = 'screenshots';
22
+ const OPTION_FLAG_NAMES = [
23
+ option_names_1.default.skipJsErrors,
24
+ option_names_1.default.debugMode,
25
+ option_names_1.default.debugOnFail,
26
+ option_names_1.default.skipUncaughtErrors,
27
+ option_names_1.default.stopOnFirstFail,
28
+ option_names_1.default.takeScreenshotsOnFails,
29
+ option_names_1.default.disablePageCaching,
30
+ option_names_1.default.disablePageReloads,
31
+ option_names_1.default.disableScreenshots,
32
+ option_names_1.default.disableMultipleWindows
33
+ ];
34
+ const OPTION_INIT_FLAG_NAMES = [
35
+ option_names_1.default.developmentMode,
36
+ option_names_1.default.retryTestPages,
37
+ option_names_1.default.cache
38
+ ];
39
+ class TestCafeConfiguration extends configuration_base_1.default {
40
+ constructor(configFile = CONFIGURATION_FILENAME) {
41
+ super(configFile);
42
+ }
43
+ async init(options) {
44
+ options = options || {};
45
+ await super.init();
46
+ const opts = await this._load();
47
+ if (opts) {
48
+ this._options = configuration_base_1.default._fromObj(opts);
49
+ await this._normalizeOptionsAfterLoad();
50
+ }
51
+ this.mergeOptions(options);
52
+ }
53
+ prepare() {
54
+ this._prepareFlags();
55
+ this._setDefaultValues();
56
+ this._prepareCompilerOptions();
57
+ }
58
+ notifyAboutOverriddenOptions() {
59
+ if (!this._overriddenOptions.length)
60
+ return;
61
+ const optionsStr = string_1.getConcatenatedValuesString(this._overriddenOptions);
62
+ const optionsSuffix = string_1.getPluralSuffix(this._overriddenOptions);
63
+ configuration_base_1.default._showConsoleWarning(render_template_1.default(warning_message_1.default.configOptionsWereOverridden, optionsStr, optionsSuffix));
64
+ this._overriddenOptions = [];
65
+ }
66
+ notifyAboutDeprecatedOptions(warningLog) {
67
+ const deprecatedOptions = this.getOptions((name, option) => name in deprecated_1.DEPRECATED && option.value !== void 0);
68
+ for (const optionName in deprecatedOptions)
69
+ warningLog.addWarning(deprecated_1.getDeprecationMessage(deprecated_1.DEPRECATED[optionName]));
70
+ }
71
+ get startOptions() {
72
+ const result = {
73
+ hostname: this.getOption(option_names_1.default.hostname),
74
+ port1: this.getOption(option_names_1.default.port1),
75
+ port2: this.getOption(option_names_1.default.port2),
76
+ options: {
77
+ ssl: this.getOption(option_names_1.default.ssl),
78
+ developmentMode: this.getOption(option_names_1.default.developmentMode),
79
+ retryTestPages: this.getOption(option_names_1.default.retryTestPages),
80
+ cache: this.getOption(option_names_1.default.cache)
81
+ }
82
+ };
83
+ return result;
84
+ }
85
+ _prepareFlag(name) {
86
+ const option = this._ensureOption(name, void 0, option_source_1.default.Configuration);
87
+ option.value = !!option.value;
88
+ }
89
+ _prepareFlags() {
90
+ OPTION_FLAG_NAMES.forEach(name => this._prepareFlag(name));
91
+ }
92
+ _prepareInitFlags() {
93
+ OPTION_INIT_FLAG_NAMES.forEach(name => this._prepareFlag(name));
94
+ }
95
+ async _normalizeOptionsAfterLoad() {
96
+ await this._prepareSslOptions();
97
+ this._prepareInitFlags();
98
+ this._prepareFilterFn();
99
+ this._ensureArrayOption(option_names_1.default.src);
100
+ this._ensureArrayOption(option_names_1.default.browsers);
101
+ this._ensureArrayOption(option_names_1.default.clientScripts);
102
+ this._prepareReporters();
103
+ }
104
+ _prepareFilterFn() {
105
+ const filterOption = this._ensureOption(option_names_1.default.filter, null, option_source_1.default.Configuration);
106
+ if (!filterOption.value)
107
+ return;
108
+ const filterOptionValue = filterOption.value;
109
+ if (filterOptionValue.testGrep)
110
+ filterOptionValue.testGrep = get_options_1.getGrepOptions(option_names_1.default.filterTestGrep, filterOptionValue.testGrep);
111
+ if (filterOptionValue.fixtureGrep)
112
+ filterOptionValue.fixtureGrep = get_options_1.getGrepOptions(option_names_1.default.filterFixtureGrep, filterOptionValue.fixtureGrep);
113
+ filterOption.value = get_filter_fn_1.default(filterOption.value);
114
+ }
115
+ _ensureScreenshotPath() {
116
+ const path = resolve_path_relatively_cwd_1.default(DEFAULT_SCREENSHOTS_DIRECTORY);
117
+ const screenshots = this._ensureOption(option_names_1.default.screenshots, {}, option_source_1.default.Configuration).value;
118
+ if (!screenshots.path)
119
+ screenshots.path = path;
120
+ }
121
+ _prepareReporters() {
122
+ const reporterOption = this._options[option_names_1.default.reporter];
123
+ if (!reporterOption)
124
+ return;
125
+ const optionValue = lodash_1.castArray(reporterOption.value);
126
+ reporterOption.value = prepare_reporters_1.default(optionValue);
127
+ }
128
+ async _prepareSslOptions() {
129
+ const sslOptions = this._options[option_names_1.default.ssl];
130
+ if (!sslOptions)
131
+ return;
132
+ sslOptions.value = await get_options_1.getSSLOptions(sslOptions.value);
133
+ }
134
+ _setDefaultValues() {
135
+ this._ensureOptionWithValue(option_names_1.default.selectorTimeout, default_values_1.DEFAULT_TIMEOUT.selector, option_source_1.default.Configuration);
136
+ this._ensureOptionWithValue(option_names_1.default.assertionTimeout, default_values_1.DEFAULT_TIMEOUT.assertion, option_source_1.default.Configuration);
137
+ this._ensureOptionWithValue(option_names_1.default.pageLoadTimeout, default_values_1.DEFAULT_TIMEOUT.pageLoad, option_source_1.default.Configuration);
138
+ this._ensureOptionWithValue(option_names_1.default.speed, default_values_1.DEFAULT_SPEED_VALUE, option_source_1.default.Configuration);
139
+ this._ensureOptionWithValue(option_names_1.default.appInitDelay, default_values_1.DEFAULT_APP_INIT_DELAY, option_source_1.default.Configuration);
140
+ this._ensureOptionWithValue(option_names_1.default.concurrency, default_values_1.DEFAULT_CONCURRENCY_VALUE, option_source_1.default.Configuration);
141
+ this._ensureOptionWithValue(option_names_1.default.src, default_values_1.DEFAULT_SOURCE_DIRECTORIES, option_source_1.default.Configuration);
142
+ this._ensureOptionWithValue(option_names_1.default.developmentMode, default_values_1.DEFAULT_DEVELOPMENT_MODE, option_source_1.default.Configuration);
143
+ this._ensureOptionWithValue(option_names_1.default.retryTestPages, default_values_1.DEFAULT_RETRY_TEST_PAGES, option_source_1.default.Configuration);
144
+ this._ensureScreenshotPath();
145
+ }
146
+ _prepareCompilerOptions() {
147
+ const compilerOptions = this._ensureOption(option_names_1.default.compilerOptions, default_values_1.getDefaultCompilerOptions(), option_source_1.default.Configuration);
148
+ compilerOptions.value = compilerOptions.value || default_values_1.getDefaultCompilerOptions();
149
+ const tsConfigPath = this.getOption(option_names_1.default.tsConfigPath);
150
+ if (tsConfigPath) {
151
+ const compilerOptionValue = compilerOptions.value;
152
+ let typeScriptCompilerOptions = compilerOptionValue[customizable_compilers_1.default.typescript];
153
+ typeScriptCompilerOptions = Object.assign({
154
+ configPath: tsConfigPath
155
+ }, typeScriptCompilerOptions);
156
+ compilerOptions.value[customizable_compilers_1.default.typescript] = typeScriptCompilerOptions;
157
+ }
158
+ }
159
+ static get FILENAME() {
160
+ return CONFIGURATION_FILENAME;
161
+ }
162
+ }
163
+ exports.default = TestCafeConfiguration;
165
164
  module.exports = exports.default;
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGNhZmUtY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uL3Rlc3RjYWZlLWNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4RUFBaUQ7QUFDakQsbUNBQW1DO0FBQ25DLHNEQUFxRTtBQUNyRSxrRUFBMEM7QUFDMUMsMkVBQWlEO0FBQ2pELG1GQUEwRDtBQUMxRCw0Q0FBK0U7QUFDL0UsK0VBQXNEO0FBQ3RELHVGQUFnRTtBQUNoRSx1R0FBNEU7QUFFNUUscURBUzBCO0FBRTFCLG9FQUEyQztBQVEzQyxzRkFBNkQ7QUFDN0QsNERBQWdGO0FBR2hGLE1BQU0sc0JBQXNCLEdBQUcsa0JBQWtCLENBQUM7QUFFbEQsTUFBTSw2QkFBNkIsR0FBRyxhQUFhLENBQUM7QUFFcEQsTUFBTSxpQkFBaUIsR0FBRztJQUN0QixzQkFBWSxDQUFDLFlBQVk7SUFDekIsc0JBQVksQ0FBQyxjQUFjO0lBQzNCLHNCQUFZLENBQUMsU0FBUztJQUN0QixzQkFBWSxDQUFDLFdBQVc7SUFDeEIsc0JBQVksQ0FBQyxrQkFBa0I7SUFDL0Isc0JBQVksQ0FBQyxlQUFlO0lBQzVCLHNCQUFZLENBQUMsc0JBQXNCO0lBQ25DLHNCQUFZLENBQUMsa0JBQWtCO0lBQy9CLHNCQUFZLENBQUMsa0JBQWtCO0lBQy9CLHNCQUFZLENBQUMsa0JBQWtCO0lBQy9CLHNCQUFZLENBQUMsc0JBQXNCO0NBQ3RDLENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUFHO0lBQzNCLHNCQUFZLENBQUMsZUFBZTtJQUM1QixzQkFBWSxDQUFDLGNBQWM7SUFDM0Isc0JBQVksQ0FBQyxLQUFLO0NBQ3JCLENBQUM7QUFnQkYsTUFBcUIscUJBQXNCLFNBQVEsNEJBQWE7SUFDNUQsWUFBb0IsVUFBVSxHQUFHLHNCQUFzQjtRQUNuRCxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQUUsT0FBZ0I7UUFDL0IsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFeEIsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFaEMsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLDRCQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTdDLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7U0FDM0M7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxPQUFPO1FBQ1YsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSw0QkFBNEI7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO1lBQy9CLE9BQU87UUFFWCxNQUFNLFVBQVUsR0FBTSxvQ0FBMkIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRSxNQUFNLGFBQWEsR0FBRyx3QkFBZSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRS9ELDRCQUFhLENBQUMsbUJBQW1CLENBQUMseUJBQWMsQ0FBQyx5QkFBZ0IsQ0FBQywyQkFBMkIsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUUzSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTSw0QkFBNEIsQ0FBRSxVQUFzQjtRQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksdUJBQVUsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFM0csS0FBSyxNQUFNLFVBQVUsSUFBSSxpQkFBaUI7WUFDdEMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxrQ0FBcUIsQ0FBQyx1QkFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE1BQU0sTUFBTSxHQUF5QjtZQUNqQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBWSxDQUFDLFFBQVEsQ0FBVztZQUN6RCxLQUFLLEVBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBWSxDQUFDLEtBQUssQ0FBVztZQUN0RCxLQUFLLEVBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBWSxDQUFDLEtBQUssQ0FBVztZQUV0RCxPQUFPLEVBQUU7Z0JBQ0wsR0FBRyxFQUFjLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQVksQ0FBQyxHQUFHLENBQVc7Z0JBQzNELGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFZLENBQUMsZUFBZSxDQUFZO2dCQUN4RSxjQUFjLEVBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBWSxDQUFDLGNBQWMsQ0FBWTtnQkFDdkUsS0FBSyxFQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQVksQ0FBQyxLQUFLLENBQVk7YUFDakU7U0FDSixDQUFDO1FBRUYsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLFlBQVksQ0FBRSxJQUFZO1FBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLHVCQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFNUUsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRU8sYUFBYTtRQUNqQixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixzQkFBc0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVPLEtBQUssQ0FBQywwQkFBMEI7UUFDcEMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLHVCQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFL0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO1lBQ25CLE9BQU87UUFFWCxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxLQUFxQixDQUFDO1FBRTdELElBQUksaUJBQWlCLENBQUMsUUFBUTtZQUMxQixpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsNEJBQWMsQ0FBQyxzQkFBWSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxRQUFrQixDQUFDLENBQUM7UUFFbkgsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXO1lBQzdCLGlCQUFpQixDQUFDLFdBQVcsR0FBRyw0QkFBYyxDQUFDLHNCQUFZLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsV0FBcUIsQ0FBQyxDQUFDO1FBRTVILFlBQVksQ0FBQyxLQUFLLEdBQUcsdUJBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFhLENBQUM7SUFDckUsQ0FBQztJQUVPLHFCQUFxQjtRQUN6QixNQUFNLElBQUksR0FBVSxxQ0FBd0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLHVCQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBMkIsQ0FBQztRQUU3SCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDakIsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLGNBQWM7WUFDZixPQUFPO1FBRVgsTUFBTSxXQUFXLEdBQUcsa0JBQVMsQ0FBQyxjQUFjLENBQUMsS0FBdUIsQ0FBQyxDQUFDO1FBRXRFLGNBQWMsQ0FBQyxLQUFLLEdBQUcsMkJBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLEtBQUssQ0FBQyxrQkFBa0I7UUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxVQUFVO1lBQ1gsT0FBTztRQUVYLFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSwyQkFBYSxDQUFDLFVBQVUsQ0FBQyxLQUFlLENBQTBDLENBQUM7SUFDaEgsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQVksQ0FBQyxlQUFlLEVBQUUsZ0NBQWUsQ0FBQyxRQUFRLEVBQUUsdUJBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQVksQ0FBQyxnQkFBZ0IsRUFBRSxnQ0FBZSxDQUFDLFNBQVMsRUFBRSx1QkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBWSxDQUFDLGVBQWUsRUFBRSxnQ0FBZSxDQUFDLFFBQVEsRUFBRSx1QkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBWSxDQUFDLEtBQUssRUFBRSxvQ0FBbUIsRUFBRSx1QkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBWSxDQUFDLFlBQVksRUFBRSx1Q0FBc0IsRUFBRSx1QkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBWSxDQUFDLFdBQVcsRUFBRSwwQ0FBeUIsRUFBRSx1QkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBWSxDQUFDLEdBQUcsRUFBRSwyQ0FBMEIsRUFBRSx1QkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBWSxDQUFDLGVBQWUsRUFBRSx5Q0FBd0IsRUFBRSx1QkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBWSxDQUFDLGNBQWMsRUFBRSx5Q0FBd0IsRUFBRSx1QkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRS9HLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBWSxDQUFDLGVBQWUsRUFBRSwwQ0FBeUIsRUFBRSxFQUFFLHVCQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbEksZUFBZSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxJQUFJLDBDQUF5QixFQUFFLENBQUM7UUFFN0UsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRS9ELElBQUksWUFBWSxFQUFFO1lBQ2QsTUFBTSxtQkFBbUIsR0FBTyxlQUFlLENBQUMsS0FBd0IsQ0FBQztZQUN6RSxJQUFJLHlCQUF5QixHQUFHLG1CQUFtQixDQUFDLGdDQUFxQixDQUFDLFVBQVUsQ0FBOEIsQ0FBQztZQUVuSCx5QkFBeUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUN0QyxVQUFVLEVBQUUsWUFBWTthQUMzQixFQUFFLHlCQUF5QixDQUFDLENBQUM7WUFFN0IsZUFBZSxDQUFDLEtBQXlCLENBQUMsZ0NBQXFCLENBQUMsVUFBVSxDQUFDLEdBQUcseUJBQXlCLENBQUM7U0FDNUc7SUFDTCxDQUFDO0lBRU0sTUFBTSxLQUFLLFFBQVE7UUFDdEIsT0FBTyxzQkFBc0IsQ0FBQztJQUNsQyxDQUFDO0NBQ0o7QUF4S0Qsd0NBd0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbmZpZ3VyYXRpb24gZnJvbSAnLi9jb25maWd1cmF0aW9uLWJhc2UnO1xuaW1wb3J0IHsgY2FzdEFycmF5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGdldEdyZXBPcHRpb25zLCBnZXRTU0xPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvZ2V0LW9wdGlvbnMnO1xuaW1wb3J0IE9QVElPTl9OQU1FUyBmcm9tICcuL29wdGlvbi1uYW1lcyc7XG5pbXBvcnQgZ2V0RmlsdGVyRm4gZnJvbSAnLi4vdXRpbHMvZ2V0LWZpbHRlci1mbic7XG5pbXBvcnQgcHJlcGFyZVJlcG9ydGVycyBmcm9tICcuLi91dGlscy9wcmVwYXJlLXJlcG9ydGVycyc7XG5pbXBvcnQgeyBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcsIGdldFBsdXJhbFN1ZmZpeCB9IGZyb20gJy4uL3V0aWxzL3N0cmluZyc7XG5pbXBvcnQgcmVuZGVyVGVtcGxhdGUgZnJvbSAnLi4vdXRpbHMvcmVuZGVyLXRlbXBsYXRlJztcbmltcG9ydCBXQVJOSU5HX01FU1NBR0VTIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlJztcbmltcG9ydCByZXNvbHZlUGF0aFJlbGF0aXZlbHlDd2QgZnJvbSAnLi4vdXRpbHMvcmVzb2x2ZS1wYXRoLXJlbGF0aXZlbHktY3dkJztcblxuaW1wb3J0IHtcbiAgICBERUZBVUxUX0FQUF9JTklUX0RFTEFZLFxuICAgIERFRkFVTFRfQ09OQ1VSUkVOQ1lfVkFMVUUsXG4gICAgREVGQVVMVF9TUEVFRF9WQUxVRSxcbiAgICBERUZBVUxUX1RJTUVPVVQsXG4gICAgREVGQVVMVF9TT1VSQ0VfRElSRUNUT1JJRVMsXG4gICAgREVGQVVMVF9ERVZFTE9QTUVOVF9NT0RFLFxuICAgIERFRkFVTFRfUkVUUllfVEVTVF9QQUdFUyxcbiAgICBnZXREZWZhdWx0Q29tcGlsZXJPcHRpb25zXG59IGZyb20gJy4vZGVmYXVsdC12YWx1ZXMnO1xuXG5pbXBvcnQgT3B0aW9uU291cmNlIGZyb20gJy4vb3B0aW9uLXNvdXJjZSc7XG5pbXBvcnQge1xuICAgIERpY3Rpb25hcnksXG4gICAgRmlsdGVyT3B0aW9uLFxuICAgIFJlcG9ydGVyT3B0aW9uLFxuICAgIFR5cGVTY3JpcHRDb21waWxlck9wdGlvbnNcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0IEN1c3RvbWl6YWJsZUNvbXBpbGVycyBmcm9tICcuL2N1c3RvbWl6YWJsZS1jb21waWxlcnMnO1xuaW1wb3J0IHsgREVQUkVDQVRFRCwgZ2V0RGVwcmVjYXRpb25NZXNzYWdlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9ucy9kZXByZWNhdGVkJztcbmltcG9ydCBXYXJuaW5nTG9nIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1sb2cnO1xuXG5jb25zdCBDT05GSUdVUkFUSU9OX0ZJTEVOQU1FID0gJy50ZXN0Y2FmZXJjLmpzb24nO1xuXG5jb25zdCBERUZBVUxUX1NDUkVFTlNIT1RTX0RJUkVDVE9SWSA9ICdzY3JlZW5zaG90cyc7XG5cbmNvbnN0IE9QVElPTl9GTEFHX05BTUVTID0gW1xuICAgIE9QVElPTl9OQU1FUy5za2lwSnNFcnJvcnMsXG4gICAgT1BUSU9OX05BTUVTLnF1YXJhbnRpbmVNb2RlLFxuICAgIE9QVElPTl9OQU1FUy5kZWJ1Z01vZGUsXG4gICAgT1BUSU9OX05BTUVTLmRlYnVnT25GYWlsLFxuICAgIE9QVElPTl9OQU1FUy5za2lwVW5jYXVnaHRFcnJvcnMsXG4gICAgT1BUSU9OX05BTUVTLnN0b3BPbkZpcnN0RmFpbCxcbiAgICBPUFRJT05fTkFNRVMudGFrZVNjcmVlbnNob3RzT25GYWlscyxcbiAgICBPUFRJT05fTkFNRVMuZGlzYWJsZVBhZ2VDYWNoaW5nLFxuICAgIE9QVElPTl9OQU1FUy5kaXNhYmxlUGFnZVJlbG9hZHMsXG4gICAgT1BUSU9OX05BTUVTLmRpc2FibGVTY3JlZW5zaG90cyxcbiAgICBPUFRJT05fTkFNRVMuZGlzYWJsZU11bHRpcGxlV2luZG93c1xuXTtcblxuY29uc3QgT1BUSU9OX0lOSVRfRkxBR19OQU1FUyA9IFtcbiAgICBPUFRJT05fTkFNRVMuZGV2ZWxvcG1lbnRNb2RlLFxuICAgIE9QVElPTl9OQU1FUy5yZXRyeVRlc3RQYWdlcyxcbiAgICBPUFRJT05fTkFNRVMuY2FjaGVcbl07XG5cbmludGVyZmFjZSBUZXN0Q2FmZUFkZGl0aW9uYWxTdGFydE9wdGlvbnMge1xuICAgIHJldHJ5VGVzdFBhZ2VzOiBib29sZWFuO1xuICAgIHNzbDogc3RyaW5nO1xuICAgIGRldmVsb3BtZW50TW9kZTogYm9vbGVhbjtcbiAgICBjYWNoZTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFRlc3RDYWZlU3RhcnRPcHRpb25zIHtcbiAgICBob3N0bmFtZT86IHN0cmluZztcbiAgICBwb3J0MT86IG51bWJlcjtcbiAgICBwb3J0Mj86IG51bWJlcjtcbiAgICBvcHRpb25zOiBUZXN0Q2FmZUFkZGl0aW9uYWxTdGFydE9wdGlvbnM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RDYWZlQ29uZmlndXJhdGlvbiBleHRlbmRzIENvbmZpZ3VyYXRpb24ge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoY29uZmlnRmlsZSA9IENPTkZJR1VSQVRJT05fRklMRU5BTUUpIHtcbiAgICAgICAgc3VwZXIoY29uZmlnRmlsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXQgKG9wdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgYXdhaXQgc3VwZXIuaW5pdCgpO1xuXG4gICAgICAgIGNvbnN0IG9wdHMgPSBhd2FpdCB0aGlzLl9sb2FkKCk7XG5cbiAgICAgICAgaWYgKG9wdHMpIHtcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSBDb25maWd1cmF0aW9uLl9mcm9tT2JqKG9wdHMpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3JtYWxpemVPcHRpb25zQWZ0ZXJMb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1lcmdlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZSAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVGbGFncygpO1xuICAgICAgICB0aGlzLl9zZXREZWZhdWx0VmFsdWVzKCk7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVDb21waWxlck9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5QWJvdXRPdmVycmlkZGVuT3B0aW9ucyAoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fb3ZlcnJpZGRlbk9wdGlvbnMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnNTdHIgICAgPSBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcodGhpcy5fb3ZlcnJpZGRlbk9wdGlvbnMpO1xuICAgICAgICBjb25zdCBvcHRpb25zU3VmZml4ID0gZ2V0UGx1cmFsU3VmZml4KHRoaXMuX292ZXJyaWRkZW5PcHRpb25zKTtcblxuICAgICAgICBDb25maWd1cmF0aW9uLl9zaG93Q29uc29sZVdhcm5pbmcocmVuZGVyVGVtcGxhdGUoV0FSTklOR19NRVNTQUdFUy5jb25maWdPcHRpb25zV2VyZU92ZXJyaWRkZW4sIG9wdGlvbnNTdHIsIG9wdGlvbnNTdWZmaXgpKTtcblxuICAgICAgICB0aGlzLl9vdmVycmlkZGVuT3B0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnlBYm91dERlcHJlY2F0ZWRPcHRpb25zICh3YXJuaW5nTG9nOiBXYXJuaW5nTG9nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKChuYW1lLCBvcHRpb24pID0+IG5hbWUgaW4gREVQUkVDQVRFRCAmJiBvcHRpb24udmFsdWUgIT09IHZvaWQgMCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb25OYW1lIGluIGRlcHJlY2F0ZWRPcHRpb25zKVxuICAgICAgICAgICAgd2FybmluZ0xvZy5hZGRXYXJuaW5nKGdldERlcHJlY2F0aW9uTWVzc2FnZShERVBSRUNBVEVEW29wdGlvbk5hbWVdKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdGFydE9wdGlvbnMgKCk6IFRlc3RDYWZlU3RhcnRPcHRpb25zIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUZXN0Q2FmZVN0YXJ0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGhvc3RuYW1lOiB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMuaG9zdG5hbWUpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIHBvcnQxOiAgICB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMucG9ydDEpIGFzIG51bWJlcixcbiAgICAgICAgICAgIHBvcnQyOiAgICB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMucG9ydDIpIGFzIG51bWJlcixcblxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHNzbDogICAgICAgICAgICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnNzbCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIGRldmVsb3BtZW50TW9kZTogdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmRldmVsb3BtZW50TW9kZSkgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICByZXRyeVRlc3RQYWdlczogIHRoaXMuZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5yZXRyeVRlc3RQYWdlcykgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICBjYWNoZTogICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5jYWNoZSkgYXMgYm9vbGVhblxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZUZsYWcgKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9lbnN1cmVPcHRpb24obmFtZSwgdm9pZCAwLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgb3B0aW9uLnZhbHVlID0gISFvcHRpb24udmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZUZsYWdzICgpOiB2b2lkIHtcbiAgICAgICAgT1BUSU9OX0ZMQUdfTkFNRVMuZm9yRWFjaChuYW1lID0+IHRoaXMuX3ByZXBhcmVGbGFnKG5hbWUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlSW5pdEZsYWdzICgpOiB2b2lkIHtcbiAgICAgICAgT1BUSU9OX0lOSVRfRkxBR19OQU1FUy5mb3JFYWNoKG5hbWUgPT4gdGhpcy5fcHJlcGFyZUZsYWcobmFtZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX25vcm1hbGl6ZU9wdGlvbnNBZnRlckxvYWQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9wcmVwYXJlU3NsT3B0aW9ucygpO1xuICAgICAgICB0aGlzLl9wcmVwYXJlSW5pdEZsYWdzKCk7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVGaWx0ZXJGbigpO1xuICAgICAgICB0aGlzLl9lbnN1cmVBcnJheU9wdGlvbihPUFRJT05fTkFNRVMuc3JjKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlQXJyYXlPcHRpb24oT1BUSU9OX05BTUVTLmJyb3dzZXJzKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlQXJyYXlPcHRpb24oT1BUSU9OX05BTUVTLmNsaWVudFNjcmlwdHMpO1xuICAgICAgICB0aGlzLl9wcmVwYXJlUmVwb3J0ZXJzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZUZpbHRlckZuICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyT3B0aW9uID0gdGhpcy5fZW5zdXJlT3B0aW9uKE9QVElPTl9OQU1FUy5maWx0ZXIsIG51bGwsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBpZiAoIWZpbHRlck9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBmaWx0ZXJPcHRpb25WYWx1ZSA9IGZpbHRlck9wdGlvbi52YWx1ZSBhcyBGaWx0ZXJPcHRpb247XG5cbiAgICAgICAgaWYgKGZpbHRlck9wdGlvblZhbHVlLnRlc3RHcmVwKVxuICAgICAgICAgICAgZmlsdGVyT3B0aW9uVmFsdWUudGVzdEdyZXAgPSBnZXRHcmVwT3B0aW9ucyhPUFRJT05fTkFNRVMuZmlsdGVyVGVzdEdyZXAsIGZpbHRlck9wdGlvblZhbHVlLnRlc3RHcmVwIGFzIHN0cmluZyk7XG5cbiAgICAgICAgaWYgKGZpbHRlck9wdGlvblZhbHVlLmZpeHR1cmVHcmVwKVxuICAgICAgICAgICAgZmlsdGVyT3B0aW9uVmFsdWUuZml4dHVyZUdyZXAgPSBnZXRHcmVwT3B0aW9ucyhPUFRJT05fTkFNRVMuZmlsdGVyRml4dHVyZUdyZXAsIGZpbHRlck9wdGlvblZhbHVlLmZpeHR1cmVHcmVwIGFzIHN0cmluZyk7XG5cbiAgICAgICAgZmlsdGVyT3B0aW9uLnZhbHVlID0gZ2V0RmlsdGVyRm4oZmlsdGVyT3B0aW9uLnZhbHVlKSBhcyBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lbnN1cmVTY3JlZW5zaG90UGF0aCAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhdGggICAgICAgID0gcmVzb2x2ZVBhdGhSZWxhdGl2ZWx5Q3dkKERFRkFVTFRfU0NSRUVOU0hPVFNfRElSRUNUT1JZKTtcbiAgICAgICAgY29uc3Qgc2NyZWVuc2hvdHMgPSB0aGlzLl9lbnN1cmVPcHRpb24oT1BUSU9OX05BTUVTLnNjcmVlbnNob3RzLCB7fSwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pLnZhbHVlIGFzIERpY3Rpb25hcnk8c3RyaW5nPjtcblxuICAgICAgICBpZiAoIXNjcmVlbnNob3RzLnBhdGgpXG4gICAgICAgICAgICBzY3JlZW5zaG90cy5wYXRoID0gcGF0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlUmVwb3J0ZXJzICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVwb3J0ZXJPcHRpb24gPSB0aGlzLl9vcHRpb25zW09QVElPTl9OQU1FUy5yZXBvcnRlcl07XG5cbiAgICAgICAgaWYgKCFyZXBvcnRlck9wdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IGNhc3RBcnJheShyZXBvcnRlck9wdGlvbi52YWx1ZSBhcyBSZXBvcnRlck9wdGlvbik7XG5cbiAgICAgICAgcmVwb3J0ZXJPcHRpb24udmFsdWUgPSBwcmVwYXJlUmVwb3J0ZXJzKG9wdGlvblZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlU3NsT3B0aW9ucyAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHNzbE9wdGlvbnMgPSB0aGlzLl9vcHRpb25zW09QVElPTl9OQU1FUy5zc2xdO1xuXG4gICAgICAgIGlmICghc3NsT3B0aW9ucylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBzc2xPcHRpb25zLnZhbHVlID0gYXdhaXQgZ2V0U1NMT3B0aW9ucyhzc2xPcHRpb25zLnZhbHVlIGFzIHN0cmluZykgYXMgRGljdGlvbmFyeTxzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyPjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXREZWZhdWx0VmFsdWVzICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5zZWxlY3RvclRpbWVvdXQsIERFRkFVTFRfVElNRU9VVC5zZWxlY3RvciwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLmFzc2VydGlvblRpbWVvdXQsIERFRkFVTFRfVElNRU9VVC5hc3NlcnRpb24sIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5wYWdlTG9hZFRpbWVvdXQsIERFRkFVTFRfVElNRU9VVC5wYWdlTG9hZCwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLnNwZWVkLCBERUZBVUxUX1NQRUVEX1ZBTFVFLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuYXBwSW5pdERlbGF5LCBERUZBVUxUX0FQUF9JTklUX0RFTEFZLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuY29uY3VycmVuY3ksIERFRkFVTFRfQ09OQ1VSUkVOQ1lfVkFMVUUsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5zcmMsIERFRkFVTFRfU09VUkNFX0RJUkVDVE9SSUVTLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuZGV2ZWxvcG1lbnRNb2RlLCBERUZBVUxUX0RFVkVMT1BNRU5UX01PREUsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5yZXRyeVRlc3RQYWdlcywgREVGQVVMVF9SRVRSWV9URVNUX1BBR0VTLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgdGhpcy5fZW5zdXJlU2NyZWVuc2hvdFBhdGgoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlQ29tcGlsZXJPcHRpb25zICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29tcGlsZXJPcHRpb25zID0gdGhpcy5fZW5zdXJlT3B0aW9uKE9QVElPTl9OQU1FUy5jb21waWxlck9wdGlvbnMsIGdldERlZmF1bHRDb21waWxlck9wdGlvbnMoKSwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgIGNvbXBpbGVyT3B0aW9ucy52YWx1ZSA9IGNvbXBpbGVyT3B0aW9ucy52YWx1ZSB8fCBnZXREZWZhdWx0Q29tcGlsZXJPcHRpb25zKCk7XG5cbiAgICAgICAgY29uc3QgdHNDb25maWdQYXRoID0gdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnRzQ29uZmlnUGF0aCk7XG5cbiAgICAgICAgaWYgKHRzQ29uZmlnUGF0aCkge1xuICAgICAgICAgICAgY29uc3QgY29tcGlsZXJPcHRpb25WYWx1ZSAgICAgPSBjb21waWxlck9wdGlvbnMudmFsdWUgYXMgQ29tcGlsZXJPcHRpb25zO1xuICAgICAgICAgICAgbGV0IHR5cGVTY3JpcHRDb21waWxlck9wdGlvbnMgPSBjb21waWxlck9wdGlvblZhbHVlW0N1c3RvbWl6YWJsZUNvbXBpbGVycy50eXBlc2NyaXB0XSBhcyBUeXBlU2NyaXB0Q29tcGlsZXJPcHRpb25zO1xuXG4gICAgICAgICAgICB0eXBlU2NyaXB0Q29tcGlsZXJPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgICAgY29uZmlnUGF0aDogdHNDb25maWdQYXRoXG4gICAgICAgICAgICB9LCB0eXBlU2NyaXB0Q29tcGlsZXJPcHRpb25zKTtcblxuICAgICAgICAgICAgKGNvbXBpbGVyT3B0aW9ucy52YWx1ZSBhcyBDb21waWxlck9wdGlvbnMpW0N1c3RvbWl6YWJsZUNvbXBpbGVycy50eXBlc2NyaXB0XSA9IHR5cGVTY3JpcHRDb21waWxlck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBGSUxFTkFNRSAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIENPTkZJR1VSQVRJT05fRklMRU5BTUU7XG4gICAgfVxufVxuIl19
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGNhZmUtY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uL3Rlc3RjYWZlLWNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4RUFBaUQ7QUFDakQsbUNBQW1DO0FBQ25DLHNEQUFxRTtBQUNyRSxrRUFBMEM7QUFDMUMsMkVBQWlEO0FBQ2pELG1GQUEwRDtBQUMxRCw0Q0FBK0U7QUFDL0UsK0VBQXNEO0FBQ3RELHVGQUFnRTtBQUNoRSx1R0FBNEU7QUFFNUUscURBUzBCO0FBRTFCLG9FQUEyQztBQVEzQyxzRkFBNkQ7QUFDN0QsNERBQWdGO0FBR2hGLE1BQU0sc0JBQXNCLEdBQUcsa0JBQWtCLENBQUM7QUFFbEQsTUFBTSw2QkFBNkIsR0FBRyxhQUFhLENBQUM7QUFFcEQsTUFBTSxpQkFBaUIsR0FBRztJQUN0QixzQkFBWSxDQUFDLFlBQVk7SUFDekIsc0JBQVksQ0FBQyxTQUFTO0lBQ3RCLHNCQUFZLENBQUMsV0FBVztJQUN4QixzQkFBWSxDQUFDLGtCQUFrQjtJQUMvQixzQkFBWSxDQUFDLGVBQWU7SUFDNUIsc0JBQVksQ0FBQyxzQkFBc0I7SUFDbkMsc0JBQVksQ0FBQyxrQkFBa0I7SUFDL0Isc0JBQVksQ0FBQyxrQkFBa0I7SUFDL0Isc0JBQVksQ0FBQyxrQkFBa0I7SUFDL0Isc0JBQVksQ0FBQyxzQkFBc0I7Q0FDdEMsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQUc7SUFDM0Isc0JBQVksQ0FBQyxlQUFlO0lBQzVCLHNCQUFZLENBQUMsY0FBYztJQUMzQixzQkFBWSxDQUFDLEtBQUs7Q0FDckIsQ0FBQztBQWdCRixNQUFxQixxQkFBc0IsU0FBUSw0QkFBYTtJQUM1RCxZQUFvQixVQUFVLEdBQUcsc0JBQXNCO1FBQ25ELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUksQ0FBRSxPQUFn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QVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFL0QsSUFBSSxZQUFZLEVBQUU7WUFDZCxNQUFNLG1CQUFtQixHQUFPLGVBQWUsQ0FBQyxLQUF3QixDQUFDO1lBQ3pFLElBQUkseUJBQXlCLEdBQUcsbUJBQW1CLENBQUMsZ0NBQXFCLENBQUMsVUFBVSxDQUE4QixDQUFDO1lBRW5ILHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3RDLFVBQVUsRUFBRSxZQUFZO2FBQzNCLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUU3QixlQUFlLENBQUMsS0FBeUIsQ0FBQyxnQ0FBcUIsQ0FBQyxVQUFVLENBQUMsR0FBRyx5QkFBeUIsQ0FBQztTQUM1RztJQUNMLENBQUM7SUFFTSxNQUFNLEtBQUssUUFBUTtRQUN0QixPQUFPLHNCQUFzQixDQUFDO0lBQ2xDLENBQUM7Q0FDSjtBQXhLRCx3Q0F3S0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29uZmlndXJhdGlvbiBmcm9tICcuL2NvbmZpZ3VyYXRpb24tYmFzZSc7XG5pbXBvcnQgeyBjYXN0QXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZ2V0R3JlcE9wdGlvbnMsIGdldFNTTE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9nZXQtb3B0aW9ucyc7XG5pbXBvcnQgT1BUSU9OX05BTUVTIGZyb20gJy4vb3B0aW9uLW5hbWVzJztcbmltcG9ydCBnZXRGaWx0ZXJGbiBmcm9tICcuLi91dGlscy9nZXQtZmlsdGVyLWZuJztcbmltcG9ydCBwcmVwYXJlUmVwb3J0ZXJzIGZyb20gJy4uL3V0aWxzL3ByZXBhcmUtcmVwb3J0ZXJzJztcbmltcG9ydCB7IGdldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZywgZ2V0UGx1cmFsU3VmZml4IH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCByZW5kZXJUZW1wbGF0ZSBmcm9tICcuLi91dGlscy9yZW5kZXItdGVtcGxhdGUnO1xuaW1wb3J0IFdBUk5JTkdfTUVTU0FHRVMgZnJvbSAnLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLW1lc3NhZ2UnO1xuaW1wb3J0IHJlc29sdmVQYXRoUmVsYXRpdmVseUN3ZCBmcm9tICcuLi91dGlscy9yZXNvbHZlLXBhdGgtcmVsYXRpdmVseS1jd2QnO1xuXG5pbXBvcnQge1xuICAgIERFRkFVTFRfQVBQX0lOSVRfREVMQVksXG4gICAgREVGQVVMVF9DT05DVVJSRU5DWV9WQUxVRSxcbiAgICBERUZBVUxUX1NQRUVEX1ZBTFVFLFxuICAgIERFRkFVTFRfVElNRU9VVCxcbiAgICBERUZBVUxUX1NPVVJDRV9ESVJFQ1RPUklFUyxcbiAgICBERUZBVUxUX0RFVkVMT1BNRU5UX01PREUsXG4gICAgREVGQVVMVF9SRVRSWV9URVNUX1BBR0VTLFxuICAgIGdldERlZmF1bHRDb21waWxlck9wdGlvbnNcbn0gZnJvbSAnLi9kZWZhdWx0LXZhbHVlcyc7XG5cbmltcG9ydCBPcHRpb25Tb3VyY2UgZnJvbSAnLi9vcHRpb24tc291cmNlJztcbmltcG9ydCB7XG4gICAgRGljdGlvbmFyeSxcbiAgICBGaWx0ZXJPcHRpb24sXG4gICAgUmVwb3J0ZXJPcHRpb24sXG4gICAgVHlwZVNjcmlwdENvbXBpbGVyT3B0aW9uc1xufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgQ3VzdG9taXphYmxlQ29tcGlsZXJzIGZyb20gJy4vY3VzdG9taXphYmxlLWNvbXBpbGVycyc7XG5pbXBvcnQgeyBERVBSRUNBVEVELCBnZXREZXByZWNhdGlvbk1lc3NhZ2UgfSBmcm9tICcuLi9ub3RpZmljYXRpb25zL2RlcHJlY2F0ZWQnO1xuaW1wb3J0IFdhcm5pbmdMb2cgZnJvbSAnLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLWxvZyc7XG5cbmNvbnN0IENPTkZJR1VSQVRJT05fRklMRU5BTUUgPSAnLnRlc3RjYWZlcmMuanNvbic7XG5cbmNvbnN0IERFRkFVTFRfU0NSRUVOU0hPVFNfRElSRUNUT1JZID0gJ3NjcmVlbnNob3RzJztcblxuY29uc3QgT1BUSU9OX0ZMQUdfTkFNRVMgPSBbXG4gICAgT1BUSU9OX05BTUVTLnNraXBKc0Vycm9ycyxcbiAgICBPUFRJT05fTkFNRVMuZGVidWdNb2RlLFxuICAgIE9QVElPTl9OQU1FUy5kZWJ1Z09uRmFpbCxcbiAgICBPUFRJT05fTkFNRVMuc2tpcFVuY2F1Z2h0RXJyb3JzLFxuICAgIE9QVElPTl9OQU1FUy5zdG9wT25GaXJzdEZhaWwsXG4gICAgT1BUSU9OX05BTUVTLnRha2VTY3JlZW5zaG90c09uRmFpbHMsXG4gICAgT1BUSU9OX05BTUVTLmRpc2FibGVQYWdlQ2FjaGluZyxcbiAgICBPUFRJT05fTkFNRVMuZGlzYWJsZVBhZ2VSZWxvYWRzLFxuICAgIE9QVElPTl9OQU1FUy5kaXNhYmxlU2NyZWVuc2hvdHMsXG4gICAgT1BUSU9OX05BTUVTLmRpc2FibGVNdWx0aXBsZVdpbmRvd3Ncbl07XG5cbmNvbnN0IE9QVElPTl9JTklUX0ZMQUdfTkFNRVMgPSBbXG4gICAgT1BUSU9OX05BTUVTLmRldmVsb3BtZW50TW9kZSxcbiAgICBPUFRJT05fTkFNRVMucmV0cnlUZXN0UGFnZXMsXG4gICAgT1BUSU9OX05BTUVTLmNhY2hlXG5dO1xuXG5pbnRlcmZhY2UgVGVzdENhZmVBZGRpdGlvbmFsU3RhcnRPcHRpb25zIHtcbiAgICByZXRyeVRlc3RQYWdlczogYm9vbGVhbjtcbiAgICBzc2w6IHN0cmluZztcbiAgICBkZXZlbG9wbWVudE1vZGU6IGJvb2xlYW47XG4gICAgY2FjaGU6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBUZXN0Q2FmZVN0YXJ0T3B0aW9ucyB7XG4gICAgaG9zdG5hbWU/OiBzdHJpbmc7XG4gICAgcG9ydDE/OiBudW1iZXI7XG4gICAgcG9ydDI/OiBudW1iZXI7XG4gICAgb3B0aW9uczogVGVzdENhZmVBZGRpdGlvbmFsU3RhcnRPcHRpb25zO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0Q2FmZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBDb25maWd1cmF0aW9uIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGNvbmZpZ0ZpbGUgPSBDT05GSUdVUkFUSU9OX0ZJTEVOQU1FKSB7XG4gICAgICAgIHN1cGVyKGNvbmZpZ0ZpbGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbml0IChvcHRpb25zPzogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIGF3YWl0IHN1cGVyLmluaXQoKTtcblxuICAgICAgICBjb25zdCBvcHRzID0gYXdhaXQgdGhpcy5fbG9hZCgpO1xuXG4gICAgICAgIGlmIChvcHRzKSB7XG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gQ29uZmlndXJhdGlvbi5fZnJvbU9iaihvcHRzKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm9ybWFsaXplT3B0aW9uc0FmdGVyTG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXJnZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmUgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmVwYXJlRmxhZ3MoKTtcbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdFZhbHVlcygpO1xuICAgICAgICB0aGlzLl9wcmVwYXJlQ29tcGlsZXJPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeUFib3V0T3ZlcnJpZGRlbk9wdGlvbnMgKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX292ZXJyaWRkZW5PcHRpb25zLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBvcHRpb25zU3RyICAgID0gZ2V0Q29uY2F0ZW5hdGVkVmFsdWVzU3RyaW5nKHRoaXMuX292ZXJyaWRkZW5PcHRpb25zKTtcbiAgICAgICAgY29uc3Qgb3B0aW9uc1N1ZmZpeCA9IGdldFBsdXJhbFN1ZmZpeCh0aGlzLl9vdmVycmlkZGVuT3B0aW9ucyk7XG5cbiAgICAgICAgQ29uZmlndXJhdGlvbi5fc2hvd0NvbnNvbGVXYXJuaW5nKHJlbmRlclRlbXBsYXRlKFdBUk5JTkdfTUVTU0FHRVMuY29uZmlnT3B0aW9uc1dlcmVPdmVycmlkZGVuLCBvcHRpb25zU3RyLCBvcHRpb25zU3VmZml4KSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcnJpZGRlbk9wdGlvbnMgPSBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5QWJvdXREZXByZWNhdGVkT3B0aW9ucyAod2FybmluZ0xvZzogV2FybmluZ0xvZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBkZXByZWNhdGVkT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygobmFtZSwgb3B0aW9uKSA9PiBuYW1lIGluIERFUFJFQ0FURUQgJiYgb3B0aW9uLnZhbHVlICE9PSB2b2lkIDApO1xuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uTmFtZSBpbiBkZXByZWNhdGVkT3B0aW9ucylcbiAgICAgICAgICAgIHdhcm5pbmdMb2cuYWRkV2FybmluZyhnZXREZXByZWNhdGlvbk1lc3NhZ2UoREVQUkVDQVRFRFtvcHRpb25OYW1lXSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3RhcnRPcHRpb25zICgpOiBUZXN0Q2FmZVN0YXJ0T3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogVGVzdENhZmVTdGFydE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBob3N0bmFtZTogdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmhvc3RuYW1lKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICBwb3J0MTogICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnBvcnQxKSBhcyBudW1iZXIsXG4gICAgICAgICAgICBwb3J0MjogICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnBvcnQyKSBhcyBudW1iZXIsXG5cbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBzc2w6ICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5zc2wpIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBkZXZlbG9wbWVudE1vZGU6IHRoaXMuZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5kZXZlbG9wbWVudE1vZGUpIGFzIGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcmV0cnlUZXN0UGFnZXM6ICB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMucmV0cnlUZXN0UGFnZXMpIGFzIGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgY2FjaGU6ICAgICAgICAgICB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMuY2FjaGUpIGFzIGJvb2xlYW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVGbGFnIChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZW5zdXJlT3B0aW9uKG5hbWUsIHZvaWQgMCwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgIG9wdGlvbi52YWx1ZSA9ICEhb3B0aW9uLnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVGbGFncyAoKTogdm9pZCB7XG4gICAgICAgIE9QVElPTl9GTEFHX05BTUVTLmZvckVhY2gobmFtZSA9PiB0aGlzLl9wcmVwYXJlRmxhZyhuYW1lKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZUluaXRGbGFncyAoKTogdm9pZCB7XG4gICAgICAgIE9QVElPTl9JTklUX0ZMQUdfTkFNRVMuZm9yRWFjaChuYW1lID0+IHRoaXMuX3ByZXBhcmVGbGFnKG5hbWUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ub3JtYWxpemVPcHRpb25zQWZ0ZXJMb2FkICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fcHJlcGFyZVNzbE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5fcHJlcGFyZUluaXRGbGFncygpO1xuICAgICAgICB0aGlzLl9wcmVwYXJlRmlsdGVyRm4oKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlQXJyYXlPcHRpb24oT1BUSU9OX05BTUVTLnNyYyk7XG4gICAgICAgIHRoaXMuX2Vuc3VyZUFycmF5T3B0aW9uKE9QVElPTl9OQU1FUy5icm93c2Vycyk7XG4gICAgICAgIHRoaXMuX2Vuc3VyZUFycmF5T3B0aW9uKE9QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzKTtcbiAgICAgICAgdGhpcy5fcHJlcGFyZVJlcG9ydGVycygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVGaWx0ZXJGbiAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbHRlck9wdGlvbiA9IHRoaXMuX2Vuc3VyZU9wdGlvbihPUFRJT05fTkFNRVMuZmlsdGVyLCBudWxsLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgaWYgKCFmaWx0ZXJPcHRpb24udmFsdWUpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZmlsdGVyT3B0aW9uVmFsdWUgPSBmaWx0ZXJPcHRpb24udmFsdWUgYXMgRmlsdGVyT3B0aW9uO1xuXG4gICAgICAgIGlmIChmaWx0ZXJPcHRpb25WYWx1ZS50ZXN0R3JlcClcbiAgICAgICAgICAgIGZpbHRlck9wdGlvblZhbHVlLnRlc3RHcmVwID0gZ2V0R3JlcE9wdGlvbnMoT1BUSU9OX05BTUVTLmZpbHRlclRlc3RHcmVwLCBmaWx0ZXJPcHRpb25WYWx1ZS50ZXN0R3JlcCBhcyBzdHJpbmcpO1xuXG4gICAgICAgIGlmIChmaWx0ZXJPcHRpb25WYWx1ZS5maXh0dXJlR3JlcClcbiAgICAgICAgICAgIGZpbHRlck9wdGlvblZhbHVlLmZpeHR1cmVHcmVwID0gZ2V0R3JlcE9wdGlvbnMoT1BUSU9OX05BTUVTLmZpbHRlckZpeHR1cmVHcmVwLCBmaWx0ZXJPcHRpb25WYWx1ZS5maXh0dXJlR3JlcCBhcyBzdHJpbmcpO1xuXG4gICAgICAgIGZpbHRlck9wdGlvbi52YWx1ZSA9IGdldEZpbHRlckZuKGZpbHRlck9wdGlvbi52YWx1ZSkgYXMgRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW5zdXJlU2NyZWVuc2hvdFBhdGggKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXRoICAgICAgICA9IHJlc29sdmVQYXRoUmVsYXRpdmVseUN3ZChERUZBVUxUX1NDUkVFTlNIT1RTX0RJUkVDVE9SWSk7XG4gICAgICAgIGNvbnN0IHNjcmVlbnNob3RzID0gdGhpcy5fZW5zdXJlT3B0aW9uKE9QVElPTl9OQU1FUy5zY3JlZW5zaG90cywge30sIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKS52YWx1ZSBhcyBEaWN0aW9uYXJ5PHN0cmluZz47XG5cbiAgICAgICAgaWYgKCFzY3JlZW5zaG90cy5wYXRoKVxuICAgICAgICAgICAgc2NyZWVuc2hvdHMucGF0aCA9IHBhdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVJlcG9ydGVycyAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlcG9ydGVyT3B0aW9uID0gdGhpcy5fb3B0aW9uc1tPUFRJT05fTkFNRVMucmVwb3J0ZXJdO1xuXG4gICAgICAgIGlmICghcmVwb3J0ZXJPcHRpb24pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSBjYXN0QXJyYXkocmVwb3J0ZXJPcHRpb24udmFsdWUgYXMgUmVwb3J0ZXJPcHRpb24pO1xuXG4gICAgICAgIHJlcG9ydGVyT3B0aW9uLnZhbHVlID0gcHJlcGFyZVJlcG9ydGVycyhvcHRpb25WYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcHJlcGFyZVNzbE9wdGlvbnMgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBzc2xPcHRpb25zID0gdGhpcy5fb3B0aW9uc1tPUFRJT05fTkFNRVMuc3NsXTtcblxuICAgICAgICBpZiAoIXNzbE9wdGlvbnMpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgc3NsT3B0aW9ucy52YWx1ZSA9IGF3YWl0IGdldFNTTE9wdGlvbnMoc3NsT3B0aW9ucy52YWx1ZSBhcyBzdHJpbmcpIGFzIERpY3Rpb25hcnk8c3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcj47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0RGVmYXVsdFZhbHVlcyAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuc2VsZWN0b3JUaW1lb3V0LCBERUZBVUxUX1RJTUVPVVQuc2VsZWN0b3IsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5hc3NlcnRpb25UaW1lb3V0LCBERUZBVUxUX1RJTUVPVVQuYXNzZXJ0aW9uLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMucGFnZUxvYWRUaW1lb3V0LCBERUZBVUxUX1RJTUVPVVQucGFnZUxvYWQsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5zcGVlZCwgREVGQVVMVF9TUEVFRF9WQUxVRSwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLmFwcEluaXREZWxheSwgREVGQVVMVF9BUFBfSU5JVF9ERUxBWSwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLmNvbmN1cnJlbmN5LCBERUZBVUxUX0NPTkNVUlJFTkNZX1ZBTFVFLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuc3JjLCBERUZBVUxUX1NPVVJDRV9ESVJFQ1RPUklFUywgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLmRldmVsb3BtZW50TW9kZSwgREVGQVVMVF9ERVZFTE9QTUVOVF9NT0RFLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMucmV0cnlUZXN0UGFnZXMsIERFRkFVTFRfUkVUUllfVEVTVF9QQUdFUywgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgIHRoaXMuX2Vuc3VyZVNjcmVlbnNob3RQYXRoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZUNvbXBpbGVyT3B0aW9ucyAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVyT3B0aW9ucyA9IHRoaXMuX2Vuc3VyZU9wdGlvbihPUFRJT05fTkFNRVMuY29tcGlsZXJPcHRpb25zLCBnZXREZWZhdWx0Q29tcGlsZXJPcHRpb25zKCksIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBjb21waWxlck9wdGlvbnMudmFsdWUgPSBjb21waWxlck9wdGlvbnMudmFsdWUgfHwgZ2V0RGVmYXVsdENvbXBpbGVyT3B0aW9ucygpO1xuXG4gICAgICAgIGNvbnN0IHRzQ29uZmlnUGF0aCA9IHRoaXMuZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy50c0NvbmZpZ1BhdGgpO1xuXG4gICAgICAgIGlmICh0c0NvbmZpZ1BhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVyT3B0aW9uVmFsdWUgICAgID0gY29tcGlsZXJPcHRpb25zLnZhbHVlIGFzIENvbXBpbGVyT3B0aW9ucztcbiAgICAgICAgICAgIGxldCB0eXBlU2NyaXB0Q29tcGlsZXJPcHRpb25zID0gY29tcGlsZXJPcHRpb25WYWx1ZVtDdXN0b21pemFibGVDb21waWxlcnMudHlwZXNjcmlwdF0gYXMgVHlwZVNjcmlwdENvbXBpbGVyT3B0aW9ucztcblxuICAgICAgICAgICAgdHlwZVNjcmlwdENvbXBpbGVyT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgICAgIGNvbmZpZ1BhdGg6IHRzQ29uZmlnUGF0aFxuICAgICAgICAgICAgfSwgdHlwZVNjcmlwdENvbXBpbGVyT3B0aW9ucyk7XG5cbiAgICAgICAgICAgIChjb21waWxlck9wdGlvbnMudmFsdWUgYXMgQ29tcGlsZXJPcHRpb25zKVtDdXN0b21pemFibGVDb21waWxlcnMudHlwZXNjcmlwdF0gPSB0eXBlU2NyaXB0Q29tcGlsZXJPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgRklMRU5BTUUgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBDT05GSUdVUkFUSU9OX0ZJTEVOQU1FO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
- "use strict";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlndXJhdGlvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsidHlwZSBUZW1wbGF0ZUFyZ3VtZW50cyA9IGFueVtdO1xuXG5pbnRlcmZhY2UgU2NyZWVuc2hvdE9wdGlvblZhbHVlIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgdGFrZU9uRmFpbHM/OiBib29sZWFuO1xuICAgIHBhdGhQYXR0ZXJuPzogc3RyaW5nO1xuICAgIGZ1bGxQYWdlPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIENvbXBpbGVyT3B0aW9ucyB7XG4gICAgW2tleTogc3RyaW5nXTogb2JqZWN0O1xufVxuXG50eXBlIE9wdGlvblZhbHVlID0gdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmdbXSB8IEZ1bmN0aW9uIHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IFNjcmVlbnNob3RPcHRpb25WYWx1ZSB8IENvbXBpbGVyT3B0aW9ucztcblxuIl19
1
+ "use strict";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlndXJhdGlvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsidHlwZSBUZW1wbGF0ZUFyZ3VtZW50cyA9IGFueVtdO1xuXG5pbnRlcmZhY2UgU2NyZWVuc2hvdE9wdGlvblZhbHVlIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgdGFrZU9uRmFpbHM/OiBib29sZWFuO1xuICAgIHBhdGhQYXR0ZXJuPzogc3RyaW5nO1xuICAgIGZ1bGxQYWdlPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFF1YXJhbnRpbmVPcHRpb25WYWx1ZSB7XG4gICAgcmV0cnlDb3VudD86IG51bWJlcjtcbiAgICBwYXNzQ291bnQ/OiBudW1iZXI7XG59XG5cbnR5cGUgT3B0aW9uVmFsdWUgPSB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZ1tdIHwgRnVuY3Rpb24gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgU2NyZWVuc2hvdE9wdGlvblZhbHVlIHwgUXVhcmFudGluZU9wdGlvblZhbHVlIHwgQ29tcGlsZXJPcHRpb25zO1xuIl19
@@ -1,64 +1,64 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const configuration_base_1 = __importDefault(require("./configuration-base"));
7
- const default_values_1 = require("./default-values");
8
- const lodash_1 = require("lodash");
9
- const warning_message_1 = __importDefault(require("../notifications/warning-message"));
10
- const render_template_1 = __importDefault(require("../utils/render-template"));
11
- const runtime_1 = require("../errors/runtime");
12
- const types_1 = require("../errors/types");
13
- const option_source_1 = __importDefault(require("./option-source"));
14
- const lazyRequire = require('import-lazy')(require);
15
- const typescript = lazyRequire('typescript');
16
- class TypescriptConfiguration extends configuration_base_1.default {
17
- constructor(tsConfigPath) {
18
- super(tsConfigPath);
19
- this.basePath = process.cwd();
20
- this._ensureDefaultOptions();
21
- }
22
- _ensureDefaultOptions() {
23
- for (const option in default_values_1.DEFAULT_TYPESCRIPT_COMPILER_OPTIONS)
24
- this._ensureOptionWithValue(option, default_values_1.DEFAULT_TYPESCRIPT_COMPILER_OPTIONS[option], option_source_1.default.Configuration);
25
- }
26
- async init(customCompilerOptions) {
27
- const opts = await this._load();
28
- if (opts && opts.compilerOptions) {
29
- const parsedOpts = this._parseOptions(opts);
30
- this.mergeOptions(parsedOpts);
31
- }
32
- if (customCompilerOptions)
33
- this.mergeOptions(customCompilerOptions);
34
- this._notifyThatOptionsCannotBeOverridden();
35
- }
36
- async _isConfigurationFileExists() {
37
- const fileExists = await super._isConfigurationFileExists();
38
- if (!fileExists)
39
- throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotFindTypescriptConfigurationFile, this.filePath);
40
- return true;
41
- }
42
- _parseOptions(opts) {
43
- const parsed = typescript.parseJsonConfigFileContent(opts, typescript.sys, this.basePath, void 0, this._filePath);
44
- return lodash_1.omit(parsed.options, default_values_1.TYPESCRIPT_BLACKLISTED_OPTIONS);
45
- }
46
- _notifyThatOptionsCannotBeOverridden() {
47
- const warnedOptions = lodash_1.intersection(this._overriddenOptions, default_values_1.TYPESCRIPT_COMPILER_NON_OVERRIDABLE_OPTIONS);
48
- if (!warnedOptions.length)
49
- return;
50
- const warningMessage = warnedOptions
51
- .map(option => render_template_1.default(warning_message_1.default.cannotOverrideTypeScriptConfigOptions, option))
52
- .join('\n');
53
- configuration_base_1.default._showConsoleWarning(warningMessage);
54
- }
55
- _setOptionValue(option, value) {
56
- if (!default_values_1.TYPESCRIPT_COMPILER_NON_OVERRIDABLE_OPTIONS.includes(option.name))
57
- super._setOptionValue(option, value);
58
- else
59
- this._addOverriddenOptionIfNecessary(option.value, value, option.source, option.name);
60
- }
61
- }
62
- exports.default = TypescriptConfiguration;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const configuration_base_1 = __importDefault(require("./configuration-base"));
7
+ const default_values_1 = require("./default-values");
8
+ const lodash_1 = require("lodash");
9
+ const warning_message_1 = __importDefault(require("../notifications/warning-message"));
10
+ const render_template_1 = __importDefault(require("../utils/render-template"));
11
+ const runtime_1 = require("../errors/runtime");
12
+ const types_1 = require("../errors/types");
13
+ const option_source_1 = __importDefault(require("./option-source"));
14
+ const lazyRequire = require('import-lazy')(require);
15
+ const typescript = lazyRequire('typescript');
16
+ class TypescriptConfiguration extends configuration_base_1.default {
17
+ constructor(tsConfigPath) {
18
+ super(tsConfigPath);
19
+ this.basePath = process.cwd();
20
+ this._ensureDefaultOptions();
21
+ }
22
+ _ensureDefaultOptions() {
23
+ for (const option in default_values_1.DEFAULT_TYPESCRIPT_COMPILER_OPTIONS)
24
+ this._ensureOptionWithValue(option, default_values_1.DEFAULT_TYPESCRIPT_COMPILER_OPTIONS[option], option_source_1.default.Configuration);
25
+ }
26
+ async init(customCompilerOptions) {
27
+ const opts = await this._load();
28
+ if (opts && opts.compilerOptions) {
29
+ const parsedOpts = this._parseOptions(opts);
30
+ this.mergeOptions(parsedOpts);
31
+ }
32
+ if (customCompilerOptions)
33
+ this.mergeOptions(customCompilerOptions);
34
+ this._notifyThatOptionsCannotBeOverridden();
35
+ }
36
+ async _isConfigurationFileExists() {
37
+ const fileExists = await super._isConfigurationFileExists();
38
+ if (!fileExists)
39
+ throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotFindTypescriptConfigurationFile, this.filePath);
40
+ return true;
41
+ }
42
+ _parseOptions(opts) {
43
+ const parsed = typescript.parseJsonConfigFileContent(opts, typescript.sys, this.basePath, void 0, this._filePath);
44
+ return lodash_1.omit(parsed.options, default_values_1.TYPESCRIPT_BLACKLISTED_OPTIONS);
45
+ }
46
+ _notifyThatOptionsCannotBeOverridden() {
47
+ const warnedOptions = lodash_1.intersection(this._overriddenOptions, default_values_1.TYPESCRIPT_COMPILER_NON_OVERRIDABLE_OPTIONS);
48
+ if (!warnedOptions.length)
49
+ return;
50
+ const warningMessage = warnedOptions
51
+ .map(option => render_template_1.default(warning_message_1.default.cannotOverrideTypeScriptConfigOptions, option))
52
+ .join('\n');
53
+ configuration_base_1.default._showConsoleWarning(warningMessage);
54
+ }
55
+ _setOptionValue(option, value) {
56
+ if (!default_values_1.TYPESCRIPT_COMPILER_NON_OVERRIDABLE_OPTIONS.includes(option.name))
57
+ super._setOptionValue(option, value);
58
+ else
59
+ this._addOverriddenOptionIfNecessary(option.value, value, option.source, option.name);
60
+ }
61
+ }
62
+ exports.default = TypescriptConfiguration;
63
63
  module.exports = exports.default;
64
64
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC1jb25maWd1cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZ3VyYXRpb24vdHlwZXNjcmlwdC1jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOEVBQWlEO0FBQ2pELHFEQUkwQjtBQUUxQixtQ0FBNEM7QUFDNUMsdUZBQWdFO0FBQ2hFLCtFQUFzRDtBQUN0RCwrQ0FBaUQ7QUFDakQsMkNBQWlEO0FBRWpELG9FQUEyQztBQUUzQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEQsTUFBTSxVQUFVLEdBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBTTlDLE1BQXFCLHVCQUF3QixTQUFRLDRCQUFhO0lBRzlELFlBQW9CLFlBQTJCO1FBQzNDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVwQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUU5QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLEtBQUssTUFBTSxNQUFNLElBQUksb0RBQW1DO1lBQ3BELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsb0RBQW1DLENBQUMsTUFBTSxDQUFDLEVBQUUsdUJBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUksQ0FBRSxxQkFBOEI7UUFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFvQyxDQUFDO1FBRWxFLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1QyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxxQkFBcUI7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFUyxLQUFLLENBQUMsMEJBQTBCO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLE1BQU0sS0FBSyxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFFNUQsSUFBSSxDQUFDLFVBQVU7WUFDWCxNQUFNLElBQUksc0JBQVksQ0FBQyxzQkFBYyxDQUFDLHFDQUFxQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoRyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sYUFBYSxDQUFFLElBQVk7UUFDOUIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWxILE9BQU8sYUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsK0NBQThCLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sb0NBQW9DO1FBQ3hDLE1BQU0sYUFBYSxHQUFHLHFCQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLDREQUEyQyxDQUFDLENBQUM7UUFFekcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO1lBQ3JCLE9BQU87UUFFWCxNQUFNLGNBQWMsR0FBRyxhQUFhO2FBQy9CLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLHlCQUFjLENBQUMseUJBQWdCLENBQUMscUNBQXFDLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDN0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhCLDRCQUFhLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVTLGVBQWUsQ0FBRSxNQUFjLEVBQUUsS0FBa0I7UUFDekQsSUFBSSxDQUFDLDREQUEyQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2xFLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDOztZQUVyQyxJQUFJLENBQUMsK0JBQStCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUYsQ0FBQztDQUNKO0FBakVELDBDQWlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb25maWd1cmF0aW9uIGZyb20gJy4vY29uZmlndXJhdGlvbi1iYXNlJztcbmltcG9ydCB7XG4gICAgREVGQVVMVF9UWVBFU0NSSVBUX0NPTVBJTEVSX09QVElPTlMsXG4gICAgVFlQRVNDUklQVF9DT01QSUxFUl9OT05fT1ZFUlJJREFCTEVfT1BUSU9OUyxcbiAgICBUWVBFU0NSSVBUX0JMQUNLTElTVEVEX09QVElPTlNcbn0gZnJvbSAnLi9kZWZhdWx0LXZhbHVlcyc7XG5cbmltcG9ydCB7IGludGVyc2VjdGlvbiwgb21pdCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgV0FSTklOR19NRVNTQUdFUyBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbWVzc2FnZSc7XG5pbXBvcnQgcmVuZGVyVGVtcGxhdGUgZnJvbSAnLi4vdXRpbHMvcmVuZGVyLXRlbXBsYXRlJztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBPcHRpb24gZnJvbSAnLi9vcHRpb24nO1xuaW1wb3J0IE9wdGlvblNvdXJjZSBmcm9tICcuL29wdGlvbi1zb3VyY2UnO1xuXG5jb25zdCBsYXp5UmVxdWlyZSA9IHJlcXVpcmUoJ2ltcG9ydC1sYXp5JykocmVxdWlyZSk7XG5jb25zdCB0eXBlc2NyaXB0ICA9IGxhenlSZXF1aXJlKCd0eXBlc2NyaXB0Jyk7XG5cbmludGVyZmFjZSBUeXBlc2NyaXB0Q29uZmlndXJhdGlvbk9wdGlvbnMge1xuICAgIGNvbXBpbGVyT3B0aW9ucz86IG9iamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHlwZXNjcmlwdENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBDb25maWd1cmF0aW9uIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJhc2VQYXRoOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHRzQ29uZmlnUGF0aDogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBzdXBlcih0c0NvbmZpZ1BhdGgpO1xuXG4gICAgICAgIHRoaXMuYmFzZVBhdGggPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgICAgIHRoaXMuX2Vuc3VyZURlZmF1bHRPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW5zdXJlRGVmYXVsdE9wdGlvbnMgKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBpbiBERUZBVUxUX1RZUEVTQ1JJUFRfQ09NUElMRVJfT1BUSU9OUylcbiAgICAgICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShvcHRpb24sIERFRkFVTFRfVFlQRVNDUklQVF9DT01QSUxFUl9PUFRJT05TW29wdGlvbl0sIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdCAoY3VzdG9tQ29tcGlsZXJPcHRpb25zPzogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBhd2FpdCB0aGlzLl9sb2FkKCkgYXMgVHlwZXNjcmlwdENvbmZpZ3VyYXRpb25PcHRpb25zO1xuXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMuY29tcGlsZXJPcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRPcHRzID0gdGhpcy5fcGFyc2VPcHRpb25zKG9wdHMpO1xuXG4gICAgICAgICAgICB0aGlzLm1lcmdlT3B0aW9ucyhwYXJzZWRPcHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXN0b21Db21waWxlck9wdGlvbnMpXG4gICAgICAgICAgICB0aGlzLm1lcmdlT3B0aW9ucyhjdXN0b21Db21waWxlck9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX25vdGlmeVRoYXRPcHRpb25zQ2Fubm90QmVPdmVycmlkZGVuKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIF9pc0NvbmZpZ3VyYXRpb25GaWxlRXhpc3RzICgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgZmlsZUV4aXN0cyA9IGF3YWl0IHN1cGVyLl9pc0NvbmZpZ3VyYXRpb25GaWxlRXhpc3RzKCk7XG5cbiAgICAgICAgaWYgKCFmaWxlRXhpc3RzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jYW5ub3RGaW5kVHlwZXNjcmlwdENvbmZpZ3VyYXRpb25GaWxlLCB0aGlzLmZpbGVQYXRoKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX3BhcnNlT3B0aW9ucyAob3B0czogb2JqZWN0KTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdHlwZXNjcmlwdC5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChvcHRzLCB0eXBlc2NyaXB0LnN5cywgdGhpcy5iYXNlUGF0aCwgdm9pZCAwLCB0aGlzLl9maWxlUGF0aCk7XG5cbiAgICAgICAgcmV0dXJuIG9taXQocGFyc2VkLm9wdGlvbnMsIFRZUEVTQ1JJUFRfQkxBQ0tMSVNURURfT1BUSU9OUyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbm90aWZ5VGhhdE9wdGlvbnNDYW5ub3RCZU92ZXJyaWRkZW4gKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB3YXJuZWRPcHRpb25zID0gaW50ZXJzZWN0aW9uKHRoaXMuX292ZXJyaWRkZW5PcHRpb25zLCBUWVBFU0NSSVBUX0NPTVBJTEVSX05PTl9PVkVSUklEQUJMRV9PUFRJT05TKTtcblxuICAgICAgICBpZiAoIXdhcm5lZE9wdGlvbnMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHdhcm5pbmdNZXNzYWdlID0gd2FybmVkT3B0aW9uc1xuICAgICAgICAgICAgLm1hcChvcHRpb24gPT4gcmVuZGVyVGVtcGxhdGUoV0FSTklOR19NRVNTQUdFUy5jYW5ub3RPdmVycmlkZVR5cGVTY3JpcHRDb25maWdPcHRpb25zLCBvcHRpb24pKVxuICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gICAgICAgIENvbmZpZ3VyYXRpb24uX3Nob3dDb25zb2xlV2FybmluZyh3YXJuaW5nTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9zZXRPcHRpb25WYWx1ZSAob3B0aW9uOiBPcHRpb24sIHZhbHVlOiBPcHRpb25WYWx1ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIVRZUEVTQ1JJUFRfQ09NUElMRVJfTk9OX09WRVJSSURBQkxFX09QVElPTlMuaW5jbHVkZXMob3B0aW9uLm5hbWUpKVxuICAgICAgICAgICAgc3VwZXIuX3NldE9wdGlvblZhbHVlKG9wdGlvbiwgdmFsdWUpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLl9hZGRPdmVycmlkZGVuT3B0aW9uSWZOZWNlc3Nhcnkob3B0aW9uLnZhbHVlLCB2YWx1ZSwgb3B0aW9uLnNvdXJjZSwgb3B0aW9uLm5hbWUpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,9 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const type_assertions_1 = require("../errors/runtime/type-assertions");
4
- function default_1(scripts) {
5
- scripts.forEach((script) => type_assertions_1.assertType([type_assertions_1.is.string, type_assertions_1.is.clientScriptInitializer], 'clientScripts', `Client script`, script));
6
- }
7
- exports.default = default_1;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const type_assertions_1 = require("../errors/runtime/type-assertions");
4
+ function default_1(scripts) {
5
+ scripts.forEach((script) => type_assertions_1.assertType([type_assertions_1.is.string, type_assertions_1.is.clientScriptInitializer], 'clientScripts', `Client script`, script));
6
+ }
7
+ exports.default = default_1;
8
8
  module.exports = exports.default;
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3VzdG9tLWNsaWVudC1zY3JpcHRzL2Fzc2VydC10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdUVBQW1FO0FBR25FLG1CQUF5QixPQUEyQjtJQUNoRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFLENBQUMsNEJBQVUsQ0FBQyxDQUFDLG9CQUFFLENBQUMsTUFBTSxFQUFFLG9CQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakosQ0FBQztBQUZELDRCQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0VHlwZSwgaXMgfSBmcm9tICcuLi9lcnJvcnMvcnVudGltZS90eXBlLWFzc2VydGlvbnMnO1xuaW1wb3J0IENsaWVudFNjcmlwdEluaXQgZnJvbSAnLi9jbGllbnQtc2NyaXB0LWluaXQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc2NyaXB0czogQ2xpZW50U2NyaXB0SW5pdFtdKTogdm9pZCB7XG4gICAgc2NyaXB0cy5mb3JFYWNoKChzY3JpcHQ6IENsaWVudFNjcmlwdEluaXQpID0+IGFzc2VydFR5cGUoW2lzLnN0cmluZywgaXMuY2xpZW50U2NyaXB0SW5pdGlhbGl6ZXJdLCAnY2xpZW50U2NyaXB0cycsIGBDbGllbnQgc2NyaXB0YCwgc2NyaXB0KSk7XG59XG4iXX0=
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNjcmlwdC1pbml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9jbGllbnQtc2NyaXB0LWluaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcXVlc3RGaWx0ZXJSdWxlIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5cbmludGVyZmFjZSBDbGllbnRTY3JpcHRJbml0IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIHBhZ2U6IFJlcXVlc3RGaWx0ZXJSdWxlO1xufVxuXG4vL05PVEU6IGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzE5NFxuZXhwb3J0IGRlZmF1bHQgQ2xpZW50U2NyaXB0SW5pdDsgLyplc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmKi9cbiJdfQ==
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNjcmlwdC1pbml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9jbGllbnQtc2NyaXB0LWluaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcXVlc3RGaWx0ZXJSdWxlSW5pdCB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuXG5pbnRlcmZhY2UgQ2xpZW50U2NyaXB0SW5pdCB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBtb2R1bGU6IHN0cmluZztcbiAgICBwYWdlOiBSZXF1ZXN0RmlsdGVyUnVsZUluaXQ7XG59XG5cbi8vTk9URTogaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8zMTk0XG5leHBvcnQgZGVmYXVsdCBDbGllbnRTY3JpcHRJbml0OyAvKmVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWYqL1xuIl19