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,80 +1,80 @@
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 chalk_1 = __importDefault(require("chalk"));
7
- const lodash_1 = require("lodash");
8
- const log_update_async_hook_1 = __importDefault(require("log-update-async-hook"));
9
- const render_callsite_sync_1 = __importDefault(require("../utils/render-callsite-sync"));
10
- const create_stack_filter_1 = __importDefault(require("../errors/create-stack-filter"));
11
- exports.default = {
12
- messages: [],
13
- debugLogging: false,
14
- streamsOverridden: false,
15
- _overrideStream(stream) {
16
- const initialWrite = stream.write;
17
- stream.write = (chunk, encoding, cb) => {
18
- if (this.debugLogging)
19
- initialWrite.call(stream, chunk, encoding, cb);
20
- else {
21
- this.debugLogging = true;
22
- log_update_async_hook_1.default.clear();
23
- log_update_async_hook_1.default.done();
24
- initialWrite.call(stream, chunk, encoding, cb);
25
- setTimeout(() => this._showAllBreakpoints(), 0);
26
- this.debugLogging = false;
27
- }
28
- };
29
- },
30
- _overrideStreams() {
31
- this._overrideStream(process.stdout);
32
- this._overrideStream(process.stderr);
33
- this.streamsOverridden = true;
34
- },
35
- _getMessageAsString() {
36
- let string = '';
37
- for (const message of this.messages)
38
- string += message.frame;
39
- return string;
40
- },
41
- _showAllBreakpoints() {
42
- if (!this.messages.length)
43
- return;
44
- this.debugLogging = true;
45
- log_update_async_hook_1.default(this._getMessageAsString());
46
- this.debugLogging = false;
47
- },
48
- showBreakpoint(testRunId, userAgent, callsite, testError) {
49
- if (!this.streamsOverridden)
50
- this._overrideStreams();
51
- const callsiteStr = render_callsite_sync_1.default(callsite, {
52
- frameSize: 1,
53
- stackFilter: create_stack_filter_1.default(Error.stackTraceLimit),
54
- stack: false
55
- });
56
- const frame = `\n` +
57
- `----\n` +
58
- `${userAgent}\n` +
59
- chalk_1.default.yellow(testError ? 'DEBUGGER PAUSE ON FAILED TEST:' : 'DEBUGGER PAUSE:') +
60
- `${testError ? `\n${testError}` : ''}` +
61
- `${!testError && callsiteStr ? `\n${callsiteStr}` : ''}` +
62
- '\n' +
63
- `----\n`;
64
- const message = { testRunId, frame };
65
- const index = lodash_1.findIndex(this.messages, { testRunId });
66
- if (index === -1)
67
- this.messages.push(message);
68
- else
69
- this.messages[index] = message;
70
- this._showAllBreakpoints();
71
- },
72
- hideBreakpoint(testRunId) {
73
- const index = lodash_1.findIndex(this.messages, { testRunId });
74
- if (index !== -1)
75
- this.messages.splice(index, 1);
76
- this._showAllBreakpoints();
77
- }
78
- };
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 chalk_1 = __importDefault(require("chalk"));
7
+ const lodash_1 = require("lodash");
8
+ const log_update_async_hook_1 = __importDefault(require("log-update-async-hook"));
9
+ const render_callsite_sync_1 = __importDefault(require("../utils/render-callsite-sync"));
10
+ const create_stack_filter_1 = __importDefault(require("../errors/create-stack-filter"));
11
+ exports.default = {
12
+ messages: [],
13
+ debugLogging: false,
14
+ streamsOverridden: false,
15
+ _overrideStream(stream) {
16
+ const initialWrite = stream.write;
17
+ stream.write = (chunk, encoding, cb) => {
18
+ if (this.debugLogging)
19
+ initialWrite.call(stream, chunk, encoding, cb);
20
+ else {
21
+ this.debugLogging = true;
22
+ log_update_async_hook_1.default.clear();
23
+ log_update_async_hook_1.default.done();
24
+ initialWrite.call(stream, chunk, encoding, cb);
25
+ setTimeout(() => this._showAllBreakpoints(), 0);
26
+ this.debugLogging = false;
27
+ }
28
+ };
29
+ },
30
+ _overrideStreams() {
31
+ this._overrideStream(process.stdout);
32
+ this._overrideStream(process.stderr);
33
+ this.streamsOverridden = true;
34
+ },
35
+ _getMessageAsString() {
36
+ let string = '';
37
+ for (const message of this.messages)
38
+ string += message.frame;
39
+ return string;
40
+ },
41
+ _showAllBreakpoints() {
42
+ if (!this.messages.length)
43
+ return;
44
+ this.debugLogging = true;
45
+ log_update_async_hook_1.default(this._getMessageAsString());
46
+ this.debugLogging = false;
47
+ },
48
+ showBreakpoint(testRunId, userAgent, callsite, testError) {
49
+ if (!this.streamsOverridden)
50
+ this._overrideStreams();
51
+ const callsiteStr = render_callsite_sync_1.default(callsite, {
52
+ frameSize: 1,
53
+ stackFilter: create_stack_filter_1.default(Error.stackTraceLimit),
54
+ stack: false
55
+ });
56
+ const frame = `\n` +
57
+ `----\n` +
58
+ `${userAgent}\n` +
59
+ chalk_1.default.yellow(testError ? 'DEBUGGER PAUSE ON FAILED TEST:' : 'DEBUGGER PAUSE:') +
60
+ `${testError ? `\n${testError}` : ''}` +
61
+ `${!testError && callsiteStr ? `\n${callsiteStr}` : ''}` +
62
+ '\n' +
63
+ `----\n`;
64
+ const message = { testRunId, frame };
65
+ const index = lodash_1.findIndex(this.messages, { testRunId });
66
+ if (index === -1)
67
+ this.messages.push(message);
68
+ else
69
+ this.messages[index] = message;
70
+ this._showAllBreakpoints();
71
+ },
72
+ hideBreakpoint(testRunId) {
73
+ const index = lodash_1.findIndex(this.messages, { testRunId });
74
+ if (index !== -1)
75
+ this.messages.splice(index, 1);
76
+ this._showAllBreakpoints();
77
+ }
78
+ };
79
79
  module.exports = exports.default;
80
80
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWctbG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vdGlmaWNhdGlvbnMvZGVidWctbG9nZ2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLG1DQUFtQztBQUNuQyxrRkFBOEM7QUFDOUMseUZBQStEO0FBQy9ELHdGQUE4RDtBQUU5RCxrQkFBZTtJQUNYLFFBQVEsRUFBRSxFQUFFO0lBRVosWUFBWSxFQUFFLEtBQUs7SUFFbkIsaUJBQWlCLEVBQUUsS0FBSztJQUV4QixlQUFlLENBQUUsTUFBTTtRQUNuQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRWxDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQ25DLElBQUksSUFBSSxDQUFDLFlBQVk7Z0JBQ2pCLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQzlDO2dCQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUV6QiwrQkFBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQiwrQkFBUyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUVqQixZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUUvQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRWhELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQzdCO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVoQixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQy9CLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRTVCLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxtQkFBbUI7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQ3JCLE9BQU87UUFFWCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QiwrQkFBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWMsQ0FBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTO1FBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTVCLE1BQU0sV0FBVyxHQUFHLDhCQUFrQixDQUFDLFFBQVEsRUFBRTtZQUM3QyxTQUFTLEVBQUksQ0FBQztZQUNkLFdBQVcsRUFBRSw2QkFBaUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQ3JELEtBQUssRUFBUSxLQUFLO1NBQ3JCLENBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxHQUFHLElBQUk7WUFDSixRQUFRO1lBQ1IsR0FBRyxTQUFTLElBQUk7WUFDaEIsZUFBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztZQUM5RSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3RDLEdBQUcsQ0FBQyxTQUFTLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDeEQsSUFBSTtZQUNKLFFBQVEsQ0FBQztRQUV2QixNQUFNLE9BQU8sR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FBSyxrQkFBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRXhELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztZQUU1QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUVuQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYyxDQUFFLFNBQVM7UUFDckIsTUFBTSxLQUFLLEdBQUcsa0JBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUV0RCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgZmluZEluZGV4IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2dVcGRhdGUgZnJvbSAnbG9nLXVwZGF0ZS1hc3luYy1ob29rJztcbmltcG9ydCByZW5kZXJDYWxsc2l0ZVN5bmMgZnJvbSAnLi4vdXRpbHMvcmVuZGVyLWNhbGxzaXRlLXN5bmMnO1xuaW1wb3J0IGNyZWF0ZVN0YWNrRmlsdGVyIGZyb20gJy4uL2Vycm9ycy9jcmVhdGUtc3RhY2stZmlsdGVyJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1lc3NhZ2VzOiBbXSxcblxuICAgIGRlYnVnTG9nZ2luZzogZmFsc2UsXG5cbiAgICBzdHJlYW1zT3ZlcnJpZGRlbjogZmFsc2UsXG5cbiAgICBfb3ZlcnJpZGVTdHJlYW0gKHN0cmVhbSkge1xuICAgICAgICBjb25zdCBpbml0aWFsV3JpdGUgPSBzdHJlYW0ud3JpdGU7XG5cbiAgICAgICAgc3RyZWFtLndyaXRlID0gKGNodW5rLCBlbmNvZGluZywgY2IpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnTG9nZ2luZylcbiAgICAgICAgICAgICAgICBpbml0aWFsV3JpdGUuY2FsbChzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgbG9nVXBkYXRlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgbG9nVXBkYXRlLmRvbmUoKTtcblxuICAgICAgICAgICAgICAgIGluaXRpYWxXcml0ZS5jYWxsKHN0cmVhbSwgY2h1bmssIGVuY29kaW5nLCBjYik7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3Nob3dBbGxCcmVha3BvaW50cygpLCAwKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdMb2dnaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIF9vdmVycmlkZVN0cmVhbXMgKCkge1xuICAgICAgICB0aGlzLl9vdmVycmlkZVN0cmVhbShwcm9jZXNzLnN0ZG91dCk7XG4gICAgICAgIHRoaXMuX292ZXJyaWRlU3RyZWFtKHByb2Nlc3Muc3RkZXJyKTtcblxuICAgICAgICB0aGlzLnN0cmVhbXNPdmVycmlkZGVuID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgX2dldE1lc3NhZ2VBc1N0cmluZyAoKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSAnJztcblxuICAgICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgdGhpcy5tZXNzYWdlcylcbiAgICAgICAgICAgIHN0cmluZyArPSBtZXNzYWdlLmZyYW1lO1xuXG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfSxcblxuICAgIF9zaG93QWxsQnJlYWtwb2ludHMgKCkge1xuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuZGVidWdMb2dnaW5nID0gdHJ1ZTtcbiAgICAgICAgbG9nVXBkYXRlKHRoaXMuX2dldE1lc3NhZ2VBc1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dpbmcgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgc2hvd0JyZWFrcG9pbnQgKHRlc3RSdW5JZCwgdXNlckFnZW50LCBjYWxsc2l0ZSwgdGVzdEVycm9yKSB7XG4gICAgICAgIGlmICghdGhpcy5zdHJlYW1zT3ZlcnJpZGRlbilcbiAgICAgICAgICAgIHRoaXMuX292ZXJyaWRlU3RyZWFtcygpO1xuXG4gICAgICAgIGNvbnN0IGNhbGxzaXRlU3RyID0gcmVuZGVyQ2FsbHNpdGVTeW5jKGNhbGxzaXRlLCB7XG4gICAgICAgICAgICBmcmFtZVNpemU6ICAgMSxcbiAgICAgICAgICAgIHN0YWNrRmlsdGVyOiBjcmVhdGVTdGFja0ZpbHRlcihFcnJvci5zdGFja1RyYWNlTGltaXQpLFxuICAgICAgICAgICAgc3RhY2s6ICAgICAgIGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZyYW1lID0gYFxcbmAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAtLS0tXFxuYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCR7dXNlckFnZW50fVxcbmAgK1xuICAgICAgICAgICAgICAgICAgICAgIGNoYWxrLnllbGxvdyh0ZXN0RXJyb3IgPyAnREVCVUdHRVIgUEFVU0UgT04gRkFJTEVEIFRFU1Q6JyA6ICdERUJVR0dFUiBQQVVTRTonKSArXG4gICAgICAgICAgICAgICAgICAgICAgYCR7dGVzdEVycm9yID8gYFxcbiR7dGVzdEVycm9yfWAgOiAnJ31gICtcbiAgICAgICAgICAgICAgICAgICAgICBgJHshdGVzdEVycm9yICYmIGNhbGxzaXRlU3RyID8gYFxcbiR7Y2FsbHNpdGVTdHJ9YCA6ICcnfWAgK1xuICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICBgLS0tLVxcbmA7XG5cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdGVzdFJ1bklkLCBmcmFtZSB9O1xuICAgICAgICBjb25zdCBpbmRleCAgID0gZmluZEluZGV4KHRoaXMubWVzc2FnZXMsIHsgdGVzdFJ1bklkIH0pO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXNbaW5kZXhdID0gbWVzc2FnZTtcblxuICAgICAgICB0aGlzLl9zaG93QWxsQnJlYWtwb2ludHMoKTtcbiAgICB9LFxuXG4gICAgaGlkZUJyZWFrcG9pbnQgKHRlc3RSdW5JZCkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh0aGlzLm1lc3NhZ2VzLCB7IHRlc3RSdW5JZCB9KTtcblxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIHRoaXMuX3Nob3dBbGxCcmVha3BvaW50cygpO1xuICAgIH1cbn07XG4iXX0=
@@ -1,25 +1,25 @@
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
- exports.getDeprecationMessage = exports.DEPRECATED = void 0;
7
- const render_template_1 = __importDefault(require("../utils/render-template"));
8
- const warning_message_1 = __importDefault(require("./warning-message"));
9
- const option_names_1 = __importDefault(require("../configuration/option-names"));
10
- const customizable_compilers_1 = __importDefault(require("../configuration/customizable-compilers"));
11
- exports.DEPRECATED = {
12
- 'setPageLoadTimeout': {
13
- what: "The 't.setPageLoadTimeout' method",
14
- useInstead: "the 'test.timeouts' method to set the 'pageLoadTimeout'"
15
- },
16
- 'tsConfigPath': {
17
- what: `The '${option_names_1.default.tsConfigPath}' option`,
18
- useInstead: `the '${option_names_1.default.compilerOptions}.${customizable_compilers_1.default.typescript}.configPath' option`
19
- }
20
- };
21
- function getDeprecationMessage(deprecated) {
22
- return render_template_1.default(warning_message_1.default.deprecatedAPI, deprecated.what, deprecated.useInstead);
23
- }
24
- exports.getDeprecationMessage = getDeprecationMessage;
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
+ exports.getDeprecationMessage = exports.DEPRECATED = void 0;
7
+ const render_template_1 = __importDefault(require("../utils/render-template"));
8
+ const warning_message_1 = __importDefault(require("./warning-message"));
9
+ const option_names_1 = __importDefault(require("../configuration/option-names"));
10
+ const customizable_compilers_1 = __importDefault(require("../configuration/customizable-compilers"));
11
+ exports.DEPRECATED = {
12
+ 'setPageLoadTimeout': {
13
+ what: "The 't.setPageLoadTimeout' method",
14
+ useInstead: "the 'test.timeouts' method to set the 'pageLoadTimeout'"
15
+ },
16
+ 'tsConfigPath': {
17
+ what: `The '${option_names_1.default.tsConfigPath}' option`,
18
+ useInstead: `the '${option_names_1.default.compilerOptions}.${customizable_compilers_1.default.typescript}.configPath' option`
19
+ }
20
+ };
21
+ function getDeprecationMessage(deprecated) {
22
+ return render_template_1.default(warning_message_1.default.deprecatedAPI, deprecated.what, deprecated.useInstead);
23
+ }
24
+ exports.getDeprecationMessage = getDeprecationMessage;
25
25
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwcmVjYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub3RpZmljYXRpb25zL2RlcHJlY2F0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0VBQXNEO0FBQ3RELHdFQUFpRDtBQUNqRCxpRkFBeUQ7QUFDekQscUdBQTRFO0FBTy9ELFFBQUEsVUFBVSxHQUErQztJQUNsRSxvQkFBb0IsRUFBRTtRQUNsQixJQUFJLEVBQVEsbUNBQW1DO1FBQy9DLFVBQVUsRUFBRSx5REFBeUQ7S0FDeEU7SUFDRCxjQUFjLEVBQUU7UUFDWixJQUFJLEVBQVEsUUFBUSxzQkFBWSxDQUFDLFlBQVksVUFBVTtRQUN2RCxVQUFVLEVBQUUsUUFBUSxzQkFBWSxDQUFDLGVBQWUsSUFBSSxnQ0FBcUIsQ0FBQyxVQUFVLHFCQUFxQjtLQUM1RztDQUNKLENBQUM7QUFFRixTQUFnQixxQkFBcUIsQ0FBRSxVQUF5QjtJQUM1RCxPQUFPLHlCQUFjLENBQUMseUJBQWdCLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xHLENBQUM7QUFGRCxzREFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZW5kZXJUZW1wbGF0ZSBmcm9tICcuLi91dGlscy9yZW5kZXItdGVtcGxhdGUnO1xuaW1wb3J0IFdBUk5JTkdfTUVTU0FHRVMgZnJvbSAnLi93YXJuaW5nLW1lc3NhZ2UnO1xuaW1wb3J0IE9QVElPTl9OQU1FUyBmcm9tICcuLi9jb25maWd1cmF0aW9uL29wdGlvbi1uYW1lcyc7XG5pbXBvcnQgQ3VzdG9taXphYmxlQ29tcGlsZXJzIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24vY3VzdG9taXphYmxlLWNvbXBpbGVycyc7XG5cbmludGVyZmFjZSBEZXByZWNhdGVkQVBJIHtcbiAgICB3aGF0OiBzdHJpbmc7XG4gICAgdXNlSW5zdGVhZDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgREVQUkVDQVRFRDogeyBbZnVuY3Rpb25hbGl0eTogc3RyaW5nXTogRGVwcmVjYXRlZEFQSSB9ID0ge1xuICAgICdzZXRQYWdlTG9hZFRpbWVvdXQnOiB7XG4gICAgICAgIHdoYXQ6ICAgICAgIFwiVGhlICd0LnNldFBhZ2VMb2FkVGltZW91dCcgbWV0aG9kXCIsXG4gICAgICAgIHVzZUluc3RlYWQ6IFwidGhlICd0ZXN0LnRpbWVvdXRzJyBtZXRob2QgdG8gc2V0IHRoZSAncGFnZUxvYWRUaW1lb3V0J1wiXG4gICAgfSxcbiAgICAndHNDb25maWdQYXRoJzoge1xuICAgICAgICB3aGF0OiAgICAgICBgVGhlICcke09QVElPTl9OQU1FUy50c0NvbmZpZ1BhdGh9JyBvcHRpb25gLFxuICAgICAgICB1c2VJbnN0ZWFkOiBgdGhlICcke09QVElPTl9OQU1FUy5jb21waWxlck9wdGlvbnN9LiR7Q3VzdG9taXphYmxlQ29tcGlsZXJzLnR5cGVzY3JpcHR9LmNvbmZpZ1BhdGgnIG9wdGlvbmBcbiAgICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVwcmVjYXRpb25NZXNzYWdlIChkZXByZWNhdGVkOiBEZXByZWNhdGVkQVBJKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVuZGVyVGVtcGxhdGUoV0FSTklOR19NRVNTQUdFUy5kZXByZWNhdGVkQVBJLCBkZXByZWNhdGVkLndoYXQsIGRlcHJlY2F0ZWQudXNlSW5zdGVhZCk7XG59XG4iXX0=
@@ -1,17 +1,17 @@
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
- exports.FAILED_TO_GENERATE_DETAILED_DIFF = exports.SCREEN_RECORDING_PERMISSION_REQUEST = void 0;
7
- const dedent_1 = __importDefault(require("dedent"));
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
+ exports.FAILED_TO_GENERATE_DETAILED_DIFF = exports.SCREEN_RECORDING_PERMISSION_REQUEST = void 0;
7
+ const dedent_1 = __importDefault(require("dedent"));
8
8
  exports.SCREEN_RECORDING_PERMISSION_REQUEST = dedent_1.default `
9
9
  TestCafe requires permission to record the screen. Open 'System Preferences > Security & Privacy > Privacy > Screen Recording' and check 'TestCafe Browser Tools' in the application list.
10
-
10
+
11
11
  Press any key to retry.
12
- `;
13
- exports.FAILED_TO_GENERATE_DETAILED_DIFF = errorMessage => dedent_1.default `
12
+ `;
13
+ exports.FAILED_TO_GENERATE_DETAILED_DIFF = (errorMessage) => dedent_1.default `
14
14
  Failed to generate diff due to an error:
15
15
  ${errorMessage}
16
- `;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mb3JtYXRpb24tbWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub3RpZmljYXRpb25zL2luZm9ybWF0aW9uLW1lc3NhZ2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBR2YsUUFBQSxtQ0FBbUMsR0FBRyxnQkFBTSxDQUFDOzs7O0NBSXpELENBQUM7QUFFVyxRQUFBLGdDQUFnQyxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsZ0JBQU0sQ0FBQzs7TUFFakUsWUFBWTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZGVudCBmcm9tICdkZWRlbnQnO1xuXG5cbmV4cG9ydCBjb25zdCBTQ1JFRU5fUkVDT1JESU5HX1BFUk1JU1NJT05fUkVRVUVTVCA9IGRlZGVudCBgXG4gICAgVGVzdENhZmUgcmVxdWlyZXMgcGVybWlzc2lvbiB0byByZWNvcmQgdGhlIHNjcmVlbi4gT3BlbiAnU3lzdGVtIFByZWZlcmVuY2VzID4gU2VjdXJpdHkgJiBQcml2YWN5ID4gUHJpdmFjeSA+IFNjcmVlbiBSZWNvcmRpbmcnIGFuZCBjaGVjayAnVGVzdENhZmUgQnJvd3NlciBUb29scycgaW4gdGhlIGFwcGxpY2F0aW9uIGxpc3QuXG4gICAgXG4gICAgUHJlc3MgYW55IGtleSB0byByZXRyeS5cbmA7XG5cbmV4cG9ydCBjb25zdCBGQUlMRURfVE9fR0VORVJBVEVfREVUQUlMRURfRElGRiA9IGVycm9yTWVzc2FnZSA9PiBkZWRlbnQgYFxuICAgIEZhaWxlZCB0byBnZW5lcmF0ZSBkaWZmIGR1ZSB0byBhbiBlcnJvcjpcbiAgICAke2Vycm9yTWVzc2FnZX1cbmA7XG4iXX0=
16
+ `;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mb3JtYXRpb24tbWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub3RpZmljYXRpb25zL2luZm9ybWF0aW9uLW1lc3NhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBR2YsUUFBQSxtQ0FBbUMsR0FBRyxnQkFBTSxDQUFDOzs7O0NBSXpELENBQUM7QUFFVyxRQUFBLGdDQUFnQyxHQUFHLENBQUMsWUFBb0IsRUFBVSxFQUFFLENBQUMsZ0JBQU0sQ0FBQzs7TUFFbkYsWUFBWTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZGVudCBmcm9tICdkZWRlbnQnO1xuXG5cbmV4cG9ydCBjb25zdCBTQ1JFRU5fUkVDT1JESU5HX1BFUk1JU1NJT05fUkVRVUVTVCA9IGRlZGVudCBgXG4gICAgVGVzdENhZmUgcmVxdWlyZXMgcGVybWlzc2lvbiB0byByZWNvcmQgdGhlIHNjcmVlbi4gT3BlbiAnU3lzdGVtIFByZWZlcmVuY2VzID4gU2VjdXJpdHkgJiBQcml2YWN5ID4gUHJpdmFjeSA+IFNjcmVlbiBSZWNvcmRpbmcnIGFuZCBjaGVjayAnVGVzdENhZmUgQnJvd3NlciBUb29scycgaW4gdGhlIGFwcGxpY2F0aW9uIGxpc3QuXG5cbiAgICBQcmVzcyBhbnkga2V5IHRvIHJldHJ5LlxuYDtcblxuZXhwb3J0IGNvbnN0IEZBSUxFRF9UT19HRU5FUkFURV9ERVRBSUxFRF9ESUZGID0gKGVycm9yTWVzc2FnZTogc3RyaW5nKTogc3RyaW5nID0+IGRlZGVudCBgXG4gICAgRmFpbGVkIHRvIGdlbmVyYXRlIGRpZmYgZHVlIHRvIGFuIGVycm9yOlxuICAgICR7ZXJyb3JNZXNzYWdlfVxuYDtcbiJdfQ==
@@ -1,32 +1,33 @@
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 render_template_1 = __importDefault(require("../utils/render-template"));
7
- class WarningLog {
8
- constructor(globalLog = null) {
9
- this.globalLog = globalLog;
10
- this.messages = [];
11
- }
12
- addPlainMessage(msg) {
13
- // NOTE: avoid duplicates
14
- if (this.messages.indexOf(msg) < 0)
15
- this.messages.push(msg);
16
- }
17
- addWarning() {
18
- const msg = render_template_1.default.apply(null, arguments);
19
- this.addPlainMessage(msg);
20
- if (this.globalLog)
21
- this.globalLog.addPlainMessage(msg);
22
- }
23
- clear() {
24
- this.messages = [];
25
- }
26
- copyTo(warningLog) {
27
- this.messages.forEach(msg => warningLog.addWarning(msg));
28
- }
29
- }
30
- exports.default = WarningLog;
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 render_template_1 = __importDefault(require("../utils/render-template"));
7
+ class WarningLog {
8
+ constructor(globalLog = null) {
9
+ this.globalLog = globalLog;
10
+ this.messages = [];
11
+ }
12
+ addPlainMessage(msg) {
13
+ // NOTE: avoid duplicates
14
+ if (!this.messages.includes(msg))
15
+ this.messages.push(msg);
16
+ }
17
+ addWarning(...args) {
18
+ // @ts-ignore
19
+ const msg = render_template_1.default.apply(null, args);
20
+ this.addPlainMessage(msg);
21
+ if (this.globalLog)
22
+ this.globalLog.addPlainMessage(msg);
23
+ }
24
+ clear() {
25
+ this.messages = [];
26
+ }
27
+ copyTo(warningLog) {
28
+ this.messages.forEach(msg => warningLog.addWarning(msg));
29
+ }
30
+ }
31
+ exports.default = WarningLog;
31
32
  module.exports = exports.default;
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FybmluZy1sb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbm90aWZpY2F0aW9ucy93YXJuaW5nLWxvZy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtFQUFzRDtBQUV0RCxNQUFxQixVQUFVO0lBQzNCLFlBQWEsU0FBUyxHQUFHLElBQUk7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGVBQWUsQ0FBRSxHQUFHO1FBQ2hCLHlCQUF5QjtRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFVBQVU7UUFDTixNQUFNLEdBQUcsR0FBRyx5QkFBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQyxTQUFTO1lBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxDQUFFLFVBQVU7UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0NBQ0o7QUE1QkQsNkJBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlbmRlclRlbXBsYXRlIGZyb20gJy4uL3V0aWxzL3JlbmRlci10ZW1wbGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdhcm5pbmdMb2cge1xuICAgIGNvbnN0cnVjdG9yIChnbG9iYWxMb2cgPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsTG9nID0gZ2xvYmFsTG9nO1xuICAgICAgICB0aGlzLm1lc3NhZ2VzICA9IFtdO1xuICAgIH1cblxuICAgIGFkZFBsYWluTWVzc2FnZSAobXNnKSB7XG4gICAgICAgIC8vIE5PVEU6IGF2b2lkIGR1cGxpY2F0ZXNcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZXMuaW5kZXhPZihtc2cpIDwgMClcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMucHVzaChtc2cpO1xuICAgIH1cblxuICAgIGFkZFdhcm5pbmcgKCkge1xuICAgICAgICBjb25zdCBtc2cgPSByZW5kZXJUZW1wbGF0ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMuYWRkUGxhaW5NZXNzYWdlKG1zZyk7XG5cbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsTG9nKVxuICAgICAgICAgICAgdGhpcy5nbG9iYWxMb2cuYWRkUGxhaW5NZXNzYWdlKG1zZyk7XG4gICAgfVxuXG4gICAgY2xlYXIgKCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gW107XG4gICAgfVxuXG4gICAgY29weVRvICh3YXJuaW5nTG9nKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZXMuZm9yRWFjaChtc2cgPT4gd2FybmluZ0xvZy5hZGRXYXJuaW5nKG1zZykpO1xuICAgIH1cbn1cbiJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FybmluZy1sb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbm90aWZpY2F0aW9ucy93YXJuaW5nLWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtFQUFzRDtBQUV0RCxNQUFxQixVQUFVO0lBSTNCLFlBQW9CLFNBQVMsR0FBRyxJQUFJO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxlQUFlLENBQUUsR0FBVztRQUMvQix5QkFBeUI7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sVUFBVSxDQUFFLEdBQUcsSUFBVztRQUM3QixhQUFhO1FBQ2IsTUFBTSxHQUFHLEdBQUcseUJBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsU0FBUztZQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTSxLQUFLO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVNLE1BQU0sQ0FBRSxVQUFzQjtRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0NBQ0o7QUFoQ0QsNkJBZ0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlbmRlclRlbXBsYXRlIGZyb20gJy4uL3V0aWxzL3JlbmRlci10ZW1wbGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdhcm5pbmdMb2cge1xuICAgIHB1YmxpYyBtZXNzYWdlczogc3RyaW5nW107XG4gICAgcHVibGljIGdsb2JhbExvZzogV2FybmluZ0xvZyB8IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGdsb2JhbExvZyA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxMb2cgPSBnbG9iYWxMb2c7XG4gICAgICAgIHRoaXMubWVzc2FnZXMgID0gW107XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFBsYWluTWVzc2FnZSAobXNnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gTk9URTogYXZvaWQgZHVwbGljYXRlc1xuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZXMuaW5jbHVkZXMobXNnKSlcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMucHVzaChtc2cpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRXYXJuaW5nICguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IG1zZyA9IHJlbmRlclRlbXBsYXRlLmFwcGx5KG51bGwsIGFyZ3MpO1xuXG4gICAgICAgIHRoaXMuYWRkUGxhaW5NZXNzYWdlKG1zZyk7XG5cbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsTG9nKVxuICAgICAgICAgICAgdGhpcy5nbG9iYWxMb2cuYWRkUGxhaW5NZXNzYWdlKG1zZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5VG8gKHdhcm5pbmdMb2c6IFdhcm5pbmdMb2cpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlcy5mb3JFYWNoKG1zZyA9PiB3YXJuaW5nTG9nLmFkZFdhcm5pbmcobXNnKSk7XG4gICAgfVxufVxuIl19
@@ -1,49 +1,49 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = {
4
- screenshotsDisabled: 'Screenshots are disabled. To take screenshots, remove the "--disable-screenshots" command line flag or set the "disableScreenshots" option to "false" in the API or configuration file.',
5
- screenshotError: 'Was unable to take a screenshot due to an error.\n\n{errMessage}',
6
- screenshotMarkNotFound: 'Unable to locate the page area in the browser window screenshot at {screenshotPath}, because the page area mark with ID {markId} is not found in the screenshot.',
7
- screenshotsFullPageNotSupported: 'TestCafe does not support full-page screenshots in {browserAlias}.',
8
- screenshotRewritingError: 'The file at "{screenshotPath}" already exists. It has just been rewritten with a recent screenshot. This situation can possibly cause issues. To avoid them, make sure that each screenshot has a unique path. If a test runs in multiple browsers, consider including the user agent in the screenshot path or generate a unique identifier in another way.',
9
- browserManipulationsOnRemoteBrowser: 'The screenshot and window resize functionalities are not supported in a remote browser. They can function only if the browser is running on the same machine and in the same environment as the TestCafe server.',
10
- screenshotNotSupportedByBrowserProvider: 'The screenshot functionality is not supported by the "{providerName}" browser provider.',
11
- videoNotSupportedByBrowser: 'Video recording is not supported by the "{browserAlias}" browser.',
12
- videoBrowserResizing: 'The browser window was resized during the "{testName}" test while TestCafe recorded a video. TestCafe cannot adjust the video resolution during recording. As a result, the video content may appear broken. Do not resize the browser window when TestCafe records a video.',
13
- resizeNotSupportedByBrowserProvider: 'The window resize functionality is not supported by the "{providerName}" browser provider.',
14
- maximizeNotSupportedByBrowserProvider: 'The window maximization functionality is not supported by the "{providerName}" browser provider.',
15
- resizeError: 'Was unable to resize the window due to an error.\n\n{errMessage}',
16
- maximizeError: 'Was unable to maximize the window due to an error.\n\n{errMessage}',
17
- requestMockCORSValidationFailed: '{RequestHook}: CORS validation failed for a request specified as {requestFilterRule}',
18
- debugInHeadlessError: 'You cannot debug in headless mode.',
19
- cannotReadConfigFile: 'An error has occurred while reading the configuration file.',
20
- cannotParseConfigFile: "Failed to parse the '{path}' file.\n\nThis file is not a well-formed JSON file.",
21
- configOptionsWereOverridden: 'The {optionsString} option{suffix} from the configuration file will be ignored.',
22
- cannotOverrideTypeScriptConfigOptions: 'You cannot override the "{optionName}" compiler option in the TypeScript configuration file.\n',
23
- cannotFindWindowDescriptorError: 'Could not find the "{browserAlias}" window. ' +
24
- 'TestCafe is unable to resize the window or take screenshots.\n\n' +
25
- 'The following error occurred while TestCafe was searching ' +
26
- 'for the window descriptor:\n\n{errMessage}',
27
- cannotFindSSLCertFile: 'Unable to find the "{path}" file, specified by the "{option}" ssl option. Error details:\n' +
28
- '\n' +
29
- '{err}',
30
- cannotFindConfigurationFile: 'Unable to find the "{path}" configuration file. Error details:\n' +
31
- '\n' +
32
- '{err}',
33
- problematicPathPatternPlaceholderForVideoRecording: 'The {placeholderList} path pattern placeholder{suffix} cannot be applied to the recorded video.\n' +
34
- '\n' +
35
- 'The placeholder{suffix} {verb} replaced with an empty string.',
36
- clientScriptsWithEmptyContent: 'The client script you tried to inject is empty.',
37
- clientScriptsWithDuplicatedContent: 'You injected the following client script{suffix} several times:\n{duplicatedScripts}',
38
- assertedSelectorInstance: 'You passed a Selector object to \'t.expect()\'.\nIf you want to check that a matched element exists, pass the \'selector.exists\' value instead.',
39
- assertedClientFunctionInstance: 'You passed a ClientFunction object to \'t.expect()\'.\nIf you want to check the function\'s return value, use parentheses to call the function: fnName().',
40
- multipleWindowsFoundByPredicate: 'The predicate function passed to the \'switchToWindow\' method matched multiple windows. The first matching window was activated.',
41
- excessiveAwaitInAssertion: 'You passed a DOM snapshot property to the assertion\'s \'t.expect()\' method. The property value is assigned when the snapshot is resolved and this value is no longer updated. To ensure that the assertion verifies an up-to-date value, pass the selector property without \'await\'.',
42
- missingAwaitOnSnapshotProperty: 'You used a DOM snapshot property without \'await\'. The property value is assigned when the snapshot is resolved. If you need to use the property value, use \'await\' to resolve the Promise.',
43
- retryTestPagesIsNotSupported: 'Cannot enable the \'retryTestPages\' option in "{browserAlias}". Please ensure that your version of "{browserAlias}" supports the Service Worker API (https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API).\n',
44
- browserProviderDropOfPerformance: 'We detected \'{browserName}\' runs slowly. Try to free up or allocate more system resources on its host machine.',
45
- testsCompilationTakesTooLong: 'Tests took too long to compile ({compileTime}). Ensure the test code has no excessive imports.',
46
- deprecatedAPI: '{API} is deprecated and will be removed in the next major release. Use {replacement} instead.'
47
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
4
+ screenshotsDisabled: 'Screenshots are disabled. To take screenshots, remove the "--disable-screenshots" command line flag or set the "disableScreenshots" option to "false" in the API or configuration file.',
5
+ screenshotError: 'Was unable to take a screenshot due to an error.\n\n{errMessage}',
6
+ screenshotMarkNotFound: 'Unable to locate the page area in the browser window screenshot at {screenshotPath}, because the page area mark with ID {markId} is not found in the screenshot.',
7
+ screenshotsFullPageNotSupported: 'TestCafe does not support full-page screenshots in {browserAlias}.',
8
+ screenshotRewritingError: 'The file at "{screenshotPath}" already exists. It has just been rewritten with a recent screenshot. This situation can possibly cause issues. To avoid them, make sure that each screenshot has a unique path. If a test runs in multiple browsers, consider including the user agent in the screenshot path or generate a unique identifier in another way.',
9
+ browserManipulationsOnRemoteBrowser: 'The screenshot and window resize functionalities are not supported in a remote browser. They can function only if the browser is running on the same machine and in the same environment as the TestCafe server.',
10
+ screenshotNotSupportedByBrowserProvider: 'The screenshot functionality is not supported by the "{providerName}" browser provider.',
11
+ videoNotSupportedByBrowser: 'Video recording is not supported by the "{browserAlias}" browser.',
12
+ videoBrowserResizing: 'The browser window was resized during the "{testName}" test while TestCafe recorded a video. TestCafe cannot adjust the video resolution during recording. As a result, the video content may appear broken. Do not resize the browser window when TestCafe records a video.',
13
+ resizeNotSupportedByBrowserProvider: 'The window resize functionality is not supported by the "{providerName}" browser provider.',
14
+ maximizeNotSupportedByBrowserProvider: 'The window maximization functionality is not supported by the "{providerName}" browser provider.',
15
+ resizeError: 'Was unable to resize the window due to an error.\n\n{errMessage}',
16
+ maximizeError: 'Was unable to maximize the window due to an error.\n\n{errMessage}',
17
+ requestMockCORSValidationFailed: '{RequestHook}: CORS validation failed for a request specified as {requestFilterRule}',
18
+ debugInHeadlessError: 'You cannot debug in headless mode.',
19
+ cannotReadConfigFile: 'An error has occurred while reading the configuration file.',
20
+ cannotParseConfigFile: "Failed to parse the '{path}' file.\n\nThis file is not a well-formed JSON file.",
21
+ configOptionsWereOverridden: 'The {optionsString} option{suffix} from the configuration file will be ignored.',
22
+ cannotOverrideTypeScriptConfigOptions: 'You cannot override the "{optionName}" compiler option in the TypeScript configuration file.\n',
23
+ cannotFindWindowDescriptorError: 'Could not find the "{browserAlias}" window. ' +
24
+ 'TestCafe is unable to resize the window or take screenshots.\n\n' +
25
+ 'The following error occurred while TestCafe was searching ' +
26
+ 'for the window descriptor:\n\n{errMessage}',
27
+ cannotFindSSLCertFile: 'Unable to find the "{path}" file, specified by the "{option}" ssl option. Error details:\n' +
28
+ '\n' +
29
+ '{err}',
30
+ cannotFindConfigurationFile: 'Unable to find the "{path}" configuration file. Error details:\n' +
31
+ '\n' +
32
+ '{err}',
33
+ problematicPathPatternPlaceholderForVideoRecording: 'The {placeholderList} path pattern placeholder{suffix} cannot be applied to the recorded video.\n' +
34
+ '\n' +
35
+ 'The placeholder{suffix} {verb} replaced with an empty string.',
36
+ clientScriptsWithEmptyContent: 'The client script you tried to inject is empty.',
37
+ clientScriptsWithDuplicatedContent: 'You injected the following client script{suffix} several times:\n{duplicatedScripts}',
38
+ assertedSelectorInstance: 'You passed a Selector object to \'t.expect()\'.\nIf you want to check that a matched element exists, pass the \'selector.exists\' value instead.',
39
+ assertedClientFunctionInstance: 'You passed a ClientFunction object to \'t.expect()\'.\nIf you want to check the function\'s return value, use parentheses to call the function: fnName().',
40
+ multipleWindowsFoundByPredicate: 'The predicate function passed to the \'switchToWindow\' method matched multiple windows. The first matching window was activated.',
41
+ excessiveAwaitInAssertion: 'You passed a DOM snapshot property to the assertion\'s \'t.expect()\' method. The property value is assigned when the snapshot is resolved and this value is no longer updated. To ensure that the assertion verifies an up-to-date value, pass the selector property without \'await\'.',
42
+ missingAwaitOnSnapshotProperty: 'You used a DOM snapshot property without \'await\'. The property value is assigned when the snapshot is resolved. If you need to use the property value, use \'await\' to resolve the Promise.',
43
+ retryTestPagesIsNotSupported: 'Cannot enable the \'retryTestPages\' option in "{browserAlias}". Please ensure that your version of "{browserAlias}" supports the Service Worker API (https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API).\n',
44
+ browserProviderDropOfPerformance: 'We detected \'{browserName}\' runs slowly. Try to free up or allocate more system resources on its host machine.',
45
+ testsCompilationTakesTooLong: 'Tests took too long to compile ({compileTime}). Ensure the test code has no excessive imports.',
46
+ deprecatedAPI: '{API} is deprecated and will be removed in the next major release. Use {replacement} instead.'
47
+ };
48
48
  module.exports = exports.default;
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FybmluZy1tZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWU7SUFDWCxtQkFBbUIsRUFBc0IseUxBQXlMO0lBQ2xPLGVBQWUsRUFBMEIsa0VBQWtFO0lBQzNHLHNCQUFzQixFQUFtQixrS0FBa0s7SUFDM00sK0JBQStCLEVBQVUsb0VBQW9FO0lBQzdHLHdCQUF3QixFQUFpQiw4VkFBOFY7SUFDdlksbUNBQW1DLEVBQU0sa05BQWtOO0lBQzNQLHVDQUF1QyxFQUFFLHlGQUF5RjtJQUNsSSwwQkFBMEIsRUFBZSxtRUFBbUU7SUFDNUcsb0JBQW9CLEVBQXFCLDhRQUE4UTtJQUN2VCxtQ0FBbUMsRUFBTSw0RkFBNEY7SUFDckkscUNBQXFDLEVBQUksa0dBQWtHO0lBQzNJLFdBQVcsRUFBOEIsa0VBQWtFO0lBQzNHLGFBQWEsRUFBNEIsb0VBQW9FO0lBQzdHLCtCQUErQixFQUFVLHNGQUFzRjtJQUMvSCxvQkFBb0IsRUFBcUIsb0NBQW9DO0lBQzdFLG9CQUFvQixFQUFxQiw2REFBNkQ7SUFDdEcscUJBQXFCLEVBQW9CLGlGQUFpRjtJQUMxSCwyQkFBMkIsRUFBYyxpRkFBaUY7SUFDMUgscUNBQXFDLEVBQUksZ0dBQWdHO0lBRXpJLCtCQUErQixFQUFFLDhDQUE4QztRQUM5QyxrRUFBa0U7UUFDbEUsNERBQTREO1FBQzVELDRDQUE0QztJQUU3RSxxQkFBcUIsRUFBRSw0RkFBNEY7UUFDNUYsSUFBSTtRQUNKLE9BQU87SUFFOUIsMkJBQTJCLEVBQUUsa0VBQWtFO1FBQ2xFLElBQUk7UUFDSixPQUFPO0lBRXBDLGtEQUFrRCxFQUFFLG1HQUFtRztRQUNuRyxJQUFJO1FBQ0osK0RBQStEO0lBRW5ILDZCQUE2QixFQUFPLGlEQUFpRDtJQUNyRixrQ0FBa0MsRUFBRSxzRkFBc0Y7SUFDMUgsd0JBQXdCLEVBQVksa0pBQWtKO0lBQ3RMLDhCQUE4QixFQUFNLDJKQUEySjtJQUMvTCwrQkFBK0IsRUFBSyxtSUFBbUk7SUFDdksseUJBQXlCLEVBQVcsMFJBQTBSO0lBQzlULDhCQUE4QixFQUFNLGdNQUFnTTtJQUNwTyw0QkFBNEIsRUFBUSwrTkFBK047SUFDblEsZ0NBQWdDLEVBQUksa0hBQWtIO0lBQ3RKLDRCQUE0QixFQUFRLGdHQUFnRztJQUNwSSxhQUFhLEVBQXVCLCtGQUErRjtDQUN0SSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICAgIHNjcmVlbnNob3RzRGlzYWJsZWQ6ICAgICAgICAgICAgICAgICAgICAgJ1NjcmVlbnNob3RzIGFyZSBkaXNhYmxlZC4gVG8gdGFrZSBzY3JlZW5zaG90cywgcmVtb3ZlIHRoZSBcIi0tZGlzYWJsZS1zY3JlZW5zaG90c1wiIGNvbW1hbmQgbGluZSBmbGFnIG9yIHNldCB0aGUgXCJkaXNhYmxlU2NyZWVuc2hvdHNcIiBvcHRpb24gdG8gXCJmYWxzZVwiIGluIHRoZSBBUEkgb3IgY29uZmlndXJhdGlvbiBmaWxlLicsXG4gICAgc2NyZWVuc2hvdEVycm9yOiAgICAgICAgICAgICAgICAgICAgICAgICAnV2FzIHVuYWJsZSB0byB0YWtlIGEgc2NyZWVuc2hvdCBkdWUgdG8gYW4gZXJyb3IuXFxuXFxue2Vyck1lc3NhZ2V9JyxcbiAgICBzY3JlZW5zaG90TWFya05vdEZvdW5kOiAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gbG9jYXRlIHRoZSBwYWdlIGFyZWEgaW4gdGhlIGJyb3dzZXIgd2luZG93IHNjcmVlbnNob3QgYXQge3NjcmVlbnNob3RQYXRofSwgYmVjYXVzZSB0aGUgcGFnZSBhcmVhIG1hcmsgd2l0aCBJRCB7bWFya0lkfSBpcyBub3QgZm91bmQgaW4gdGhlIHNjcmVlbnNob3QuJyxcbiAgICBzY3JlZW5zaG90c0Z1bGxQYWdlTm90U3VwcG9ydGVkOiAgICAgICAgICdUZXN0Q2FmZSBkb2VzIG5vdCBzdXBwb3J0IGZ1bGwtcGFnZSBzY3JlZW5zaG90cyBpbiB7YnJvd3NlckFsaWFzfS4nLFxuICAgIHNjcmVlbnNob3RSZXdyaXRpbmdFcnJvcjogICAgICAgICAgICAgICAgJ1RoZSBmaWxlIGF0IFwie3NjcmVlbnNob3RQYXRofVwiIGFscmVhZHkgZXhpc3RzLiBJdCBoYXMganVzdCBiZWVuIHJld3JpdHRlbiB3aXRoIGEgcmVjZW50IHNjcmVlbnNob3QuIFRoaXMgc2l0dWF0aW9uIGNhbiBwb3NzaWJseSBjYXVzZSBpc3N1ZXMuIFRvIGF2b2lkIHRoZW0sIG1ha2Ugc3VyZSB0aGF0IGVhY2ggc2NyZWVuc2hvdCBoYXMgYSB1bmlxdWUgcGF0aC4gSWYgYSB0ZXN0IHJ1bnMgaW4gbXVsdGlwbGUgYnJvd3NlcnMsIGNvbnNpZGVyIGluY2x1ZGluZyB0aGUgdXNlciBhZ2VudCBpbiB0aGUgc2NyZWVuc2hvdCBwYXRoIG9yIGdlbmVyYXRlIGEgdW5pcXVlIGlkZW50aWZpZXIgaW4gYW5vdGhlciB3YXkuJyxcbiAgICBicm93c2VyTWFuaXB1bGF0aW9uc09uUmVtb3RlQnJvd3NlcjogICAgICdUaGUgc2NyZWVuc2hvdCBhbmQgd2luZG93IHJlc2l6ZSBmdW5jdGlvbmFsaXRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gYSByZW1vdGUgYnJvd3Nlci4gVGhleSBjYW4gZnVuY3Rpb24gb25seSBpZiB0aGUgYnJvd3NlciBpcyBydW5uaW5nIG9uIHRoZSBzYW1lIG1hY2hpbmUgYW5kIGluIHRoZSBzYW1lIGVudmlyb25tZW50IGFzIHRoZSBUZXN0Q2FmZSBzZXJ2ZXIuJyxcbiAgICBzY3JlZW5zaG90Tm90U3VwcG9ydGVkQnlCcm93c2VyUHJvdmlkZXI6ICdUaGUgc2NyZWVuc2hvdCBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFwie3Byb3ZpZGVyTmFtZX1cIiBicm93c2VyIHByb3ZpZGVyLicsXG4gICAgdmlkZW9Ob3RTdXBwb3J0ZWRCeUJyb3dzZXI6ICAgICAgICAgICAgICAnVmlkZW8gcmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFwie2Jyb3dzZXJBbGlhc31cIiBicm93c2VyLicsXG4gICAgdmlkZW9Ccm93c2VyUmVzaXppbmc6ICAgICAgICAgICAgICAgICAgICAnVGhlIGJyb3dzZXIgd2luZG93IHdhcyByZXNpemVkIGR1cmluZyB0aGUgXCJ7dGVzdE5hbWV9XCIgdGVzdCB3aGlsZSBUZXN0Q2FmZSByZWNvcmRlZCBhIHZpZGVvLiBUZXN0Q2FmZSBjYW5ub3QgYWRqdXN0IHRoZSB2aWRlbyByZXNvbHV0aW9uIGR1cmluZyByZWNvcmRpbmcuIEFzIGEgcmVzdWx0LCB0aGUgdmlkZW8gY29udGVudCBtYXkgYXBwZWFyIGJyb2tlbi4gRG8gbm90IHJlc2l6ZSB0aGUgYnJvd3NlciB3aW5kb3cgd2hlbiBUZXN0Q2FmZSByZWNvcmRzIGEgdmlkZW8uJyxcbiAgICByZXNpemVOb3RTdXBwb3J0ZWRCeUJyb3dzZXJQcm92aWRlcjogICAgICdUaGUgd2luZG93IHJlc2l6ZSBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFwie3Byb3ZpZGVyTmFtZX1cIiBicm93c2VyIHByb3ZpZGVyLicsXG4gICAgbWF4aW1pemVOb3RTdXBwb3J0ZWRCeUJyb3dzZXJQcm92aWRlcjogICAnVGhlIHdpbmRvdyBtYXhpbWl6YXRpb24gZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBcIntwcm92aWRlck5hbWV9XCIgYnJvd3NlciBwcm92aWRlci4nLFxuICAgIHJlc2l6ZUVycm9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dhcyB1bmFibGUgdG8gcmVzaXplIHRoZSB3aW5kb3cgZHVlIHRvIGFuIGVycm9yLlxcblxcbntlcnJNZXNzYWdlfScsXG4gICAgbWF4aW1pemVFcnJvcjogICAgICAgICAgICAgICAgICAgICAgICAgICAnV2FzIHVuYWJsZSB0byBtYXhpbWl6ZSB0aGUgd2luZG93IGR1ZSB0byBhbiBlcnJvci5cXG5cXG57ZXJyTWVzc2FnZX0nLFxuICAgIHJlcXVlc3RNb2NrQ09SU1ZhbGlkYXRpb25GYWlsZWQ6ICAgICAgICAgJ3tSZXF1ZXN0SG9va306IENPUlMgdmFsaWRhdGlvbiBmYWlsZWQgZm9yIGEgcmVxdWVzdCBzcGVjaWZpZWQgYXMge3JlcXVlc3RGaWx0ZXJSdWxlfScsXG4gICAgZGVidWdJbkhlYWRsZXNzRXJyb3I6ICAgICAgICAgICAgICAgICAgICAnWW91IGNhbm5vdCBkZWJ1ZyBpbiBoZWFkbGVzcyBtb2RlLicsXG4gICAgY2Fubm90UmVhZENvbmZpZ0ZpbGU6ICAgICAgICAgICAgICAgICAgICAnQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4nLFxuICAgIGNhbm5vdFBhcnNlQ29uZmlnRmlsZTogICAgICAgICAgICAgICAgICAgXCJGYWlsZWQgdG8gcGFyc2UgdGhlICd7cGF0aH0nIGZpbGUuXFxuXFxuVGhpcyBmaWxlIGlzIG5vdCBhIHdlbGwtZm9ybWVkIEpTT04gZmlsZS5cIixcbiAgICBjb25maWdPcHRpb25zV2VyZU92ZXJyaWRkZW46ICAgICAgICAgICAgICdUaGUge29wdGlvbnNTdHJpbmd9IG9wdGlvbntzdWZmaXh9IGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB3aWxsIGJlIGlnbm9yZWQuJyxcbiAgICBjYW5ub3RPdmVycmlkZVR5cGVTY3JpcHRDb25maWdPcHRpb25zOiAgICdZb3UgY2Fubm90IG92ZXJyaWRlIHRoZSBcIntvcHRpb25OYW1lfVwiIGNvbXBpbGVyIG9wdGlvbiBpbiB0aGUgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUuXFxuJyxcblxuICAgIGNhbm5vdEZpbmRXaW5kb3dEZXNjcmlwdG9yRXJyb3I6ICdDb3VsZCBub3QgZmluZCB0aGUgXCJ7YnJvd3NlckFsaWFzfVwiIHdpbmRvdy4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3RDYWZlIGlzIHVuYWJsZSB0byByZXNpemUgdGhlIHdpbmRvdyBvciB0YWtlIHNjcmVlbnNob3RzLlxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgZm9sbG93aW5nIGVycm9yIG9jY3VycmVkIHdoaWxlIFRlc3RDYWZlIHdhcyBzZWFyY2hpbmcgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB0aGUgd2luZG93IGRlc2NyaXB0b3I6XFxuXFxue2Vyck1lc3NhZ2V9JyxcblxuICAgIGNhbm5vdEZpbmRTU0xDZXJ0RmlsZTogJ1VuYWJsZSB0byBmaW5kIHRoZSBcIntwYXRofVwiIGZpbGUsIHNwZWNpZmllZCBieSB0aGUgXCJ7b3B0aW9ufVwiIHNzbCBvcHRpb24uIEVycm9yIGRldGFpbHM6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAne2Vycn0nLFxuXG4gICAgY2Fubm90RmluZENvbmZpZ3VyYXRpb25GaWxlOiAnVW5hYmxlIHRvIGZpbmQgdGhlIFwie3BhdGh9XCIgY29uZmlndXJhdGlvbiBmaWxlLiBFcnJvciBkZXRhaWxzOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tlcnJ9JyxcblxuICAgIHByb2JsZW1hdGljUGF0aFBhdHRlcm5QbGFjZWhvbGRlckZvclZpZGVvUmVjb3JkaW5nOiAnVGhlIHtwbGFjZWhvbGRlckxpc3R9IHBhdGggcGF0dGVybiBwbGFjZWhvbGRlcntzdWZmaXh9IGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSByZWNvcmRlZCB2aWRlby5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHBsYWNlaG9sZGVye3N1ZmZpeH0ge3ZlcmJ9IHJlcGxhY2VkIHdpdGggYW4gZW1wdHkgc3RyaW5nLicsXG5cbiAgICBjbGllbnRTY3JpcHRzV2l0aEVtcHR5Q29udGVudDogICAgICAnVGhlIGNsaWVudCBzY3JpcHQgeW91IHRyaWVkIHRvIGluamVjdCBpcyBlbXB0eS4nLFxuICAgIGNsaWVudFNjcmlwdHNXaXRoRHVwbGljYXRlZENvbnRlbnQ6ICdZb3UgaW5qZWN0ZWQgdGhlIGZvbGxvd2luZyBjbGllbnQgc2NyaXB0e3N1ZmZpeH0gc2V2ZXJhbCB0aW1lczpcXG57ZHVwbGljYXRlZFNjcmlwdHN9JyxcbiAgICBhc3NlcnRlZFNlbGVjdG9ySW5zdGFuY2U6ICAgICAgICAgICAnWW91IHBhc3NlZCBhIFNlbGVjdG9yIG9iamVjdCB0byBcXCd0LmV4cGVjdCgpXFwnLlxcbklmIHlvdSB3YW50IHRvIGNoZWNrIHRoYXQgYSBtYXRjaGVkIGVsZW1lbnQgZXhpc3RzLCBwYXNzIHRoZSBcXCdzZWxlY3Rvci5leGlzdHNcXCcgdmFsdWUgaW5zdGVhZC4nLFxuICAgIGFzc2VydGVkQ2xpZW50RnVuY3Rpb25JbnN0YW5jZTogICAgICdZb3UgcGFzc2VkIGEgQ2xpZW50RnVuY3Rpb24gb2JqZWN0IHRvIFxcJ3QuZXhwZWN0KClcXCcuXFxuSWYgeW91IHdhbnQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uXFwncyByZXR1cm4gdmFsdWUsIHVzZSBwYXJlbnRoZXNlcyB0byBjYWxsIHRoZSBmdW5jdGlvbjogZm5OYW1lKCkuJyxcbiAgICBtdWx0aXBsZVdpbmRvd3NGb3VuZEJ5UHJlZGljYXRlOiAgICAnVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiBwYXNzZWQgdG8gdGhlIFxcJ3N3aXRjaFRvV2luZG93XFwnIG1ldGhvZCBtYXRjaGVkIG11bHRpcGxlIHdpbmRvd3MuIFRoZSBmaXJzdCBtYXRjaGluZyB3aW5kb3cgd2FzIGFjdGl2YXRlZC4nLFxuICAgIGV4Y2Vzc2l2ZUF3YWl0SW5Bc3NlcnRpb246ICAgICAgICAgICdZb3UgcGFzc2VkIGEgRE9NIHNuYXBzaG90IHByb3BlcnR5IHRvIHRoZSBhc3NlcnRpb25cXCdzIFxcJ3QuZXhwZWN0KClcXCcgbWV0aG9kLiBUaGUgcHJvcGVydHkgdmFsdWUgaXMgYXNzaWduZWQgd2hlbiB0aGUgc25hcHNob3QgaXMgcmVzb2x2ZWQgYW5kIHRoaXMgdmFsdWUgaXMgbm8gbG9uZ2VyIHVwZGF0ZWQuIFRvIGVuc3VyZSB0aGF0IHRoZSBhc3NlcnRpb24gdmVyaWZpZXMgYW4gdXAtdG8tZGF0ZSB2YWx1ZSwgcGFzcyB0aGUgc2VsZWN0b3IgcHJvcGVydHkgd2l0aG91dCBcXCdhd2FpdFxcJy4nLFxuICAgIG1pc3NpbmdBd2FpdE9uU25hcHNob3RQcm9wZXJ0eTogICAgICdZb3UgdXNlZCBhIERPTSBzbmFwc2hvdCBwcm9wZXJ0eSB3aXRob3V0IFxcJ2F3YWl0XFwnLiBUaGUgcHJvcGVydHkgdmFsdWUgaXMgYXNzaWduZWQgd2hlbiB0aGUgc25hcHNob3QgaXMgcmVzb2x2ZWQuIElmIHlvdSBuZWVkIHRvIHVzZSB0aGUgcHJvcGVydHkgdmFsdWUsIHVzZSBcXCdhd2FpdFxcJyB0byByZXNvbHZlIHRoZSBQcm9taXNlLicsXG4gICAgcmV0cnlUZXN0UGFnZXNJc05vdFN1cHBvcnRlZDogICAgICAgJ0Nhbm5vdCBlbmFibGUgdGhlIFxcJ3JldHJ5VGVzdFBhZ2VzXFwnIG9wdGlvbiBpbiBcInticm93c2VyQWxpYXN9XCIuIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIHZlcnNpb24gb2YgXCJ7YnJvd3NlckFsaWFzfVwiIHN1cHBvcnRzIHRoZSBTZXJ2aWNlIFdvcmtlciBBUEkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2aWNlX1dvcmtlcl9BUEkpLlxcbicsXG4gICAgYnJvd3NlclByb3ZpZGVyRHJvcE9mUGVyZm9ybWFuY2U6ICAgJ1dlIGRldGVjdGVkIFxcJ3ticm93c2VyTmFtZX1cXCcgcnVucyBzbG93bHkuIFRyeSB0byBmcmVlIHVwIG9yIGFsbG9jYXRlIG1vcmUgc3lzdGVtIHJlc291cmNlcyBvbiBpdHMgaG9zdCBtYWNoaW5lLicsXG4gICAgdGVzdHNDb21waWxhdGlvblRha2VzVG9vTG9uZzogICAgICAgJ1Rlc3RzIHRvb2sgdG9vIGxvbmcgdG8gY29tcGlsZSAoe2NvbXBpbGVUaW1lfSkuIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGhhcyBubyBleGNlc3NpdmUgaW1wb3J0cy4nLFxuICAgIGRlcHJlY2F0ZWRBUEk6ICAgICAgICAgICAgICAgICAgICAgICd7QVBJfSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gVXNlIHtyZXBsYWNlbWVudH0gaW5zdGVhZC4nXG59O1xuXG4iXX0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FybmluZy1tZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWU7SUFDWCxtQkFBbUIsRUFBc0IseUxBQXlMO0lBQ2xPLGVBQWUsRUFBMEIsa0VBQWtFO0lBQzNHLHNCQUFzQixFQUFtQixrS0FBa0s7SUFDM00sK0JBQStCLEVBQVUsb0VBQW9FO0lBQzdHLHdCQUF3QixFQUFpQiw4VkFBOFY7SUFDdlksbUNBQW1DLEVBQU0sa05BQWtOO0lBQzNQLHVDQUF1QyxFQUFFLHlGQUF5RjtJQUNsSSwwQkFBMEIsRUFBZSxtRUFBbUU7SUFDNUcsb0JBQW9CLEVBQXFCLDhRQUE4UTtJQUN2VCxtQ0FBbUMsRUFBTSw0RkFBNEY7SUFDckkscUNBQXFDLEVBQUksa0dBQWtHO0lBQzNJLFdBQVcsRUFBOEIsa0VBQWtFO0lBQzNHLGFBQWEsRUFBNEIsb0VBQW9FO0lBQzdHLCtCQUErQixFQUFVLHNGQUFzRjtJQUMvSCxvQkFBb0IsRUFBcUIsb0NBQW9DO0lBQzdFLG9CQUFvQixFQUFxQiw2REFBNkQ7SUFDdEcscUJBQXFCLEVBQW9CLGlGQUFpRjtJQUMxSCwyQkFBMkIsRUFBYyxpRkFBaUY7SUFDMUgscUNBQXFDLEVBQUksZ0dBQWdHO0lBRXpJLCtCQUErQixFQUFFLDhDQUE4QztRQUM5QyxrRUFBa0U7UUFDbEUsNERBQTREO1FBQzVELDRDQUE0QztJQUU3RSxxQkFBcUIsRUFBRSw0RkFBNEY7UUFDNUYsSUFBSTtRQUNKLE9BQU87SUFFOUIsMkJBQTJCLEVBQUUsa0VBQWtFO1FBQ2xFLElBQUk7UUFDSixPQUFPO0lBRXBDLGtEQUFrRCxFQUFFLG1HQUFtRztRQUNuRyxJQUFJO1FBQ0osK0RBQStEO0lBRW5ILDZCQUE2QixFQUFPLGlEQUFpRDtJQUNyRixrQ0FBa0MsRUFBRSxzRkFBc0Y7SUFDMUgsd0JBQXdCLEVBQVksa0pBQWtKO0lBQ3RMLDhCQUE4QixFQUFNLDJKQUEySjtJQUMvTCwrQkFBK0IsRUFBSyxtSUFBbUk7SUFDdksseUJBQXlCLEVBQVcsMFJBQTBSO0lBQzlULDhCQUE4QixFQUFNLGdNQUFnTTtJQUNwTyw0QkFBNEIsRUFBUSwrTkFBK047SUFDblEsZ0NBQWdDLEVBQUksa0hBQWtIO0lBQ3RKLDRCQUE0QixFQUFRLGdHQUFnRztJQUNwSSxhQUFhLEVBQXVCLCtGQUErRjtDQUN0SSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICAgIHNjcmVlbnNob3RzRGlzYWJsZWQ6ICAgICAgICAgICAgICAgICAgICAgJ1NjcmVlbnNob3RzIGFyZSBkaXNhYmxlZC4gVG8gdGFrZSBzY3JlZW5zaG90cywgcmVtb3ZlIHRoZSBcIi0tZGlzYWJsZS1zY3JlZW5zaG90c1wiIGNvbW1hbmQgbGluZSBmbGFnIG9yIHNldCB0aGUgXCJkaXNhYmxlU2NyZWVuc2hvdHNcIiBvcHRpb24gdG8gXCJmYWxzZVwiIGluIHRoZSBBUEkgb3IgY29uZmlndXJhdGlvbiBmaWxlLicsXG4gICAgc2NyZWVuc2hvdEVycm9yOiAgICAgICAgICAgICAgICAgICAgICAgICAnV2FzIHVuYWJsZSB0byB0YWtlIGEgc2NyZWVuc2hvdCBkdWUgdG8gYW4gZXJyb3IuXFxuXFxue2Vyck1lc3NhZ2V9JyxcbiAgICBzY3JlZW5zaG90TWFya05vdEZvdW5kOiAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gbG9jYXRlIHRoZSBwYWdlIGFyZWEgaW4gdGhlIGJyb3dzZXIgd2luZG93IHNjcmVlbnNob3QgYXQge3NjcmVlbnNob3RQYXRofSwgYmVjYXVzZSB0aGUgcGFnZSBhcmVhIG1hcmsgd2l0aCBJRCB7bWFya0lkfSBpcyBub3QgZm91bmQgaW4gdGhlIHNjcmVlbnNob3QuJyxcbiAgICBzY3JlZW5zaG90c0Z1bGxQYWdlTm90U3VwcG9ydGVkOiAgICAgICAgICdUZXN0Q2FmZSBkb2VzIG5vdCBzdXBwb3J0IGZ1bGwtcGFnZSBzY3JlZW5zaG90cyBpbiB7YnJvd3NlckFsaWFzfS4nLFxuICAgIHNjcmVlbnNob3RSZXdyaXRpbmdFcnJvcjogICAgICAgICAgICAgICAgJ1RoZSBmaWxlIGF0IFwie3NjcmVlbnNob3RQYXRofVwiIGFscmVhZHkgZXhpc3RzLiBJdCBoYXMganVzdCBiZWVuIHJld3JpdHRlbiB3aXRoIGEgcmVjZW50IHNjcmVlbnNob3QuIFRoaXMgc2l0dWF0aW9uIGNhbiBwb3NzaWJseSBjYXVzZSBpc3N1ZXMuIFRvIGF2b2lkIHRoZW0sIG1ha2Ugc3VyZSB0aGF0IGVhY2ggc2NyZWVuc2hvdCBoYXMgYSB1bmlxdWUgcGF0aC4gSWYgYSB0ZXN0IHJ1bnMgaW4gbXVsdGlwbGUgYnJvd3NlcnMsIGNvbnNpZGVyIGluY2x1ZGluZyB0aGUgdXNlciBhZ2VudCBpbiB0aGUgc2NyZWVuc2hvdCBwYXRoIG9yIGdlbmVyYXRlIGEgdW5pcXVlIGlkZW50aWZpZXIgaW4gYW5vdGhlciB3YXkuJyxcbiAgICBicm93c2VyTWFuaXB1bGF0aW9uc09uUmVtb3RlQnJvd3NlcjogICAgICdUaGUgc2NyZWVuc2hvdCBhbmQgd2luZG93IHJlc2l6ZSBmdW5jdGlvbmFsaXRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gYSByZW1vdGUgYnJvd3Nlci4gVGhleSBjYW4gZnVuY3Rpb24gb25seSBpZiB0aGUgYnJvd3NlciBpcyBydW5uaW5nIG9uIHRoZSBzYW1lIG1hY2hpbmUgYW5kIGluIHRoZSBzYW1lIGVudmlyb25tZW50IGFzIHRoZSBUZXN0Q2FmZSBzZXJ2ZXIuJyxcbiAgICBzY3JlZW5zaG90Tm90U3VwcG9ydGVkQnlCcm93c2VyUHJvdmlkZXI6ICdUaGUgc2NyZWVuc2hvdCBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFwie3Byb3ZpZGVyTmFtZX1cIiBicm93c2VyIHByb3ZpZGVyLicsXG4gICAgdmlkZW9Ob3RTdXBwb3J0ZWRCeUJyb3dzZXI6ICAgICAgICAgICAgICAnVmlkZW8gcmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFwie2Jyb3dzZXJBbGlhc31cIiBicm93c2VyLicsXG4gICAgdmlkZW9Ccm93c2VyUmVzaXppbmc6ICAgICAgICAgICAgICAgICAgICAnVGhlIGJyb3dzZXIgd2luZG93IHdhcyByZXNpemVkIGR1cmluZyB0aGUgXCJ7dGVzdE5hbWV9XCIgdGVzdCB3aGlsZSBUZXN0Q2FmZSByZWNvcmRlZCBhIHZpZGVvLiBUZXN0Q2FmZSBjYW5ub3QgYWRqdXN0IHRoZSB2aWRlbyByZXNvbHV0aW9uIGR1cmluZyByZWNvcmRpbmcuIEFzIGEgcmVzdWx0LCB0aGUgdmlkZW8gY29udGVudCBtYXkgYXBwZWFyIGJyb2tlbi4gRG8gbm90IHJlc2l6ZSB0aGUgYnJvd3NlciB3aW5kb3cgd2hlbiBUZXN0Q2FmZSByZWNvcmRzIGEgdmlkZW8uJyxcbiAgICByZXNpemVOb3RTdXBwb3J0ZWRCeUJyb3dzZXJQcm92aWRlcjogICAgICdUaGUgd2luZG93IHJlc2l6ZSBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFwie3Byb3ZpZGVyTmFtZX1cIiBicm93c2VyIHByb3ZpZGVyLicsXG4gICAgbWF4aW1pemVOb3RTdXBwb3J0ZWRCeUJyb3dzZXJQcm92aWRlcjogICAnVGhlIHdpbmRvdyBtYXhpbWl6YXRpb24gZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBcIntwcm92aWRlck5hbWV9XCIgYnJvd3NlciBwcm92aWRlci4nLFxuICAgIHJlc2l6ZUVycm9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dhcyB1bmFibGUgdG8gcmVzaXplIHRoZSB3aW5kb3cgZHVlIHRvIGFuIGVycm9yLlxcblxcbntlcnJNZXNzYWdlfScsXG4gICAgbWF4aW1pemVFcnJvcjogICAgICAgICAgICAgICAgICAgICAgICAgICAnV2FzIHVuYWJsZSB0byBtYXhpbWl6ZSB0aGUgd2luZG93IGR1ZSB0byBhbiBlcnJvci5cXG5cXG57ZXJyTWVzc2FnZX0nLFxuICAgIHJlcXVlc3RNb2NrQ09SU1ZhbGlkYXRpb25GYWlsZWQ6ICAgICAgICAgJ3tSZXF1ZXN0SG9va306IENPUlMgdmFsaWRhdGlvbiBmYWlsZWQgZm9yIGEgcmVxdWVzdCBzcGVjaWZpZWQgYXMge3JlcXVlc3RGaWx0ZXJSdWxlfScsXG4gICAgZGVidWdJbkhlYWRsZXNzRXJyb3I6ICAgICAgICAgICAgICAgICAgICAnWW91IGNhbm5vdCBkZWJ1ZyBpbiBoZWFkbGVzcyBtb2RlLicsXG4gICAgY2Fubm90UmVhZENvbmZpZ0ZpbGU6ICAgICAgICAgICAgICAgICAgICAnQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4nLFxuICAgIGNhbm5vdFBhcnNlQ29uZmlnRmlsZTogICAgICAgICAgICAgICAgICAgXCJGYWlsZWQgdG8gcGFyc2UgdGhlICd7cGF0aH0nIGZpbGUuXFxuXFxuVGhpcyBmaWxlIGlzIG5vdCBhIHdlbGwtZm9ybWVkIEpTT04gZmlsZS5cIixcbiAgICBjb25maWdPcHRpb25zV2VyZU92ZXJyaWRkZW46ICAgICAgICAgICAgICdUaGUge29wdGlvbnNTdHJpbmd9IG9wdGlvbntzdWZmaXh9IGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB3aWxsIGJlIGlnbm9yZWQuJyxcbiAgICBjYW5ub3RPdmVycmlkZVR5cGVTY3JpcHRDb25maWdPcHRpb25zOiAgICdZb3UgY2Fubm90IG92ZXJyaWRlIHRoZSBcIntvcHRpb25OYW1lfVwiIGNvbXBpbGVyIG9wdGlvbiBpbiB0aGUgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUuXFxuJyxcblxuICAgIGNhbm5vdEZpbmRXaW5kb3dEZXNjcmlwdG9yRXJyb3I6ICdDb3VsZCBub3QgZmluZCB0aGUgXCJ7YnJvd3NlckFsaWFzfVwiIHdpbmRvdy4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3RDYWZlIGlzIHVuYWJsZSB0byByZXNpemUgdGhlIHdpbmRvdyBvciB0YWtlIHNjcmVlbnNob3RzLlxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgZm9sbG93aW5nIGVycm9yIG9jY3VycmVkIHdoaWxlIFRlc3RDYWZlIHdhcyBzZWFyY2hpbmcgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB0aGUgd2luZG93IGRlc2NyaXB0b3I6XFxuXFxue2Vyck1lc3NhZ2V9JyxcblxuICAgIGNhbm5vdEZpbmRTU0xDZXJ0RmlsZTogJ1VuYWJsZSB0byBmaW5kIHRoZSBcIntwYXRofVwiIGZpbGUsIHNwZWNpZmllZCBieSB0aGUgXCJ7b3B0aW9ufVwiIHNzbCBvcHRpb24uIEVycm9yIGRldGFpbHM6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAne2Vycn0nLFxuXG4gICAgY2Fubm90RmluZENvbmZpZ3VyYXRpb25GaWxlOiAnVW5hYmxlIHRvIGZpbmQgdGhlIFwie3BhdGh9XCIgY29uZmlndXJhdGlvbiBmaWxlLiBFcnJvciBkZXRhaWxzOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tlcnJ9JyxcblxuICAgIHByb2JsZW1hdGljUGF0aFBhdHRlcm5QbGFjZWhvbGRlckZvclZpZGVvUmVjb3JkaW5nOiAnVGhlIHtwbGFjZWhvbGRlckxpc3R9IHBhdGggcGF0dGVybiBwbGFjZWhvbGRlcntzdWZmaXh9IGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSByZWNvcmRlZCB2aWRlby5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHBsYWNlaG9sZGVye3N1ZmZpeH0ge3ZlcmJ9IHJlcGxhY2VkIHdpdGggYW4gZW1wdHkgc3RyaW5nLicsXG5cbiAgICBjbGllbnRTY3JpcHRzV2l0aEVtcHR5Q29udGVudDogICAgICAnVGhlIGNsaWVudCBzY3JpcHQgeW91IHRyaWVkIHRvIGluamVjdCBpcyBlbXB0eS4nLFxuICAgIGNsaWVudFNjcmlwdHNXaXRoRHVwbGljYXRlZENvbnRlbnQ6ICdZb3UgaW5qZWN0ZWQgdGhlIGZvbGxvd2luZyBjbGllbnQgc2NyaXB0e3N1ZmZpeH0gc2V2ZXJhbCB0aW1lczpcXG57ZHVwbGljYXRlZFNjcmlwdHN9JyxcbiAgICBhc3NlcnRlZFNlbGVjdG9ySW5zdGFuY2U6ICAgICAgICAgICAnWW91IHBhc3NlZCBhIFNlbGVjdG9yIG9iamVjdCB0byBcXCd0LmV4cGVjdCgpXFwnLlxcbklmIHlvdSB3YW50IHRvIGNoZWNrIHRoYXQgYSBtYXRjaGVkIGVsZW1lbnQgZXhpc3RzLCBwYXNzIHRoZSBcXCdzZWxlY3Rvci5leGlzdHNcXCcgdmFsdWUgaW5zdGVhZC4nLFxuICAgIGFzc2VydGVkQ2xpZW50RnVuY3Rpb25JbnN0YW5jZTogICAgICdZb3UgcGFzc2VkIGEgQ2xpZW50RnVuY3Rpb24gb2JqZWN0IHRvIFxcJ3QuZXhwZWN0KClcXCcuXFxuSWYgeW91IHdhbnQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uXFwncyByZXR1cm4gdmFsdWUsIHVzZSBwYXJlbnRoZXNlcyB0byBjYWxsIHRoZSBmdW5jdGlvbjogZm5OYW1lKCkuJyxcbiAgICBtdWx0aXBsZVdpbmRvd3NGb3VuZEJ5UHJlZGljYXRlOiAgICAnVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiBwYXNzZWQgdG8gdGhlIFxcJ3N3aXRjaFRvV2luZG93XFwnIG1ldGhvZCBtYXRjaGVkIG11bHRpcGxlIHdpbmRvd3MuIFRoZSBmaXJzdCBtYXRjaGluZyB3aW5kb3cgd2FzIGFjdGl2YXRlZC4nLFxuICAgIGV4Y2Vzc2l2ZUF3YWl0SW5Bc3NlcnRpb246ICAgICAgICAgICdZb3UgcGFzc2VkIGEgRE9NIHNuYXBzaG90IHByb3BlcnR5IHRvIHRoZSBhc3NlcnRpb25cXCdzIFxcJ3QuZXhwZWN0KClcXCcgbWV0aG9kLiBUaGUgcHJvcGVydHkgdmFsdWUgaXMgYXNzaWduZWQgd2hlbiB0aGUgc25hcHNob3QgaXMgcmVzb2x2ZWQgYW5kIHRoaXMgdmFsdWUgaXMgbm8gbG9uZ2VyIHVwZGF0ZWQuIFRvIGVuc3VyZSB0aGF0IHRoZSBhc3NlcnRpb24gdmVyaWZpZXMgYW4gdXAtdG8tZGF0ZSB2YWx1ZSwgcGFzcyB0aGUgc2VsZWN0b3IgcHJvcGVydHkgd2l0aG91dCBcXCdhd2FpdFxcJy4nLFxuICAgIG1pc3NpbmdBd2FpdE9uU25hcHNob3RQcm9wZXJ0eTogICAgICdZb3UgdXNlZCBhIERPTSBzbmFwc2hvdCBwcm9wZXJ0eSB3aXRob3V0IFxcJ2F3YWl0XFwnLiBUaGUgcHJvcGVydHkgdmFsdWUgaXMgYXNzaWduZWQgd2hlbiB0aGUgc25hcHNob3QgaXMgcmVzb2x2ZWQuIElmIHlvdSBuZWVkIHRvIHVzZSB0aGUgcHJvcGVydHkgdmFsdWUsIHVzZSBcXCdhd2FpdFxcJyB0byByZXNvbHZlIHRoZSBQcm9taXNlLicsXG4gICAgcmV0cnlUZXN0UGFnZXNJc05vdFN1cHBvcnRlZDogICAgICAgJ0Nhbm5vdCBlbmFibGUgdGhlIFxcJ3JldHJ5VGVzdFBhZ2VzXFwnIG9wdGlvbiBpbiBcInticm93c2VyQWxpYXN9XCIuIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIHZlcnNpb24gb2YgXCJ7YnJvd3NlckFsaWFzfVwiIHN1cHBvcnRzIHRoZSBTZXJ2aWNlIFdvcmtlciBBUEkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2aWNlX1dvcmtlcl9BUEkpLlxcbicsXG4gICAgYnJvd3NlclByb3ZpZGVyRHJvcE9mUGVyZm9ybWFuY2U6ICAgJ1dlIGRldGVjdGVkIFxcJ3ticm93c2VyTmFtZX1cXCcgcnVucyBzbG93bHkuIFRyeSB0byBmcmVlIHVwIG9yIGFsbG9jYXRlIG1vcmUgc3lzdGVtIHJlc291cmNlcyBvbiBpdHMgaG9zdCBtYWNoaW5lLicsXG4gICAgdGVzdHNDb21waWxhdGlvblRha2VzVG9vTG9uZzogICAgICAgJ1Rlc3RzIHRvb2sgdG9vIGxvbmcgdG8gY29tcGlsZSAoe2NvbXBpbGVUaW1lfSkuIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGhhcyBubyBleGNlc3NpdmUgaW1wb3J0cy4nLFxuICAgIGRlcHJlY2F0ZWRBUEk6ICAgICAgICAgICAgICAgICAgICAgICd7QVBJfSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gVXNlIHtyZXBsYWNlbWVudH0gaW5zdGVhZC4nXG59O1xuXG4iXX0=