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,169 +1,169 @@
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 lodash_1 = require("lodash");
7
- const test_run_controller_1 = __importDefault(require("./test-run-controller"));
8
- const controller_1 = __importDefault(require("./controller"));
9
- const runner_1 = __importDefault(require("../runner"));
10
- const bootstrapper_1 = __importDefault(require("./bootstrapper"));
11
- const parse_file_list_1 = __importDefault(require("../utils/parse-file-list"));
12
- const runtime_1 = require("../errors/runtime");
13
- const types_1 = require("../errors/types");
14
- class LiveModeRunner extends runner_1.default {
15
- constructor(proxy, browserConnectionGateway, options) {
16
- super(proxy, browserConnectionGateway, options);
17
- this.stopping = false;
18
- this.runnerTaskPromise = null;
19
- this.stopInfiniteWaiting = lodash_1.noop;
20
- this.rejectInfiniteWaiting = lodash_1.noop;
21
- this.assets = null;
22
- this.testRunController = new test_run_controller_1.default();
23
- this.controller = this._createController();
24
- this.embeddingOptions({
25
- TestRunCtor: this.testRunController.TestRunCtor,
26
- assets: []
27
- });
28
- this.controller = this._createController();
29
- this.configurationCache = null;
30
- }
31
- runTests(isFirstRun = false) {
32
- let runError = null;
33
- return this._finishPreviousTestRuns()
34
- .then(() => {
35
- return this._validateRunnableConfiguration(isFirstRun);
36
- })
37
- .then(() => {
38
- const expectedTestCount = this.configurationCache.tests.length;
39
- this.testRunController.setExpectedTestCount(expectedTestCount);
40
- })
41
- .then(() => {
42
- this.runnerTaskPromise = super.run(this.opts);
43
- return this.runnerTaskPromise;
44
- })
45
- .catch(err => {
46
- this.setBootstrappingError(null);
47
- runError = err;
48
- })
49
- .then(() => {
50
- this.runnerTaskPromise = null;
51
- this.controller.onTestRunDone(runError);
52
- });
53
- }
54
- _validateRunOptions() {
55
- return super._validateRunOptions()
56
- .catch(err => {
57
- this.rejectInfiniteWaiting(err);
58
- });
59
- }
60
- _createRunnableConfiguration() {
61
- if (this.configurationCache)
62
- return Promise.resolve(this.configurationCache);
63
- return super._createRunnableConfiguration()
64
- .then(configuration => {
65
- this.configurationCache = configuration;
66
- return configuration;
67
- })
68
- .catch(err => {
69
- this.rejectInfiniteWaiting(err);
70
- });
71
- }
72
- setBootstrappingError(err) {
73
- this.bootstrappingError = err;
74
- }
75
- run(options) {
76
- this.configurationCache = null;
77
- if (this._running)
78
- throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotRunLiveModeRunnerMultipleTimes);
79
- this._running = this._waitUntilExit()
80
- .then(() => {
81
- return this._dispose();
82
- })
83
- .then(() => {
84
- delete this._running;
85
- });
86
- this.opts = Object.assign({}, this.opts, options);
87
- this._setBootstrapperOptions();
88
- const fileListPromise = parse_file_list_1.default(this.bootstrapper.sources, process.cwd());
89
- fileListPromise
90
- .then(files => {
91
- return this.controller.init(files);
92
- })
93
- .then(() => this._createRunnableConfiguration())
94
- .then(() => this.runTests(true));
95
- return this._running;
96
- }
97
- suspend() {
98
- if (!this.runnerTaskPromise)
99
- return Promise.resolve();
100
- this.stopping = true;
101
- this.testRunController.stop();
102
- this.runnerTaskPromise.cancel();
103
- return this.testRunController.allTestsCompletePromise
104
- .then(() => {
105
- this.stopping = false;
106
- this.controller.onTestRunDone();
107
- });
108
- }
109
- stop() {
110
- return super.stop()
111
- .then(() => {
112
- return this.controller.exit();
113
- });
114
- }
115
- exit() {
116
- if (this.runnerTaskPromise)
117
- this.runnerTaskPromise.cancel();
118
- return Promise.resolve()
119
- .then(() => this.stopInfiniteWaiting())
120
- .then(() => this._running);
121
- }
122
- async _finishPreviousTestRuns() {
123
- if (!this.configurationCache.tests)
124
- return;
125
- this.testRunController.run();
126
- }
127
- _validateRunnableConfiguration(isFirstRun) {
128
- if (isFirstRun) {
129
- if (this.bootstrappingError)
130
- return Promise.reject(this.bootstrappingError);
131
- return Promise.resolve();
132
- }
133
- return this.bootstrapper._getTests()
134
- .then(tests => {
135
- this.configurationCache.tests = tests;
136
- return this.bootstrappingError ? Promise.reject(this.bootstrappingError) : Promise.resolve();
137
- });
138
- }
139
- _createTask(tests, browserConnectionGroups, proxy, opts) {
140
- opts.live = true;
141
- return super._createTask(tests, browserConnectionGroups, proxy, opts, this.warningLog);
142
- }
143
- _createBootstrapper(browserConnectionGateway) {
144
- return new bootstrapper_1.default(this, browserConnectionGateway);
145
- }
146
- _createController() {
147
- return new controller_1.default(this);
148
- }
149
- _waitUntilExit() {
150
- return new Promise((resolve, reject) => {
151
- this.stopInfiniteWaiting = resolve;
152
- this.rejectInfiniteWaiting = reject;
153
- });
154
- }
155
- _disposeAssets(browserSet, reporters, testedApp) {
156
- this.assets = { browserSet, reporters, testedApp };
157
- return Promise.resolve();
158
- }
159
- _dispose() {
160
- this.controller.dispose();
161
- if (!this.assets)
162
- return Promise.resolve();
163
- const { browserSet, reporters, testedApp } = this.assets;
164
- return super._disposeAssets(browserSet, reporters, testedApp);
165
- }
166
- }
167
- exports.default = LiveModeRunner;
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 lodash_1 = require("lodash");
7
+ const test_run_controller_1 = __importDefault(require("./test-run-controller"));
8
+ const controller_1 = __importDefault(require("./controller"));
9
+ const runner_1 = __importDefault(require("../runner"));
10
+ const bootstrapper_1 = __importDefault(require("./bootstrapper"));
11
+ const parse_file_list_1 = __importDefault(require("../utils/parse-file-list"));
12
+ const runtime_1 = require("../errors/runtime");
13
+ const types_1 = require("../errors/types");
14
+ class LiveModeRunner extends runner_1.default {
15
+ constructor({ proxy, browserConnectionGateway, configuration }) {
16
+ super({ proxy, browserConnectionGateway, configuration });
17
+ this.stopping = false;
18
+ this.runnerTaskPromise = null;
19
+ this.stopInfiniteWaiting = lodash_1.noop;
20
+ this.rejectInfiniteWaiting = lodash_1.noop;
21
+ this.assets = null;
22
+ this.testRunController = new test_run_controller_1.default();
23
+ this.controller = this._createController();
24
+ this.embeddingOptions({
25
+ TestRunCtor: this.testRunController.TestRunCtor,
26
+ assets: []
27
+ });
28
+ this.controller = this._createController();
29
+ this.configurationCache = null;
30
+ }
31
+ runTests(isFirstRun = false) {
32
+ let runError = null;
33
+ return this._finishPreviousTestRuns()
34
+ .then(() => {
35
+ return this._validateRunnableConfiguration(isFirstRun);
36
+ })
37
+ .then(() => {
38
+ const expectedTestCount = this.configurationCache.tests.length;
39
+ this.testRunController.setExpectedTestCount(expectedTestCount);
40
+ })
41
+ .then(() => {
42
+ this.runnerTaskPromise = super.run(this.opts);
43
+ return this.runnerTaskPromise;
44
+ })
45
+ .catch(err => {
46
+ this.setBootstrappingError(null);
47
+ runError = err;
48
+ })
49
+ .then(() => {
50
+ this.runnerTaskPromise = null;
51
+ this.controller.onTestRunDone(runError);
52
+ });
53
+ }
54
+ _validateRunOptions() {
55
+ return super._validateRunOptions()
56
+ .catch(err => {
57
+ this.rejectInfiniteWaiting(err);
58
+ });
59
+ }
60
+ _createRunnableConfiguration() {
61
+ if (this.configurationCache)
62
+ return Promise.resolve(this.configurationCache);
63
+ return super._createRunnableConfiguration()
64
+ .then(configuration => {
65
+ this.configurationCache = configuration;
66
+ return configuration;
67
+ })
68
+ .catch(err => {
69
+ this.rejectInfiniteWaiting(err);
70
+ });
71
+ }
72
+ setBootstrappingError(err) {
73
+ this.bootstrappingError = err;
74
+ }
75
+ run(options) {
76
+ this.configurationCache = null;
77
+ if (this._running)
78
+ throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotRunLiveModeRunnerMultipleTimes);
79
+ this._running = this._waitUntilExit()
80
+ .then(() => {
81
+ return this._dispose();
82
+ })
83
+ .then(() => {
84
+ delete this._running;
85
+ });
86
+ this.opts = Object.assign({}, this.opts, options);
87
+ this._setBootstrapperOptions();
88
+ const fileListPromise = parse_file_list_1.default(this.bootstrapper.sources, process.cwd());
89
+ fileListPromise
90
+ .then(files => {
91
+ return this.controller.init(files);
92
+ })
93
+ .then(() => this._createRunnableConfiguration())
94
+ .then(() => this.runTests(true));
95
+ return this._running;
96
+ }
97
+ suspend() {
98
+ if (!this.runnerTaskPromise)
99
+ return Promise.resolve();
100
+ this.stopping = true;
101
+ this.testRunController.stop();
102
+ this.runnerTaskPromise.cancel();
103
+ return this.testRunController.allTestsCompletePromise
104
+ .then(() => {
105
+ this.stopping = false;
106
+ this.controller.onTestRunDone();
107
+ });
108
+ }
109
+ stop() {
110
+ return super.stop()
111
+ .then(() => {
112
+ return this.controller.exit();
113
+ });
114
+ }
115
+ exit() {
116
+ if (this.runnerTaskPromise)
117
+ this.runnerTaskPromise.cancel();
118
+ return Promise.resolve()
119
+ .then(() => this.stopInfiniteWaiting())
120
+ .then(() => this._running);
121
+ }
122
+ async _finishPreviousTestRuns() {
123
+ if (!this.configurationCache.tests)
124
+ return;
125
+ this.testRunController.run();
126
+ }
127
+ _validateRunnableConfiguration(isFirstRun) {
128
+ if (isFirstRun) {
129
+ if (this.bootstrappingError)
130
+ return Promise.reject(this.bootstrappingError);
131
+ return Promise.resolve();
132
+ }
133
+ return this.bootstrapper._getTests()
134
+ .then(tests => {
135
+ this.configurationCache.tests = tests;
136
+ return this.bootstrappingError ? Promise.reject(this.bootstrappingError) : Promise.resolve();
137
+ });
138
+ }
139
+ _createTask(tests, browserConnectionGroups, proxy, opts) {
140
+ opts.live = true;
141
+ return super._createTask(tests, browserConnectionGroups, proxy, opts, this.warningLog);
142
+ }
143
+ _createBootstrapper(browserConnectionGateway) {
144
+ return new bootstrapper_1.default(this, browserConnectionGateway);
145
+ }
146
+ _createController() {
147
+ return new controller_1.default(this);
148
+ }
149
+ _waitUntilExit() {
150
+ return new Promise((resolve, reject) => {
151
+ this.stopInfiniteWaiting = resolve;
152
+ this.rejectInfiniteWaiting = reject;
153
+ });
154
+ }
155
+ _disposeAssets(browserSet, reporters, testedApp) {
156
+ this.assets = { browserSet, reporters, testedApp };
157
+ return Promise.resolve();
158
+ }
159
+ _dispose() {
160
+ this.controller.dispose();
161
+ if (!this.assets)
162
+ return Promise.resolve();
163
+ const { browserSet, reporters, testedApp } = this.assets;
164
+ return super._disposeAssets(browserSet, reporters, testedApp);
165
+ }
166
+ }
167
+ exports.default = LiveModeRunner;
168
168
  module.exports = exports.default;
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGl2ZS90ZXN0LXJ1bm5lci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUE4QjtBQUM5QixnRkFBOEQ7QUFDOUQsOERBQThDO0FBQzlDLHVEQUErQjtBQUMvQixrRUFBa0Q7QUFDbEQsK0VBQXFEO0FBQ3JELCtDQUFpRDtBQUNqRCwyQ0FBaUQ7QUFFakQsTUFBTSxjQUFlLFNBQVEsZ0JBQU07SUFDL0IsWUFBYSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsT0FBTztRQUNqRCxLQUFLLENBQUMsS0FBSyxFQUFFLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxRQUFRLEdBQWdCLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQU8sSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsR0FBSyxhQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGFBQUksQ0FBQztRQUVsQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUVuQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSw2QkFBeUIsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxVQUFVLEdBQVUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFHbEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ2xCLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVztZQUMvQyxNQUFNLEVBQU8sRUFBRTtTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFXLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVEsQ0FBRSxVQUFVLEdBQUcsS0FBSztRQUN4QixJQUFJLFFBQVEsR0FBRyxJQUFJ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RixDQUFDO0lBRUQsbUJBQW1CLENBQUUsd0JBQXdCO1FBQ3pDLE9BQU8sSUFBSSxzQkFBb0IsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsT0FBTyxJQUFJLG9CQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxjQUFjO1FBQ1YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUssT0FBTyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUVuRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ1osT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFN0IsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUV6RCxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRSxDQUFDO0NBQ0o7QUFFRCxrQkFBZSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub29wIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBMaXZlTW9kZVRlc3RSdW5Db250cm9sbGVyIGZyb20gJy4vdGVzdC1ydW4tY29udHJvbGxlcic7XG5pbXBvcnQgTGl2ZU1vZGVDb250cm9sbGVyIGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgUnVubmVyIGZyb20gJy4uL3J1bm5lcic7XG5pbXBvcnQgTGl2ZU1vZGVCb290c3RyYXBwZXIgZnJvbSAnLi9ib290c3RyYXBwZXInO1xuaW1wb3J0IHBhcnNlRmlsZUxpc3QgZnJvbSAnLi4vdXRpbHMvcGFyc2UtZmlsZS1saXN0JztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vZXJyb3JzL3R5cGVzJztcblxuY2xhc3MgTGl2ZU1vZGVSdW5uZXIgZXh0ZW5kcyBSdW5uZXIge1xuICAgIGNvbnN0cnVjdG9yIChwcm94eSwgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKHByb3h5LCBicm93c2VyQ29ubmVjdGlvbkdhdGV3YXksIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuc3RvcHBpbmcgICAgICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMucnVubmVyVGFza1Byb21pc2UgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdG9wSW5maW5pdGVXYWl0aW5nICAgPSBub29wO1xuICAgICAgICB0aGlzLnJlamVjdEluZmluaXRlV2FpdGluZyA9IG5vb3A7XG5cbiAgICAgICAgdGhpcy5hc3NldHMgPSBudWxsO1xuXG4gICAgICAgIHRoaXMudGVzdFJ1bkNvbnRyb2xsZXIgPSBuZXcgTGl2ZU1vZGVUZXN0UnVuQ29udHJvbGxlcigpO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgICAgICAgID0gdGhpcy5fY3JlYXRlQ29udHJvbGxlcigpO1xuXG5cbiAgICAgICAgdGhpcy5lbWJlZGRpbmdPcHRpb25zKHtcbiAgICAgICAgICAgIFRlc3RSdW5DdG9yOiB0aGlzLnRlc3RSdW5Db250cm9sbGVyLlRlc3RSdW5DdG9yLFxuICAgICAgICAgICAgYXNzZXRzOiAgICAgIFtdXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgICAgICAgICA9IHRoaXMuX2NyZWF0ZUNvbnRyb2xsZXIoKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uQ2FjaGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJ1blRlc3RzIChpc0ZpcnN0UnVuID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHJ1bkVycm9yID0gbnVsbDtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoUHJldmlvdXNUZXN0UnVucygpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlUnVubmFibGVDb25maWd1cmF0aW9uKGlzRmlyc3RSdW4pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZFRlc3RDb3VudCA9IHRoaXMuY29uZmlndXJhdGlvbkNhY2hlLnRlc3RzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGVzdFJ1bkNvbnRyb2xsZXIuc2V0RXhwZWN0ZWRUZXN0Q291bnQoZXhwZWN0ZWRUZXN0Q291bnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bm5lclRhc2tQcm9taXNlID0gc3VwZXIucnVuKHRoaXMub3B0cyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydW5uZXJUYXNrUHJvbWlzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJvb3RzdHJhcHBpbmdFcnJvcihudWxsKTtcblxuICAgICAgICAgICAgICAgIHJ1bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bm5lclRhc2tQcm9taXNlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5vblRlc3RSdW5Eb25lKHJ1bkVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZVJ1bk9wdGlvbnMgKCkge1xuICAgICAgICByZXR1cm4gc3VwZXIuX3ZhbGlkYXRlUnVuT3B0aW9ucygpXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdEluZmluaXRlV2FpdGluZyhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZVJ1bm5hYmxlQ29uZmlndXJhdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25DYWNoZSlcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb25maWd1cmF0aW9uQ2FjaGUpO1xuXG4gICAgICAgIHJldHVybiBzdXBlci5fY3JlYXRlUnVubmFibGVDb25maWd1cmF0aW9uKClcbiAgICAgICAgICAgIC50aGVuKGNvbmZpZ3VyYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbkNhY2hlID0gY29uZmlndXJhdGlvbjtcblxuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0SW5maW5pdGVXYWl0aW5nKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRCb290c3RyYXBwaW5nRXJyb3IgKGVycikge1xuICAgICAgICB0aGlzLmJvb3RzdHJhcHBpbmdFcnJvciA9IGVycjtcbiAgICB9XG5cbiAgICBydW4gKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uQ2FjaGUgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLl9ydW5uaW5nKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jYW5ub3RSdW5MaXZlTW9kZVJ1bm5lck11bHRpcGxlVGltZXMpO1xuXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSB0aGlzLl93YWl0VW50aWxFeGl0KClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzcG9zZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fcnVubmluZztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0cywgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fc2V0Qm9vdHN0cmFwcGVyT3B0aW9ucygpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVMaXN0UHJvbWlzZSA9IHBhcnNlRmlsZUxpc3QodGhpcy5ib290c3RyYXBwZXIuc291cmNlcywgcHJvY2Vzcy5jd2QoKSk7XG5cbiAgICAgICAgZmlsZUxpc3RQcm9taXNlXG4gICAgICAgICAgICAudGhlbihmaWxlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5pbml0KGZpbGVzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLl9jcmVhdGVSdW5uYWJsZUNvbmZpZ3VyYXRpb24oKSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucnVuVGVzdHModHJ1ZSkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5uaW5nO1xuICAgIH1cblxuICAgIHN1c3BlbmQgKCkge1xuICAgICAgICBpZiAoIXRoaXMucnVubmVyVGFza1Byb21pc2UpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5zdG9wcGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMudGVzdFJ1bkNvbnRyb2xsZXIuc3RvcCgpO1xuICAgICAgICB0aGlzLnJ1bm5lclRhc2tQcm9taXNlLmNhbmNlbCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW5Db250cm9sbGVyLmFsbFRlc3RzQ29tcGxldGVQcm9taXNlXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wcGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLm9uVGVzdFJ1bkRvbmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0b3AgKCkge1xuICAgICAgICByZXR1cm4gc3VwZXIuc3RvcCgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5leGl0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBleGl0ICgpIHtcbiAgICAgICAgaWYgKHRoaXMucnVubmVyVGFza1Byb21pc2UpXG4gICAgICAgICAgICB0aGlzLnJ1bm5lclRhc2tQcm9taXNlLmNhbmNlbCgpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5zdG9wSW5maW5pdGVXYWl0aW5nKCkpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLl9ydW5uaW5nKTtcbiAgICB9XG5cbiAgICBhc3luYyBfZmluaXNoUHJldmlvdXNUZXN0UnVucyAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uQ2FjaGUudGVzdHMpIHJldHVybjtcblxuICAgICAgICB0aGlzLnRlc3RSdW5Db250cm9sbGVyLnJ1bigpO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZVJ1bm5hYmxlQ29uZmlndXJhdGlvbiAoaXNGaXJzdFJ1bikge1xuICAgICAgICBpZiAoaXNGaXJzdFJ1bikge1xuICAgICAgICAgICAgaWYgKHRoaXMuYm9vdHN0cmFwcGluZ0Vycm9yKVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLmJvb3RzdHJhcHBpbmdFcnJvcik7XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmJvb3RzdHJhcHBlci5fZ2V0VGVzdHMoKVxuICAgICAgICAgICAgLnRoZW4odGVzdHMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbkNhY2hlLnRlc3RzID0gdGVzdHM7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ib290c3RyYXBwaW5nRXJyb3IgPyBQcm9taXNlLnJlamVjdCh0aGlzLmJvb3RzdHJhcHBpbmdFcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9jcmVhdGVUYXNrICh0ZXN0cywgYnJvd3NlckNvbm5lY3Rpb25Hcm91cHMsIHByb3h5LCBvcHRzKSB7XG4gICAgICAgIG9wdHMubGl2ZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLl9jcmVhdGVUYXNrKHRlc3RzLCBicm93c2VyQ29ubmVjdGlvbkdyb3VwcywgcHJveHksIG9wdHMsIHRoaXMud2FybmluZ0xvZyk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUJvb3RzdHJhcHBlciAoYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5KSB7XG4gICAgICAgIHJldHVybiBuZXcgTGl2ZU1vZGVCb290c3RyYXBwZXIodGhpcywgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5KTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ29udHJvbGxlciAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTGl2ZU1vZGVDb250cm9sbGVyKHRoaXMpO1xuICAgIH1cblxuICAgIF93YWl0VW50aWxFeGl0ICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcEluZmluaXRlV2FpdGluZyAgID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0SW5maW5pdGVXYWl0aW5nID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfZGlzcG9zZUFzc2V0cyAoYnJvd3NlclNldCwgcmVwb3J0ZXJzLCB0ZXN0ZWRBcHApIHtcbiAgICAgICAgdGhpcy5hc3NldHMgPSB7IGJyb3dzZXJTZXQsIHJlcG9ydGVycywgdGVzdGVkQXBwIH07XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIF9kaXNwb3NlICgpIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXRoaXMuYXNzZXRzKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIGNvbnN0IHsgYnJvd3NlclNldCwgcmVwb3J0ZXJzLCB0ZXN0ZWRBcHAgfSA9IHRoaXMuYXNzZXRzO1xuXG4gICAgICAgIHJldHVybiBzdXBlci5fZGlzcG9zZUFzc2V0cyhicm93c2VyU2V0LCByZXBvcnRlcnMsIHRlc3RlZEFwcCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXZlTW9kZVJ1bm5lcjtcbiJdfQ==
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGl2ZS90ZXN0LXJ1bm5lci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUE4QjtBQUM5QixnRkFBOEQ7QUFDOUQsOERBQThDO0FBQzlDLHVEQUErQjtBQUMvQixrRUFBa0Q7QUFDbEQsK0VBQXFEO0FBQ3JELCtDQUFpRDtBQUNqRCwyQ0FBaUQ7QUFFakQsTUFBTSxjQUFlLFNBQVEsZ0JBQU07SUFDL0IsWUFBYSxFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxhQUFhLEVBQUU7UUFDM0QsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLFFBQVEsR0FBZ0IsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsR0FBTyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixHQUFLLGFBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsYUFBSSxDQUFDO1FBRWxDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBRW5CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLDZCQUF5QixFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLFVBQVUsR0FBVSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUdsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDbEIsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXO1lBQy9DLE1BQU0sRUFBTyxFQUFFO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLEdBQVcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUSxDQUFFLFVBQVUsR0FBRyxLQUFLO1FBQ3hC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LFVBQVUsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRCxtQkFBbUIsQ0FBRSx3QkFBd0I7UUFDekMsT0FBTyxJQUFJLHNCQUFvQixDQUFDLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxpQkFBaUI7UUFDYixPQUFPLElBQUksb0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGNBQWM7UUFDVixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxtQkFBbUIsR0FBSyxPQUFPLENBQUM7WUFDckMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjLENBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBRW5ELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUUxQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDWixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUU3QixNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRXpELE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDSjtBQUVELGtCQUFlLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vb3AgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IExpdmVNb2RlVGVzdFJ1bkNvbnRyb2xsZXIgZnJvbSAnLi90ZXN0LXJ1bi1jb250cm9sbGVyJztcbmltcG9ydCBMaXZlTW9kZUNvbnRyb2xsZXIgZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCBSdW5uZXIgZnJvbSAnLi4vcnVubmVyJztcbmltcG9ydCBMaXZlTW9kZUJvb3RzdHJhcHBlciBmcm9tICcuL2Jvb3RzdHJhcHBlcic7XG5pbXBvcnQgcGFyc2VGaWxlTGlzdCBmcm9tICcuLi91dGlscy9wYXJzZS1maWxlLWxpc3QnO1xuaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi9lcnJvcnMvdHlwZXMnO1xuXG5jbGFzcyBMaXZlTW9kZVJ1bm5lciBleHRlbmRzIFJ1bm5lciB7XG4gICAgY29uc3RydWN0b3IgKHsgcHJveHksIGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSwgY29uZmlndXJhdGlvbiB9KSB7XG4gICAgICAgIHN1cGVyKHsgcHJveHksIGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSwgY29uZmlndXJhdGlvbiB9KTtcblxuICAgICAgICB0aGlzLnN0b3BwaW5nICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJ1bm5lclRhc2tQcm9taXNlICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RvcEluZmluaXRlV2FpdGluZyAgID0gbm9vcDtcbiAgICAgICAgdGhpcy5yZWplY3RJbmZpbml0ZVdhaXRpbmcgPSBub29wO1xuXG4gICAgICAgIHRoaXMuYXNzZXRzID0gbnVsbDtcblxuICAgICAgICB0aGlzLnRlc3RSdW5Db250cm9sbGVyID0gbmV3IExpdmVNb2RlVGVzdFJ1bkNvbnRyb2xsZXIoKTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyICAgICAgICA9IHRoaXMuX2NyZWF0ZUNvbnRyb2xsZXIoKTtcblxuXG4gICAgICAgIHRoaXMuZW1iZWRkaW5nT3B0aW9ucyh7XG4gICAgICAgICAgICBUZXN0UnVuQ3RvcjogdGhpcy50ZXN0UnVuQ29udHJvbGxlci5UZXN0UnVuQ3RvcixcbiAgICAgICAgICAgIGFzc2V0czogICAgICBbXVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyICAgICAgICAgPSB0aGlzLl9jcmVhdGVDb250cm9sbGVyKCk7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbkNhY2hlID0gbnVsbDtcbiAgICB9XG5cbiAgICBydW5UZXN0cyAoaXNGaXJzdFJ1biA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBydW5FcnJvciA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmlzaFByZXZpb3VzVGVzdFJ1bnMoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZVJ1bm5hYmxlQ29uZmlndXJhdGlvbihpc0ZpcnN0UnVuKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRUZXN0Q291bnQgPSB0aGlzLmNvbmZpZ3VyYXRpb25DYWNoZS50ZXN0cy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RSdW5Db250cm9sbGVyLnNldEV4cGVjdGVkVGVzdENvdW50KGV4cGVjdGVkVGVzdENvdW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5uZXJUYXNrUHJvbWlzZSA9IHN1cGVyLnJ1bih0aGlzLm9wdHMpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyVGFza1Byb21pc2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCb290c3RyYXBwaW5nRXJyb3IobnVsbCk7XG5cbiAgICAgICAgICAgICAgICBydW5FcnJvciA9IGVycjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5uZXJUYXNrUHJvbWlzZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIub25UZXN0UnVuRG9uZShydW5FcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVSdW5PcHRpb25zICgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLl92YWxpZGF0ZVJ1bk9wdGlvbnMoKVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWplY3RJbmZpbml0ZVdhaXRpbmcoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9jcmVhdGVSdW5uYWJsZUNvbmZpZ3VyYXRpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uQ2FjaGUpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29uZmlndXJhdGlvbkNhY2hlKTtcblxuICAgICAgICByZXR1cm4gc3VwZXIuX2NyZWF0ZVJ1bm5hYmxlQ29uZmlndXJhdGlvbigpXG4gICAgICAgICAgICAudGhlbihjb25maWd1cmF0aW9uID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25DYWNoZSA9IGNvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdEluZmluaXRlV2FpdGluZyhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0Qm9vdHN0cmFwcGluZ0Vycm9yIChlcnIpIHtcbiAgICAgICAgdGhpcy5ib290c3RyYXBwaW5nRXJyb3IgPSBlcnI7XG4gICAgfVxuXG4gICAgcnVuIChvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbkNhY2hlID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5fcnVubmluZylcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuY2Fubm90UnVuTGl2ZU1vZGVSdW5uZXJNdWx0aXBsZVRpbWVzKTtcblxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gdGhpcy5fd2FpdFVudGlsRXhpdCgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3Bvc2UoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3J1bm5pbmc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX3NldEJvb3RzdHJhcHBlck9wdGlvbnMoKTtcblxuICAgICAgICBjb25zdCBmaWxlTGlzdFByb21pc2UgPSBwYXJzZUZpbGVMaXN0KHRoaXMuYm9vdHN0cmFwcGVyLnNvdXJjZXMsIHByb2Nlc3MuY3dkKCkpO1xuXG4gICAgICAgIGZpbGVMaXN0UHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZmlsZXMgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuaW5pdChmaWxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fY3JlYXRlUnVubmFibGVDb25maWd1cmF0aW9uKCkpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnJ1blRlc3RzKHRydWUpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fcnVubmluZztcbiAgICB9XG5cbiAgICBzdXNwZW5kICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJ1bm5lclRhc2tQcm9taXNlKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RvcHBpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnRlc3RSdW5Db250cm9sbGVyLnN0b3AoKTtcbiAgICAgICAgdGhpcy5ydW5uZXJUYXNrUHJvbWlzZS5jYW5jZWwoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuQ29udHJvbGxlci5hbGxUZXN0c0NvbXBsZXRlUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcHBpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5vblRlc3RSdW5Eb25lKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdG9wICgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnN0b3AoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZXhpdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhpdCAoKSB7XG4gICAgICAgIGlmICh0aGlzLnJ1bm5lclRhc2tQcm9taXNlKVxuICAgICAgICAgICAgdGhpcy5ydW5uZXJUYXNrUHJvbWlzZS5jYW5jZWwoKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuc3RvcEluZmluaXRlV2FpdGluZygpKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fcnVubmluZyk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2ZpbmlzaFByZXZpb3VzVGVzdFJ1bnMgKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbkNhY2hlLnRlc3RzKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy50ZXN0UnVuQ29udHJvbGxlci5ydW4oKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVSdW5uYWJsZUNvbmZpZ3VyYXRpb24gKGlzRmlyc3RSdW4pIHtcbiAgICAgICAgaWYgKGlzRmlyc3RSdW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJvb3RzdHJhcHBpbmdFcnJvcilcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5ib290c3RyYXBwaW5nRXJyb3IpO1xuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5ib290c3RyYXBwZXIuX2dldFRlc3RzKClcbiAgICAgICAgICAgIC50aGVuKHRlc3RzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25DYWNoZS50ZXN0cyA9IHRlc3RzO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9vdHN0cmFwcGluZ0Vycm9yID8gUHJvbWlzZS5yZWplY3QodGhpcy5ib290c3RyYXBwaW5nRXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfY3JlYXRlVGFzayAodGVzdHMsIGJyb3dzZXJDb25uZWN0aW9uR3JvdXBzLCBwcm94eSwgb3B0cykge1xuICAgICAgICBvcHRzLmxpdmUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBzdXBlci5fY3JlYXRlVGFzayh0ZXN0cywgYnJvd3NlckNvbm5lY3Rpb25Hcm91cHMsIHByb3h5LCBvcHRzLCB0aGlzLndhcm5pbmdMb2cpO1xuICAgIH1cblxuICAgIF9jcmVhdGVCb290c3RyYXBwZXIgKGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSkge1xuICAgICAgICByZXR1cm4gbmV3IExpdmVNb2RlQm9vdHN0cmFwcGVyKHRoaXMsIGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNvbnRyb2xsZXIgKCkge1xuICAgICAgICByZXR1cm4gbmV3IExpdmVNb2RlQ29udHJvbGxlcih0aGlzKTtcbiAgICB9XG5cbiAgICBfd2FpdFVudGlsRXhpdCAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3BJbmZpbml0ZVdhaXRpbmcgICA9IHJlc29sdmU7XG4gICAgICAgICAgICB0aGlzLnJlamVjdEluZmluaXRlV2FpdGluZyA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2Rpc3Bvc2VBc3NldHMgKGJyb3dzZXJTZXQsIHJlcG9ydGVycywgdGVzdGVkQXBwKSB7XG4gICAgICAgIHRoaXMuYXNzZXRzID0geyBicm93c2VyU2V0LCByZXBvcnRlcnMsIHRlc3RlZEFwcCB9O1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBfZGlzcG9zZSAoKSB7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFzc2V0cylcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICBjb25zdCB7IGJyb3dzZXJTZXQsIHJlcG9ydGVycywgdGVzdGVkQXBwIH0gPSB0aGlzLmFzc2V0cztcblxuICAgICAgICByZXR1cm4gc3VwZXIuX2Rpc3Bvc2VBc3NldHMoYnJvd3NlclNldCwgcmVwb3J0ZXJzLCB0ZXN0ZWRBcHApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGl2ZU1vZGVSdW5uZXI7XG4iXX0=
@@ -1,31 +1,31 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const read_file_relative_1 = require("read-file-relative");
4
- const ASSETS_CACHE = {};
5
- function loadAsset(filename, asBuffer) {
6
- if (!ASSETS_CACHE[filename])
7
- ASSETS_CACHE[filename] = read_file_relative_1.readSync(filename, asBuffer);
8
- return ASSETS_CACHE[filename];
9
- }
10
- function default_1(developmentMode) {
11
- const scriptNameSuffix = developmentMode ? 'js' : 'min.js';
12
- return {
13
- favIcon: loadAsset('./client/ui/favicon.ico', true),
14
- coreScript: loadAsset(`./client/core/index.${scriptNameSuffix}`),
15
- driverScript: loadAsset(`./client/driver/index.${scriptNameSuffix}`),
16
- uiScript: loadAsset(`./client/ui/index.${scriptNameSuffix}`),
17
- uiStyle: loadAsset('./client/ui/styles.css'),
18
- uiSprite: loadAsset('./client/ui/sprite.png', true),
19
- uiSpriteSvg: loadAsset('./client/ui/sprite.svg', true),
20
- idlePageScript: loadAsset('./client/browser/idle-page/index.js'),
21
- idlePageStyle: loadAsset('./client/browser/idle-page/styles.css'),
22
- idlePageLogo: loadAsset('./client/browser/idle-page/logo.svg', true),
23
- serviceWorkerScript: loadAsset('./client/browser/service-worker.js'),
24
- automationScript: loadAsset(`./client/automation/index.${scriptNameSuffix}`),
25
- // NOTE: Load the legacy client script lazily to reduce startup time
26
- legacyRunnerScript: require('testcafe-legacy-api').CLIENT_RUNNER_SCRIPT
27
- };
28
- }
29
- exports.default = default_1;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const read_file_relative_1 = require("read-file-relative");
4
+ const ASSETS_CACHE = {};
5
+ function loadAsset(filename, asBuffer) {
6
+ if (!ASSETS_CACHE[filename])
7
+ ASSETS_CACHE[filename] = read_file_relative_1.readSync(filename, asBuffer);
8
+ return ASSETS_CACHE[filename];
9
+ }
10
+ function default_1(developmentMode) {
11
+ const scriptNameSuffix = developmentMode ? 'js' : 'min.js';
12
+ return {
13
+ favIcon: loadAsset('./client/ui/favicon.ico', true),
14
+ coreScript: loadAsset(`./client/core/index.${scriptNameSuffix}`),
15
+ driverScript: loadAsset(`./client/driver/index.${scriptNameSuffix}`),
16
+ uiScript: loadAsset(`./client/ui/index.${scriptNameSuffix}`),
17
+ uiStyle: loadAsset('./client/ui/styles.css'),
18
+ uiSprite: loadAsset('./client/ui/sprite.png', true),
19
+ uiSpriteSvg: loadAsset('./client/ui/sprite.svg', true),
20
+ idlePageScript: loadAsset('./client/browser/idle-page/index.js'),
21
+ idlePageStyle: loadAsset('./client/browser/idle-page/styles.css'),
22
+ idlePageLogo: loadAsset('./client/browser/idle-page/logo.svg', true),
23
+ serviceWorkerScript: loadAsset('./client/browser/service-worker.js'),
24
+ automationScript: loadAsset(`./client/automation/index.${scriptNameSuffix}`),
25
+ // NOTE: Load the legacy client script lazily to reduce startup time
26
+ legacyRunnerScript: require('testcafe-legacy-api').CLIENT_RUNNER_SCRIPT
27
+ };
28
+ }
29
+ exports.default = default_1;
30
30
  module.exports = exports.default;
31
31
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1hc3NldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbG9hZC1hc3NldHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyREFBc0Q7QUFHdEQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBRXhCLFNBQVMsU0FBUyxDQUFFLFFBQVEsRUFBRSxRQUFRO0lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyw2QkFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV0RCxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsbUJBQXlCLGVBQWU7SUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBRTNELE9BQU87UUFDSCxPQUFPLEVBQU8sU0FBUyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQztRQUN4RCxVQUFVLEVBQUksU0FBUyxDQUFDLHVCQUF1QixnQkFBZ0IsRUFBRSxDQUFDO1FBQ2xFLFlBQVksRUFBRSxTQUFTLENBQUMseUJBQXlCLGdCQUFnQixFQUFFLENBQUM7UUFDcEUsUUFBUSxFQUFNLFNBQVMsQ0FBQyxxQkFBcUIsZ0JBQWdCLEVBQUUsQ0FBQztRQUNoRSxPQUFPLEVBQU8sU0FBUyxDQUFDLHdCQUF3QixDQUFDO1FBQ2pELFFBQVEsRUFBTSxTQUFTLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDO1FBQ3ZELFdBQVcsRUFBRyxTQUFTLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDO1FBRXZELGNBQWMsRUFBRSxTQUFTLENBQUMscUNBQXFDLENBQUM7UUFDaEUsYUFBYSxFQUFHLFNBQVMsQ0FBQyx1Q0FBdUMsQ0FBQztRQUNsRSxZQUFZLEVBQUksU0FBUyxDQUFDLHFDQUFxQyxFQUFFLElBQUksQ0FBQztRQUV0RSxtQkFBbUIsRUFBRSxTQUFTLENBQUMsb0NBQW9DLENBQUM7UUFFcEUsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLDZCQUE2QixnQkFBZ0IsRUFBRSxDQUFDO1FBRTVFLG9FQUFvRTtRQUNwRSxrQkFBa0IsRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxvQkFBb0I7S0FDMUUsQ0FBQztBQUNOLENBQUM7QUF2QkQsNEJBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZFN5bmMgYXMgcmVhZCB9IGZyb20gJ3JlYWQtZmlsZS1yZWxhdGl2ZSc7XG5cblxuY29uc3QgQVNTRVRTX0NBQ0hFID0ge307XG5cbmZ1bmN0aW9uIGxvYWRBc3NldCAoZmlsZW5hbWUsIGFzQnVmZmVyKSB7XG4gICAgaWYgKCFBU1NFVFNfQ0FDSEVbZmlsZW5hbWVdKVxuICAgICAgICBBU1NFVFNfQ0FDSEVbZmlsZW5hbWVdID0gcmVhZChmaWxlbmFtZSwgYXNCdWZmZXIpO1xuXG4gICAgcmV0dXJuIEFTU0VUU19DQUNIRVtmaWxlbmFtZV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChkZXZlbG9wbWVudE1vZGUpIHtcbiAgICBjb25zdCBzY3JpcHROYW1lU3VmZml4ID0gZGV2ZWxvcG1lbnRNb2RlID8gJ2pzJyA6ICdtaW4uanMnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmF2SWNvbjogICAgICBsb2FkQXNzZXQoJy4vY2xpZW50L3VpL2Zhdmljb24uaWNvJywgdHJ1ZSksXG4gICAgICAgIGNvcmVTY3JpcHQ6ICAgbG9hZEFzc2V0KGAuL2NsaWVudC9jb3JlL2luZGV4LiR7c2NyaXB0TmFtZVN1ZmZpeH1gKSxcbiAgICAgICAgZHJpdmVyU2NyaXB0OiBsb2FkQXNzZXQoYC4vY2xpZW50L2RyaXZlci9pbmRleC4ke3NjcmlwdE5hbWVTdWZmaXh9YCksXG4gICAgICAgIHVpU2NyaXB0OiAgICAgbG9hZEFzc2V0KGAuL2NsaWVudC91aS9pbmRleC4ke3NjcmlwdE5hbWVTdWZmaXh9YCksXG4gICAgICAgIHVpU3R5bGU6ICAgICAgbG9hZEFzc2V0KCcuL2NsaWVudC91aS9zdHlsZXMuY3NzJyksXG4gICAgICAgIHVpU3ByaXRlOiAgICAgbG9hZEFzc2V0KCcuL2NsaWVudC91aS9zcHJpdGUucG5nJywgdHJ1ZSksXG4gICAgICAgIHVpU3ByaXRlU3ZnOiAgbG9hZEFzc2V0KCcuL2NsaWVudC91aS9zcHJpdGUuc3ZnJywgdHJ1ZSksXG5cbiAgICAgICAgaWRsZVBhZ2VTY3JpcHQ6IGxvYWRBc3NldCgnLi9jbGllbnQvYnJvd3Nlci9pZGxlLXBhZ2UvaW5kZXguanMnKSxcbiAgICAgICAgaWRsZVBhZ2VTdHlsZTogIGxvYWRBc3NldCgnLi9jbGllbnQvYnJvd3Nlci9pZGxlLXBhZ2Uvc3R5bGVzLmNzcycpLFxuICAgICAgICBpZGxlUGFnZUxvZ286ICAgbG9hZEFzc2V0KCcuL2NsaWVudC9icm93c2VyL2lkbGUtcGFnZS9sb2dvLnN2ZycsIHRydWUpLFxuXG4gICAgICAgIHNlcnZpY2VXb3JrZXJTY3JpcHQ6IGxvYWRBc3NldCgnLi9jbGllbnQvYnJvd3Nlci9zZXJ2aWNlLXdvcmtlci5qcycpLFxuXG4gICAgICAgIGF1dG9tYXRpb25TY3JpcHQ6IGxvYWRBc3NldChgLi9jbGllbnQvYXV0b21hdGlvbi9pbmRleC4ke3NjcmlwdE5hbWVTdWZmaXh9YCksXG5cbiAgICAgICAgLy8gTk9URTogTG9hZCB0aGUgbGVnYWN5IGNsaWVudCBzY3JpcHQgbGF6aWx5IHRvIHJlZHVjZSBzdGFydHVwIHRpbWVcbiAgICAgICAgbGVnYWN5UnVubmVyU2NyaXB0OiByZXF1aXJlKCd0ZXN0Y2FmZS1sZWdhY3ktYXBpJykuQ0xJRU5UX1JVTk5FUl9TQ1JJUFRcbiAgICB9O1xufVxuIl19
@@ -1,18 +1,18 @@
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_callsite_sync_1 = __importDefault(require("../utils/render-callsite-sync"));
7
- const create_stack_filter_1 = __importDefault(require("../errors/create-stack-filter"));
8
- const callsite_record_1 = require("callsite-record");
9
- function addWarning(warningLog, message, callsite = void 0) {
10
- const renderedCallsite = render_callsite_sync_1.default(callsite, {
11
- renderer: callsite_record_1.renderers.noColor,
12
- stackFilter: create_stack_filter_1.default(Error.stackTraceLimit)
13
- });
14
- warningLog.addWarning(message + `\n\n${renderedCallsite}`);
15
- }
16
- exports.default = addWarning;
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_callsite_sync_1 = __importDefault(require("../utils/render-callsite-sync"));
7
+ const create_stack_filter_1 = __importDefault(require("../errors/create-stack-filter"));
8
+ const callsite_record_1 = require("callsite-record");
9
+ function addWarning(warningLog, message, callsite = void 0) {
10
+ const renderedCallsite = render_callsite_sync_1.default(callsite, {
11
+ renderer: callsite_record_1.renderers.noColor,
12
+ stackFilter: create_stack_filter_1.default(Error.stackTraceLimit)
13
+ });
14
+ warningLog.addWarning(message + `\n\n${renderedCallsite}`);
15
+ }
16
+ exports.default = addWarning;
17
17
  module.exports = exports.default;
18
18
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlbmRlcmVkLXdhcm5pbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbm90aWZpY2F0aW9ucy9hZGQtcmVuZGVyZWQtd2FybmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlGQUErRDtBQUMvRCx3RkFBOEQ7QUFDOUQscURBQTRDO0FBRzVDLFNBQXdCLFVBQVUsQ0FBRSxVQUFzQixFQUFFLE9BQWUsRUFBRSxXQUFnQixLQUFLLENBQUM7SUFDL0YsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBa0IsQ0FBQyxRQUFRLEVBQUU7UUFDbEQsUUFBUSxFQUFLLDJCQUFTLENBQUMsT0FBTztRQUM5QixXQUFXLEVBQUUsNkJBQWlCLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztLQUN4RCxDQUFDLENBQUM7SUFFSCxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxPQUFPLGdCQUFnQixFQUFFLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBUEQsNkJBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVuZGVyQ2FsbHNpdGVTeW5jIGZyb20gJy4uL3V0aWxzL3JlbmRlci1jYWxsc2l0ZS1zeW5jJztcbmltcG9ydCBjcmVhdGVTdGFja0ZpbHRlciBmcm9tICcuLi9lcnJvcnMvY3JlYXRlLXN0YWNrLWZpbHRlcic7XG5pbXBvcnQgeyByZW5kZXJlcnMgfSBmcm9tICdjYWxsc2l0ZS1yZWNvcmQnO1xuaW1wb3J0IFdhcm5pbmdMb2cgZnJvbSAnLi93YXJuaW5nLWxvZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZFdhcm5pbmcgKHdhcm5pbmdMb2c6IFdhcm5pbmdMb2csIG1lc3NhZ2U6IHN0cmluZywgY2FsbHNpdGU6IGFueSA9IHZvaWQgMCk6IHZvaWQge1xuICAgIGNvbnN0IHJlbmRlcmVkQ2FsbHNpdGUgPSByZW5kZXJDYWxsc2l0ZVN5bmMoY2FsbHNpdGUsIHtcbiAgICAgICAgcmVuZGVyZXI6ICAgIHJlbmRlcmVycy5ub0NvbG9yLFxuICAgICAgICBzdGFja0ZpbHRlcjogY3JlYXRlU3RhY2tGaWx0ZXIoRXJyb3Iuc3RhY2tUcmFjZUxpbWl0KVxuICAgIH0pO1xuXG4gICAgd2FybmluZ0xvZy5hZGRXYXJuaW5nKG1lc3NhZ2UgKyBgXFxuXFxuJHtyZW5kZXJlZENhbGxzaXRlfWApO1xufVxuIl19