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,107 +1,191 @@
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 child_process_1 = require("child_process");
7
- const io_1 = require("./io");
8
- const test_structure_1 = require("../serialization/test-structure");
9
- const prepare_options_1 = __importDefault(require("../serialization/prepare-options"));
10
- const test_run_tracker_1 = __importDefault(require("../../api/test-run-tracker"));
11
- const proxy_1 = require("../utils/ipc/proxy");
12
- const transport_1 = require("../utils/ipc/transport");
13
- const async_event_emitter_1 = __importDefault(require("../../utils/async-event-emitter"));
14
- const error_list_1 = __importDefault(require("../../errors/error-list"));
15
- const SERVICE_PATH = require.resolve('./service');
16
- class CompilerHost extends async_event_emitter_1.default {
17
- constructor() {
18
- super();
19
- this.runtime = Promise.resolve(void 0);
20
- }
21
- _setupRoutes(proxy) {
22
- proxy.register([
23
- this.executeAction,
24
- this.executeCommand,
25
- this.ready
26
- ], this);
27
- }
28
- async _init(runtime) {
29
- const resolvedRuntime = await runtime;
30
- if (resolvedRuntime)
31
- return resolvedRuntime;
32
- try {
33
- const service = child_process_1.spawn(process.argv0, [SERVICE_PATH], { stdio: [0, 1, 2, 'pipe', 'pipe', 'pipe'] });
34
- // HACK: Node.js definition are not correct when additional I/O channels are sp
35
- const stdio = service.stdio;
36
- const proxy = new proxy_1.IPCProxy(new transport_1.HostTransport(stdio[io_1.HOST_INPUT_FD], stdio[io_1.HOST_OUTPUT_FD], stdio[io_1.HOST_SYNC_FD]));
37
- this._setupRoutes(proxy);
38
- await this.once('ready');
39
- return { proxy, service };
40
- }
41
- catch (e) {
42
- return void 0;
43
- }
44
- }
45
- async _getRuntime() {
46
- const runtime = await this.runtime;
47
- if (!runtime)
48
- throw new Error();
49
- return runtime;
50
- }
51
- async init() {
52
- this.runtime = this._init(this.runtime);
53
- await this.runtime;
54
- }
55
- async stop() {
56
- const { service } = await this._getRuntime();
57
- service.kill();
58
- }
59
- _wrapTestFunction(id, functionName) {
60
- return async (testRun) => {
61
- try {
62
- return await this.runTest({ id, functionName, testRunId: testRun.id });
63
- }
64
- catch (err) {
65
- const errList = new error_list_1.default();
66
- errList.addError(err);
67
- throw errList;
68
- }
69
- };
70
- }
71
- async ready() {
72
- this.emit('ready');
73
- }
74
- async executeAction(data) {
75
- const targetTestRun = test_run_tracker_1.default.activeTestRuns[data.id];
76
- if (!targetTestRun)
77
- return void 0;
78
- return targetTestRun.executeAction(data.apiMethodName, data.command, data.callsite);
79
- }
80
- async executeCommand({ command, id }) {
81
- const targetTestRun = test_run_tracker_1.default.activeTestRuns[id];
82
- if (!targetTestRun)
83
- return void 0;
84
- return targetTestRun.executeCommand(command);
85
- }
86
- async getTests({ sourceList, compilerOptions }) {
87
- const { proxy } = await this._getRuntime();
88
- const units = await proxy.call(this.getTests, { sourceList, compilerOptions });
89
- return test_structure_1.restore(units, (...args) => this._wrapTestFunction(...args));
90
- }
91
- async runTest({ id, functionName, testRunId }) {
92
- const { proxy } = await this._getRuntime();
93
- return await proxy.call(this.runTest, { id, functionName, testRunId });
94
- }
95
- async cleanUp() {
96
- const { proxy } = await this._getRuntime();
97
- await proxy.call(this.cleanUp);
98
- }
99
- async setOptions({ value }) {
100
- const { proxy } = await this._getRuntime();
101
- const preparedOptions = prepare_options_1.default(value);
102
- await proxy.call(this.setOptions, { value: preparedOptions });
103
- }
104
- }
105
- exports.default = CompilerHost;
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 child_process_1 = require("child_process");
7
+ const io_1 = require("./io");
8
+ const test_structure_1 = require("../serialization/test-structure");
9
+ const prepare_options_1 = __importDefault(require("../serialization/prepare-options"));
10
+ const test_run_tracker_1 = __importDefault(require("../../api/test-run-tracker"));
11
+ const proxy_1 = require("../utils/ipc/proxy");
12
+ const transport_1 = require("../utils/ipc/transport");
13
+ const async_event_emitter_1 = __importDefault(require("../../utils/async-event-emitter"));
14
+ const error_list_1 = __importDefault(require("../../errors/error-list"));
15
+ const testcafe_hammerhead_1 = require("testcafe-hammerhead");
16
+ const SERVICE_PATH = require.resolve('./service');
17
+ class CompilerHost extends async_event_emitter_1.default {
18
+ constructor() {
19
+ super();
20
+ this.runtime = Promise.resolve(void 0);
21
+ }
22
+ _setupRoutes(proxy) {
23
+ proxy.register([
24
+ this.executeAction,
25
+ this.executeCommand,
26
+ this.ready,
27
+ this.onRequestHookEvent,
28
+ this.setMock,
29
+ this.setConfigureResponseEventOptions,
30
+ this.setHeaderOnConfigureResponseEvent,
31
+ this.removeHeaderOnConfigureResponseEvent,
32
+ this.executeRequestFilterRulePredicate,
33
+ this.executeMockPredicate,
34
+ this.getWarningMessages,
35
+ this.addRequestEventListeners,
36
+ this.removeRequestEventListeners,
37
+ this.initializeTestRunData
38
+ ], this);
39
+ }
40
+ async _init(runtime) {
41
+ const resolvedRuntime = await runtime;
42
+ if (resolvedRuntime)
43
+ return resolvedRuntime;
44
+ try {
45
+ const service = child_process_1.spawn(process.argv0, [SERVICE_PATH], { stdio: [0, 1, 2, 'pipe', 'pipe', 'pipe'] });
46
+ // HACK: Node.js definition are not correct when additional I/O channels are sp
47
+ const stdio = service.stdio;
48
+ const proxy = new proxy_1.IPCProxy(new transport_1.HostTransport(stdio[io_1.HOST_INPUT_FD], stdio[io_1.HOST_OUTPUT_FD], stdio[io_1.HOST_SYNC_FD]));
49
+ this._setupRoutes(proxy);
50
+ await this.once('ready');
51
+ return { proxy, service };
52
+ }
53
+ catch (e) {
54
+ return void 0;
55
+ }
56
+ }
57
+ async _getRuntime() {
58
+ const runtime = await this.runtime;
59
+ if (!runtime)
60
+ throw new Error('Runtime is not available.');
61
+ return runtime;
62
+ }
63
+ _prepareEventData(eventData) {
64
+ // TODO: Remove eventData._requestContext into 'testcafe-hammerhead' module
65
+ // after switching to the compiler service mode.
66
+ // NOTE: Access to the deprecated property inside of the unserializable 'eventData._requestContext' property
67
+ // causes the node's deprecation warning.
68
+ const clonedEventData = Object.assign({}, eventData);
69
+ // @ts-ignore
70
+ delete clonedEventData._requestContext;
71
+ return clonedEventData;
72
+ }
73
+ async init() {
74
+ this.runtime = this._init(this.runtime);
75
+ await this.runtime;
76
+ }
77
+ async stop() {
78
+ const { service } = await this._getRuntime();
79
+ service.kill();
80
+ }
81
+ _wrapTestFunction(id, functionName) {
82
+ return async (testRun) => {
83
+ try {
84
+ return await this.runTestFn({ id, functionName, testRunId: testRun.id });
85
+ }
86
+ catch (err) {
87
+ const errList = new error_list_1.default();
88
+ errList.addError(err);
89
+ throw errList;
90
+ }
91
+ };
92
+ }
93
+ _wrapRequestFilterRulePredicate({ testId, hookId, ruleId }) {
94
+ return async (requestInfo) => {
95
+ return await this.executeRequestFilterRulePredicate({ testId, hookId, ruleId, requestInfo });
96
+ };
97
+ }
98
+ _wrapMockPredicate({ mock, testId, hookId, ruleId }) {
99
+ mock.body = async (requestInfo, res) => {
100
+ return await this.executeMockPredicate({ testId, hookId, ruleId, requestInfo, res });
101
+ };
102
+ }
103
+ async ready() {
104
+ this.emit('ready');
105
+ }
106
+ async executeAction(data) {
107
+ const targetTestRun = test_run_tracker_1.default.activeTestRuns[data.id];
108
+ if (!targetTestRun)
109
+ return void 0;
110
+ return targetTestRun.executeAction(data.apiMethodName, data.command, data.callsite);
111
+ }
112
+ executeActionSync() {
113
+ throw new Error('The method should not be called.');
114
+ }
115
+ async executeCommand({ command, id }) {
116
+ const targetTestRun = test_run_tracker_1.default.activeTestRuns[id];
117
+ if (!targetTestRun)
118
+ return void 0;
119
+ return targetTestRun.executeCommand(command);
120
+ }
121
+ async getTests({ sourceList, compilerOptions }) {
122
+ const { proxy } = await this._getRuntime();
123
+ const units = await proxy.call(this.getTests, { sourceList, compilerOptions });
124
+ return test_structure_1.restore(units, (...args) => this._wrapTestFunction(...args), (ruleLocator) => this._wrapRequestFilterRulePredicate(ruleLocator));
125
+ }
126
+ async runTestFn({ id, functionName, testRunId }) {
127
+ const { proxy } = await this._getRuntime();
128
+ return await proxy.call(this.runTestFn, { id, functionName, testRunId });
129
+ }
130
+ async cleanUp() {
131
+ const { proxy } = await this._getRuntime();
132
+ await proxy.call(this.cleanUp);
133
+ }
134
+ async setOptions({ value }) {
135
+ const { proxy } = await this._getRuntime();
136
+ const preparedOptions = prepare_options_1.default(value);
137
+ await proxy.call(this.setOptions, { value: preparedOptions });
138
+ }
139
+ async onRequestHookEvent({ name, testId, hookId, eventData }) {
140
+ const { proxy } = await this._getRuntime();
141
+ await proxy.call(this.onRequestHookEvent, {
142
+ name,
143
+ testId,
144
+ hookId,
145
+ eventData: this._prepareEventData(eventData)
146
+ });
147
+ }
148
+ async setMock({ testId, hookId, ruleId, responseEventId, mock }) {
149
+ const mockDefinedWithPredicate = mock.isPredicate;
150
+ mock = testcafe_hammerhead_1.ResponseMock.from(mock);
151
+ if (mockDefinedWithPredicate)
152
+ this._wrapMockPredicate({ mock, testId, hookId, ruleId });
153
+ await this.emit('setMock', [responseEventId, mock]);
154
+ }
155
+ async setConfigureResponseEventOptions({ eventId, opts }) {
156
+ await this.emit('setConfigureResponseEventOptions', [eventId, opts]);
157
+ }
158
+ async setHeaderOnConfigureResponseEvent({ eventId, headerName, headerValue }) {
159
+ await this.emit('setHeaderOnConfigureResponseEvent', [eventId, headerName, headerValue]);
160
+ }
161
+ async removeHeaderOnConfigureResponseEvent({ eventId, headerName }) {
162
+ await this.emit('removeHeaderOnConfigureResponseEvent', [eventId, headerName]);
163
+ }
164
+ async executeRequestFilterRulePredicate({ testId, hookId, ruleId, requestInfo }) {
165
+ const { proxy } = await this._getRuntime();
166
+ return await proxy.call(this.executeRequestFilterRulePredicate, { testId, hookId, ruleId, requestInfo });
167
+ }
168
+ async executeMockPredicate({ testId, hookId, ruleId, requestInfo, res }) {
169
+ const { proxy } = await this._getRuntime();
170
+ return await proxy.call(this.executeMockPredicate, { testId, hookId, ruleId, requestInfo, res });
171
+ }
172
+ async getWarningMessages({ testRunId }) {
173
+ const { proxy } = await this._getRuntime();
174
+ return proxy.call(this.getWarningMessages, { testRunId });
175
+ }
176
+ async addRequestEventListeners({ hookId, hookClassName, rules }) {
177
+ rules = testcafe_hammerhead_1.RequestFilterRule.fromArray(rules);
178
+ await this.emit('addRequestEventListeners', { hookId, hookClassName, rules });
179
+ }
180
+ async removeRequestEventListeners({ rules }) {
181
+ rules = testcafe_hammerhead_1.RequestFilterRule.fromArray(rules);
182
+ await this.emit('removeRequestEventListeners', { rules });
183
+ }
184
+ async initializeTestRunData({ testRunId, testId }) {
185
+ const { proxy } = await this._getRuntime();
186
+ return proxy.call(this.initializeTestRunData, { testRunId, testId });
187
+ }
188
+ }
189
+ exports.default = CompilerHost;
106
190
  module.exports = exports.default;
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jb21waWxlci9ob3N0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaURBQW9EO0FBQ3BELDZCQUljO0FBRWQsb0VBQWtGO0FBQ2xGLHVGQUE4RDtBQUM5RCxrRkFBZ0Y7QUFDaEYsOENBQThDO0FBQzlDLHNEQUF1RDtBQUN2RCwwRkFBMkQ7QUFDM0QseUVBQXdEO0FBY3hELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFXbEQsTUFBcUIsWUFBYSxTQUFRLDZCQUFZO0lBR2xEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sWUFBWSxDQUFFLEtBQWU7UUFDakMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNYLElBQUksQ0FBQyxhQUFhO1lBQ2xCLElBQUksQ0FBQyxjQUFjO1lBQ25CLElBQUksQ0FBQyxLQUFLO1NBQ2IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFTyxLQUFLLENBQUMsS0FBSyxDQUFFLE9BQTRDO1FBQzdELE1BQU0sZUFBZSxHQUFHLE1BQU0sT0FBTyxDQUFDO1FBRXRDLElBQUksZUFBZTtZQUNmLE9BQU8sZUFBZSxDQUFDO1FBRTNCLElBQUk7WUFDQSxNQUFNLE9BQU8sR0FBRyxxQkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRW5HLCtFQUErRTtZQUMvRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBWSxD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QUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBRS9FLE9BQU8sd0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBb0I7UUFDbkUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTNDLE9BQU8sTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2hCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUUzQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFFLEVBQUUsS0FBSyxFQUF1QjtRQUNuRCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFM0MsTUFBTSxlQUFlLEdBQUcseUJBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDSjtBQTlIRCwrQkE4SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biwgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQge1xuICAgIEhPU1RfSU5QVVRfRkQsXG4gICAgSE9TVF9PVVRQVVRfRkQsXG4gICAgSE9TVF9TWU5DX0ZEXG59IGZyb20gJy4vaW8nO1xuXG5pbXBvcnQgeyByZXN0b3JlIGFzIHJlc3RvcmVUZXN0U3RydWN0dXJlIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi90ZXN0LXN0cnVjdHVyZSc7XG5pbXBvcnQgcHJlcGFyZU9wdGlvbnMgZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9wcmVwYXJlLW9wdGlvbnMnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyB0ZXN0UnVuVHJhY2tlciwgVGVzdFJ1biB9IGZyb20gJy4uLy4uL2FwaS90ZXN0LXJ1bi10cmFja2VyJztcbmltcG9ydCB7IElQQ1Byb3h5IH0gZnJvbSAnLi4vdXRpbHMvaXBjL3Byb3h5JztcbmltcG9ydCB7IEhvc3RUcmFuc3BvcnQgfSBmcm9tICcuLi91dGlscy9pcGMvdHJhbnNwb3J0JztcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi4vLi4vdXRpbHMvYXN5bmMtZXZlbnQtZW1pdHRlcic7XG5pbXBvcnQgVGVzdENhZmVFcnJvckxpc3QgZnJvbSAnLi4vLi4vZXJyb3JzL2Vycm9yLWxpc3QnO1xuXG5pbXBvcnQge1xuICAgIENvbXBpbGVyUHJvdG9jb2wsXG4gICAgUnVuVGVzdEFyZ3VtZW50cyxcbiAgICBFeGVjdXRlQWN0aW9uQXJndW1lbnRzLFxuICAgIEZ1bmN0aW9uUHJvcGVydGllcyxcbiAgICBTZXRPcHRpb25zQXJndW1lbnRzLFxuICAgIEV4ZWN1dGVDb21tYW5kQXJndW1lbnRzXG59IGZyb20gJy4vcHJvdG9jb2wnO1xuXG5pbXBvcnQgeyBDb21waWxlckFyZ3VtZW50cyB9IGZyb20gJy4uLy4uL2NvbXBpbGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IFRlc3QgZnJvbSAnLi4vLi4vYXBpL3N0cnVjdHVyZS90ZXN0JztcblxuY29uc3QgU0VSVklDRV9QQVRIID0gcmVxdWlyZS5yZXNvbHZlKCcuL3NlcnZpY2UnKTtcblxuaW50ZXJmYWNlIFJ1bnRpbWVSZXNvdXJjZXMge1xuICAgIHNlcnZpY2U6IENoaWxkUHJvY2VzcztcbiAgICBwcm94eTogSVBDUHJveHk7XG59XG5cbmludGVyZmFjZSBUZXN0RnVuY3Rpb24ge1xuICAgICh0ZXN0UnVuOiBUZXN0UnVuKTogUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcGlsZXJIb3N0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIGltcGxlbWVudHMgQ29tcGlsZXJQcm90b2NvbCB7XG4gICAgcHJpdmF0ZSBydW50aW1lOiBQcm9taXNlPFJ1bnRpbWVSZXNvdXJjZXN8dW5kZWZpbmVkPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5ydW50aW1lID0gUHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0dXBSb3V0ZXMgKHByb3h5OiBJUENQcm94eSk6IHZvaWQge1xuICAgICAgICBwcm94eS5yZWdpc3RlcihbXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVBY3Rpb24sXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVDb21tYW5kLFxuICAgICAgICAgICAgdGhpcy5yZWFkeVxuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9pbml0IChydW50aW1lOiBQcm9taXNlPFJ1bnRpbWVSZXNvdXJjZXN8dW5kZWZpbmVkPik6IFByb21pc2U8UnVudGltZVJlc291cmNlc3x1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRSdW50aW1lID0gYXdhaXQgcnVudGltZTtcblxuICAgICAgICBpZiAocmVzb2x2ZWRSdW50aW1lKVxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkUnVudGltZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHNwYXduKHByb2Nlc3MuYXJndjAsIFtTRVJWSUNFX1BBVEhdLCB7IHN0ZGlvOiBbMCwgMSwgMiwgJ3BpcGUnLCAncGlwZScsICdwaXBlJ10gfSk7XG5cbiAgICAgICAgICAgIC8vIEhBQ0s6IE5vZGUuanMgZGVmaW5pdGlvbiBhcmUgbm90IGNvcnJlY3Qgd2hlbiBhZGRpdGlvbmFsIEkvTyBjaGFubmVscyBhcmUgc3BcbiAgICAgICAgICAgIGNvbnN0IHN0ZGlvID0gc2VydmljZS5zdGRpbyBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBwcm94eSA9IG5ldyBJUENQcm94eShuZXcgSG9zdFRyYW5zcG9ydChzdGRpb1tIT1NUX0lOUFVUX0ZEXSwgc3RkaW9bSE9TVF9PVVRQVVRfRkRdLCBzdGRpb1tIT1NUX1NZTkNfRkRdKSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3NldHVwUm91dGVzKHByb3h5KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5vbmNlKCdyZWFkeScpO1xuXG4gICAgICAgICAgICByZXR1cm4geyBwcm94eSwgc2VydmljZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0UnVudGltZSAoKTogUHJvbWlzZTxSdW50aW1lUmVzb3VyY2VzPiB7XG4gICAgICAgIGNvbnN0IHJ1bnRpbWUgPSBhd2FpdCB0aGlzLnJ1bnRpbWU7XG5cbiAgICAgICAgaWYgKCFydW50aW1lKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG5cbiAgICAgICAgcmV0dXJuIHJ1bnRpbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnJ1bnRpbWUgPSB0aGlzLl9pbml0KHRoaXMucnVudGltZSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5ydW50aW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdG9wICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgeyBzZXJ2aWNlIH0gPSBhd2FpdCB0aGlzLl9nZXRSdW50aW1lKCk7XG5cbiAgICAgICAgc2VydmljZS5raWxsKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd3JhcFRlc3RGdW5jdGlvbiAoaWQ6IHN0cmluZywgZnVuY3Rpb25OYW1lOiBGdW5jdGlvblByb3BlcnRpZXMpOiBUZXN0RnVuY3Rpb24ge1xuICAgICAgICByZXR1cm4gYXN5bmMgdGVzdFJ1biA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJ1blRlc3QoeyBpZCwgZnVuY3Rpb25OYW1lLCB0ZXN0UnVuSWQ6IHRlc3RSdW4uaWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyTGlzdCA9IG5ldyBUZXN0Q2FmZUVycm9yTGlzdCgpO1xuXG4gICAgICAgICAgICAgICAgZXJyTGlzdC5hZGRFcnJvcihlcnIpO1xuXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyTGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVhZHkgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmVtaXQoJ3JlYWR5Jyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4ZWN1dGVBY3Rpb24gKGRhdGE6IEV4ZWN1dGVBY3Rpb25Bcmd1bWVudHMpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0VGVzdFJ1biA9IHRlc3RSdW5UcmFja2VyLmFjdGl2ZVRlc3RSdW5zW2RhdGEuaWRdO1xuXG4gICAgICAgIGlmICghdGFyZ2V0VGVzdFJ1bilcbiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldFRlc3RSdW4uZXhlY3V0ZUFjdGlvbihkYXRhLmFwaU1ldGhvZE5hbWUsIGRhdGEuY29tbWFuZCwgZGF0YS5jYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4ZWN1dGVDb21tYW5kICh7IGNvbW1hbmQsIGlkIH06IEV4ZWN1dGVDb21tYW5kQXJndW1lbnRzKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFRlc3RSdW4gPSB0ZXN0UnVuVHJhY2tlci5hY3RpdmVUZXN0UnVuc1tpZF07XG5cbiAgICAgICAgaWYgKCF0YXJnZXRUZXN0UnVuKVxuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0VGVzdFJ1bi5leGVjdXRlQ29tbWFuZChjb21tYW5kKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VGVzdHMgKHsgc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zIH06IENvbXBpbGVyQXJndW1lbnRzKTogUHJvbWlzZTxUZXN0W10+IHtcbiAgICAgICAgY29uc3QgeyBwcm94eSB9ID0gYXdhaXQgdGhpcy5fZ2V0UnVudGltZSgpO1xuXG4gICAgICAgIGNvbnN0IHVuaXRzID0gYXdhaXQgcHJveHkuY2FsbCh0aGlzLmdldFRlc3RzLCB7IHNvdXJjZUxpc3QsIGNvbXBpbGVyT3B0aW9ucyB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdG9yZVRlc3RTdHJ1Y3R1cmUodW5pdHMsICguLi5hcmdzKSA9PiB0aGlzLl93cmFwVGVzdEZ1bmN0aW9uKC4uLmFyZ3MpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcnVuVGVzdCAoeyBpZCwgZnVuY3Rpb25OYW1lLCB0ZXN0UnVuSWQgfTogUnVuVGVzdEFyZ3VtZW50cyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCB7IHByb3h5IH0gPSBhd2FpdCB0aGlzLl9nZXRSdW50aW1lKCk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHByb3h5LmNhbGwodGhpcy5ydW5UZXN0LCB7IGlkLCBmdW5jdGlvbk5hbWUsIHRlc3RSdW5JZCB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2xlYW5VcCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgcHJveHkgfSA9IGF3YWl0IHRoaXMuX2dldFJ1bnRpbWUoKTtcblxuICAgICAgICBhd2FpdCBwcm94eS5jYWxsKHRoaXMuY2xlYW5VcCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldE9wdGlvbnMgKHsgdmFsdWUgfTogU2V0T3B0aW9uc0FyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IHByb3h5IH0gPSBhd2FpdCB0aGlzLl9nZXRSdW50aW1lKCk7XG5cbiAgICAgICAgY29uc3QgcHJlcGFyZWRPcHRpb25zID0gcHJlcGFyZU9wdGlvbnModmFsdWUpO1xuXG4gICAgICAgIGF3YWl0IHByb3h5LmNhbGwodGhpcy5zZXRPcHRpb25zLCB7IHZhbHVlOiBwcmVwYXJlZE9wdGlvbnMgfSk7XG4gICAgfVxufVxuIl19
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jb21waWxlci9ob3N0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaURBQW9EO0FBQ3BELDZCQUljO0FBRWQsb0VBQWtGO0FBQ2xGLHVGQUE4RDtBQUM5RCxrRkFBZ0Y7QUFDaEYsOENBQThDO0FBQzlDLHNEQUF1RDtBQUN2RCwwRkFBZ0U7QUFDaEUseUVBQXdEO0FBeUJ4RCw2REFRNkI7QUFFN0IsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQW1CbEQsTUFBcUIsWUFBYSxTQUFRLDZCQUFpQjtJQUd2RDtRQUNJLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVPLFlBQVksQ0FBRSxLQUFlO1FBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDWCxJQUFJLENBQUMsYUFBYTtZQUNsQixJQUFJLENBQUMsY0FBYztZQUNuQixJQUFJLENBQUMsS0FBSztZQUNWLElBQUksQ0FBQyxrQkFBa0I7WUFDdkIsSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsZ0NBQWdDO1lBQ3JDLElBQUksQ0FBQyxpQ0FBaUM7WUFDdEMsSUFBSSxDQUFDLG9DQUFvQztZQUN6QyxJQUFJLENBQUMsaUNBQWlDO1lBQ3RDLElBQUksQ0FBQyxvQkFBb0I7WUFDekIsSUFBSSxDQUFDLGtCQUFrQjtZQUN2QixJQUFJLENBQUMsd0JBQXdCO1lBQzdCLElBQUksQ0FBQywyQkFBMkI7WUFDaEMsSUFBSSxDQUFDLHFCQUFxQjtTQUM3QixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVPLEtBQUssQ0FBQyxLQUFLLENBQUUsT0FBNEM7UUFDN0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxPQUFPLENB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LEVBQUUsQ0FBQztRQUUzQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU0sS0FBSyxDQUFDLHdCQUF3QixDQUFHLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQXFDO1FBQ3ZHLEtBQUssR0FBRyx1Q0FBaUIsQ0FBQyxTQUFTLENBQUMsS0FBaUIsQ0FBQyxDQUFDO1FBRXZELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU0sS0FBSyxDQUFDLDJCQUEyQixDQUFFLEVBQUUsS0FBSyxFQUF3QztRQUNyRixLQUFLLEdBQUcsdUNBQWlCLENBQUMsU0FBUyxDQUFDLEtBQWlCLENBQUMsQ0FBQztRQUV2RCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCLENBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFrQztRQUNyRixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFM0MsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDSjtBQWxQRCwrQkFrUEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biwgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQge1xuICAgIEhPU1RfSU5QVVRfRkQsXG4gICAgSE9TVF9PVVRQVVRfRkQsXG4gICAgSE9TVF9TWU5DX0ZEXG59IGZyb20gJy4vaW8nO1xuXG5pbXBvcnQgeyByZXN0b3JlIGFzIHJlc3RvcmVUZXN0U3RydWN0dXJlIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi90ZXN0LXN0cnVjdHVyZSc7XG5pbXBvcnQgcHJlcGFyZU9wdGlvbnMgZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9wcmVwYXJlLW9wdGlvbnMnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyB0ZXN0UnVuVHJhY2tlciwgVGVzdFJ1biB9IGZyb20gJy4uLy4uL2FwaS90ZXN0LXJ1bi10cmFja2VyJztcbmltcG9ydCB7IElQQ1Byb3h5IH0gZnJvbSAnLi4vdXRpbHMvaXBjL3Byb3h5JztcbmltcG9ydCB7IEhvc3RUcmFuc3BvcnQgfSBmcm9tICcuLi91dGlscy9pcGMvdHJhbnNwb3J0JztcbmltcG9ydCBBc3luY0V2ZW50RW1pdHRlciBmcm9tICcuLi8uLi91dGlscy9hc3luYy1ldmVudC1lbWl0dGVyJztcbmltcG9ydCBUZXN0Q2FmZUVycm9yTGlzdCBmcm9tICcuLi8uLi9lcnJvcnMvZXJyb3ItbGlzdCc7XG5cbmltcG9ydCB7XG4gICAgQ29tcGlsZXJQcm90b2NvbCxcbiAgICBSdW5UZXN0QXJndW1lbnRzLFxuICAgIEV4ZWN1dGVBY3Rpb25Bcmd1bWVudHMsXG4gICAgRnVuY3Rpb25Qcm9wZXJ0aWVzLFxuICAgIFNldE9wdGlvbnNBcmd1bWVudHMsXG4gICAgRXhlY3V0ZUNvbW1hbmRBcmd1bWVudHMsXG4gICAgUmVxdWVzdEhvb2tFdmVudEFyZ3VtZW50cyxcbiAgICBTZXRNb2NrQXJndW1lbnRzLFxuICAgIFNldENvbmZpZ3VyZVJlc3BvbnNlRXZlbnRPcHRpb25zQXJndW1lbnRzLFxuICAgIFNldEhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudEFyZ3VtZW50cyxcbiAgICBSZW1vdmVIZWFkZXJPbkNvbmZpZ3VyZVJlc3BvbnNlRXZlbnRBcmd1bWVudHMsXG4gICAgRXhlY3V0ZVJlcXVlc3RGaWx0ZXJSdWxlUHJlZGljYXRlQXJndW1lbnRzLFxuICAgIFJlcXVlc3RGaWx0ZXJSdWxlTG9jYXRvcixcbiAgICBFeGVjdXRlTW9ja1ByZWRpY2F0ZSxcbiAgICBHZXRXYXJuaW5nTWVzc2FnZXNBcmd1bWVudHMsXG4gICAgQWRkUmVxdWVzdEV2ZW50TGlzdGVuZXJzQXJndW1lbnRzLFxuICAgIFJlbW92ZVJlcXVlc3RFdmVudExpc3RlbmVyc0FyZ3VtZW50cyxcbiAgICBJbml0aWFsaXplVGVzdFJ1bkRhdGFBcmd1bWVudHNcbn0gZnJvbSAnLi9wcm90b2NvbCc7XG5cbmltcG9ydCB7IENvbXBpbGVyQXJndW1lbnRzIH0gZnJvbSAnLi4vLi4vY29tcGlsZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi8uLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IHtcbiAgICBSZXF1ZXN0SW5mbyxcbiAgICBSZXNwb25zZU1vY2ssXG4gICAgSW5jb21pbmdNZXNzYWdlTGlrZUluaXRPcHRpb25zLFxuICAgIFJlcXVlc3RFdmVudCxcbiAgICBDb25maWd1cmVSZXNwb25zZUV2ZW50LFxuICAgIFJlc3BvbnNlRXZlbnQsXG4gICAgUmVxdWVzdEZpbHRlclJ1bGVcbn0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5cbmNvbnN0IFNFUlZJQ0VfUEFUSCA9IHJlcXVpcmUucmVzb2x2ZSgnLi9zZXJ2aWNlJyk7XG5cbmludGVyZmFjZSBSdW50aW1lUmVzb3VyY2VzIHtcbiAgICBzZXJ2aWNlOiBDaGlsZFByb2Nlc3M7XG4gICAgcHJveHk6IElQQ1Byb3h5O1xufVxuXG5pbnRlcmZhY2UgVGVzdEZ1bmN0aW9uIHtcbiAgICAodGVzdFJ1bjogVGVzdFJ1bik6IFByb21pc2U8dW5rbm93bj47XG59XG5cbmludGVyZmFjZSBSZXF1ZXN0RmlsdGVyUnVsZVByZWRpY2F0ZSB7XG4gICAgKHJlcXVlc3RJbmZvOiBSZXF1ZXN0SW5mbyk6IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmludGVyZmFjZSBXcmFwTW9ja1ByZWRpY2F0ZUFyZ3VtZW50cyBleHRlbmRzIFJlcXVlc3RGaWx0ZXJSdWxlTG9jYXRvciB7XG4gICAgbW9jazogUmVzcG9uc2VNb2NrO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21waWxlckhvc3QgZXh0ZW5kcyBBc3luY0V2ZW50RW1pdHRlciBpbXBsZW1lbnRzIENvbXBpbGVyUHJvdG9jb2wge1xuICAgIHByaXZhdGUgcnVudGltZTogUHJvbWlzZTxSdW50aW1lUmVzb3VyY2VzfHVuZGVmaW5lZD47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMucnVudGltZSA9IFByb21pc2UucmVzb2x2ZSh2b2lkIDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwUm91dGVzIChwcm94eTogSVBDUHJveHkpOiB2b2lkIHtcbiAgICAgICAgcHJveHkucmVnaXN0ZXIoW1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlQWN0aW9uLFxuICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29tbWFuZCxcbiAgICAgICAgICAgIHRoaXMucmVhZHksXG4gICAgICAgICAgICB0aGlzLm9uUmVxdWVzdEhvb2tFdmVudCxcbiAgICAgICAgICAgIHRoaXMuc2V0TW9jayxcbiAgICAgICAgICAgIHRoaXMuc2V0Q29uZmlndXJlUmVzcG9uc2VFdmVudE9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLnNldEhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudCxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50LFxuICAgICAgICAgICAgdGhpcy5leGVjdXRlUmVxdWVzdEZpbHRlclJ1bGVQcmVkaWNhdGUsXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVNb2NrUHJlZGljYXRlLFxuICAgICAgICAgICAgdGhpcy5nZXRXYXJuaW5nTWVzc2FnZXMsXG4gICAgICAgICAgICB0aGlzLmFkZFJlcXVlc3RFdmVudExpc3RlbmVycyxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUmVxdWVzdEV2ZW50TGlzdGVuZXJzLFxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplVGVzdFJ1bkRhdGFcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaW5pdCAocnVudGltZTogUHJvbWlzZTxSdW50aW1lUmVzb3VyY2VzfHVuZGVmaW5lZD4pOiBQcm9taXNlPFJ1bnRpbWVSZXNvdXJjZXN8dW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUnVudGltZSA9IGF3YWl0IHJ1bnRpbWU7XG5cbiAgICAgICAgaWYgKHJlc29sdmVkUnVudGltZSlcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFJ1bnRpbWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSBzcGF3bihwcm9jZXNzLmFyZ3YwLCBbU0VSVklDRV9QQVRIXSwgeyBzdGRpbzogWzAsIDEsIDIsICdwaXBlJywgJ3BpcGUnLCAncGlwZSddIH0pO1xuXG4gICAgICAgICAgICAvLyBIQUNLOiBOb2RlLmpzIGRlZmluaXRpb24gYXJlIG5vdCBjb3JyZWN0IHdoZW4gYWRkaXRpb25hbCBJL08gY2hhbm5lbHMgYXJlIHNwXG4gICAgICAgICAgICBjb25zdCBzdGRpbyA9IHNlcnZpY2Uuc3RkaW8gYXMgYW55O1xuICAgICAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgSVBDUHJveHkobmV3IEhvc3RUcmFuc3BvcnQoc3RkaW9bSE9TVF9JTlBVVF9GRF0sIHN0ZGlvW0hPU1RfT1VUUFVUX0ZEXSwgc3RkaW9bSE9TVF9TWU5DX0ZEXSkpO1xuXG4gICAgICAgICAgICB0aGlzLl9zZXR1cFJvdXRlcyhwcm94eSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25jZSgncmVhZHknKTtcblxuICAgICAgICAgICAgcmV0dXJuIHsgcHJveHksIHNlcnZpY2UgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldFJ1bnRpbWUgKCk6IFByb21pc2U8UnVudGltZVJlc291cmNlcz4ge1xuICAgICAgICBjb25zdCBydW50aW1lID0gYXdhaXQgdGhpcy5ydW50aW1lO1xuXG4gICAgICAgIGlmICghcnVudGltZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUnVudGltZSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXG4gICAgICAgIHJldHVybiBydW50aW1lO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVFdmVudERhdGEgKGV2ZW50RGF0YTogUmVxdWVzdEV2ZW50IHwgQ29uZmlndXJlUmVzcG9uc2VFdmVudCB8IFJlc3BvbnNlRXZlbnQpOiBSZXF1ZXN0RXZlbnQgfCBDb25maWd1cmVSZXNwb25zZUV2ZW50IHwgUmVzcG9uc2VFdmVudCB7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBldmVudERhdGEuX3JlcXVlc3RDb250ZXh0IGludG8gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnIG1vZHVsZVxuICAgICAgICAvLyBhZnRlciBzd2l0Y2hpbmcgdG8gdGhlIGNvbXBpbGVyIHNlcnZpY2UgbW9kZS5cblxuICAgICAgICAvLyBOT1RFOiBBY2Nlc3MgdG8gdGhlIGRlcHJlY2F0ZWQgcHJvcGVydHkgaW5zaWRlIG9mIHRoZSB1bnNlcmlhbGl6YWJsZSAnZXZlbnREYXRhLl9yZXF1ZXN0Q29udGV4dCcgcHJvcGVydHlcbiAgICAgICAgLy8gY2F1c2VzIHRoZSBub2RlJ3MgZGVwcmVjYXRpb24gd2FybmluZy5cblxuICAgICAgICBjb25zdCBjbG9uZWRFdmVudERhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBldmVudERhdGEpO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZGVsZXRlIGNsb25lZEV2ZW50RGF0YS5fcmVxdWVzdENvbnRleHQ7XG5cbiAgICAgICAgcmV0dXJuIGNsb25lZEV2ZW50RGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMucnVudGltZSA9IHRoaXMuX2luaXQodGhpcy5ydW50aW1lKTtcblxuICAgICAgICBhd2FpdCB0aGlzLnJ1bnRpbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0b3AgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IHNlcnZpY2UgfSA9IGF3YWl0IHRoaXMuX2dldFJ1bnRpbWUoKTtcblxuICAgICAgICBzZXJ2aWNlLmtpbGwoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF93cmFwVGVzdEZ1bmN0aW9uIChpZDogc3RyaW5nLCBmdW5jdGlvbk5hbWU6IEZ1bmN0aW9uUHJvcGVydGllcyk6IFRlc3RGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiBhc3luYyB0ZXN0UnVuID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuVGVzdEZuKHsgaWQsIGZ1bmN0aW9uTmFtZSwgdGVzdFJ1bklkOiB0ZXN0UnVuLmlkIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyckxpc3QgPSBuZXcgVGVzdENhZmVFcnJvckxpc3QoKTtcblxuICAgICAgICAgICAgICAgIGVyckxpc3QuYWRkRXJyb3IoZXJyKTtcblxuICAgICAgICAgICAgICAgIHRocm93IGVyckxpc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd3JhcFJlcXVlc3RGaWx0ZXJSdWxlUHJlZGljYXRlICh7IHRlc3RJZCwgaG9va0lkLCBydWxlSWQgfTogUmVxdWVzdEZpbHRlclJ1bGVMb2NhdG9yKTogUmVxdWVzdEZpbHRlclJ1bGVQcmVkaWNhdGUge1xuICAgICAgICByZXR1cm4gYXN5bmMgKHJlcXVlc3RJbmZvOiBSZXF1ZXN0SW5mbykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZVJlcXVlc3RGaWx0ZXJSdWxlUHJlZGljYXRlKHsgdGVzdElkLCBob29rSWQsIHJ1bGVJZCwgcmVxdWVzdEluZm8gfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd3JhcE1vY2tQcmVkaWNhdGUgKHsgbW9jaywgdGVzdElkLCBob29rSWQsIHJ1bGVJZCB9OiBXcmFwTW9ja1ByZWRpY2F0ZUFyZ3VtZW50cyk6IHZvaWQge1xuICAgICAgICBtb2NrLmJvZHkgPSBhc3luYyAocmVxdWVzdEluZm86IFJlcXVlc3RJbmZvLCByZXM6IEluY29taW5nTWVzc2FnZUxpa2VJbml0T3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZU1vY2tQcmVkaWNhdGUoeyB0ZXN0SWQsIGhvb2tJZCwgcnVsZUlkLCByZXF1ZXN0SW5mbywgcmVzIH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWFkeSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZW1pdCgncmVhZHknKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhlY3V0ZUFjdGlvbiAoZGF0YTogRXhlY3V0ZUFjdGlvbkFyZ3VtZW50cyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCB0YXJnZXRUZXN0UnVuID0gdGVzdFJ1blRyYWNrZXIuYWN0aXZlVGVzdFJ1bnNbZGF0YS5pZF07XG5cbiAgICAgICAgaWYgKCF0YXJnZXRUZXN0UnVuKVxuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0VGVzdFJ1bi5leGVjdXRlQWN0aW9uKGRhdGEuYXBpTWV0aG9kTmFtZSwgZGF0YS5jb21tYW5kLCBkYXRhLmNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhlY3V0ZUFjdGlvblN5bmMgKCk6IG5ldmVyIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkLicpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlQ29tbWFuZCAoeyBjb21tYW5kLCBpZCB9OiBFeGVjdXRlQ29tbWFuZEFyZ3VtZW50cyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCB0YXJnZXRUZXN0UnVuID0gdGVzdFJ1blRyYWNrZXIuYWN0aXZlVGVzdFJ1bnNbaWRdO1xuXG4gICAgICAgIGlmICghdGFyZ2V0VGVzdFJ1bilcbiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldFRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFRlc3RzICh7IHNvdXJjZUxpc3QsIGNvbXBpbGVyT3B0aW9ucyB9OiBDb21waWxlckFyZ3VtZW50cyk6IFByb21pc2U8VGVzdFtdPiB7XG4gICAgICAgIGNvbnN0IHsgcHJveHkgfSA9IGF3YWl0IHRoaXMuX2dldFJ1bnRpbWUoKTtcblxuICAgICAgICBjb25zdCB1bml0cyA9IGF3YWl0IHByb3h5LmNhbGwodGhpcy5nZXRUZXN0cywgeyBzb3VyY2VMaXN0LCBjb21waWxlck9wdGlvbnMgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3RvcmVUZXN0U3RydWN0dXJlKFxuICAgICAgICAgICAgdW5pdHMsXG4gICAgICAgICAgICAoLi4uYXJncykgPT4gdGhpcy5fd3JhcFRlc3RGdW5jdGlvbiguLi5hcmdzKSxcbiAgICAgICAgICAgIChydWxlTG9jYXRvcjogUmVxdWVzdEZpbHRlclJ1bGVMb2NhdG9yKSA9PiB0aGlzLl93cmFwUmVxdWVzdEZpbHRlclJ1bGVQcmVkaWNhdGUocnVsZUxvY2F0b3IpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJ1blRlc3RGbiAoeyBpZCwgZnVuY3Rpb25OYW1lLCB0ZXN0UnVuSWQgfTogUnVuVGVzdEFyZ3VtZW50cyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCB7IHByb3h5IH0gPSBhd2FpdCB0aGlzLl9nZXRSdW50aW1lKCk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHByb3h5LmNhbGwodGhpcy5ydW5UZXN0Rm4sIHsgaWQsIGZ1bmN0aW9uTmFtZSwgdGVzdFJ1bklkIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjbGVhblVwICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgeyBwcm94eSB9ID0gYXdhaXQgdGhpcy5fZ2V0UnVudGltZSgpO1xuXG4gICAgICAgIGF3YWl0IHByb3h5LmNhbGwodGhpcy5jbGVhblVwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0T3B0aW9ucyAoeyB2YWx1ZSB9OiBTZXRPcHRpb25zQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgcHJveHkgfSA9IGF3YWl0IHRoaXMuX2dldFJ1bnRpbWUoKTtcblxuICAgICAgICBjb25zdCBwcmVwYXJlZE9wdGlvbnMgPSBwcmVwYXJlT3B0aW9ucyh2YWx1ZSk7XG5cbiAgICAgICAgYXdhaXQgcHJveHkuY2FsbCh0aGlzLnNldE9wdGlvbnMsIHsgdmFsdWU6IHByZXBhcmVkT3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25SZXF1ZXN0SG9va0V2ZW50ICh7IG5hbWUsIHRlc3RJZCwgaG9va0lkLCBldmVudERhdGEgfTogUmVxdWVzdEhvb2tFdmVudEFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IHByb3h5IH0gPSBhd2FpdCB0aGlzLl9nZXRSdW50aW1lKCk7XG5cbiAgICAgICAgYXdhaXQgcHJveHkuY2FsbCh0aGlzLm9uUmVxdWVzdEhvb2tFdmVudCwge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHRlc3RJZCxcbiAgICAgICAgICAgIGhvb2tJZCxcbiAgICAgICAgICAgIGV2ZW50RGF0YTogdGhpcy5fcHJlcGFyZUV2ZW50RGF0YShldmVudERhdGEpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRNb2NrICh7IHRlc3RJZCwgaG9va0lkLCBydWxlSWQsIHJlc3BvbnNlRXZlbnRJZCwgbW9jayB9OiBTZXRNb2NrQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IG1vY2tEZWZpbmVkV2l0aFByZWRpY2F0ZSA9IG1vY2suaXNQcmVkaWNhdGU7XG5cbiAgICAgICAgbW9jayA9IFJlc3BvbnNlTW9jay5mcm9tKG1vY2spO1xuXG4gICAgICAgIGlmIChtb2NrRGVmaW5lZFdpdGhQcmVkaWNhdGUpXG4gICAgICAgICAgICB0aGlzLl93cmFwTW9ja1ByZWRpY2F0ZSh7IG1vY2ssIHRlc3RJZCwgaG9va0lkLCBydWxlSWQgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdzZXRNb2NrJywgW3Jlc3BvbnNlRXZlbnRJZCwgbW9ja10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRDb25maWd1cmVSZXNwb25zZUV2ZW50T3B0aW9ucyAoeyBldmVudElkLCBvcHRzIH06IFNldENvbmZpZ3VyZVJlc3BvbnNlRXZlbnRPcHRpb25zQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnc2V0Q29uZmlndXJlUmVzcG9uc2VFdmVudE9wdGlvbnMnLCBbZXZlbnRJZCwgb3B0c10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRIZWFkZXJPbkNvbmZpZ3VyZVJlc3BvbnNlRXZlbnQgKHsgZXZlbnRJZCwgaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUgfTogU2V0SGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50QXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnc2V0SGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50JywgW2V2ZW50SWQsIGhlYWRlck5hbWUsIGhlYWRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZUhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudCAoeyBldmVudElkLCBoZWFkZXJOYW1lIH06IFJlbW92ZUhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudEFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3JlbW92ZUhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudCcsIFtldmVudElkLCBoZWFkZXJOYW1lXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4ZWN1dGVSZXF1ZXN0RmlsdGVyUnVsZVByZWRpY2F0ZSAoeyB0ZXN0SWQsIGhvb2tJZCwgcnVsZUlkLCByZXF1ZXN0SW5mbyB9OiBFeGVjdXRlUmVxdWVzdEZpbHRlclJ1bGVQcmVkaWNhdGVBcmd1bWVudHMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgeyBwcm94eSB9ID0gYXdhaXQgdGhpcy5fZ2V0UnVudGltZSgpO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCBwcm94eS5jYWxsKHRoaXMuZXhlY3V0ZVJlcXVlc3RGaWx0ZXJSdWxlUHJlZGljYXRlLCB7IHRlc3RJZCwgaG9va0lkLCBydWxlSWQsIHJlcXVlc3RJbmZvIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlTW9ja1ByZWRpY2F0ZSAoeyB0ZXN0SWQsIGhvb2tJZCwgcnVsZUlkLCByZXF1ZXN0SW5mbywgcmVzIH06IEV4ZWN1dGVNb2NrUHJlZGljYXRlKTogUHJvbWlzZTxJbmNvbWluZ01lc3NhZ2VMaWtlSW5pdE9wdGlvbnM+IHtcbiAgICAgICAgY29uc3QgeyBwcm94eSB9ID0gYXdhaXQgdGhpcy5fZ2V0UnVudGltZSgpO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCBwcm94eS5jYWxsKHRoaXMuZXhlY3V0ZU1vY2tQcmVkaWNhdGUsIHsgdGVzdElkLCBob29rSWQsIHJ1bGVJZCwgcmVxdWVzdEluZm8sIHJlcyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0V2FybmluZ01lc3NhZ2VzICh7IHRlc3RSdW5JZCB9OiBHZXRXYXJuaW5nTWVzc2FnZXNBcmd1bWVudHMpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHsgcHJveHkgfSA9IGF3YWl0IHRoaXMuX2dldFJ1bnRpbWUoKTtcblxuICAgICAgICByZXR1cm4gcHJveHkuY2FsbCh0aGlzLmdldFdhcm5pbmdNZXNzYWdlcywgeyB0ZXN0UnVuSWQgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGFkZFJlcXVlc3RFdmVudExpc3RlbmVycyAoIHsgaG9va0lkLCBob29rQ2xhc3NOYW1lLCBydWxlcyB9OiBBZGRSZXF1ZXN0RXZlbnRMaXN0ZW5lcnNBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcnVsZXMgPSBSZXF1ZXN0RmlsdGVyUnVsZS5mcm9tQXJyYXkocnVsZXMgYXMgb2JqZWN0W10pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnYWRkUmVxdWVzdEV2ZW50TGlzdGVuZXJzJywgeyBob29rSWQsIGhvb2tDbGFzc05hbWUsIHJ1bGVzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZW1vdmVSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMgKHsgcnVsZXMgfTogUmVtb3ZlUmVxdWVzdEV2ZW50TGlzdGVuZXJzQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJ1bGVzID0gUmVxdWVzdEZpbHRlclJ1bGUuZnJvbUFycmF5KHJ1bGVzIGFzIG9iamVjdFtdKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3JlbW92ZVJlcXVlc3RFdmVudExpc3RlbmVycycsIHsgcnVsZXMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXRpYWxpemVUZXN0UnVuRGF0YSAoeyB0ZXN0UnVuSWQsIHRlc3RJZCB9OiBJbml0aWFsaXplVGVzdFJ1bkRhdGFBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgeyBwcm94eSB9ID0gYXdhaXQgdGhpcy5fZ2V0UnVudGltZSgpO1xuXG4gICAgICAgIHJldHVybiBwcm94eS5jYWxsKHRoaXMuaW5pdGlhbGl6ZVRlc3RSdW5EYXRhLCB7IHRlc3RSdW5JZCwgdGVzdElkIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,10 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HOST_SYNC_FD = exports.HOST_OUTPUT_FD = exports.HOST_INPUT_FD = exports.SERVICE_SYNC_FD = exports.SERVICE_OUTPUT_FD = exports.SERVICE_INPUT_FD = void 0;
4
- exports.SERVICE_INPUT_FD = 3;
5
- exports.SERVICE_OUTPUT_FD = 4;
6
- exports.SERVICE_SYNC_FD = 5;
7
- exports.HOST_INPUT_FD = exports.SERVICE_OUTPUT_FD;
8
- exports.HOST_OUTPUT_FD = exports.SERVICE_INPUT_FD;
9
- exports.HOST_SYNC_FD = exports.SERVICE_SYNC_FD;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HOST_SYNC_FD = exports.HOST_OUTPUT_FD = exports.HOST_INPUT_FD = exports.SERVICE_SYNC_FD = exports.SERVICE_OUTPUT_FD = exports.SERVICE_INPUT_FD = void 0;
4
+ exports.SERVICE_INPUT_FD = 3;
5
+ exports.SERVICE_OUTPUT_FD = 4;
6
+ exports.SERVICE_SYNC_FD = 5;
7
+ exports.HOST_INPUT_FD = exports.SERVICE_OUTPUT_FD;
8
+ exports.HOST_OUTPUT_FD = exports.SERVICE_INPUT_FD;
9
+ exports.HOST_SYNC_FD = exports.SERVICE_SYNC_FD;
10
10
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY29tcGlsZXIvaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxnQkFBZ0IsR0FBSSxDQUFDLENBQUM7QUFDdEIsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDdEIsUUFBQSxlQUFlLEdBQUssQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsYUFBYSxHQUFPLHlCQUFpQixDQUFDO0FBQ3RDLFFBQUEsY0FBYyxHQUFNLHdCQUFnQixDQUFDO0FBQ3JDLFFBQUEsWUFBWSxHQUFRLHVCQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgU0VSVklDRV9JTlBVVF9GRCAgPSAzO1xuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfT1VUUFVUX0ZEID0gNDtcbmV4cG9ydCBjb25zdCBTRVJWSUNFX1NZTkNfRkQgICA9IDU7XG5leHBvcnQgY29uc3QgSE9TVF9JTlBVVF9GRCAgICAgPSBTRVJWSUNFX09VVFBVVF9GRDtcbmV4cG9ydCBjb25zdCBIT1NUX09VVFBVVF9GRCAgICA9IFNFUlZJQ0VfSU5QVVRfRkQ7XG5leHBvcnQgY29uc3QgSE9TVF9TWU5DX0ZEICAgICAgPSBTRVJWSUNFX1NZTkNfRkQ7XG4iXX0=
@@ -1,16 +1,17 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isFixtureFunctionProperty = exports.isTestFunctionProperty = exports.FUNCTION_PROPERTIES = exports.TEST_FUNCTION_PROPERTIES = exports.BEFORE_AFTER_EACH_PROPERTIES = exports.BEFORE_AFTER_PROPERTIES = void 0;
4
- exports.BEFORE_AFTER_PROPERTIES = ['beforeFn', 'afterFn'];
5
- exports.BEFORE_AFTER_EACH_PROPERTIES = ['beforeEachFn', 'afterEachFn'];
6
- exports.TEST_FUNCTION_PROPERTIES = ['fn', ...exports.BEFORE_AFTER_PROPERTIES];
7
- exports.FUNCTION_PROPERTIES = [...exports.TEST_FUNCTION_PROPERTIES, ...exports.BEFORE_AFTER_EACH_PROPERTIES];
8
- function isTestFunctionProperty(value) {
9
- return exports.TEST_FUNCTION_PROPERTIES.includes(value);
10
- }
11
- exports.isTestFunctionProperty = isTestFunctionProperty;
12
- function isFixtureFunctionProperty(value) {
13
- return exports.BEFORE_AFTER_EACH_PROPERTIES.includes(value);
14
- }
15
- exports.isFixtureFunctionProperty = isFixtureFunctionProperty;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY29tcGlsZXIvcHJvdG9jb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR2EsUUFBQSx1QkFBdUIsR0FBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQVUsQ0FBQztBQUM1RCxRQUFBLDRCQUE0QixHQUFHLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBVSxDQUFDO0FBQ3hFLFFBQUEsd0JBQXdCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRywrQkFBdUIsQ0FBVSxDQUFDO0FBQ3ZFLFFBQUEsbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLGdDQUF3QixFQUFFLEdBQUcsb0NBQTRCLENBQVUsQ0FBQztBQU8zRyxTQUFnQixzQkFBc0IsQ0FBRSxLQUF5QjtJQUM3RCxPQUFPLGdDQUF3QixDQUFDLFFBQVEsQ0FBQyxLQUErQixDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUZELHdEQUVDO0FBRUQsU0FBZ0IseUJBQXlCLENBQUUsS0FBeUI7SUFDaEUsT0FBTyxvQ0FBNEIsQ0FBQyxRQUFRLENBQUMsS0FBa0MsQ0FBQyxDQUFDO0FBQ3JGLENBQUM7QUFGRCw4REFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBpbGVyQXJndW1lbnRzIH0gZnJvbSAnLi4vLi4vY29tcGlsZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IEJFRk9SRV9BRlRFUl9QUk9QRVJUSUVTICA9IFsnYmVmb3JlRm4nLCAnYWZ0ZXJGbiddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IEJFRk9SRV9BRlRFUl9FQUNIX1BST1BFUlRJRVMgPSBbJ2JlZm9yZUVhY2hGbicsICdhZnRlckVhY2hGbiddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFRFU1RfRlVOQ1RJT05fUFJPUEVSVElFUyA9IFsnZm4nLCAuLi5CRUZPUkVfQUZURVJfUFJPUEVSVElFU10gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgRlVOQ1RJT05fUFJPUEVSVElFUyA9IFsuLi5URVNUX0ZVTkNUSU9OX1BST1BFUlRJRVMsIC4uLkJFRk9SRV9BRlRFUl9FQUNIX1BST1BFUlRJRVNdIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBGdW5jdGlvblByb3BlcnRpZXMgPSB0eXBlb2YgRlVOQ1RJT05fUFJPUEVSVElFU1tudW1iZXJdO1xuZXhwb3J0IHR5cGUgVGVzdEZ1bmN0aW9uUHJvcGVydGllcyA9IHR5cGVvZiBURVNUX0ZVTkNUSU9OX1BST1BFUlRJRVNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIEZpeHR1cmVGdW5jdGlvblByb3BlcnRpZXMgPSB0eXBlb2YgQkVGT1JFX0FGVEVSX0VBQ0hfUFJPUEVSVElFU1tudW1iZXJdO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RGdW5jdGlvblByb3BlcnR5ICh2YWx1ZTogRnVuY3Rpb25Qcm9wZXJ0aWVzKTogdmFsdWUgaXMgVGVzdEZ1bmN0aW9uUHJvcGVydGllcyB7XG4gICAgcmV0dXJuIFRFU1RfRlVOQ1RJT05fUFJPUEVSVElFUy5pbmNsdWRlcyh2YWx1ZSBhcyBUZXN0RnVuY3Rpb25Qcm9wZXJ0aWVzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRml4dHVyZUZ1bmN0aW9uUHJvcGVydHkgKHZhbHVlOiBGdW5jdGlvblByb3BlcnRpZXMpOiB2YWx1ZSBpcyBGaXh0dXJlRnVuY3Rpb25Qcm9wZXJ0aWVzIHtcbiAgICByZXR1cm4gQkVGT1JFX0FGVEVSX0VBQ0hfUFJPUEVSVElFUy5pbmNsdWRlcyh2YWx1ZSBhcyBGaXh0dXJlRnVuY3Rpb25Qcm9wZXJ0aWVzKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5UZXN0QXJndW1lbnRzIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZ1bmN0aW9uTmFtZTogRnVuY3Rpb25Qcm9wZXJ0aWVzO1xuICAgIHRlc3RSdW5JZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVBY3Rpb25Bcmd1bWVudHMge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgYXBpTWV0aG9kTmFtZTogc3RyaW5nO1xuICAgIGNvbW1hbmQ6IHVua25vd247XG4gICAgY2FsbHNpdGU6IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZUNvbW1hbmRBcmd1bWVudHMge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29tbWFuZDogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXRPcHRpb25zQXJndW1lbnRzIHtcbiAgICB2YWx1ZTogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdFJ1bkRpc3BhdGNoZXJQcm90b2NvbCB7XG4gICAgZXhlY3V0ZUFjdGlvbiAoeyBpZCwgYXBpTWV0aG9kTmFtZSwgY29tbWFuZCwgY2FsbHNpdGUgfTogRXhlY3V0ZUFjdGlvbkFyZ3VtZW50cyk6IFByb21pc2U8dW5rbm93bj47XG4gICAgZXhlY3V0ZUNvbW1hbmQgKHsgY29tbWFuZCB9OiBFeGVjdXRlQ29tbWFuZEFyZ3VtZW50cyk6IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsZXJQcm90b2NvbCBleHRlbmRzIFRlc3RSdW5EaXNwYXRjaGVyUHJvdG9jb2wge1xuICAgIHJlYWR5ICgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgZ2V0VGVzdHMgKHsgc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zIH06IENvbXBpbGVyQXJndW1lbnRzKTogUHJvbWlzZTx1bmtub3duPjtcblxuICAgIHJ1blRlc3QgKHsgaWQsIGZ1bmN0aW9uTmFtZSwgdGVzdFJ1bklkIH06IFJ1blRlc3RBcmd1bWVudHMpOiBQcm9taXNlPHVua25vd24+O1xuXG4gICAgY2xlYW5VcCAoKTogUHJvbWlzZTx2b2lkPjtcblxuICAgIHNldE9wdGlvbnMgKHsgdmFsdWUgfTogU2V0T3B0aW9uc0FyZ3VtZW50cyk6IFByb21pc2U8dm9pZD47XG59XG4iXX0=
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isFixtureFunctionProperty = exports.isTestFunctionProperty = exports.FUNCTION_PROPERTIES = exports.FIXTURE_FUNCTION_PROPERTIES = exports.TEST_FUNCTION_PROPERTIES = exports.BEFORE_AFTER_EACH_PROPERTIES = exports.BEFORE_AFTER_PROPERTIES = void 0;
4
+ exports.BEFORE_AFTER_PROPERTIES = ['beforeFn', 'afterFn'];
5
+ exports.BEFORE_AFTER_EACH_PROPERTIES = ['beforeEachFn', 'afterEachFn'];
6
+ exports.TEST_FUNCTION_PROPERTIES = ['fn', ...exports.BEFORE_AFTER_PROPERTIES];
7
+ exports.FIXTURE_FUNCTION_PROPERTIES = [...exports.BEFORE_AFTER_PROPERTIES, ...exports.BEFORE_AFTER_EACH_PROPERTIES];
8
+ exports.FUNCTION_PROPERTIES = [...exports.TEST_FUNCTION_PROPERTIES, ...exports.BEFORE_AFTER_EACH_PROPERTIES];
9
+ function isTestFunctionProperty(value) {
10
+ return exports.TEST_FUNCTION_PROPERTIES.includes(value);
11
+ }
12
+ exports.isTestFunctionProperty = isTestFunctionProperty;
13
+ function isFixtureFunctionProperty(value) {
14
+ return exports.FIXTURE_FUNCTION_PROPERTIES.includes(value);
15
+ }
16
+ exports.isFixtureFunctionProperty = isFixtureFunctionProperty;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY29tcGlsZXIvcHJvdG9jb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBY2EsUUFBQSx1QkFBdUIsR0FBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQVUsQ0FBQztBQUNoRSxRQUFBLDRCQUE0QixHQUFHLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBVSxDQUFDO0FBQ3hFLFFBQUEsd0JBQXdCLEdBQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRywrQkFBdUIsQ0FBVSxDQUFDO0FBQzNFLFFBQUEsMkJBQTJCLEdBQUksQ0FBQyxHQUFHLCtCQUF1QixFQUFFLEdBQUcsb0NBQTRCLENBQVUsQ0FBQztBQUN0RyxRQUFBLG1CQUFtQixHQUFZLENBQUMsR0FBRyxnQ0FBd0IsRUFBRSxHQUFHLG9DQUE0QixDQUFVLENBQUM7QUFPcEgsU0FBZ0Isc0JBQXNCLENBQUUsS0FBeUI7SUFDN0QsT0FBTyxnQ0FBd0IsQ0FBQyxRQUFRLENBQUMsS0FBK0IsQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFGRCx3REFFQztBQUVELFNBQWdCLHlCQUF5QixDQUFFLEtBQXlCO0lBQ2hFLE9BQU8sbUNBQTJCLENBQUMsUUFBUSxDQUFDLEtBQWtDLENBQUMsQ0FBQztBQUNwRixDQUFDO0FBRkQsOERBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21waWxlckFyZ3VtZW50cyB9IGZyb20gJy4uLy4uL2NvbXBpbGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5pbXBvcnQgUmVxdWVzdEhvb2tNZXRob2ROYW1lcyBmcm9tICcuLi8uLi9hcGkvcmVxdWVzdC1ob29rcy9ob29rLW1ldGhvZC1uYW1lcyc7XG5pbXBvcnQge1xuICAgIENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQsXG4gICAgQ29uZmlndXJlUmVzcG9uc2VFdmVudE9wdGlvbnMsXG4gICAgUmVxdWVzdEV2ZW50LFxuICAgIFJlc3BvbnNlRXZlbnQsXG4gICAgUmVzcG9uc2VNb2NrLFxuICAgIFJlcXVlc3RJbmZvLFxuICAgIEluY29taW5nTWVzc2FnZUxpa2VJbml0T3B0aW9ucyxcbiAgICBSZXF1ZXN0RmlsdGVyUnVsZVxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuZXhwb3J0IGNvbnN0IEJFRk9SRV9BRlRFUl9QUk9QRVJUSUVTICAgICAgPSBbJ2JlZm9yZUZuJywgJ2FmdGVyRm4nXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBCRUZPUkVfQUZURVJfRUFDSF9QUk9QRVJUSUVTID0gWydiZWZvcmVFYWNoRm4nLCAnYWZ0ZXJFYWNoRm4nXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBURVNUX0ZVTkNUSU9OX1BST1BFUlRJRVMgICAgID0gWydmbicsIC4uLkJFRk9SRV9BRlRFUl9QUk9QRVJUSUVTXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBGSVhUVVJFX0ZVTkNUSU9OX1BST1BFUlRJRVMgID0gWy4uLkJFRk9SRV9BRlRFUl9QUk9QRVJUSUVTLCAuLi5CRUZPUkVfQUZURVJfRUFDSF9QUk9QRVJUSUVTXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBGVU5DVElPTl9QUk9QRVJUSUVTICAgICAgICAgID0gWy4uLlRFU1RfRlVOQ1RJT05fUFJPUEVSVElFUywgLi4uQkVGT1JFX0FGVEVSX0VBQ0hfUFJPUEVSVElFU10gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uUHJvcGVydGllcyA9IHR5cGVvZiBGVU5DVElPTl9QUk9QRVJUSUVTW251bWJlcl07XG5leHBvcnQgdHlwZSBUZXN0RnVuY3Rpb25Qcm9wZXJ0aWVzID0gdHlwZW9mIFRFU1RfRlVOQ1RJT05fUFJPUEVSVElFU1tudW1iZXJdO1xuZXhwb3J0IHR5cGUgRml4dHVyZUZ1bmN0aW9uUHJvcGVydGllcyA9IHR5cGVvZiBGSVhUVVJFX0ZVTkNUSU9OX1BST1BFUlRJRVNbbnVtYmVyXTtcblxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZXN0RnVuY3Rpb25Qcm9wZXJ0eSAodmFsdWU6IEZ1bmN0aW9uUHJvcGVydGllcyk6IHZhbHVlIGlzIFRlc3RGdW5jdGlvblByb3BlcnRpZXMge1xuICAgIHJldHVybiBURVNUX0ZVTkNUSU9OX1BST1BFUlRJRVMuaW5jbHVkZXModmFsdWUgYXMgVGVzdEZ1bmN0aW9uUHJvcGVydGllcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpeHR1cmVGdW5jdGlvblByb3BlcnR5ICh2YWx1ZTogRnVuY3Rpb25Qcm9wZXJ0aWVzKTogdmFsdWUgaXMgRml4dHVyZUZ1bmN0aW9uUHJvcGVydGllcyB7XG4gICAgcmV0dXJuIEZJWFRVUkVfRlVOQ1RJT05fUFJPUEVSVElFUy5pbmNsdWRlcyh2YWx1ZSBhcyBGaXh0dXJlRnVuY3Rpb25Qcm9wZXJ0aWVzKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5UZXN0QXJndW1lbnRzIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZ1bmN0aW9uTmFtZTogRnVuY3Rpb25Qcm9wZXJ0aWVzO1xuICAgIHRlc3RSdW5JZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVBY3Rpb25Bcmd1bWVudHMge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgYXBpTWV0aG9kTmFtZTogc3RyaW5nO1xuICAgIGNvbW1hbmQ6IHVua25vd247XG4gICAgY2FsbHNpdGU6IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZUNvbW1hbmRBcmd1bWVudHMge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29tbWFuZDogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVSZXF1ZXN0RXZlbnRMaXN0ZW5lcnNBcmd1bWVudHMge1xuICAgIHJ1bGVzOiBSZXF1ZXN0RmlsdGVyUnVsZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFJlcXVlc3RFdmVudExpc3RlbmVyc0FyZ3VtZW50cyB7XG4gICAgaG9va0lkOiBzdHJpbmc7XG4gICAgaG9va0NsYXNzTmFtZTogc3RyaW5nO1xuICAgIHJ1bGVzOiBSZXF1ZXN0RmlsdGVyUnVsZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldE9wdGlvbnNBcmd1bWVudHMge1xuICAgIHZhbHVlOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0SG9va0V2ZW50QXJndW1lbnRzIHtcbiAgICBuYW1lOiBSZXF1ZXN0SG9va01ldGhvZE5hbWVzO1xuICAgIHRlc3RJZDogc3RyaW5nO1xuICAgIGhvb2tJZDogc3RyaW5nO1xuICAgIGV2ZW50RGF0YTogUmVxdWVzdEV2ZW50IHwgQ29uZmlndXJlUmVzcG9uc2VFdmVudCB8IFJlc3BvbnNlRXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0TW9ja0FyZ3VtZW50cyBleHRlbmRzIFJlcXVlc3RGaWx0ZXJSdWxlTG9jYXRvciB7XG4gICAgcmVzcG9uc2VFdmVudElkOiBzdHJpbmc7XG4gICAgbW9jazogUmVzcG9uc2VNb2NrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldENvbmZpZ3VyZVJlc3BvbnNlRXZlbnRPcHRpb25zQXJndW1lbnRzIHtcbiAgICBldmVudElkOiBzdHJpbmc7XG4gICAgb3B0czogQ29uZmlndXJlUmVzcG9uc2VFdmVudE9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0SGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50QXJndW1lbnRzIHtcbiAgICBldmVudElkOiBzdHJpbmc7XG4gICAgaGVhZGVyTmFtZTogc3RyaW5nO1xuICAgIGhlYWRlclZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3ZlSGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50QXJndW1lbnRzIHtcbiAgICBldmVudElkOiBzdHJpbmc7XG4gICAgaGVhZGVyTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RIb29rTG9jYXRvciB7XG4gICAgdGVzdElkOiBzdHJpbmc7XG4gICAgaG9va0lkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdEZpbHRlclJ1bGVMb2NhdG9yIGV4dGVuZHMgUmVxdWVzdEhvb2tMb2NhdG9yIHtcbiAgICBydWxlSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlUmVxdWVzdEZpbHRlclJ1bGVQcmVkaWNhdGVBcmd1bWVudHMgZXh0ZW5kcyBSZXF1ZXN0RmlsdGVyUnVsZUxvY2F0b3Ige1xuICAgIHJlcXVlc3RJbmZvOiBSZXF1ZXN0SW5mbztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlTW9ja1ByZWRpY2F0ZSBleHRlbmRzIFJlcXVlc3RGaWx0ZXJSdWxlTG9jYXRvciB7XG4gICAgcmVxdWVzdEluZm86IFJlcXVlc3RJbmZvO1xuICAgIHJlczogSW5jb21pbmdNZXNzYWdlTGlrZUluaXRPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFdhcm5pbmdNZXNzYWdlc0FyZ3VtZW50cyB7XG4gICAgdGVzdFJ1bklkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbGl6ZVRlc3RSdW5EYXRhQXJndW1lbnRzIHtcbiAgICB0ZXN0UnVuSWQ6IHN0cmluZztcbiAgICB0ZXN0SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0UnVuRGlzcGF0Y2hlclByb3RvY29sIHtcbiAgICBleGVjdXRlQWN0aW9uU3luYyAoeyBpZCwgYXBpTWV0aG9kTmFtZSwgY29tbWFuZCwgY2FsbHNpdGUgfTogRXhlY3V0ZUFjdGlvbkFyZ3VtZW50cyk6IHVua25vd247XG4gICAgZXhlY3V0ZUFjdGlvbiAoeyBpZCwgYXBpTWV0aG9kTmFtZSwgY29tbWFuZCwgY2FsbHNpdGUgfTogRXhlY3V0ZUFjdGlvbkFyZ3VtZW50cyk6IFByb21pc2U8dW5rbm93bj47XG4gICAgZXhlY3V0ZUNvbW1hbmQgKHsgY29tbWFuZCB9OiBFeGVjdXRlQ29tbWFuZEFyZ3VtZW50cyk6IFByb21pc2U8dW5rbm93bj47XG4gICAgYWRkUmVxdWVzdEV2ZW50TGlzdGVuZXJzICggeyBob29rSWQsIGhvb2tDbGFzc05hbWUsIHJ1bGVzIH06IEFkZFJlcXVlc3RFdmVudExpc3RlbmVyc0FyZ3VtZW50cyk6IFByb21pc2U8dm9pZD47XG4gICAgcmVtb3ZlUmVxdWVzdEV2ZW50TGlzdGVuZXJzICh7IHJ1bGVzIH06IFJlbW92ZVJlcXVlc3RFdmVudExpc3RlbmVyc0FyZ3VtZW50cyk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsZXJQcm90b2NvbCBleHRlbmRzIFRlc3RSdW5EaXNwYXRjaGVyUHJvdG9jb2wge1xuICAgIHJlYWR5ICgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgZ2V0VGVzdHMgKHsgc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zIH06IENvbXBpbGVyQXJndW1lbnRzKTogUHJvbWlzZTx1bmtub3duPjtcblxuICAgIHJ1blRlc3RGbiAoeyBpZCwgZnVuY3Rpb25OYW1lLCB0ZXN0UnVuSWQgfTogUnVuVGVzdEFyZ3VtZW50cyk6IFByb21pc2U8dW5rbm93bj47XG5cbiAgICBjbGVhblVwICgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgc2V0T3B0aW9ucyAoeyB2YWx1ZSB9OiBTZXRPcHRpb25zQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPjtcblxuICAgIG9uUmVxdWVzdEhvb2tFdmVudCAoeyBuYW1lLCB0ZXN0SWQsIGhvb2tJZCwgZXZlbnREYXRhIH06IFJlcXVlc3RIb29rRXZlbnRBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgc2V0TW9jayAoeyByZXNwb25zZUV2ZW50SWQsIG1vY2sgfTogU2V0TW9ja0FyZ3VtZW50cyk6IFByb21pc2U8dm9pZD47XG5cbiAgICBzZXRDb25maWd1cmVSZXNwb25zZUV2ZW50T3B0aW9ucyAoeyBldmVudElkLCBvcHRzIH06IFNldENvbmZpZ3VyZVJlc3BvbnNlRXZlbnRPcHRpb25zQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPjtcblxuICAgIHNldEhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudCAoeyBldmVudElkLCBoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSB9OiBTZXRIZWFkZXJPbkNvbmZpZ3VyZVJlc3BvbnNlRXZlbnRBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgcmVtb3ZlSGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50ICh7IGV2ZW50SWQsIGhlYWRlck5hbWUgfTogUmVtb3ZlSGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50QXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPjtcblxuICAgIGV4ZWN1dGVSZXF1ZXN0RmlsdGVyUnVsZVByZWRpY2F0ZSAoeyB0ZXN0SWQsIGhvb2tJZCwgcnVsZUlkLCByZXF1ZXN0SW5mbyB9OiBFeGVjdXRlUmVxdWVzdEZpbHRlclJ1bGVQcmVkaWNhdGVBcmd1bWVudHMpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gICAgZXhlY3V0ZU1vY2tQcmVkaWNhdGUgKHsgdGVzdElkLCBob29rSWQsIHJ1bGVJZCwgcmVxdWVzdEluZm8sIHJlcyB9OiBFeGVjdXRlTW9ja1ByZWRpY2F0ZSk6IFByb21pc2U8SW5jb21pbmdNZXNzYWdlTGlrZUluaXRPcHRpb25zPjtcblxuICAgIGdldFdhcm5pbmdNZXNzYWdlcyAoeyB0ZXN0UnVuSWQgfTogR2V0V2FybmluZ01lc3NhZ2VzQXJndW1lbnRzKTogUHJvbWlzZTxzdHJpbmdbXT47XG5cbiAgICBpbml0aWFsaXplVGVzdFJ1bkRhdGEgKHsgdGVzdFJ1bklkLCB0ZXN0SWQgfTogSW5pdGlhbGl6ZVRlc3RSdW5EYXRhQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPjtcbn1cbiJdfQ==