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,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXIvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1hbmRCYXNlIGZyb20gJy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Jhc2UnO1xuaW1wb3J0IFRlc3RSdW4gZnJvbSAnLi4vdGVzdC1ydW4nO1xuaW1wb3J0IFdhcm5pbmdMb2cgZnJvbSAnLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLWxvZyc7XG5pbXBvcnQgeyBXcml0YWJsZSBhcyBXcml0YWJsZVN0cmVhbSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb24gZnJvbSAnLi4vYnJvd3Nlci9jb25uZWN0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25FdmVudEFyZyB7XG4gICAgYXBpQWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIGNvbW1hbmQ6IENvbW1hbmRCYXNlO1xuICAgIHRlc3RSdW4/OiBUZXN0UnVuO1xufVxuXG5pbnRlcmZhY2UgUmVwb3J0ZWRUZXN0SXRlbSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc2tpcDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFJlcG9ydGVkRml4dHVyZUl0ZW0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHRlc3RzOiBSZXBvcnRlZFRlc3RJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0ZWRUZXN0U3RydWN0dXJlSXRlbSB7XG4gICAgZml4dHVyZTogUmVwb3J0ZWRGaXh0dXJlSXRlbTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcm93c2VyU2V0T3B0aW9ucyB7XG4gICAgY29uY3VycmVuY3k6IG51bWJlcjtcbiAgICBicm93c2VySW5pdFRpbWVvdXQ/OiBudW1iZXI7XG4gICAgd2FybmluZ0xvZzogV2FybmluZ0xvZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRlckluaXQge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBvdXRwdXQ/OiBzdHJpbmcgfCBXcml0YWJsZVN0cmVhbTtcbn1cblxuZXhwb3J0IHR5cGUgQnJvd3NlckluaXQgPSBzdHJpbmcgfCBvYmplY3QgfCBCcm93c2VyQ29ubmVjdGlvbjtcbiJdfQ==
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXIvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1hbmRCYXNlIGZyb20gJy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Jhc2UnO1xuaW1wb3J0IFRlc3RSdW4gZnJvbSAnLi4vdGVzdC1ydW4nO1xuaW1wb3J0IFdhcm5pbmdMb2cgZnJvbSAnLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLWxvZyc7XG5pbXBvcnQgeyBXcml0YWJsZSBhcyBXcml0YWJsZVN0cmVhbSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb24gZnJvbSAnLi4vYnJvd3Nlci9jb25uZWN0aW9uJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkgZnJvbSAnLi4vYnJvd3Nlci9jb25uZWN0aW9uL2dhdGV3YXknO1xuaW1wb3J0IENvbXBpbGVyU2VydmljZSBmcm9tICcuLi9zZXJ2aWNlcy9jb21waWxlci9ob3N0JztcbmltcG9ydCBUZXN0IGZyb20gJy4uL2FwaS9zdHJ1Y3R1cmUvdGVzdCc7XG5pbXBvcnQgeyBQcm94eSB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5pbXBvcnQgRml4dHVyZUhvb2tDb250cm9sbGVyIGZyb20gJy4vZml4dHVyZS1ob29rLWNvbnRyb2xsZXInO1xuaW1wb3J0IFNjcmVlbnNob3RzIGZyb20gJy4uL3NjcmVlbnNob3RzJztcbmltcG9ydCBDYXB0dXJlciBmcm9tICcuLi9zY3JlZW5zaG90cy9jYXB0dXJlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRXZlbnRBcmcge1xuICAgIGFwaUFjdGlvbk5hbWU6IHN0cmluZztcbiAgICBjb21tYW5kOiBDb21tYW5kQmFzZTtcbiAgICB0ZXN0UnVuPzogVGVzdFJ1bjtcbn1cblxuaW50ZXJmYWNlIFJlcG9ydGVkVGVzdEl0ZW0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNraXA6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBSZXBvcnRlZEZpeHR1cmVJdGVtIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0ZXN0czogUmVwb3J0ZWRUZXN0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydGVkVGVzdFN0cnVjdHVyZUl0ZW0ge1xuICAgIGZpeHR1cmU6IFJlcG9ydGVkRml4dHVyZUl0ZW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJvd3NlclNldE9wdGlvbnMge1xuICAgIGNvbmN1cnJlbmN5OiBudW1iZXI7XG4gICAgYnJvd3NlckluaXRUaW1lb3V0PzogbnVtYmVyO1xuICAgIHdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0ZXJJbml0IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgb3V0cHV0Pzogc3RyaW5nIHwgV3JpdGFibGVTdHJlYW07XG59XG5cbmV4cG9ydCB0eXBlIEJyb3dzZXJJbml0ID0gc3RyaW5nIHwgb2JqZWN0IHwgQnJvd3NlckNvbm5lY3Rpb247XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwcGVySW5pdCB7XG4gICAgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5OiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXk7XG4gICAgY29tcGlsZXJTZXJ2aWNlPzogQ29tcGlsZXJTZXJ2aWNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyb3dzZXJKb2JJbml0IHtcbiAgICB0ZXN0czogVGVzdFtdO1xuICAgIGJyb3dzZXJDb25uZWN0aW9uczogQnJvd3NlckNvbm5lY3Rpb25bXTtcbiAgICBwcm94eTogUHJveHk7XG4gICAgc2NyZWVuc2hvdHM6IFNjcmVlbnNob3RzO1xuICAgIHdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgZml4dHVyZUhvb2tDb250cm9sbGVyOiBGaXh0dXJlSG9va0NvbnRyb2xsZXI7XG4gICAgb3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT47XG4gICAgY29tcGlsZXJTZXJ2aWNlPzogQ29tcGlsZXJTZXJ2aWNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tJbml0IHtcbiAgICB0ZXN0czogVGVzdFtdO1xuICAgIGJyb3dzZXJDb25uZWN0aW9uR3JvdXBzOiBCcm93c2VyQ29ubmVjdGlvbltdW107XG4gICAgcHJveHk6IFByb3h5O1xuICAgIG9wdHM6IERpY3Rpb25hcnk8T3B0aW9uVmFsdWU+O1xuICAgIHJ1bm5lcldhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgY29tcGlsZXJTZXJ2aWNlPzogQ29tcGlsZXJTZXJ2aWNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RSdW5Db250cm9sbGVySW5pdCB7XG4gICAgdGVzdDogVGVzdDtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHByb3h5OiBQcm94eTtcbiAgICBzY3JlZW5zaG90czogU2NyZWVuc2hvdHM7XG4gICAgd2FybmluZ0xvZzogV2FybmluZ0xvZztcbiAgICBmaXh0dXJlSG9va0NvbnRyb2xsZXI6IEZpeHR1cmVIb29rQ29udHJvbGxlcjtcbiAgICBvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPjtcbiAgICBjb21waWxlclNlcnZpY2U/OiBDb21waWxlclNlcnZpY2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdFJ1bkluaXQge1xuICAgIHRlc3Q6IFRlc3Q7XG4gICAgYnJvd3NlckNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uO1xuICAgIHNjcmVlbnNob3RDYXB0dXJlcjogQ2FwdHVyZXI7XG4gICAgZ2xvYmFsV2FybmluZ0xvZzogV2FybmluZ0xvZztcbiAgICBvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPjtcbiAgICBjb21waWxlclNlcnZpY2U/OiBDb21waWxlclNlcnZpY2U7XG59XG4iXX0=
@@ -1,29 +1,29 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const runtime_1 = require("../errors/runtime");
4
- const types_1 = require("../errors/types");
5
- class ReporterStreamController {
6
- constructor(task, reporters) {
7
- this._pluginInfos = [];
8
- this._task = task;
9
- this.multipleStreamError = null;
10
- reporters.forEach(({ plugin }) => {
11
- plugin.streamController = this;
12
- });
13
- }
14
- ensureUniqueStream(stream, plugin) {
15
- const pluginInfo = this._pluginInfos.find(info => info.stream === stream);
16
- if (!pluginInfo)
17
- this._pluginInfos.push({ stream: stream, plugin: plugin });
18
- else if (pluginInfo.plugin !== plugin) {
19
- const message = [pluginInfo.plugin.name, plugin.name].join(', ');
20
- this.multipleStreamError = new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.multipleSameStreamReporters, message);
21
- this._task.emit('done');
22
- return false;
23
- }
24
- return true;
25
- }
26
- }
27
- exports.default = ReporterStreamController;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const runtime_1 = require("../errors/runtime");
4
+ const types_1 = require("../errors/types");
5
+ class ReporterStreamController {
6
+ constructor(task, reporters) {
7
+ this._pluginInfos = [];
8
+ this._task = task;
9
+ this.multipleStreamError = null;
10
+ reporters.forEach(({ plugin }) => {
11
+ plugin.streamController = this;
12
+ });
13
+ }
14
+ ensureUniqueStream(stream, plugin) {
15
+ const pluginInfo = this._pluginInfos.find(info => info.stream === stream);
16
+ if (!pluginInfo)
17
+ this._pluginInfos.push({ stream: stream, plugin: plugin });
18
+ else if (pluginInfo.plugin !== plugin) {
19
+ const message = [pluginInfo.plugin.name, plugin.name].join(', ');
20
+ this.multipleStreamError = new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.multipleSameStreamReporters, message);
21
+ this._task.emit('done');
22
+ return false;
23
+ }
24
+ return true;
25
+ }
26
+ }
27
+ exports.default = ReporterStreamController;
28
28
  module.exports = exports.default;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0ZXItc3RyZWFtLWNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVubmVyL3JlcG9ydGVyLXN0cmVhbS1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsK0NBQWlEO0FBQ2pELDJDQUFpRDtBQWFqRCxNQUFNLHdCQUF3QjtJQUsxQixZQUFvQixJQUFrQixFQUFFLFNBQXFCO1FBQ3pELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFFaEMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtZQUM3QixNQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGtCQUFrQixDQUFFLE1BQWdCLEVBQUUsTUFBYztRQUN2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUM7UUFFMUUsSUFBSSxDQUFDLFVBQVU7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7YUFDMUQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtZQUNuQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFakUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksc0JBQVksQ0FBQyxzQkFBYyxDQUFDLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRWpHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBRUQsa0JBQWUsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IFJlcG9ydGVyIGZyb20gJy4uL3JlcG9ydGVyJztcblxuaW50ZXJmYWNlIFBsdWdpbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN0cmVhbUNvbnRyb2xsZXI6IFJlcG9ydGVyU3RyZWFtQ29udHJvbGxlcjtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbkluZm8ge1xuICAgIHN0cmVhbTogV3JpdGFibGU7XG4gICAgcGx1Z2luOiBQbHVnaW47XG59XG5cbmNsYXNzIFJlcG9ydGVyU3RyZWFtQ29udHJvbGxlciB7XG4gICAgcHVibGljIG11bHRpcGxlU3RyZWFtRXJyb3I6IEdlbmVyYWxFcnJvciB8IG51bGw7XG4gICAgcHJpdmF0ZSBfcGx1Z2luSW5mb3M6IFBsdWdpbkluZm9bXTtcbiAgICBwcml2YXRlIF90YXNrOiBFdmVudEVtaXR0ZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHRhc2s6IEV2ZW50RW1pdHRlciwgcmVwb3J0ZXJzOiBSZXBvcnRlcltdKSB7XG4gICAgICAgIHRoaXMuX3BsdWdpbkluZm9zID0gW107XG4gICAgICAgIHRoaXMuX3Rhc2sgPSB0YXNrO1xuICAgICAgICB0aGlzLm11bHRpcGxlU3RyZWFtRXJyb3IgPSBudWxsO1xuXG4gICAgICAgIHJlcG9ydGVycy5mb3JFYWNoKCh7IHBsdWdpbiB9KSA9PiB7XG4gICAgICAgICAgICBwbHVnaW4uc3RyZWFtQ29udHJvbGxlciA9IHRoaXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnN1cmVVbmlxdWVTdHJlYW0gKHN0cmVhbTogV3JpdGFibGUsIHBsdWdpbjogUGx1Z2luKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBsdWdpbkluZm8gPSB0aGlzLl9wbHVnaW5JbmZvcy5maW5kKGluZm8gPT4gaW5mby5zdHJlYW0gPT09IHN0cmVhbSk7XG5cbiAgICAgICAgaWYgKCFwbHVnaW5JbmZvKVxuICAgICAgICAgICAgdGhpcy5fcGx1Z2luSW5mb3MucHVzaCh7IHN0cmVhbTogc3RyZWFtLCBwbHVnaW46IHBsdWdpbiB9KTtcbiAgICAgICAgZWxzZSBpZiAocGx1Z2luSW5mby5wbHVnaW4gIT09IHBsdWdpbikge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFtwbHVnaW5JbmZvLnBsdWdpbi5uYW1lLCBwbHVnaW4ubmFtZV0uam9pbignLCAnKTtcblxuICAgICAgICAgICAgdGhpcy5tdWx0aXBsZVN0cmVhbUVycm9yID0gbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5tdWx0aXBsZVNhbWVTdHJlYW1SZXBvcnRlcnMsIG1lc3NhZ2UpO1xuXG4gICAgICAgICAgICB0aGlzLl90YXNrLmVtaXQoJ2RvbmUnKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXBvcnRlclN0cmVhbUNvbnRyb2xsZXI7XG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0ZXItc3RyZWFtLWNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVubmVyL3JlcG9ydGVyLXN0cmVhbS1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsK0NBQWlEO0FBQ2pELDJDQUFpRDtBQVNqRCxNQUFNLHdCQUF3QjtJQUsxQixZQUFvQixJQUFrQixFQUFFLFNBQXFCO1FBQ3pELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFFaEMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtZQUM3QixNQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGtCQUFrQixDQUFFLE1BQWdCLEVBQUUsTUFBMEI7UUFDbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBRTFFLElBQUksQ0FBQyxVQUFVO1lBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQzFELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUU7WUFDbkMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLHNCQUFZLENBQUMsc0JBQWMsQ0FBQywyQkFBMkIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVqRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV4QixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSjtBQUVELGtCQUFlLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBSZXBvcnRlciBmcm9tICcuLi9yZXBvcnRlcic7XG5pbXBvcnQgUmVwb3J0ZXJQbHVnaW5Ib3N0IGZyb20gJy4uL3JlcG9ydGVyL3BsdWdpbi1ob3N0JztcblxuaW50ZXJmYWNlIFBsdWdpbkluZm8ge1xuICAgIHN0cmVhbTogV3JpdGFibGU7XG4gICAgcGx1Z2luOiBSZXBvcnRlclBsdWdpbkhvc3Q7XG59XG5cbmNsYXNzIFJlcG9ydGVyU3RyZWFtQ29udHJvbGxlciB7XG4gICAgcHVibGljIG11bHRpcGxlU3RyZWFtRXJyb3I6IEdlbmVyYWxFcnJvciB8IG51bGw7XG4gICAgcHJpdmF0ZSBfcGx1Z2luSW5mb3M6IFBsdWdpbkluZm9bXTtcbiAgICBwcml2YXRlIF90YXNrOiBFdmVudEVtaXR0ZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHRhc2s6IEV2ZW50RW1pdHRlciwgcmVwb3J0ZXJzOiBSZXBvcnRlcltdKSB7XG4gICAgICAgIHRoaXMuX3BsdWdpbkluZm9zID0gW107XG4gICAgICAgIHRoaXMuX3Rhc2sgPSB0YXNrO1xuICAgICAgICB0aGlzLm11bHRpcGxlU3RyZWFtRXJyb3IgPSBudWxsO1xuXG4gICAgICAgIHJlcG9ydGVycy5mb3JFYWNoKCh7IHBsdWdpbiB9KSA9PiB7XG4gICAgICAgICAgICBwbHVnaW4uc3RyZWFtQ29udHJvbGxlciA9IHRoaXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnN1cmVVbmlxdWVTdHJlYW0gKHN0cmVhbTogV3JpdGFibGUsIHBsdWdpbjogUmVwb3J0ZXJQbHVnaW5Ib3N0KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBsdWdpbkluZm8gPSB0aGlzLl9wbHVnaW5JbmZvcy5maW5kKGluZm8gPT4gaW5mby5zdHJlYW0gPT09IHN0cmVhbSk7XG5cbiAgICAgICAgaWYgKCFwbHVnaW5JbmZvKVxuICAgICAgICAgICAgdGhpcy5fcGx1Z2luSW5mb3MucHVzaCh7IHN0cmVhbTogc3RyZWFtLCBwbHVnaW46IHBsdWdpbiB9KTtcbiAgICAgICAgZWxzZSBpZiAocGx1Z2luSW5mby5wbHVnaW4gIT09IHBsdWdpbikge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFtwbHVnaW5JbmZvLnBsdWdpbi5uYW1lLCBwbHVnaW4ubmFtZV0uam9pbignLCAnKTtcblxuICAgICAgICAgICAgdGhpcy5tdWx0aXBsZVN0cmVhbUVycm9yID0gbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5tdWx0aXBsZVNhbWVTdHJlYW1SZXBvcnRlcnMsIG1lc3NhZ2UpO1xuXG4gICAgICAgICAgICB0aGlzLl90YXNrLmVtaXQoJ2RvbmUnKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXBvcnRlclN0cmVhbUNvbnRyb2xsZXI7XG4iXX0=
@@ -1,134 +1,153 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- const lodash_1 = require("lodash");
26
- const moment_1 = __importDefault(require("moment"));
27
- const async_event_emitter_1 = __importDefault(require("../../utils/async-event-emitter"));
28
- const browser_job_1 = __importDefault(require("../browser-job"));
29
- const screenshots_1 = __importDefault(require("../../screenshots"));
30
- const warning_log_1 = __importDefault(require("../../notifications/warning-log"));
31
- const fixture_hook_controller_1 = __importDefault(require("../fixture-hook-controller"));
32
- const clientScriptsRouting = __importStar(require("../../custom-client-scripts/routing"));
33
- const videos_1 = __importDefault(require("../../video-recorder/videos"));
34
- const phase_1 = __importDefault(require("./phase"));
35
- class Task extends async_event_emitter_1.default {
36
- constructor(tests, browserConnectionGroups, proxy, opts, runnerWarningLog) {
37
- super({ captureRejections: true });
38
- this._timeStamp = moment_1.default();
39
- this._phase = phase_1.default.initialized;
40
- this.browserConnectionGroups = browserConnectionGroups;
41
- this.tests = tests;
42
- this.opts = opts;
43
- this._proxy = proxy;
44
- this.warningLog = new warning_log_1.default();
45
- runnerWarningLog.copyTo(this.warningLog);
46
- const { path, pathPattern, fullPage } = this.opts.screenshots;
47
- this.screenshots = new screenshots_1.default({
48
- enabled: !this.opts.disableScreenshots,
49
- path,
50
- pathPattern,
51
- fullPage
52
- });
53
- this.fixtureHookController = new fixture_hook_controller_1.default(tests, browserConnectionGroups.length);
54
- this._pendingBrowserJobs = this._createBrowserJobs(proxy, this.opts);
55
- this._clientScriptRoutes = clientScriptsRouting.register(proxy, tests);
56
- this.testStructure = this._prepareTestStructure(tests);
57
- if (this.opts.videoPath) {
58
- const { videoPath, videoOptions, videoEncodingOptions } = this.opts;
59
- this.videos = new videos_1.default(this._pendingBrowserJobs, { videoPath, videoOptions, videoEncodingOptions }, this.warningLog, this._timeStamp);
60
- }
61
- }
62
- _assignBrowserJobEventHandlers(job) {
63
- job.on('test-run-start', async (testRun) => {
64
- await this.emit('test-run-start', testRun);
65
- });
66
- job.on('test-run-done', async (testRun) => {
67
- await this.emit('test-run-done', testRun);
68
- if (this.opts.stopOnFirstFail && testRun.errs.length) {
69
- this.abort();
70
- await this.emit('done');
71
- }
72
- });
73
- job.once('start', async () => {
74
- if (this._phase !== phase_1.default.started) {
75
- this._phase = phase_1.default.started;
76
- await this.emit('start');
77
- }
78
- });
79
- job.once('done', async () => {
80
- await this.emit('browser-job-done', job);
81
- lodash_1.pull(this._pendingBrowserJobs, job);
82
- if (!this._pendingBrowserJobs.length) {
83
- this._phase = phase_1.default.done;
84
- await this.emit('done');
85
- }
86
- });
87
- job.on('test-action-start', async (args) => {
88
- await this.emit('test-action-start', args);
89
- });
90
- job.on('test-action-done', async (args) => {
91
- if (this._phase === phase_1.default.done)
92
- return;
93
- await this.emit('test-action-done', args);
94
- });
95
- }
96
- _prepareTestStructure(tests) {
97
- const groups = lodash_1.groupBy(tests, 'fixture.id');
98
- return Object.keys(groups).map(fixtureId => {
99
- const testsByGroup = groups[fixtureId];
100
- const fixture = testsByGroup[0].fixture;
101
- return {
102
- fixture: {
103
- id: fixture.id,
104
- name: fixture.name,
105
- tests: testsByGroup.map(test => {
106
- return {
107
- id: test.id,
108
- name: test.name,
109
- skip: test.skip
110
- };
111
- })
112
- }
113
- };
114
- });
115
- }
116
- _createBrowserJobs(proxy, opts) {
117
- return this.browserConnectionGroups.map(browserConnectionGroup => {
118
- const job = new browser_job_1.default(this.tests, browserConnectionGroup, proxy, this.screenshots, this.warningLog, this.fixtureHookController, opts);
119
- this._assignBrowserJobEventHandlers(job);
120
- browserConnectionGroup.map(bc => bc.addJob(job));
121
- return job;
122
- });
123
- }
124
- unRegisterClientScriptRouting() {
125
- clientScriptsRouting.unRegister(this._proxy, this._clientScriptRoutes);
126
- }
127
- // API
128
- abort() {
129
- this._pendingBrowserJobs.forEach(job => job.abort());
130
- }
131
- }
132
- exports.default = Task;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const lodash_1 = require("lodash");
26
+ const moment_1 = __importDefault(require("moment"));
27
+ const async_event_emitter_1 = __importDefault(require("../../utils/async-event-emitter"));
28
+ const browser_job_1 = __importDefault(require("../browser-job"));
29
+ const screenshots_1 = __importDefault(require("../../screenshots"));
30
+ const warning_log_1 = __importDefault(require("../../notifications/warning-log"));
31
+ const fixture_hook_controller_1 = __importDefault(require("../fixture-hook-controller"));
32
+ const clientScriptsRouting = __importStar(require("../../custom-client-scripts/routing"));
33
+ const videos_1 = __importDefault(require("../../video-recorder/videos"));
34
+ const phase_1 = __importDefault(require("./phase"));
35
+ class Task extends async_event_emitter_1.default {
36
+ constructor({ tests, browserConnectionGroups, proxy, opts, runnerWarningLog, compilerService }) {
37
+ super({ captureRejections: true });
38
+ this._timeStamp = moment_1.default();
39
+ this._phase = phase_1.default.initialized;
40
+ this.browserConnectionGroups = browserConnectionGroups;
41
+ this.tests = tests;
42
+ this.opts = opts;
43
+ this._proxy = proxy;
44
+ this.warningLog = new warning_log_1.default();
45
+ this._compilerService = compilerService;
46
+ runnerWarningLog.copyTo(this.warningLog);
47
+ const { path, pathPattern, fullPage } = this.opts.screenshots;
48
+ this.screenshots = new screenshots_1.default({
49
+ enabled: !this.opts.disableScreenshots,
50
+ path,
51
+ pathPattern,
52
+ fullPage
53
+ });
54
+ this.fixtureHookController = new fixture_hook_controller_1.default(tests, browserConnectionGroups.length);
55
+ this._pendingBrowserJobs = this._createBrowserJobs(proxy, this.opts);
56
+ this._clientScriptRoutes = clientScriptsRouting.register(proxy, tests);
57
+ this.testStructure = this._prepareTestStructure(tests);
58
+ if (this.opts.videoPath) {
59
+ const { videoPath, videoOptions, videoEncodingOptions } = this.opts;
60
+ this.videos = new videos_1.default(this._pendingBrowserJobs, { videoPath, videoOptions, videoEncodingOptions }, this.warningLog, this._timeStamp);
61
+ }
62
+ }
63
+ async _copyWarningsFromCompilerService(testRun) {
64
+ if (!this._compilerService)
65
+ return;
66
+ const warnings = await this._compilerService.getWarningMessages({ testRunId: testRun.id });
67
+ warnings.forEach(warning => {
68
+ testRun.warningLog.addWarning(warning);
69
+ });
70
+ }
71
+ _assignBrowserJobEventHandlers(job) {
72
+ job.on('test-run-start', async (testRun) => {
73
+ await this.emit('test-run-start', testRun);
74
+ });
75
+ job.on('test-run-done', async (testRun) => {
76
+ await this._copyWarningsFromCompilerService(testRun);
77
+ await this.emit('test-run-done', testRun);
78
+ if (this.opts.stopOnFirstFail && testRun.errs.length) {
79
+ this.abort();
80
+ await this.emit('done');
81
+ }
82
+ });
83
+ job.once('start', async () => {
84
+ if (this._phase !== phase_1.default.started) {
85
+ this._phase = phase_1.default.started;
86
+ await this.emit('start');
87
+ }
88
+ });
89
+ job.once('done', async () => {
90
+ await this.emit('browser-job-done', job);
91
+ lodash_1.pull(this._pendingBrowserJobs, job);
92
+ if (!this._pendingBrowserJobs.length) {
93
+ this._phase = phase_1.default.done;
94
+ await this.emit('done');
95
+ }
96
+ });
97
+ job.on('test-action-start', async (args) => {
98
+ await this.emit('test-action-start', args);
99
+ });
100
+ job.on('test-action-done', async (args) => {
101
+ if (this._phase === phase_1.default.done)
102
+ return;
103
+ await this.emit('test-action-done', args);
104
+ });
105
+ }
106
+ _prepareTestStructure(tests) {
107
+ const groups = lodash_1.groupBy(tests, 'fixture.id');
108
+ return Object.keys(groups).map(fixtureId => {
109
+ const testsByGroup = groups[fixtureId];
110
+ const fixture = testsByGroup[0].fixture;
111
+ return {
112
+ fixture: {
113
+ id: fixture.id,
114
+ name: fixture.name,
115
+ tests: testsByGroup.map(test => {
116
+ return {
117
+ id: test.id,
118
+ name: test.name,
119
+ skip: test.skip
120
+ };
121
+ })
122
+ }
123
+ };
124
+ });
125
+ }
126
+ _createBrowserJobs(proxy, opts) {
127
+ return this.browserConnectionGroups.map(browserConnectionGroup => {
128
+ const job = new browser_job_1.default({
129
+ tests: this.tests,
130
+ browserConnections: browserConnectionGroup,
131
+ screenshots: this.screenshots,
132
+ warningLog: this.warningLog,
133
+ fixtureHookController: this.fixtureHookController,
134
+ compilerService: this._compilerService,
135
+ proxy,
136
+ opts
137
+ });
138
+ this._assignBrowserJobEventHandlers(job);
139
+ browserConnectionGroup.map(bc => bc.addJob(job));
140
+ return job;
141
+ });
142
+ }
143
+ unRegisterClientScriptRouting() {
144
+ clientScriptsRouting.unRegister(this._proxy, this._clientScriptRoutes);
145
+ }
146
+ // API
147
+ abort() {
148
+ this._pendingBrowserJobs.forEach(job => job.abort());
149
+ }
150
+ }
151
+ exports.default = Task;
133
152
  module.exports = exports.default;
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVubmVyL3Rhc2svaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQWlEO0FBQ2pELG9EQUE0QjtBQUM1QiwwRkFBZ0U7QUFDaEUsaUVBQXdDO0FBQ3hDLG9FQUE0QztBQUM1QyxrRkFBeUQ7QUFDekQseUZBQStEO0FBQy9ELDBGQUE0RTtBQUM1RSx5RUFBaUQ7QUFRakQsb0RBQWdDO0FBRWhDLE1BQXFCLElBQUssU0FBUSw2QkFBaUI7SUFlL0MsWUFDSSxLQUFhLEVBQ2IsdUJBQThDLEVBQzlDLEtBQVksRUFBRSxJQUE2QixFQUMzQyxnQkFBNEI7UUFDNUIsS0FBSyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsVUFBVSxHQUFnQixnQkFBTSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBb0IsZUFBUyxDQUFDLFdBQVcsQ0FBQztRQUNyRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLEtBQUssR0FBcUIsS0FBSyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQXNCLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFvQixLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBZ0IsSUFBSSxxQkFBVSxFQUFFLENBQUM7UUFFaEQsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV6QyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQW9DLENBQUM7UUFFdkYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHFCQUFXLENBQUM7WUFDL0IsT0FBTyxFQUFFLENB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QUcsR0FBRyxJQUFJLHFCQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUUzSSxJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRWpELE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sNkJBQTZCO1FBQ2hDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxNQUFNO0lBQ0MsS0FBSztRQUNSLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0o7QUEvSUQsdUJBK0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ3JvdXBCeSwgcHVsbCBhcyByZW1vdmUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IEFzeW5jRXZlbnRFbWl0dGVyIGZyb20gJy4uLy4uL3V0aWxzL2FzeW5jLWV2ZW50LWVtaXR0ZXInO1xuaW1wb3J0IEJyb3dzZXJKb2IgZnJvbSAnLi4vYnJvd3Nlci1qb2InO1xuaW1wb3J0IFNjcmVlbnNob3RzIGZyb20gJy4uLy4uL3NjcmVlbnNob3RzJztcbmltcG9ydCBXYXJuaW5nTG9nIGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1sb2cnO1xuaW1wb3J0IEZpeHR1cmVIb29rQ29udHJvbGxlciBmcm9tICcuLi9maXh0dXJlLWhvb2stY29udHJvbGxlcic7XG5pbXBvcnQgKiBhcyBjbGllbnRTY3JpcHRzUm91dGluZyBmcm9tICcuLi8uLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvcm91dGluZyc7XG5pbXBvcnQgVmlkZW9zIGZyb20gJy4uLy4uL3ZpZGVvLXJlY29yZGVyL3ZpZGVvcyc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi8uLi90ZXN0LXJ1bic7XG5pbXBvcnQgeyBQcm94eSB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBY3Rpb25FdmVudEFyZywgUmVwb3J0ZWRUZXN0U3RydWN0dXJlSXRlbSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL2Jyb3dzZXIvY29ubmVjdGlvbic7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi8uLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IHsgVmlkZW9PcHRpb25zIH0gZnJvbSAnLi4vLi4vdmlkZW8tcmVjb3JkZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgVGFza1BoYXNlIGZyb20gJy4vcGhhc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYXNrIGV4dGVuZHMgQXN5bmNFdmVudEVtaXR0ZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVTdGFtcDogbW9tZW50Lk1vbWVudDtcbiAgICBwcml2YXRlIF9waGFzZTogVGFza1BoYXNlO1xuICAgIHB1YmxpYyBicm93c2VyQ29ubmVjdGlvbkdyb3VwczogQnJvd3NlckNvbm5lY3Rpb25bXVtdO1xuICAgIHB1YmxpYyByZWFkb25seSB0ZXN0czogVGVzdFtdO1xuICAgIHB1YmxpYyByZWFkb25seSBvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcm94eTogUHJveHk7XG4gICAgcHVibGljIHJlYWRvbmx5IHdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgcHVibGljIHJlYWRvbmx5IHNjcmVlbnNob3RzOiBTY3JlZW5zaG90cztcbiAgICBwdWJsaWMgcmVhZG9ubHkgZml4dHVyZUhvb2tDb250cm9sbGVyOiBGaXh0dXJlSG9va0NvbnRyb2xsZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGVuZGluZ0Jyb3dzZXJKb2JzOiBCcm93c2VySm9iW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2xpZW50U2NyaXB0Um91dGVzOiBzdHJpbmdbXTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGVzdFN0cnVjdHVyZTogUmVwb3J0ZWRUZXN0U3RydWN0dXJlSXRlbVtdO1xuICAgIHB1YmxpYyByZWFkb25seSB2aWRlb3M/OiBWaWRlb3M7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKFxuICAgICAgICB0ZXN0czogVGVzdFtdLFxuICAgICAgICBicm93c2VyQ29ubmVjdGlvbkdyb3VwczogQnJvd3NlckNvbm5lY3Rpb25bXVtdLFxuICAgICAgICBwcm94eTogUHJveHksIG9wdHM6IERpY3Rpb25hcnk8T3B0aW9uVmFsdWU+LFxuICAgICAgICBydW5uZXJXYXJuaW5nTG9nOiBXYXJuaW5nTG9nKSB7XG4gICAgICAgIHN1cGVyKHsgY2FwdHVyZVJlamVjdGlvbnM6IHRydWUgfSk7XG5cbiAgICAgICAgdGhpcy5fdGltZVN0YW1wICAgICAgICAgICAgICA9IG1vbWVudCgpO1xuICAgICAgICB0aGlzLl9waGFzZSAgICAgICAgICAgICAgICAgID0gVGFza1BoYXNlLmluaXRpYWxpemVkO1xuICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR3JvdXBzID0gYnJvd3NlckNvbm5lY3Rpb25Hcm91cHM7XG4gICAgICAgIHRoaXMudGVzdHMgICAgICAgICAgICAgICAgICAgPSB0ZXN0cztcbiAgICAgICAgdGhpcy5vcHRzICAgICAgICAgICAgICAgICAgICA9IG9wdHM7XG4gICAgICAgIHRoaXMuX3Byb3h5ICAgICAgICAgICAgICAgICAgPSBwcm94eTtcbiAgICAgICAgdGhpcy53YXJuaW5nTG9nICAgICAgICAgICAgICA9IG5ldyBXYXJuaW5nTG9nKCk7XG5cbiAgICAgICAgcnVubmVyV2FybmluZ0xvZy5jb3B5VG8odGhpcy53YXJuaW5nTG9nKTtcblxuICAgICAgICBjb25zdCB7IHBhdGgsIHBhdGhQYXR0ZXJuLCBmdWxsUGFnZSB9ID0gdGhpcy5vcHRzLnNjcmVlbnNob3RzIGFzIFNjcmVlbnNob3RPcHRpb25WYWx1ZTtcblxuICAgICAgICB0aGlzLnNjcmVlbnNob3RzID0gbmV3IFNjcmVlbnNob3RzKHtcbiAgICAgICAgICAgIGVuYWJsZWQ6ICF0aGlzLm9wdHMuZGlzYWJsZVNjcmVlbnNob3RzLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHBhdGhQYXR0ZXJuLFxuICAgICAgICAgICAgZnVsbFBhZ2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5maXh0dXJlSG9va0NvbnRyb2xsZXIgPSBuZXcgRml4dHVyZUhvb2tDb250cm9sbGVyKHRlc3RzLCBicm93c2VyQ29ubmVjdGlvbkdyb3Vwcy5sZW5ndGgpO1xuICAgICAgICB0aGlzLl9wZW5kaW5nQnJvd3NlckpvYnMgICA9IHRoaXMuX2NyZWF0ZUJyb3dzZXJKb2JzKHByb3h5LCB0aGlzLm9wdHMpO1xuICAgICAgICB0aGlzLl9jbGllbnRTY3JpcHRSb3V0ZXMgICA9IGNsaWVudFNjcmlwdHNSb3V0aW5nLnJlZ2lzdGVyKHByb3h5LCB0ZXN0cyk7XG4gICAgICAgIHRoaXMudGVzdFN0cnVjdHVyZSAgICAgICAgID0gdGhpcy5fcHJlcGFyZVRlc3RTdHJ1Y3R1cmUodGVzdHMpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdHMudmlkZW9QYXRoKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZpZGVvUGF0aCwgdmlkZW9PcHRpb25zLCB2aWRlb0VuY29kaW5nT3B0aW9ucyB9ID0gdGhpcy5vcHRzO1xuXG4gICAgICAgICAgICB0aGlzLnZpZGVvcyA9IG5ldyBWaWRlb3ModGhpcy5fcGVuZGluZ0Jyb3dzZXJKb2JzLCB7IHZpZGVvUGF0aCwgdmlkZW9PcHRpb25zLCB2aWRlb0VuY29kaW5nT3B0aW9ucyB9IGFzIHVua25vd24gYXMgVmlkZW9PcHRpb25zLCB0aGlzLndhcm5pbmdMb2csIHRoaXMuX3RpbWVTdGFtcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hc3NpZ25Ccm93c2VySm9iRXZlbnRIYW5kbGVycyAoam9iOiBCcm93c2VySm9iKTogdm9pZCB7XG4gICAgICAgIGpvYi5vbigndGVzdC1ydW4tc3RhcnQnLCBhc3luYyAodGVzdFJ1bjogVGVzdFJ1bikgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCd0ZXN0LXJ1bi1zdGFydCcsIHRlc3RSdW4pO1xuICAgICAgICB9KTtcblxuICAgICAgICBqb2Iub24oJ3Rlc3QtcnVuLWRvbmUnLCBhc3luYyAodGVzdFJ1bjogVGVzdFJ1bikgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCd0ZXN0LXJ1bi1kb25lJywgdGVzdFJ1bik7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuc3RvcE9uRmlyc3RGYWlsICYmIHRlc3RSdW4uZXJycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFib3J0KCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2RvbmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgam9iLm9uY2UoJ3N0YXJ0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BoYXNlICE9PSBUYXNrUGhhc2Uuc3RhcnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BoYXNlID0gVGFza1BoYXNlLnN0YXJ0ZWQ7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3N0YXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGpvYi5vbmNlKCdkb25lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdicm93c2VyLWpvYi1kb25lJywgam9iKTtcblxuICAgICAgICAgICAgcmVtb3ZlKHRoaXMuX3BlbmRpbmdCcm93c2VySm9icywgam9iKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nQnJvd3NlckpvYnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBUYXNrUGhhc2UuZG9uZTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnZG9uZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBqb2Iub24oJ3Rlc3QtYWN0aW9uLXN0YXJ0JywgYXN5bmMgKGFyZ3M6IEFjdGlvbkV2ZW50QXJnKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3Rlc3QtYWN0aW9uLXN0YXJ0JywgYXJncyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGpvYi5vbigndGVzdC1hY3Rpb24tZG9uZScsIGFzeW5jIChhcmdzOiBBY3Rpb25FdmVudEFyZykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BoYXNlID09PSBUYXNrUGhhc2UuZG9uZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgndGVzdC1hY3Rpb24tZG9uZScsIGFyZ3MpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVUZXN0U3RydWN0dXJlICh0ZXN0czogVGVzdFtdKTogUmVwb3J0ZWRUZXN0U3RydWN0dXJlSXRlbVtdIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gZ3JvdXBCeSh0ZXN0cywgJ2ZpeHR1cmUuaWQnKTtcblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZ3JvdXBzKS5tYXAoZml4dHVyZUlkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RzQnlHcm91cCA9IGdyb3Vwc1tmaXh0dXJlSWRdO1xuICAgICAgICAgICAgY29uc3QgZml4dHVyZSAgICAgID0gdGVzdHNCeUdyb3VwWzBdLmZpeHR1cmU7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZml4dHVyZToge1xuICAgICAgICAgICAgICAgICAgICBpZDogICAgZml4dHVyZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogIGZpeHR1cmUubmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIHRlc3RzOiB0ZXN0c0J5R3JvdXAubWFwKHRlc3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogICB0ZXN0LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRlc3QubmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcDogdGVzdC5za2lwXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUJyb3dzZXJKb2JzIChwcm94eTogUHJveHksIG9wdHM6IERpY3Rpb25hcnk8T3B0aW9uVmFsdWU+KTogQnJvd3NlckpvYltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3NlckNvbm5lY3Rpb25Hcm91cHMubWFwKGJyb3dzZXJDb25uZWN0aW9uR3JvdXAgPT4ge1xuICAgICAgICAgICAgY29uc3Qgam9iID0gbmV3IEJyb3dzZXJKb2IodGhpcy50ZXN0cywgYnJvd3NlckNvbm5lY3Rpb25Hcm91cCwgcHJveHksIHRoaXMuc2NyZWVuc2hvdHMsIHRoaXMud2FybmluZ0xvZywgdGhpcy5maXh0dXJlSG9va0NvbnRyb2xsZXIsIG9wdHMpO1xuXG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25Ccm93c2VySm9iRXZlbnRIYW5kbGVycyhqb2IpO1xuICAgICAgICAgICAgYnJvd3NlckNvbm5lY3Rpb25Hcm91cC5tYXAoYmMgPT4gYmMuYWRkSm9iKGpvYikpO1xuXG4gICAgICAgICAgICByZXR1cm4gam9iO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdW5SZWdpc3RlckNsaWVudFNjcmlwdFJvdXRpbmcgKCk6IHZvaWQge1xuICAgICAgICBjbGllbnRTY3JpcHRzUm91dGluZy51blJlZ2lzdGVyKHRoaXMuX3Byb3h5LCB0aGlzLl9jbGllbnRTY3JpcHRSb3V0ZXMpO1xuICAgIH1cblxuICAgIC8vIEFQSVxuICAgIHB1YmxpYyBhYm9ydCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdCcm93c2VySm9icy5mb3JFYWNoKGpvYiA9PiBqb2IuYWJvcnQoKSk7XG4gICAgfVxufVxuIl19
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVubmVyL3Rhc2svaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQWlEO0FBQ2pELG9EQUE0QjtBQUM1QiwwRkFBZ0U7QUFDaEUsaUVBQXdDO0FBQ3hDLG9FQUE0QztBQUM1QyxrRkFBeUQ7QUFDekQseUZBQStEO0FBQy9ELDBGQUE0RTtBQUM1RSx5RUFBaUQ7QUFhakQsb0RBQWdDO0FBR2hDLE1BQXFCLElBQUssU0FBUSw2QkFBaUI7SUFnQi9DLFlBQW9CLEVBQ2hCLEtBQUssRUFDTCx1QkFBdUIsRUFDdkIsS0FBSyxFQUNMLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNSO1FBQ1AsS0FBSyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsVUFBVSxHQUFnQixnQkFBTSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBb0IsZUFBUyxDQUFDLFdBQVcsQ0FBQztRQUNyRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLEtBQUssR0FBcUIsS0FBSyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQXNCLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFvQixLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBZ0IsSUFBSSxxQkFBVSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixHQUFVLGVBQWUsQ0FBQztRQUUvQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpDLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBb0MsQ0FBQztR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TSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxNQUFNO0lBQ0MsS0FBSztRQUNSLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0o7QUF6S0QsdUJBeUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ3JvdXBCeSwgcHVsbCBhcyByZW1vdmUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IEFzeW5jRXZlbnRFbWl0dGVyIGZyb20gJy4uLy4uL3V0aWxzL2FzeW5jLWV2ZW50LWVtaXR0ZXInO1xuaW1wb3J0IEJyb3dzZXJKb2IgZnJvbSAnLi4vYnJvd3Nlci1qb2InO1xuaW1wb3J0IFNjcmVlbnNob3RzIGZyb20gJy4uLy4uL3NjcmVlbnNob3RzJztcbmltcG9ydCBXYXJuaW5nTG9nIGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1sb2cnO1xuaW1wb3J0IEZpeHR1cmVIb29rQ29udHJvbGxlciBmcm9tICcuLi9maXh0dXJlLWhvb2stY29udHJvbGxlcic7XG5pbXBvcnQgKiBhcyBjbGllbnRTY3JpcHRzUm91dGluZyBmcm9tICcuLi8uLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvcm91dGluZyc7XG5pbXBvcnQgVmlkZW9zIGZyb20gJy4uLy4uL3ZpZGVvLXJlY29yZGVyL3ZpZGVvcyc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi8uLi90ZXN0LXJ1bic7XG5pbXBvcnQgeyBQcm94eSB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICAgIEFjdGlvbkV2ZW50QXJnLFxuICAgIFJlcG9ydGVkVGVzdFN0cnVjdHVyZUl0ZW0sXG4gICAgVGFza0luaXRcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9icm93c2VyL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IFRlc3QgZnJvbSAnLi4vLi4vYXBpL3N0cnVjdHVyZS90ZXN0JztcbmltcG9ydCB7IFZpZGVvT3B0aW9ucyB9IGZyb20gJy4uLy4uL3ZpZGVvLXJlY29yZGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IFRhc2tQaGFzZSBmcm9tICcuL3BoYXNlJztcbmltcG9ydCBDb21waWxlclNlcnZpY2UgZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcGlsZXIvaG9zdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhc2sgZXh0ZW5kcyBBc3luY0V2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGltZVN0YW1wOiBtb21lbnQuTW9tZW50O1xuICAgIHByaXZhdGUgX3BoYXNlOiBUYXNrUGhhc2U7XG4gICAgcHVibGljIGJyb3dzZXJDb25uZWN0aW9uR3JvdXBzOiBCcm93c2VyQ29ubmVjdGlvbltdW107XG4gICAgcHVibGljIHJlYWRvbmx5IHRlc3RzOiBUZXN0W107XG4gICAgcHVibGljIHJlYWRvbmx5IG9wdHM6IERpY3Rpb25hcnk8T3B0aW9uVmFsdWU+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Byb3h5OiBQcm94eTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2FybmluZ0xvZzogV2FybmluZ0xvZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2NyZWVuc2hvdHM6IFNjcmVlbnNob3RzO1xuICAgIHB1YmxpYyByZWFkb25seSBmaXh0dXJlSG9va0NvbnRyb2xsZXI6IEZpeHR1cmVIb29rQ29udHJvbGxlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nQnJvd3NlckpvYnM6IEJyb3dzZXJKb2JbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnRTY3JpcHRSb3V0ZXM6IHN0cmluZ1tdO1xuICAgIHB1YmxpYyByZWFkb25seSB0ZXN0U3RydWN0dXJlOiBSZXBvcnRlZFRlc3RTdHJ1Y3R1cmVJdGVtW107XG4gICAgcHVibGljIHJlYWRvbmx5IHZpZGVvcz86IFZpZGVvcztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb21waWxlclNlcnZpY2U/OiBDb21waWxlclNlcnZpY2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHtcbiAgICAgICAgdGVzdHMsXG4gICAgICAgIGJyb3dzZXJDb25uZWN0aW9uR3JvdXBzLFxuICAgICAgICBwcm94eSxcbiAgICAgICAgb3B0cyxcbiAgICAgICAgcnVubmVyV2FybmluZ0xvZyxcbiAgICAgICAgY29tcGlsZXJTZXJ2aWNlXG4gICAgfTogVGFza0luaXQpIHtcbiAgICAgICAgc3VwZXIoeyBjYXB0dXJlUmVqZWN0aW9uczogdHJ1ZSB9KTtcblxuICAgICAgICB0aGlzLl90aW1lU3RhbXAgICAgICAgICAgICAgID0gbW9tZW50KCk7XG4gICAgICAgIHRoaXMuX3BoYXNlICAgICAgICAgICAgICAgICAgPSBUYXNrUGhhc2UuaW5pdGlhbGl6ZWQ7XG4gICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb25Hcm91cHMgPSBicm93c2VyQ29ubmVjdGlvbkdyb3VwcztcbiAgICAgICAgdGhpcy50ZXN0cyAgICAgICAgICAgICAgICAgICA9IHRlc3RzO1xuICAgICAgICB0aGlzLm9wdHMgICAgICAgICAgICAgICAgICAgID0gb3B0cztcbiAgICAgICAgdGhpcy5fcHJveHkgICAgICAgICAgICAgICAgICA9IHByb3h5O1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cgICAgICAgICAgICAgID0gbmV3IFdhcm5pbmdMb2coKTtcbiAgICAgICAgdGhpcy5fY29tcGlsZXJTZXJ2aWNlICAgICAgICA9IGNvbXBpbGVyU2VydmljZTtcblxuICAgICAgICBydW5uZXJXYXJuaW5nTG9nLmNvcHlUbyh0aGlzLndhcm5pbmdMb2cpO1xuXG4gICAgICAgIGNvbnN0IHsgcGF0aCwgcGF0aFBhdHRlcm4sIGZ1bGxQYWdlIH0gPSB0aGlzLm9wdHMuc2NyZWVuc2hvdHMgYXMgU2NyZWVuc2hvdE9wdGlvblZhbHVlO1xuXG4gICAgICAgIHRoaXMuc2NyZWVuc2hvdHMgPSBuZXcgU2NyZWVuc2hvdHMoe1xuICAgICAgICAgICAgZW5hYmxlZDogIXRoaXMub3B0cy5kaXNhYmxlU2NyZWVuc2hvdHMsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgcGF0aFBhdHRlcm4sXG4gICAgICAgICAgICBmdWxsUGFnZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpeHR1cmVIb29rQ29udHJvbGxlciA9IG5ldyBGaXh0dXJlSG9va0NvbnRyb2xsZXIodGVzdHMsIGJyb3dzZXJDb25uZWN0aW9uR3JvdXBzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdCcm93c2VySm9icyAgID0gdGhpcy5fY3JlYXRlQnJvd3NlckpvYnMocHJveHksIHRoaXMub3B0cyk7XG4gICAgICAgIHRoaXMuX2NsaWVudFNjcmlwdFJvdXRlcyAgID0gY2xpZW50U2NyaXB0c1JvdXRpbmcucmVnaXN0ZXIocHJveHksIHRlc3RzKTtcbiAgICAgICAgdGhpcy50ZXN0U3RydWN0dXJlICAgICAgICAgPSB0aGlzLl9wcmVwYXJlVGVzdFN0cnVjdHVyZSh0ZXN0cyk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy52aWRlb1BhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmlkZW9QYXRoLCB2aWRlb09wdGlvbnMsIHZpZGVvRW5jb2RpbmdPcHRpb25zIH0gPSB0aGlzLm9wdHM7XG5cbiAgICAgICAgICAgIHRoaXMudmlkZW9zID0gbmV3IFZpZGVvcyh0aGlzLl9wZW5kaW5nQnJvd3NlckpvYnMsIHsgdmlkZW9QYXRoLCB2aWRlb09wdGlvbnMsIHZpZGVvRW5jb2RpbmdPcHRpb25zIH0gYXMgdW5rbm93biBhcyBWaWRlb09wdGlvbnMsIHRoaXMud2FybmluZ0xvZywgdGhpcy5fdGltZVN0YW1wKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2NvcHlXYXJuaW5nc0Zyb21Db21waWxlclNlcnZpY2UgKHRlc3RSdW46IFRlc3RSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb21waWxlclNlcnZpY2UpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBhd2FpdCB0aGlzLl9jb21waWxlclNlcnZpY2UuZ2V0V2FybmluZ01lc3NhZ2VzKHsgdGVzdFJ1bklkOiB0ZXN0UnVuLmlkIH0pO1xuXG4gICAgICAgIHdhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICAgICAgICB0ZXN0UnVuLndhcm5pbmdMb2cuYWRkV2FybmluZyh3YXJuaW5nKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXNzaWduQnJvd3NlckpvYkV2ZW50SGFuZGxlcnMgKGpvYjogQnJvd3NlckpvYik6IHZvaWQge1xuICAgICAgICBqb2Iub24oJ3Rlc3QtcnVuLXN0YXJ0JywgYXN5bmMgKHRlc3RSdW46IFRlc3RSdW4pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgndGVzdC1ydW4tc3RhcnQnLCB0ZXN0UnVuKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgam9iLm9uKCd0ZXN0LXJ1bi1kb25lJywgYXN5bmMgKHRlc3RSdW46IFRlc3RSdW4pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvcHlXYXJuaW5nc0Zyb21Db21waWxlclNlcnZpY2UodGVzdFJ1bik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3Rlc3QtcnVuLWRvbmUnLCB0ZXN0UnVuKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5zdG9wT25GaXJzdEZhaWwgJiYgdGVzdFJ1bi5lcnJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWJvcnQoKTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnZG9uZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBqb2Iub25jZSgnc3RhcnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGhhc2UgIT09IFRhc2tQaGFzZS5zdGFydGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBUYXNrUGhhc2Uuc3RhcnRlZDtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnc3RhcnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgam9iLm9uY2UoJ2RvbmUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2Jyb3dzZXItam9iLWRvbmUnLCBqb2IpO1xuXG4gICAgICAgICAgICByZW1vdmUodGhpcy5fcGVuZGluZ0Jyb3dzZXJKb2JzLCBqb2IpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmdCcm93c2VySm9icy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9waGFzZSA9IFRhc2tQaGFzZS5kb25lO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdkb25lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGpvYi5vbigndGVzdC1hY3Rpb24tc3RhcnQnLCBhc3luYyAoYXJnczogQWN0aW9uRXZlbnRBcmcpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgndGVzdC1hY3Rpb24tc3RhcnQnLCBhcmdzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgam9iLm9uKCd0ZXN0LWFjdGlvbi1kb25lJywgYXN5bmMgKGFyZ3M6IEFjdGlvbkV2ZW50QXJnKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGhhc2UgPT09IFRhc2tQaGFzZS5kb25lKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCd0ZXN0LWFjdGlvbi1kb25lJywgYXJncyk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVRlc3RTdHJ1Y3R1cmUgKHRlc3RzOiBUZXN0W10pOiBSZXBvcnRlZFRlc3RTdHJ1Y3R1cmVJdGVtW10ge1xuICAgICAgICBjb25zdCBncm91cHMgPSBncm91cEJ5KHRlc3RzLCAnZml4dHVyZS5pZCcpO1xuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhncm91cHMpLm1hcChmaXh0dXJlSWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVzdHNCeUdyb3VwID0gZ3JvdXBzW2ZpeHR1cmVJZF07XG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlICAgICAgPSB0ZXN0c0J5R3JvdXBbMF0uZml4dHVyZTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmaXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiAgICBmaXh0dXJlLmlkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAgZml4dHVyZS5uYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgdGVzdHM6IHRlc3RzQnlHcm91cC5tYXAodGVzdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAgIHRlc3QuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGVzdC5uYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwOiB0ZXN0LnNraXBcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlQnJvd3NlckpvYnMgKHByb3h5OiBQcm94eSwgb3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT4pOiBCcm93c2VySm9iW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyQ29ubmVjdGlvbkdyb3Vwcy5tYXAoYnJvd3NlckNvbm5lY3Rpb25Hcm91cCA9PiB7XG4gICAgICAgICAgICBjb25zdCBqb2IgPSBuZXcgQnJvd3NlckpvYih7XG4gICAgICAgICAgICAgICAgdGVzdHM6ICAgICAgICAgICAgICAgICB0aGlzLnRlc3RzLFxuICAgICAgICAgICAgICAgIGJyb3dzZXJDb25uZWN0aW9uczogICAgYnJvd3NlckNvbm5lY3Rpb25Hcm91cCxcbiAgICAgICAgICAgICAgICBzY3JlZW5zaG90czogICAgICAgICAgIHRoaXMuc2NyZWVuc2hvdHMsXG4gICAgICAgICAgICAgICAgd2FybmluZ0xvZzogICAgICAgICAgICB0aGlzLndhcm5pbmdMb2csXG4gICAgICAgICAgICAgICAgZml4dHVyZUhvb2tDb250cm9sbGVyOiB0aGlzLmZpeHR1cmVIb29rQ29udHJvbGxlcixcbiAgICAgICAgICAgICAgICBjb21waWxlclNlcnZpY2U6ICAgICAgIHRoaXMuX2NvbXBpbGVyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm94eSxcbiAgICAgICAgICAgICAgICBvcHRzXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fYXNzaWduQnJvd3NlckpvYkV2ZW50SGFuZGxlcnMoam9iKTtcbiAgICAgICAgICAgIGJyb3dzZXJDb25uZWN0aW9uR3JvdXAubWFwKGJjID0+IGJjLmFkZEpvYihqb2IpKTtcblxuICAgICAgICAgICAgcmV0dXJuIGpvYjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVuUmVnaXN0ZXJDbGllbnRTY3JpcHRSb3V0aW5nICgpOiB2b2lkIHtcbiAgICAgICAgY2xpZW50U2NyaXB0c1JvdXRpbmcudW5SZWdpc3Rlcih0aGlzLl9wcm94eSwgdGhpcy5fY2xpZW50U2NyaXB0Um91dGVzKTtcbiAgICB9XG5cbiAgICAvLyBBUElcbiAgICBwdWJsaWMgYWJvcnQgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wZW5kaW5nQnJvd3NlckpvYnMuZm9yRWFjaChqb2IgPT4gam9iLmFib3J0KCkpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,11 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var TaskPhase;
4
- (function (TaskPhase) {
5
- TaskPhase["initialized"] = "initialized";
6
- TaskPhase["started"] = "started";
7
- TaskPhase["done"] = "done";
8
- })(TaskPhase || (TaskPhase = {}));
9
- exports.default = TaskPhase;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var TaskPhase;
4
+ (function (TaskPhase) {
5
+ TaskPhase["initialized"] = "initialized";
6
+ TaskPhase["started"] = "started";
7
+ TaskPhase["done"] = "done";
8
+ })(TaskPhase || (TaskPhase = {}));
9
+ exports.default = TaskPhase;
10
10
  module.exports = exports.default;
11
11
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVubmVyL3Rhc2svcGhhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFLLFNBSUo7QUFKRCxXQUFLLFNBQVM7SUFDVix3Q0FBMkIsQ0FBQTtJQUMzQixnQ0FBbUIsQ0FBQTtJQUNuQiwwQkFBYSxDQUFBO0FBQ2pCLENBQUMsRUFKSSxTQUFTLEtBQVQsU0FBUyxRQUliO0FBRUQsa0JBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZW51bSBUYXNrUGhhc2Uge1xuICAgIGluaXRpYWxpemVkID0gJ2luaXRpYWxpemVkJyxcbiAgICBzdGFydGVkID0gJ3N0YXJ0ZWQnLFxuICAgIGRvbmUgPSAnZG9uZSdcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFza1BoYXNlO1xuXG4iXX0=