testcafe 2.3.1 → 2.6.1

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 (235) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/LICENSE +1 -1
  3. package/README.md +40 -46
  4. package/bin/testcafe-with-v8-flag-filter.js +10 -16
  5. package/lib/api/exportable-lib/index.js +1 -11
  6. package/lib/api/structure/test.js +4 -11
  7. package/lib/api/test-controller/execution-context.js +4 -2
  8. package/lib/api/test-controller/index.js +8 -10
  9. package/lib/api/test-run-tracker.js +1 -1
  10. package/lib/assertions/executor.js +2 -11
  11. package/lib/browser/connection/gateway/index.js +272 -0
  12. package/lib/browser/connection/gateway/status.js +10 -0
  13. package/lib/browser/connection/index.js +60 -47
  14. package/lib/browser/connection/service-routes.js +4 -2
  15. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +3 -2
  16. package/lib/browser/provider/built-in/dedicated/chrome/index.js +48 -23
  17. package/lib/browser/provider/built-in/dedicated/edge/index.js +4 -1
  18. package/lib/browser/provider/index.js +13 -4
  19. package/lib/browser/provider/plugin-host.js +7 -1
  20. package/lib/cli/argument-parser/index.js +10 -16
  21. package/lib/cli/cli.js +4 -13
  22. package/lib/cli/remotes-wizard.js +2 -1
  23. package/lib/cli/utils/should-move-option-to-end.js +17 -0
  24. package/lib/client/automation/deps/hammerhead.js +24 -0
  25. package/lib/client/automation/deps/testcafe-core.js +24 -0
  26. package/lib/client/automation/index.js +567 -187
  27. package/lib/client/automation/index.min.js +1 -1
  28. package/lib/client/automation/playback/press/get-key-info.js +44 -0
  29. package/lib/client/automation/playback/press/utils.js +142 -0
  30. package/lib/client/automation/utils/get-key-code.js +15 -0
  31. package/lib/client/automation/utils/get-key-identifier.js +14 -0
  32. package/lib/client/automation/utils/is-letter.js +7 -0
  33. package/lib/client/automation/utils/key-identifier-maps.js +93 -0
  34. package/lib/client/browser/idle-page/index.html.mustache +2 -2
  35. package/lib/client/browser/idle-page/index.js +24 -11
  36. package/lib/client/core/index.js +67 -13
  37. package/lib/client/core/index.min.js +1 -1
  38. package/lib/client/core/utils/array.js +77 -0
  39. package/lib/client/core/utils/dom.js +459 -0
  40. package/lib/client/core/utils/send-request-to-frame.js +22 -0
  41. package/lib/client/core/utils/style.js +102 -0
  42. package/lib/client/core/utils/values/boundary-values.js +41 -0
  43. package/lib/client/driver/index.js +270 -242
  44. package/lib/client/driver/index.min.js +1 -1
  45. package/lib/client/test-run/iframe.js.mustache +6 -6
  46. package/lib/client/test-run/index.js.mustache +37 -33
  47. package/lib/client/ui/index.js +3238 -54
  48. package/lib/client/ui/index.min.js +1 -1
  49. package/lib/client/ui/sprite.svg +15 -0
  50. package/lib/client/ui/styles.css +184 -41
  51. package/lib/compiler/babel/load-libs.js +6 -6
  52. package/lib/compiler/compilers.js +7 -7
  53. package/lib/compiler/index.js +6 -6
  54. package/lib/compiler/interfaces.js +1 -1
  55. package/lib/compiler/test-file/add-export-api.js +3 -3
  56. package/lib/compiler/test-file/api-based.js +8 -37
  57. package/lib/compiler/test-file/formats/es-next/compiler.js +5 -5
  58. package/lib/compiler/test-file/formats/typescript/compiler.js +9 -9
  59. package/lib/compiler/test-file/get-exportable-lib-path.js +3 -3
  60. package/lib/configuration/configuration-base.js +9 -6
  61. package/lib/configuration/default-values.js +3 -3
  62. package/lib/configuration/formats.js +9 -5
  63. package/lib/configuration/interfaces.js +1 -1
  64. package/lib/configuration/option-names.js +3 -4
  65. package/lib/configuration/run-option-names.js +2 -2
  66. package/lib/configuration/testcafe-configuration.js +41 -24
  67. package/lib/configuration/types.js +1 -1
  68. package/lib/configuration/utils.js +32 -0
  69. package/lib/custom-client-scripts/client-script.js +2 -2
  70. package/lib/custom-client-scripts/get-code.js +3 -3
  71. package/lib/custom-client-scripts/routing.js +10 -12
  72. package/lib/errors/runtime/templates.js +3 -2
  73. package/lib/errors/test-run/templates.js +4 -1
  74. package/lib/errors/types.js +3 -1
  75. package/lib/index.js +6 -31
  76. package/lib/live/bootstrapper.js +3 -3
  77. package/lib/live/test-runner.js +9 -7
  78. package/lib/native-automation/add-custom-debug-formatters.js +23 -0
  79. package/lib/native-automation/api-base.js +27 -0
  80. package/lib/native-automation/client/event-descriptor.js +118 -0
  81. package/lib/native-automation/client/input.js +46 -0
  82. package/lib/native-automation/client/key-press/utils.js +31 -0
  83. package/lib/native-automation/client/types.js +11 -0
  84. package/lib/native-automation/client/utils.js +54 -0
  85. package/lib/native-automation/cookie-provider.js +115 -0
  86. package/lib/native-automation/empty-page-markup.js +11 -0
  87. package/lib/native-automation/error-route.js +7 -0
  88. package/lib/native-automation/errors.js +20 -0
  89. package/lib/native-automation/index.js +53 -0
  90. package/lib/native-automation/request-hooks/event-factory/frame-navigated-event-based.js +40 -0
  91. package/lib/native-automation/request-hooks/event-factory/request-paused-event-based.js +94 -0
  92. package/lib/native-automation/request-hooks/event-provider.js +55 -0
  93. package/lib/native-automation/request-hooks/pipeline-context.js +11 -0
  94. package/lib/{proxyless → native-automation}/request-pipeline/constants.js +1 -1
  95. package/lib/native-automation/request-pipeline/context-info.js +58 -0
  96. package/lib/native-automation/request-pipeline/index.js +329 -0
  97. package/lib/native-automation/request-pipeline/resendAuthRequest.js +23 -0
  98. package/lib/native-automation/request-pipeline/safe-api.js +66 -0
  99. package/lib/native-automation/request-pipeline/special-handlers.js +76 -0
  100. package/lib/native-automation/request-pipeline/test-run-bridge.js +45 -0
  101. package/lib/native-automation/resource-injector.js +175 -0
  102. package/lib/native-automation/session-storage/index.js +43 -0
  103. package/lib/native-automation/storages-provider.js +17 -0
  104. package/lib/native-automation/types.js +12 -0
  105. package/lib/native-automation/utils/cdp.js +71 -0
  106. package/lib/native-automation/utils/convert.js +11 -0
  107. package/lib/native-automation/utils/get-active-client.js +8 -0
  108. package/lib/native-automation/utils/headers.js +30 -0
  109. package/lib/native-automation/utils/string.js +32 -0
  110. package/lib/reporter/index.js +52 -4
  111. package/lib/reporter/interfaces.js +1 -1
  112. package/lib/reporter/plugin-host.js +44 -4
  113. package/lib/reporter/plugin-methods.js +2 -1
  114. package/lib/reporter/report-data-log.js +25 -0
  115. package/lib/role/role.js +4 -39
  116. package/lib/runner/bootstrapper.js +40 -15
  117. package/lib/runner/browser-job.js +4 -5
  118. package/lib/runner/fixture-hook-controller.js +1 -7
  119. package/lib/runner/index.js +87 -94
  120. package/lib/runner/interfaces.js +1 -1
  121. package/lib/runner/task/index.js +2 -32
  122. package/lib/runner/test-run-controller.js +46 -4
  123. package/lib/shared/errors/index.js +8 -2
  124. package/lib/shared/utils/is-file-protocol.js +2 -2
  125. package/lib/test-run/bookmark.js +5 -23
  126. package/lib/test-run/commands/actions.js +16 -4
  127. package/lib/test-run/commands/service.js +2 -3
  128. package/lib/test-run/commands/type.js +2 -1
  129. package/lib/test-run/commands/utils.js +4 -2
  130. package/lib/test-run/cookies/base.js +4 -1
  131. package/lib/test-run/cookies/factory.js +4 -4
  132. package/lib/test-run/cookies/provider.js +9 -2
  133. package/lib/test-run/execute-js-expression/index.js +4 -2
  134. package/lib/test-run/index.js +35 -151
  135. package/lib/test-run/request/create-request-options.js +37 -24
  136. package/lib/test-run/request/send.js +2 -3
  137. package/lib/test-run/role-provider.js +5 -5
  138. package/lib/test-run/session-controller.js +5 -5
  139. package/lib/test-run/storages/factory.js +4 -4
  140. package/lib/testcafe.js +17 -18
  141. package/lib/utils/check-is-vm.js +58 -0
  142. package/lib/utils/debug-loggers.js +9 -7
  143. package/lib/utils/get-browser.js +5 -2
  144. package/lib/utils/get-options/boolean-or-object-option.js +18 -0
  145. package/lib/utils/get-options/quarantine.js +10 -13
  146. package/lib/utils/get-options/skip-js-errors.js +12 -16
  147. package/lib/utils/parse-user-agent.js +20 -13
  148. package/lib/utils/string.js +1 -1
  149. package/package.json +14 -11
  150. package/ts-defs/index.d.ts +12 -2
  151. package/ts-defs/selectors.d.ts +8 -1
  152. package/ts-defs/testcafe-scripts.d.ts +8 -1
  153. package/lib/browser/connection/gateway.js +0 -205
  154. package/lib/compiler/test-file/test-file-temp-variable-name.js +0 -6
  155. package/lib/dashboard/config-storage.js +0 -26
  156. package/lib/dashboard/connector.js +0 -84
  157. package/lib/dashboard/documentation-url.js +0 -6
  158. package/lib/dashboard/formatting.js +0 -26
  159. package/lib/dashboard/get-dashboard-url.js +0 -10
  160. package/lib/dashboard/get-default-project-link.js +0 -23
  161. package/lib/dashboard/get-env-options.js +0 -26
  162. package/lib/dashboard/index.js +0 -145
  163. package/lib/dashboard/interfaces.js +0 -3
  164. package/lib/dashboard/messages.js +0 -21
  165. package/lib/proxyless/add-custom-debug-formatters.js +0 -22
  166. package/lib/proxyless/api-base.js +0 -25
  167. package/lib/proxyless/client/event-simulator.js +0 -40
  168. package/lib/proxyless/client/types.js +0 -11
  169. package/lib/proxyless/client/utils.js +0 -24
  170. package/lib/proxyless/cookie-provider.js +0 -87
  171. package/lib/proxyless/default-setup-options.js +0 -9
  172. package/lib/proxyless/empty-page-markup.js +0 -11
  173. package/lib/proxyless/error-route.js +0 -7
  174. package/lib/proxyless/index.js +0 -53
  175. package/lib/proxyless/request-hooks/event-factory/frame-navigated-event-based.js +0 -40
  176. package/lib/proxyless/request-hooks/event-factory/request-paused-event-based.js +0 -95
  177. package/lib/proxyless/request-hooks/event-provider.js +0 -52
  178. package/lib/proxyless/request-hooks/pipeline-context.js +0 -11
  179. package/lib/proxyless/request-pipeline/context-info.js +0 -55
  180. package/lib/proxyless/request-pipeline/index.js +0 -230
  181. package/lib/proxyless/request-pipeline/resendAuthRequest.js +0 -23
  182. package/lib/proxyless/request-pipeline/safe-api.js +0 -62
  183. package/lib/proxyless/request-pipeline/special-handlers.js +0 -73
  184. package/lib/proxyless/request-pipeline/test-run-bridge.js +0 -45
  185. package/lib/proxyless/resource-injector.js +0 -162
  186. package/lib/proxyless/session-storage/index.js +0 -39
  187. package/lib/proxyless/storages-provider.js +0 -17
  188. package/lib/proxyless/types.js +0 -10
  189. package/lib/proxyless/utils/cdp.js +0 -66
  190. package/lib/proxyless/utils/get-active-client.js +0 -8
  191. package/lib/proxyless/utils/headers.js +0 -30
  192. package/lib/proxyless/utils/string.js +0 -32
  193. package/lib/services/compiler/esm-runtime-holder-name.js +0 -6
  194. package/lib/services/compiler/host.js +0 -370
  195. package/lib/services/compiler/interfaces.js +0 -3
  196. package/lib/services/compiler/io.js +0 -10
  197. package/lib/services/compiler/protocol.js +0 -17
  198. package/lib/services/compiler/service-loader.js +0 -18
  199. package/lib/services/compiler/service.js +0 -361
  200. package/lib/services/compiler/test-run-proxy.js +0 -156
  201. package/lib/services/interfaces.js +0 -3
  202. package/lib/services/process-title.js +0 -10
  203. package/lib/services/serialization/prepare-options.js +0 -23
  204. package/lib/services/serialization/replicator/create-replicator.js +0 -58
  205. package/lib/services/serialization/replicator/interfaces.js +0 -3
  206. package/lib/services/serialization/replicator/transforms/base-transform.js +0 -16
  207. package/lib/services/serialization/replicator/transforms/browser-console-messages-transform.js +0 -23
  208. package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +0 -24
  209. package/lib/services/serialization/replicator/transforms/command-base-trasform/assertion-command-constructors.js +0 -28
  210. package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +0 -66
  211. package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +0 -49
  212. package/lib/services/serialization/replicator/transforms/command-base-trasform/types.js +0 -3
  213. package/lib/services/serialization/replicator/transforms/configure-response-event-option-transform.js +0 -21
  214. package/lib/services/serialization/replicator/transforms/custom-error-transform.js +0 -29
  215. package/lib/services/serialization/replicator/transforms/function-marker-transform/index.js +0 -21
  216. package/lib/services/serialization/replicator/transforms/function-marker-transform/marker.js +0 -9
  217. package/lib/services/serialization/replicator/transforms/promise-marker-transform/index.js +0 -21
  218. package/lib/services/serialization/replicator/transforms/promise-marker-transform/marker.js +0 -9
  219. package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +0 -22
  220. package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/index.js +0 -22
  221. package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/marker.js +0 -6
  222. package/lib/services/serialization/replicator/transforms/request-filter-rule-transform.js +0 -23
  223. package/lib/services/serialization/replicator/transforms/request-hook-event-data-transform.js +0 -41
  224. package/lib/services/serialization/replicator/transforms/response-mock-transform.js +0 -23
  225. package/lib/services/serialization/replicator/transforms/role-transform.js +0 -21
  226. package/lib/services/serialization/replicator/transforms/testcafe-error-list-transform.js +0 -23
  227. package/lib/services/serialization/replicator/transforms/url-transform.js +0 -23
  228. package/lib/services/serialization/test-structure.js +0 -91
  229. package/lib/services/utils/ipc/interfaces.js +0 -29
  230. package/lib/services/utils/ipc/io.js +0 -109
  231. package/lib/services/utils/ipc/message.js +0 -84
  232. package/lib/services/utils/ipc/packet.js +0 -57
  233. package/lib/services/utils/ipc/proxy.js +0 -94
  234. package/lib/services/utils/ipc/transport.js +0 -65
  235. package/lib/services/utils/method-should-not-be-called-error.js +0 -10
@@ -8,6 +8,9 @@ class CookieProviderBase {
8
8
  async initialize() {
9
9
  return Promise.resolve();
10
10
  }
11
+ _isCookieOptionsArray(cookies) {
12
+ return cookies.every((cookie) => typeof cookie === 'object');
13
+ }
11
14
  }
12
15
  exports.CookieProviderBase = CookieProviderBase;
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9jb29raWVzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBV0EsTUFBYSxrQkFBa0I7SUFHM0IsWUFBYSxPQUFnQjtRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDWixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0NBQ0o7QUFWRCxnREFVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV4dGVybmFsQ29va2llcyB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IFRlc3RSdW4gZnJvbSAnLi4vJztcbmltcG9ydCB7IENvb2tpZU9wdGlvbnMgfSBmcm9tICcuLi9jb21tYW5kcy9vcHRpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBDb29raWVQcm92aWRlciB7XG4gICAgaW5pdGlhbGl6ZTogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBzZXRDb29raWVzOiAoY29va2llczogQ29va2llT3B0aW9uc1tdLCB1cmw6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBnZXRDb29raWVzOiAoZXh0ZXJuYWxDb29raWVzOiBFeHRlcm5hbENvb2tpZXNbXSwgdXJsczogc3RyaW5nW10pID0+IFByb21pc2U8RXh0ZXJuYWxDb29raWVzW10+LFxuICAgIGRlbGV0ZUNvb2tpZXMgKGNvb2tpZXM/OiBDb29raWVPcHRpb25zW10sIHVybHM/OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBjbGFzcyBDb29raWVQcm92aWRlckJhc2Uge1xuICAgIHByb3RlY3RlZCB0ZXN0UnVuOiBUZXN0UnVuO1xuXG4gICAgY29uc3RydWN0b3IgKHRlc3RSdW46IFRlc3RSdW4pIHtcbiAgICAgICAgdGhpcy50ZXN0UnVuID0gdGVzdFJ1bjtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0aWFsaXplICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbn1cbiJdfQ==
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9jb29raWVzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBYUEsTUFBYSxrQkFBa0I7SUFHM0IsWUFBYSxPQUFnQjtRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDWixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVMscUJBQXFCLENBQUUsT0FBc0M7UUFDbkUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBOEIsRUFBRSxFQUFFLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDekYsQ0FBQztDQUNKO0FBZEQsZ0RBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFeHRlcm5hbENvb2tpZXMgfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcbmltcG9ydCBUZXN0UnVuIGZyb20gJy4uLyc7XG5pbXBvcnQgeyBDb29raWVPcHRpb25zIH0gZnJvbSAnLi4vY29tbWFuZHMvb3B0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29va2llUHJvdmlkZXIge1xuICAgIGluaXRpYWxpemU6ICgpID0+IFByb21pc2U8dm9pZD4sXG4gICAgc2V0Q29va2llczogKGNvb2tpZXM6IENvb2tpZU9wdGlvbnNbXSB8IHN0cmluZyB8IHN0cmluZ1tdLCB1cmw6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBnZXRDb29raWVzOiAoZXh0ZXJuYWxDb29raWVzOiBFeHRlcm5hbENvb2tpZXNbXSwgdXJsczogc3RyaW5nW10pID0+IFByb21pc2U8RXh0ZXJuYWxDb29raWVzW10+LFxuICAgIGdldENvb2tpZUhlYWRlcjogKHVybDogc3RyaW5nLCBob3N0bmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGw+XG5cbiAgICBkZWxldGVDb29raWVzIChjb29raWVzPzogQ29va2llT3B0aW9uc1tdLCB1cmxzPzogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgY2xhc3MgQ29va2llUHJvdmlkZXJCYXNlIHtcbiAgICBwcm90ZWN0ZWQgdGVzdFJ1bjogVGVzdFJ1bjtcblxuICAgIGNvbnN0cnVjdG9yICh0ZXN0UnVuOiBUZXN0UnVuKSB7XG4gICAgICAgIHRoaXMudGVzdFJ1biA9IHRlc3RSdW47XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdGlhbGl6ZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2lzQ29va2llT3B0aW9uc0FycmF5IChjb29raWVzOiBBcnJheTxzdHJpbmcgfCBDb29raWVPcHRpb25zPik6IGNvb2tpZXMgaXMgQ29va2llT3B0aW9uc1tdIHtcbiAgICAgICAgcmV0dXJuIGNvb2tpZXMuZXZlcnkoKGNvb2tpZTogc3RyaW5nIHwgQ29va2llT3B0aW9ucykgPT4gdHlwZW9mIGNvb2tpZSA9PT0gJ29iamVjdCcpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CookieProviderFactory = void 0;
4
- const cookie_provider_1 = require("../../proxyless/cookie-provider");
4
+ const cookie_provider_1 = require("../../native-automation/cookie-provider");
5
5
  const provider_1 = require("./provider");
6
6
  class CookieProviderFactory {
7
- static create(testRun, isProxyless) {
8
- return isProxyless ? new cookie_provider_1.CdpCookieProvider(testRun) : new provider_1.ProxyCookieProvider(testRun);
7
+ static create(testRun, isNativeAutomation) {
8
+ return isNativeAutomation ? new cookie_provider_1.CdpCookieProvider(testRun) : new provider_1.ProxyCookieProvider(testRun);
9
9
  }
10
10
  }
11
11
  exports.CookieProviderFactory = CookieProviderFactory;
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9jb29raWVzL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscUVBQW9FO0FBRXBFLHlDQUFpRDtBQUVqRCxNQUFhLHFCQUFxQjtJQUN2QixNQUFNLENBQUMsTUFBTSxDQUFFLE9BQWdCLEVBQUUsV0FBb0I7UUFDeEQsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksbUNBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksOEJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0YsQ0FBQztDQUNKO0FBSkQsc0RBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGVzdFJ1biBmcm9tICcuLi8nO1xuaW1wb3J0IHsgQ2RwQ29va2llUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9wcm94eWxlc3MvY29va2llLXByb3ZpZGVyJztcbmltcG9ydCB7IENvb2tpZVByb3ZpZGVyIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IFByb3h5Q29va2llUHJvdmlkZXIgfSBmcm9tICcuL3Byb3ZpZGVyJztcblxuZXhwb3J0IGNsYXNzIENvb2tpZVByb3ZpZGVyRmFjdG9yeSB7XG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUgKHRlc3RSdW46IFRlc3RSdW4sIGlzUHJveHlsZXNzOiBib29sZWFuKTogQ29va2llUHJvdmlkZXIge1xuICAgICAgICByZXR1cm4gaXNQcm94eWxlc3MgPyBuZXcgQ2RwQ29va2llUHJvdmlkZXIodGVzdFJ1bikgOiBuZXcgUHJveHlDb29raWVQcm92aWRlcih0ZXN0UnVuKTtcbiAgICB9XG59XG4iXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9jb29raWVzL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkVBQTRFO0FBRTVFLHlDQUFpRDtBQUVqRCxNQUFhLHFCQUFxQjtJQUN2QixNQUFNLENBQUMsTUFBTSxDQUFFLE9BQWdCLEVBQUUsa0JBQTJCO1FBQy9ELE9BQU8sa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksbUNBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksOEJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEcsQ0FBQztDQUNKO0FBSkQsc0RBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGVzdFJ1biBmcm9tICcuLi8nO1xuaW1wb3J0IHsgQ2RwQ29va2llUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9uYXRpdmUtYXV0b21hdGlvbi9jb29raWUtcHJvdmlkZXInO1xuaW1wb3J0IHsgQ29va2llUHJvdmlkZXIgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgUHJveHlDb29raWVQcm92aWRlciB9IGZyb20gJy4vcHJvdmlkZXInO1xuXG5leHBvcnQgY2xhc3MgQ29va2llUHJvdmlkZXJGYWN0b3J5IHtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZSAodGVzdFJ1bjogVGVzdFJ1biwgaXNOYXRpdmVBdXRvbWF0aW9uOiBib29sZWFuKTogQ29va2llUHJvdmlkZXIge1xuICAgICAgICByZXR1cm4gaXNOYXRpdmVBdXRvbWF0aW9uID8gbmV3IENkcENvb2tpZVByb3ZpZGVyKHRlc3RSdW4pIDogbmV3IFByb3h5Q29va2llUHJvdmlkZXIodGVzdFJ1bik7XG4gICAgfVxufVxuIl19
@@ -2,19 +2,26 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ProxyCookieProvider = void 0;
4
4
  const base_1 = require("./base");
5
+ const lodash_1 = require("lodash");
5
6
  class ProxyCookieProvider extends base_1.CookieProviderBase {
6
7
  async getCookies(externalCookies, urls) {
7
8
  const session = this.testRun.session;
8
9
  return session.cookies.getCookies(externalCookies, urls);
9
10
  }
10
11
  async setCookies(cookies, url) {
12
+ const cookiesArray = (0, lodash_1.castArray)(cookies);
11
13
  const session = this.testRun.session;
12
- return session.cookies.setCookies(cookies, url);
14
+ if (this._isCookieOptionsArray(cookiesArray))
15
+ return session.cookies.setCookies(cookiesArray, url);
16
+ return session.cookies.copySyncCookies(cookiesArray.join(';'), url);
13
17
  }
14
18
  async deleteCookies(cookies, urls) {
15
19
  const session = this.testRun.session;
16
20
  return session.cookies.deleteCookies(cookies, urls);
17
21
  }
22
+ async getCookieHeader(url, hostname) {
23
+ return this.testRun.session.cookies.getHeader({ url, hostname });
24
+ }
18
25
  }
19
26
  exports.ProxyCookieProvider = ProxyCookieProvider;
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC1ydW4vY29va2llcy9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxpQ0FBNEQ7QUFFNUQsTUFBYSxtQkFBb0IsU0FBUSx5QkFBa0I7SUFDdkQsS0FBSyxDQUFDLFVBQVUsQ0FBRSxlQUFrQyxFQUFFLElBQWM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFFckMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUUsT0FBd0IsRUFBRSxHQUFXO1FBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBRXJDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFFLE9BQXdCLEVBQUUsSUFBYztRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUVyQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBQ0o7QUFsQkQsa0RBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXh0ZXJuYWxDb29raWVzIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgeyBDb29raWVPcHRpb25zIH0gZnJvbSAnLi4vY29tbWFuZHMvb3B0aW9ucyc7XG5pbXBvcnQgeyBDb29raWVQcm92aWRlciwgQ29va2llUHJvdmlkZXJCYXNlIH0gZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNsYXNzIFByb3h5Q29va2llUHJvdmlkZXIgZXh0ZW5kcyBDb29raWVQcm92aWRlckJhc2UgaW1wbGVtZW50cyBDb29raWVQcm92aWRlciB7XG4gICAgYXN5bmMgZ2V0Q29va2llcyAoZXh0ZXJuYWxDb29raWVzOiBFeHRlcm5hbENvb2tpZXNbXSwgdXJsczogc3RyaW5nW10pOiBQcm9taXNlPEV4dGVybmFsQ29va2llc1tdPiB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnRlc3RSdW4uc2Vzc2lvbjtcblxuICAgICAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVzLmdldENvb2tpZXMoZXh0ZXJuYWxDb29raWVzLCB1cmxzKTtcbiAgICB9XG5cbiAgICBhc3luYyBzZXRDb29raWVzIChjb29raWVzOiBDb29raWVPcHRpb25zW10sIHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnRlc3RSdW4uc2Vzc2lvbjtcblxuICAgICAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVzLnNldENvb2tpZXMoY29va2llcywgdXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBkZWxldGVDb29raWVzIChjb29raWVzOiBDb29raWVPcHRpb25zW10sIHVybHM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnRlc3RSdW4uc2Vzc2lvbjtcblxuICAgICAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVzLmRlbGV0ZUNvb2tpZXMoY29va2llcywgdXJscyk7XG4gICAgfVxufVxuIl19
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC1ydW4vY29va2llcy9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxpQ0FBNEQ7QUFDNUQsbUNBQW1DO0FBRW5DLE1BQWEsbUJBQW9CLFNBQVEseUJBQWtCO0lBQ3ZELEtBQUssQ0FBQyxVQUFVLENBQUUsZUFBa0MsRUFBRSxJQUFjO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBRXJDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFFLE9BQTRDLEVBQUUsR0FBVztRQUN2RSxNQUFNLFlBQVksR0FBRyxJQUFBLGtCQUFTLEVBQXlCLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBRTFDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQztZQUN4QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV6RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUUsT0FBd0IsRUFBRSxJQUFjO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBRXJDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFFLEdBQVcsRUFBRSxRQUFnQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0o7QUExQkQsa0RBMEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXh0ZXJuYWxDb29raWVzIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgeyBDb29raWVPcHRpb25zIH0gZnJvbSAnLi4vY29tbWFuZHMvb3B0aW9ucyc7XG5pbXBvcnQgeyBDb29raWVQcm92aWRlciwgQ29va2llUHJvdmlkZXJCYXNlIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IGNhc3RBcnJheSB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjbGFzcyBQcm94eUNvb2tpZVByb3ZpZGVyIGV4dGVuZHMgQ29va2llUHJvdmlkZXJCYXNlIGltcGxlbWVudHMgQ29va2llUHJvdmlkZXIge1xuICAgIGFzeW5jIGdldENvb2tpZXMgKGV4dGVybmFsQ29va2llczogRXh0ZXJuYWxDb29raWVzW10sIHVybHM6IHN0cmluZ1tdKTogUHJvbWlzZTxFeHRlcm5hbENvb2tpZXNbXT4ge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy50ZXN0UnVuLnNlc3Npb247XG5cbiAgICAgICAgcmV0dXJuIHNlc3Npb24uY29va2llcy5nZXRDb29raWVzKGV4dGVybmFsQ29va2llcywgdXJscyk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0Q29va2llcyAoY29va2llczogc3RyaW5nIHwgc3RyaW5nW10gfCBDb29raWVPcHRpb25zW10sIHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNvb2tpZXNBcnJheSA9IGNhc3RBcnJheTxzdHJpbmcgfCBDb29raWVPcHRpb25zPihjb29raWVzKTtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiAgICAgID0gdGhpcy50ZXN0UnVuLnNlc3Npb247XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzQ29va2llT3B0aW9uc0FycmF5KGNvb2tpZXNBcnJheSkpXG4gICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVzLnNldENvb2tpZXMoY29va2llc0FycmF5LCB1cmwpO1xuXG4gICAgICAgIHJldHVybiBzZXNzaW9uLmNvb2tpZXMuY29weVN5bmNDb29raWVzKGNvb2tpZXNBcnJheS5qb2luKCc7JyksIHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlQ29va2llcyAoY29va2llczogQ29va2llT3B0aW9uc1tdLCB1cmxzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy50ZXN0UnVuLnNlc3Npb247XG5cbiAgICAgICAgcmV0dXJuIHNlc3Npb24uY29va2llcy5kZWxldGVDb29raWVzKGNvb2tpZXMsIHVybHMpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldENvb2tpZUhlYWRlciAodXJsOiBzdHJpbmcsIGhvc3RuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5zZXNzaW9uLmNvb2tpZXMuZ2V0SGVhZGVyKHsgdXJsLCBob3N0bmFtZSB9KTtcbiAgICB9XG59XG4iXX0=
@@ -56,7 +56,9 @@ function isRuntimeError(err) {
56
56
  err instanceof runtime_1.CompositeError;
57
57
  }
58
58
  function executeJsExpression(expression, testRun, options) {
59
- const context = getExecutionContext(testRun.controller, options);
59
+ const context = testRun.controller ?
60
+ getExecutionContext(testRun.controller, options) :
61
+ (0, execution_context_1.createExecutionContext)(testRun);
60
62
  const errorOptions = createErrorFormattingOptions();
61
63
  return (0, vm_1.runInContext)(expression, context, errorOptions);
62
64
  }
@@ -83,4 +85,4 @@ async function executeAsyncJsExpression(expression, testRun, callsite, onBeforeR
83
85
  }
84
86
  }
85
87
  exports.executeAsyncJsExpression = executeAsyncJsExpression;
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC1ydW4vZXhlY3V0ZS1qcy1leHByZXNzaW9uL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJCQUFrQztBQUVsQyxrREFLOEI7QUFFOUIsb0RBQXlHO0FBQ3pHLG1GQUF5RztBQUV6RywyQ0FJcUI7QUFFckIsa0ZBQXdEO0FBRXhELDJGQUEyRjtBQUMzRixTQUFTLFdBQVcsQ0FBRSxVQUFVLEVBQUUsU0FBUztJQUN2QyxPQUFPLG1CQUFtQiwwQkFBYyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsU0FBUztRQUNyRSxVQUFVLEdBQUcsS0FBSztRQUNsQixLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUUsR0FBRztJQUM1QixJQUFJLEdBQUcsQ0FBQyxlQUFlLEVBQUU7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRO1lBQ2IsT0FBTyxFQUFFLENBQUM7UUFFZCxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNmLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUVsQyxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsRCxNQUFNLFVBQVUsR0FBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksRUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxVQUFVLENBQUMsZUFBZSxFQUFFO1NBQ3ZDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNWO0lBRUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxD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RSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFM0YsSUFBSSxvQkFBb0I7WUFDcEIsTUFBTSxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU1QyxNQUFNLFdBQVcsQ0FBQztLQUNyQjtBQUNMLENBQUM7QUF6QkQsNERBeUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcnVuSW5Db250ZXh0IH0gZnJvbSAndm0nO1xuXG5pbXBvcnQge1xuICAgIEdlbmVyYWxFcnJvcixcbiAgICBUZXN0Q29tcGlsYXRpb25FcnJvcixcbiAgICBBUElFcnJvcixcbiAgICBDb21wb3NpdGVFcnJvcixcbn0gZnJvbSAnLi4vLi4vZXJyb3JzL3J1bnRpbWUnO1xuXG5pbXBvcnQgeyBVbmNhdWdodEVycm9ySW5DdXN0b21TY3JpcHQsIFVuY2F1Z2h0VGVzdENhZmVFcnJvckluQ3VzdG9tU2NyaXB0IH0gZnJvbSAnLi4vLi4vZXJyb3JzL3Rlc3QtcnVuJztcbmltcG9ydCB7IHNldENvbnRleHRPcHRpb25zLCBERUZBVUxUX0NPTlRFWFRfT1BUSU9OUyB9IGZyb20gJy4uLy4uL2FwaS90ZXN0LWNvbnRyb2xsZXIvZXhlY3V0aW9uLWNvbnRleHQnO1xuXG5pbXBvcnQge1xuICAgIEVSUk9SX0xJTkVfQ09MVU1OX1JFR0VYUCxcbiAgICBFUlJPUl9GSUxFTkFNRSxcbiAgICBFUlJPUl9MSU5FX09GRlNFVCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgVGVzdFJ1blRyYWNrZXIgZnJvbSAnLi4vLi4vYXBpL3Rlc3QtcnVuLXRyYWNrZXInO1xuXG4vLyBOT1RFOiBkbyBub3QgYmVhdXRpZnkgdGhpcyBjb2RlIHNpbmNlIG9mZnNldHMgZm9yIGVycm9yIGxpbmVzIGFuZCBjb2x1bW5zIGFyZSBjb2RlZCBoZXJlXG5mdW5jdGlvbiB3cmFwSW5Bc3luYyAoZXhwcmVzc2lvbiwgdGVzdFJ1bklkKSB7XG4gICAgcmV0dXJuIGAoYXN5bmMgZnVuY3Rpb24gJHtUZXN0UnVuVHJhY2tlci5nZXRNYXJrZWRGbk5hbWUodGVzdFJ1bklkKX0gKCkge1xcbmAgK1xuICAgICAgICAgICBleHByZXNzaW9uICsgJztcXG4nICtcbiAgICAgICAgICAgJ30pOyc7XG59XG5cbmZ1bmN0aW9uIGdldEVycm9yTGluZUNvbHVtbiAoZXJyKSB7XG4gICAgaWYgKGVyci5pc1Rlc3RDYWZlRXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnIuY2FsbHNpdGUpXG4gICAgICAgICAgICByZXR1cm4ge307XG5cbiAgICAgICAgaWYgKGVyci5jYWxsc2l0ZS5pZClcbiAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9O1xuXG4gICAgICAgIGNvbnN0IHN0YWNrRnJhbWVzID0gZXJyLmNhbGxzaXRlLnN0YWNrRnJhbWVzIHx8IFtdO1xuICAgICAgICBjb25zdCBmcmFtZUluZGV4ICA9IGVyci5jYWxsc2l0ZS5jYWxsc2l0ZUZyYW1lSWR4O1xuICAgICAgICBjb25zdCBzdGFja0ZyYW1lICA9IHN0YWNrRnJhbWVzW2ZyYW1lSW5kZXhdO1xuXG4gICAgICAgIHJldHVybiBzdGFja0ZyYW1lID8ge1xuICAgICAgICAgICAgbGluZTogICBzdGFja0ZyYW1lLmdldExpbmVOdW1iZXIoKSxcbiAgICAgICAgICAgIGNvbHVtbjogc3RhY2tGcmFtZS5nZXRDb2x1bW5OdW1iZXIoKSxcbiAgICAgICAgfSA6IHt9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGVyci5zdGFjayAmJiBlcnIuc3RhY2subWF0Y2goRVJST1JfTElORV9DT0xVTU5fUkVHRVhQKTtcblxuICAgIGlmICghcmVzdWx0KVxuICAgICAgICByZXR1cm4ge307XG5cbiAgICBjb25zdCBsaW5lICAgPSByZXN1bHRbMV0gPyBwYXJzZUludChyZXN1bHRbMV0sIDEwKSA6IHZvaWQgMDtcbiAgICBjb25zdCBjb2x1bW4gPSByZXN1bHRbMl0gPyBwYXJzZUludChyZXN1bHRbMl0sIDEwKSA6IHZvaWQgMDtcblxuICAgIHJldHVybiB7IGxpbmUsIGNvbHVtbiB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckZvcm1hdHRpbmdPcHRpb25zICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmaWxlbmFtZTogICBFUlJPUl9GSUxFTkFNRSxcbiAgICAgICAgbGluZU9mZnNldDogRVJST1JfTElORV9PRkZTRVQsXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RXhlY3V0aW9uQ29udGV4dCAodGVzdENvbnRyb2xsZXIsIG9wdGlvbnMgPSBERUZBVUxUX0NPTlRFWFRfT1BUSU9OUykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0ZXN0Q29udHJvbGxlci5nZXRFeGVjdXRpb25Db250ZXh0KCk7XG5cbiAgICAvLyBUT0RPOiBGaW5kIGEgd2F5IHRvIGF2b2lkIHRoaXMgYXNzaWdubWVudFxuICAgIHNldENvbnRleHRPcHRpb25zKGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGlzUnVudGltZUVycm9yIChlcnIpIHtcbiAgICByZXR1cm4gZXJyIGluc3RhbmNlb2YgR2VuZXJhbEVycm9yIHx8XG4gICAgICAgICAgIGVyciBpbnN0YW5jZW9mIFRlc3RDb21waWxhdGlvbkVycm9yIHx8XG4gICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEFQSUVycm9yIHx8XG4gICAgICAgICAgIGVyciBpbnN0YW5jZW9mIENvbXBvc2l0ZUVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZUpzRXhwcmVzc2lvbiAoZXhwcmVzc2lvbiwgdGVzdFJ1biwgb3B0aW9ucykge1xuICAgIGNvbnN0IGNvbnRleHQgICAgICA9IGdldEV4ZWN1dGlvbkNvbnRleHQodGVzdFJ1bi5jb250cm9sbGVyLCBvcHRpb25zKTtcbiAgICBjb25zdCBlcnJvck9wdGlvbnMgPSBjcmVhdGVFcnJvckZvcm1hdHRpbmdPcHRpb25zKCk7XG5cbiAgICByZXR1cm4gcnVuSW5Db250ZXh0KGV4cHJlc3Npb24sIGNvbnRleHQsIGVycm9yT3B0aW9ucyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXN5bmNKc0V4cHJlc3Npb24gKGV4cHJlc3Npb24sIHRlc3RSdW4sIGNhbGxzaXRlLCBvbkJlZm9yZVJhaXNpbmdFcnJvcikge1xuICAgIGlmICghZXhwcmVzc2lvbiB8fCAhZXhwcmVzc2lvbi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIGNvbnN0IGNvbnRleHQgICAgICAgICAgID0gZ2V0RXhlY3V0aW9uQ29udGV4dCh0ZXN0UnVuLmNvbnRyb2xsZXIpO1xuICAgIGNvbnN0IGVycm9yT3B0aW9ucyAgICAgID0gY3JlYXRlRXJyb3JGb3JtYXR0aW5nT3B0aW9ucyhleHByZXNzaW9uKTtcbiAgICBjb25zdCB3cmFwcGVkRXhwcmVzc2lvbiA9IHdyYXBJbkFzeW5jKGV4cHJlc3Npb24sIHRlc3RSdW4uaWQpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bkluQ29udGV4dCh3cmFwcGVkRXhwcmVzc2lvbiwgY29udGV4dCwgZXJyb3JPcHRpb25zKSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IHsgbGluZSwgY29sdW1uIH0gPSBnZXRFcnJvckxpbmVDb2x1bW4oZXJyKTtcbiAgICAgICAgbGV0IHJlc3VsdEVycm9yICAgICAgICA9IG51bGw7XG5cbiAgICAgICAgaWYgKGVyci5pc1Rlc3RDYWZlRXJyb3IgfHwgaXNSdW50aW1lRXJyb3IoZXJyKSlcbiAgICAgICAgICAgIHJlc3VsdEVycm9yID0gbmV3IFVuY2F1Z2h0VGVzdENhZmVFcnJvckluQ3VzdG9tU2NyaXB0KGVyciwgZXhwcmVzc2lvbiwgbGluZSwgY29sdW1uLCBjYWxsc2l0ZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJlc3VsdEVycm9yID0gbmV3IFVuY2F1Z2h0RXJyb3JJbkN1c3RvbVNjcmlwdChlcnIsIGV4cHJlc3Npb24sIGxpbmUsIGNvbHVtbiwgY2FsbHNpdGUpO1xuXG4gICAgICAgIGlmIChvbkJlZm9yZVJhaXNpbmdFcnJvcilcbiAgICAgICAgICAgIGF3YWl0IG9uQmVmb3JlUmFpc2luZ0Vycm9yKHJlc3VsdEVycm9yKTtcblxuICAgICAgICB0aHJvdyByZXN1bHRFcnJvcjtcbiAgICB9XG59XG4iXX0=
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC1ydW4vZXhlY3V0ZS1qcy1leHByZXNzaW9uL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJCQUFrQztBQUVsQyxrREFLOEI7QUFFOUIsb0RBQXlHO0FBQ3pHLG1GQUlxRDtBQUVyRCwyQ0FJcUI7QUFFckIsa0ZBQXdEO0FBRXhELDJGQUEyRjtBQUMzRixTQUFTLFdBQVcsQ0FBRSxVQUFVLEVBQUUsU0FBUztJQUN2QyxPQUFPLG1CQUFtQiwwQkFBYyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsU0FBUztRQUNyRSxVQUFVLEdBQUcsS0FBSztRQUNsQixLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUUsR0FBRztJQUM1QixJQUFJLEdBQUcsQ0FBQyxlQUFlLEVBQUU7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRO1lBQ2IsT0FBTyxFQUFFLENBQUM7UUFFZCxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNmLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUVsQyxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsRCxNQUFNLFVBQVUsR0FBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksRUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxVQUFVLENBQUMsZUFBZSxFQUFFO1NBQ3ZDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNWO0lBRUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxD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USxDQUFDLENBQUM7O1lBRS9GLFdBQVcsR0FBRyxJQUFJLHNDQUEyQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUUzRixJQUFJLG9CQUFvQjtZQUNwQixNQUFNLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sV0FBVyxDQUFDO0tBQ3JCO0FBQ0wsQ0FBQztBQXpCRCw0REF5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBydW5JbkNvbnRleHQgfSBmcm9tICd2bSc7XG5cbmltcG9ydCB7XG4gICAgR2VuZXJhbEVycm9yLFxuICAgIFRlc3RDb21waWxhdGlvbkVycm9yLFxuICAgIEFQSUVycm9yLFxuICAgIENvbXBvc2l0ZUVycm9yLFxufSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5cbmltcG9ydCB7IFVuY2F1Z2h0RXJyb3JJbkN1c3RvbVNjcmlwdCwgVW5jYXVnaHRUZXN0Q2FmZUVycm9ySW5DdXN0b21TY3JpcHQgfSBmcm9tICcuLi8uLi9lcnJvcnMvdGVzdC1ydW4nO1xuaW1wb3J0IHtcbiAgICBzZXRDb250ZXh0T3B0aW9ucyxcbiAgICBERUZBVUxUX0NPTlRFWFRfT1BUSU9OUyxcbiAgICBjcmVhdGVFeGVjdXRpb25Db250ZXh0LFxufSBmcm9tICcuLi8uLi9hcGkvdGVzdC1jb250cm9sbGVyL2V4ZWN1dGlvbi1jb250ZXh0JztcblxuaW1wb3J0IHtcbiAgICBFUlJPUl9MSU5FX0NPTFVNTl9SRUdFWFAsXG4gICAgRVJST1JfRklMRU5BTUUsXG4gICAgRVJST1JfTElORV9PRkZTRVQsXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuaW1wb3J0IFRlc3RSdW5UcmFja2VyIGZyb20gJy4uLy4uL2FwaS90ZXN0LXJ1bi10cmFja2VyJztcblxuLy8gTk9URTogZG8gbm90IGJlYXV0aWZ5IHRoaXMgY29kZSBzaW5jZSBvZmZzZXRzIGZvciBlcnJvciBsaW5lcyBhbmQgY29sdW1ucyBhcmUgY29kZWQgaGVyZVxuZnVuY3Rpb24gd3JhcEluQXN5bmMgKGV4cHJlc3Npb24sIHRlc3RSdW5JZCkge1xuICAgIHJldHVybiBgKGFzeW5jIGZ1bmN0aW9uICR7VGVzdFJ1blRyYWNrZXIuZ2V0TWFya2VkRm5OYW1lKHRlc3RSdW5JZCl9ICgpIHtcXG5gICtcbiAgICAgICAgICAgZXhwcmVzc2lvbiArICc7XFxuJyArXG4gICAgICAgICAgICd9KTsnO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvckxpbmVDb2x1bW4gKGVycikge1xuICAgIGlmIChlcnIuaXNUZXN0Q2FmZUVycm9yKSB7XG4gICAgICAgIGlmICghZXJyLmNhbGxzaXRlKVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuXG4gICAgICAgIGlmIChlcnIuY2FsbHNpdGUuaWQpXG4gICAgICAgICAgICByZXR1cm4geyBsaW5lOiAwLCBjb2x1bW46IDAgfTtcblxuICAgICAgICBjb25zdCBzdGFja0ZyYW1lcyA9IGVyci5jYWxsc2l0ZS5zdGFja0ZyYW1lcyB8fCBbXTtcbiAgICAgICAgY29uc3QgZnJhbWVJbmRleCAgPSBlcnIuY2FsbHNpdGUuY2FsbHNpdGVGcmFtZUlkeDtcbiAgICAgICAgY29uc3Qgc3RhY2tGcmFtZSAgPSBzdGFja0ZyYW1lc1tmcmFtZUluZGV4XTtcblxuICAgICAgICByZXR1cm4gc3RhY2tGcmFtZSA/IHtcbiAgICAgICAgICAgIGxpbmU6ICAgc3RhY2tGcmFtZS5nZXRMaW5lTnVtYmVyKCksXG4gICAgICAgICAgICBjb2x1bW46IHN0YWNrRnJhbWUuZ2V0Q29sdW1uTnVtYmVyKCksXG4gICAgICAgIH0gOiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBlcnIuc3RhY2sgJiYgZXJyLnN0YWNrLm1hdGNoKEVSUk9SX0xJTkVfQ09MVU1OX1JFR0VYUCk7XG5cbiAgICBpZiAoIXJlc3VsdClcbiAgICAgICAgcmV0dXJuIHt9O1xuXG4gICAgY29uc3QgbGluZSAgID0gcmVzdWx0WzFdID8gcGFyc2VJbnQocmVzdWx0WzFdLCAxMCkgOiB2b2lkIDA7XG4gICAgY29uc3QgY29sdW1uID0gcmVzdWx0WzJdID8gcGFyc2VJbnQocmVzdWx0WzJdLCAxMCkgOiB2b2lkIDA7XG5cbiAgICByZXR1cm4geyBsaW5lLCBjb2x1bW4gfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JGb3JtYXR0aW5nT3B0aW9ucyAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZW5hbWU6ICAgRVJST1JfRklMRU5BTUUsXG4gICAgICAgIGxpbmVPZmZzZXQ6IEVSUk9SX0xJTkVfT0ZGU0VULFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldEV4ZWN1dGlvbkNvbnRleHQgKHRlc3RDb250cm9sbGVyLCBvcHRpb25zID0gREVGQVVMVF9DT05URVhUX09QVElPTlMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGVzdENvbnRyb2xsZXIuZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuXG4gICAgLy8gVE9ETzogRmluZCBhIHdheSB0byBhdm9pZCB0aGlzIGFzc2lnbm1lbnRcbiAgICBzZXRDb250ZXh0T3B0aW9ucyhjb250ZXh0LCBvcHRpb25zKTtcblxuICAgIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBpc1J1bnRpbWVFcnJvciAoZXJyKSB7XG4gICAgcmV0dXJuIGVyciBpbnN0YW5jZW9mIEdlbmVyYWxFcnJvciB8fFxuICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBUZXN0Q29tcGlsYXRpb25FcnJvciB8fFxuICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBBUElFcnJvciB8fFxuICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBDb21wb3NpdGVFcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVKc0V4cHJlc3Npb24gKGV4cHJlc3Npb24sIHRlc3RSdW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGVzdFJ1bi5jb250cm9sbGVyID9cbiAgICAgICAgZ2V0RXhlY3V0aW9uQ29udGV4dCh0ZXN0UnVuLmNvbnRyb2xsZXIsIG9wdGlvbnMpIDpcbiAgICAgICAgY3JlYXRlRXhlY3V0aW9uQ29udGV4dCh0ZXN0UnVuKTtcblxuICAgIGNvbnN0IGVycm9yT3B0aW9ucyA9IGNyZWF0ZUVycm9yRm9ybWF0dGluZ09wdGlvbnMoKTtcblxuICAgIHJldHVybiBydW5JbkNvbnRleHQoZXhwcmVzc2lvbiwgY29udGV4dCwgZXJyb3JPcHRpb25zKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBc3luY0pzRXhwcmVzc2lvbiAoZXhwcmVzc2lvbiwgdGVzdFJ1biwgY2FsbHNpdGUsIG9uQmVmb3JlUmFpc2luZ0Vycm9yKSB7XG4gICAgaWYgKCFleHByZXNzaW9uIHx8ICFleHByZXNzaW9uLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgY29uc3QgY29udGV4dCAgICAgICAgICAgPSBnZXRFeGVjdXRpb25Db250ZXh0KHRlc3RSdW4uY29udHJvbGxlcik7XG4gICAgY29uc3QgZXJyb3JPcHRpb25zICAgICAgPSBjcmVhdGVFcnJvckZvcm1hdHRpbmdPcHRpb25zKGV4cHJlc3Npb24pO1xuICAgIGNvbnN0IHdyYXBwZWRFeHByZXNzaW9uID0gd3JhcEluQXN5bmMoZXhwcmVzc2lvbiwgdGVzdFJ1bi5pZCk7XG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcnVuSW5Db250ZXh0KHdyYXBwZWRFeHByZXNzaW9uLCBjb250ZXh0LCBlcnJvck9wdGlvbnMpKCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgeyBsaW5lLCBjb2x1bW4gfSA9IGdldEVycm9yTGluZUNvbHVtbihlcnIpO1xuICAgICAgICBsZXQgcmVzdWx0RXJyb3IgICAgICAgID0gbnVsbDtcblxuICAgICAgICBpZiAoZXJyLmlzVGVzdENhZmVFcnJvciB8fCBpc1J1bnRpbWVFcnJvcihlcnIpKVxuICAgICAgICAgICAgcmVzdWx0RXJyb3IgPSBuZXcgVW5jYXVnaHRUZXN0Q2FmZUVycm9ySW5DdXN0b21TY3JpcHQoZXJyLCBleHByZXNzaW9uLCBsaW5lLCBjb2x1bW4sIGNhbGxzaXRlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzdWx0RXJyb3IgPSBuZXcgVW5jYXVnaHRFcnJvckluQ3VzdG9tU2NyaXB0KGVyciwgZXhwcmVzc2lvbiwgbGluZSwgY29sdW1uLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgaWYgKG9uQmVmb3JlUmFpc2luZ0Vycm9yKVxuICAgICAgICAgICAgYXdhaXQgb25CZWZvcmVSYWlzaW5nRXJyb3IocmVzdWx0RXJyb3IpO1xuXG4gICAgICAgIHRocm93IHJlc3VsdEVycm9yO1xuICAgIH1cbn1cbiJdfQ==