testcafe 2.6.0 → 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 (112) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/bin/testcafe-with-v8-flag-filter.js +10 -16
  3. package/lib/api/exportable-lib/index.js +1 -11
  4. package/lib/api/structure/test.js +4 -11
  5. package/lib/api/test-controller/index.js +3 -10
  6. package/lib/api/test-run-tracker.js +1 -1
  7. package/lib/assertions/executor.js +2 -11
  8. package/lib/browser/connection/gateway/index.js +3 -4
  9. package/lib/cli/argument-parser/index.js +1 -3
  10. package/lib/cli/cli.js +3 -11
  11. package/lib/client/automation/index.js +49 -36
  12. package/lib/client/automation/index.min.js +1 -1
  13. package/lib/client/browser/idle-page/index.js +13 -5
  14. package/lib/client/core/index.js +14 -8
  15. package/lib/client/core/index.min.js +1 -1
  16. package/lib/client/driver/index.js +19 -20
  17. package/lib/client/driver/index.min.js +1 -1
  18. package/lib/compiler/babel/load-libs.js +3 -3
  19. package/lib/compiler/compilers.js +6 -6
  20. package/lib/compiler/index.js +3 -3
  21. package/lib/compiler/interfaces.js +1 -1
  22. package/lib/compiler/test-file/add-export-api.js +3 -3
  23. package/lib/compiler/test-file/api-based.js +5 -34
  24. package/lib/compiler/test-file/formats/es-next/compiler.js +4 -4
  25. package/lib/compiler/test-file/formats/typescript/compiler.js +5 -5
  26. package/lib/configuration/option-names.js +1 -2
  27. package/lib/errors/runtime/templates.js +1 -2
  28. package/lib/errors/types.js +2 -3
  29. package/lib/index.js +1 -3
  30. package/lib/live/bootstrapper.js +3 -3
  31. package/lib/live/test-runner.js +5 -5
  32. package/lib/native-automation/add-custom-debug-formatters.js +3 -2
  33. package/lib/native-automation/client/event-descriptor.js +11 -5
  34. package/lib/native-automation/client/input.js +3 -7
  35. package/lib/native-automation/request-hooks/event-provider.js +4 -1
  36. package/lib/native-automation/request-pipeline/context-info.js +4 -1
  37. package/lib/native-automation/request-pipeline/index.js +39 -19
  38. package/lib/native-automation/request-pipeline/safe-api.js +10 -7
  39. package/lib/native-automation/request-pipeline/special-handlers.js +16 -13
  40. package/lib/native-automation/resource-injector.js +7 -7
  41. package/lib/native-automation/types.js +1 -1
  42. package/lib/native-automation/utils/cdp.js +3 -2
  43. package/lib/role/role.js +4 -39
  44. package/lib/runner/bootstrapper.js +4 -11
  45. package/lib/runner/browser-job.js +4 -5
  46. package/lib/runner/fixture-hook-controller.js +1 -7
  47. package/lib/runner/index.js +6 -53
  48. package/lib/runner/interfaces.js +1 -1
  49. package/lib/runner/task/index.js +2 -4
  50. package/lib/runner/test-run-controller.js +2 -4
  51. package/lib/test-run/bookmark.js +5 -23
  52. package/lib/test-run/commands/service.js +2 -3
  53. package/lib/test-run/commands/utils.js +4 -2
  54. package/lib/test-run/index.js +9 -132
  55. package/lib/testcafe.js +1 -9
  56. package/lib/utils/debug-loggers.js +4 -2
  57. package/lib/utils/parse-user-agent.js +17 -2
  58. package/package.json +3 -4
  59. package/lib/compiler/test-file/test-file-temp-variable-name.js +0 -6
  60. package/lib/dashboard/config-storage.js +0 -26
  61. package/lib/dashboard/connector.js +0 -84
  62. package/lib/dashboard/documentation-url.js +0 -6
  63. package/lib/dashboard/formatting.js +0 -26
  64. package/lib/dashboard/get-dashboard-url.js +0 -10
  65. package/lib/dashboard/get-default-project-link.js +0 -23
  66. package/lib/dashboard/get-env-options.js +0 -26
  67. package/lib/dashboard/index.js +0 -145
  68. package/lib/dashboard/interfaces.js +0 -3
  69. package/lib/dashboard/messages.js +0 -21
  70. package/lib/services/compiler/esm-runtime-holder-name.js +0 -6
  71. package/lib/services/compiler/host.js +0 -370
  72. package/lib/services/compiler/interfaces.js +0 -3
  73. package/lib/services/compiler/io.js +0 -10
  74. package/lib/services/compiler/protocol.js +0 -17
  75. package/lib/services/compiler/service-loader.js +0 -18
  76. package/lib/services/compiler/service.js +0 -362
  77. package/lib/services/compiler/test-run-proxy.js +0 -157
  78. package/lib/services/interfaces.js +0 -3
  79. package/lib/services/process-title.js +0 -10
  80. package/lib/services/serialization/prepare-options.js +0 -23
  81. package/lib/services/serialization/replicator/create-replicator.js +0 -58
  82. package/lib/services/serialization/replicator/interfaces.js +0 -3
  83. package/lib/services/serialization/replicator/transforms/base-transform.js +0 -16
  84. package/lib/services/serialization/replicator/transforms/browser-console-messages-transform.js +0 -23
  85. package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +0 -24
  86. package/lib/services/serialization/replicator/transforms/command-base-trasform/assertion-command-constructors.js +0 -28
  87. package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +0 -67
  88. package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +0 -49
  89. package/lib/services/serialization/replicator/transforms/command-base-trasform/types.js +0 -3
  90. package/lib/services/serialization/replicator/transforms/configure-response-event-option-transform.js +0 -21
  91. package/lib/services/serialization/replicator/transforms/custom-error-transform.js +0 -29
  92. package/lib/services/serialization/replicator/transforms/function-marker-transform/index.js +0 -21
  93. package/lib/services/serialization/replicator/transforms/function-marker-transform/marker.js +0 -9
  94. package/lib/services/serialization/replicator/transforms/promise-marker-transform/index.js +0 -21
  95. package/lib/services/serialization/replicator/transforms/promise-marker-transform/marker.js +0 -9
  96. package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +0 -22
  97. package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/index.js +0 -22
  98. package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/marker.js +0 -6
  99. package/lib/services/serialization/replicator/transforms/request-filter-rule-transform.js +0 -23
  100. package/lib/services/serialization/replicator/transforms/request-hook-event-data-transform.js +0 -41
  101. package/lib/services/serialization/replicator/transforms/response-mock-transform.js +0 -23
  102. package/lib/services/serialization/replicator/transforms/role-transform.js +0 -21
  103. package/lib/services/serialization/replicator/transforms/testcafe-error-list-transform.js +0 -23
  104. package/lib/services/serialization/replicator/transforms/url-transform.js +0 -23
  105. package/lib/services/serialization/test-structure.js +0 -91
  106. package/lib/services/utils/ipc/interfaces.js +0 -29
  107. package/lib/services/utils/ipc/io.js +0 -109
  108. package/lib/services/utils/ipc/message.js +0 -84
  109. package/lib/services/utils/ipc/packet.js +0 -57
  110. package/lib/services/utils/ipc/proxy.js +0 -94
  111. package/lib/services/utils/ipc/transport.js +0 -65
  112. package/lib/services/utils/method-should-not-be-called-error.js +0 -10
package/lib/cli/cli.js CHANGED
@@ -14,7 +14,6 @@ const correct_browsers_and_sources_1 = __importDefault(require("./correct-browse
14
14
  const __1 = __importDefault(require("../"));
15
15
  const debug_1 = __importDefault(require("debug"));
16
16
  const log_entry_1 = __importDefault(require("../utils/log-entry"));
17
- const dashboard_1 = __importDefault(require("../dashboard"));
18
17
  const LOGGER = (0, debug_1.default)('testcafe:cli');
19
18
  // NOTE: Load the provider pool lazily to reduce startup time
20
19
  const lazyRequire = require('import-lazy')(require);
@@ -60,7 +59,7 @@ async function runTests(argParser) {
60
59
  const proxyBypass = opts.proxyBypass;
61
60
  const configFile = opts.configFile;
62
61
  log_1.default.showSpinner();
63
- const { hostname, ssl, dev, experimentalDebug, retryTestPages, cache, disableHttp2, v8Flags, disableCrossDomain, esm, } = opts;
62
+ const { hostname, ssl, dev, retryTestPages, cache, disableHttp2, v8Flags, disableCrossDomain, esm, } = opts;
64
63
  const testCafe = await (0, __1.default)({
65
64
  developmentMode: dev,
66
65
  isCli: true,
@@ -68,7 +67,6 @@ async function runTests(argParser) {
68
67
  port1,
69
68
  port2,
70
69
  ssl,
71
- experimentalDebug,
72
70
  retryTestPages,
73
71
  cache,
74
72
  configFile,
@@ -108,10 +106,6 @@ async function runTests(argParser) {
108
106
  }
109
107
  exit(failed);
110
108
  }
111
- async function runDashboardIntegration(state) {
112
- await (0, dashboard_1.default)(state);
113
- exit(0);
114
- }
115
109
  async function listBrowsers(providerName) {
116
110
  const provider = await browserProviderPool.getProvider(providerName);
117
111
  if (!provider)
@@ -136,9 +130,7 @@ async function listBrowsers(providerName) {
136
130
  (0, log_entry_1.default)(LOGGER, process.argv);
137
131
  await argParser.parse(process.argv);
138
132
  (0, log_entry_1.default)(LOGGER, argParser.opts);
139
- if (argParser.isDashboardCommand)
140
- await runDashboardIntegration(argParser.sendReportState);
141
- else if (argParser.opts.listBrowsers)
133
+ if (argParser.opts.listBrowsers)
142
134
  await listBrowsers(argParser.opts.providerName);
143
135
  else
144
136
  await runTests(argParser);
@@ -148,4 +140,4 @@ async function listBrowsers(providerName) {
148
140
  error(err);
149
141
  }
150
142
  })();
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS9jbGkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsK0NBQTJEO0FBQzNELDJDQUFpRDtBQUNqRCx3RUFBa0Q7QUFDbEQsZ0ZBQXVEO0FBQ3ZELGdEQUF3QjtBQUN4QixzRUFBNkM7QUFDN0Msa0dBQXVFO0FBQ3ZFLDRDQUFpQztBQUNqQyxrREFBMEI7QUFDMUIsbUVBQTBDO0FBQzFDLDZEQUFnRDtBQUVoRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGVBQUssRUFBQyxjQUFjLENBQUMsQ0FBQztBQUVyQyw2REFBNkQ7QUFDN0QsTUFBTSxXQUFXLEdBQVcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzVELE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFcEUsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDN0IsSUFBSSxnQkFBZ0IsR0FBSSxLQUFLLENBQUM7QUFDOUIsSUFBSSxPQUFPLEdBQWEsS0FBSyxDQUFDO0FBRTlCLFNBQVMsV0FBVyxDQUFFLGdCQUFnQjtJQUNsQyxJQUFJLGlCQUFpQixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7UUFDeEMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRXhCLGFBQUcsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUVsQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDbkQ7SUFFRCxJQUFJLE9BQU8sSUFBSSxnQkFBZ0IsR0FBRyxDQUFDO1FBQy9CLE9BQU87SUFFWCxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBRWYsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUVELFNBQVMsSUFBSSxD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QUUsQ0FBQztRQUUxQyxJQUFBLG1CQUFRLEVBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQixNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBDLElBQUEsbUJBQVEsRUFBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLElBQUksU0FBUyxDQUFDLGtCQUFrQjtZQUM1QixNQUFNLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUN4RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUNoQyxNQUFNLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDOztZQUVoRCxNQUFNLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNqQztJQUNELE9BQU8sR0FBRyxFQUFFO1FBQ1IsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNkO0FBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBHZW5lcmFsRXJyb3IsIEFQSUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IENsaUFyZ3VtZW50UGFyc2VyIGZyb20gJy4vYXJndW1lbnQtcGFyc2VyJztcbmltcG9ydCBUZXJtaW5hdGlvbkhhbmRsZXIgZnJvbSAnLi90ZXJtaW5hdGlvbi1oYW5kbGVyJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2cnO1xuaW1wb3J0IHJlbW90ZXNXaXphcmQgZnJvbSAnLi9yZW1vdGVzLXdpemFyZCc7XG5pbXBvcnQgY29ycmVjdEJyb3dzZXJzQW5kU291cmNlcyBmcm9tICcuL2NvcnJlY3QtYnJvd3NlcnMtYW5kLXNvdXJjZXMnO1xuaW1wb3J0IGNyZWF0ZVRlc3RDYWZlIGZyb20gJy4uLyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IGxvZ0VudHJ5IGZyb20gJy4uL3V0aWxzL2xvZy1lbnRyeSc7XG5pbXBvcnQgZGFzaGJvYXJkSW50ZWdyYXRpb24gZnJvbSAnLi4vZGFzaGJvYXJkJztcblxuY29uc3QgTE9HR0VSID0gZGVidWcoJ3Rlc3RjYWZlOmNsaScpO1xuXG4vLyBOT1RFOiBMb2FkIHRoZSBwcm92aWRlciBwb29sIGxhemlseSB0byByZWR1Y2Ugc3RhcnR1cCB0aW1lXG5jb25zdCBsYXp5UmVxdWlyZSAgICAgICAgID0gcmVxdWlyZSgnaW1wb3J0LWxhenknKShyZXF1aXJlKTtcbmNvbnN0IGJyb3dzZXJQcm92aWRlclBvb2wgPSBsYXp5UmVxdWlyZSgnLi4vYnJvd3Nlci9wcm92aWRlci9wb29sJyk7XG5cbmxldCBzaG93TWVzc2FnZU9uRXhpdCA9IHRydWU7XG5sZXQgZXhpdE1lc3NhZ2VTaG93biAgPSBmYWxzZTtcbmxldCBleGl0aW5nICAgICAgICAgICA9IGZhbHNlO1xuXG5mdW5jdGlvbiBleGl0SGFuZGxlciAodGVybWluYXRpb25MZXZlbCkge1xuICAgIGlmIChzaG93TWVzc2FnZU9uRXhpdCAmJiAhZXhpdE1lc3NhZ2VTaG93bikge1xuICAgICAgICBleGl0TWVzc2FnZVNob3duID0gdHJ1ZTtcblxuICAgICAgICBsb2cud3JpdGUoJ1N0b3BwaW5nIFRlc3RDYWZlLi4uJyk7XG5cbiAgICAgICAgcHJvY2Vzcy5vbignZXhpdCcsICgpID0+IGxvZy5oaWRlU3Bpbm5lcih0cnVlKSk7XG4gICAgfVxuXG4gICAgaWYgKGV4aXRpbmcgfHwgdGVybWluYXRpb25MZXZlbCA8IDIpXG4gICAgICAgIHJldHVybjtcblxuICAgIGV4aXRpbmcgPSB0cnVlO1xuXG4gICAgZXhpdCgwKTtcbn1cblxuZnVuY3Rpb24gZXhpdCAoY29kZSkge1xuICAgIGxvZy5oaWRlU3Bpbm5lcih0cnVlKTtcblxuICAgIC8vIE5PVEU6IGdpdmUgYSBwcm9jZXNzIHRpbWUgdG8gZmx1c2ggdGhlIG91dHB1dC5cbiAgICAvLyBJdCdzIG5lY2Vzc2FyeSBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHByb2Nlc3MuZXhpdChjb2RlKSwgMCk7XG59XG5cbmZ1bmN0aW9uIGVycm9yIChlcnIpIHtcbiAgICBsb2cuaGlkZVNwaW5uZXIoKTtcblxuICAgIGxldCBtZXNzYWdlID0gbnVsbDtcblxuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBHZW5lcmFsRXJyb3IpXG4gICAgICAgIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcblxuICAgIGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIEFQSUVycm9yKVxuICAgICAgICBtZXNzYWdlID0gZXJyLmNvbG9yZWRTdGFjaztcblxuICAgIGVsc2VcbiAgICAgICAgbWVzc2FnZSA9IGVyci5zdGFjaztcblxuICAgIGxvZy53cml0ZShjaGFsay5yZWQoJ0VSUk9SICcpICsgbWVzc2FnZSArICdcXG4nKTtcbiAgICBsb2cud3JpdGUoY2hhbGsuZ3JheSgnVHlwZSBcInRlc3RjYWZlIC1oXCIgZm9yIGhlbHAuJykpO1xuXG4gICAgZXhpdCgxKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuVGVzdHMgKGFyZ1BhcnNlcikge1xuICAgIGNvbnN0IG9wdHMgICAgICAgID0gYXJnUGFyc2VyLm9wdHM7XG4gICAgY29uc3QgcG9ydDEgICAgICAgPSBvcHRzLnBvcnRzICYmIG9wdHMucG9ydHNbMF07XG4gICAgY29uc3QgcG9ydDIgICAgICAgPSBvcHRzLnBvcnRzICYmIG9wdHMucG9ydHNbMV07XG4gICAgY29uc3QgcHJveHkgICAgICAgPSBvcHRzLnByb3h5O1xuICAgIGNvbnN0IHByb3h5QnlwYXNzID0gb3B0cy5wcm94eUJ5cGFzcztcbiAgICBjb25zdCBjb25maWdGaWxlICA9IG9wdHMuY29uZmlnRmlsZTtcblxuICAgIGxvZy5zaG93U3Bpbm5lcigpO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgc3NsLFxuICAgICAgICBkZXYsXG4gICAgICAgIGV4cGVyaW1lbnRhbERlYnVnLFxuICAgICAgICByZXRyeVRlc3RQYWdlcyxcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIGRpc2FibGVIdHRwMixcbiAgICAgICAgdjhGbGFncyxcbiAgICAgICAgZGlzYWJsZUNyb3NzRG9tYWluLFxuICAgICAgICBlc20sXG4gICAgfSA9IG9wdHM7XG5cbiAgICBjb25zdCB0ZXN0Q2FmZSA9IGF3YWl0IGNyZWF0ZVRlc3RDYWZlKHtcbiAgICAgICAgZGV2ZWxvcG1lbnRNb2RlOiBkZXYsXG4gICAgICAgIGlzQ2xpOiAgICAgICAgICAgdHJ1ZSxcblxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcG9ydDEsXG4gICAgICAgIHBvcnQyLFxuICAgICAgICBzc2wsXG4gICAgICAgIGV4cGVyaW1lbnRhbERlYnVnLFxuICAgICAgICByZXRyeVRlc3RQYWdlcyxcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIGNvbmZpZ0ZpbGUsXG4gICAgICAgIGRpc2FibGVIdHRwMixcbiAgICAgICAgdjhGbGFncyxcbiAgICAgICAgZGlzYWJsZUNyb3NzRG9tYWluLFxuICAgICAgICBlc20sXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb3JyZWN0ZWRCcm93c2Vyc0FuZFNvdXJjZXMgPSBhd2FpdCBjb3JyZWN0QnJvd3NlcnNBbmRTb3VyY2VzKGFyZ1BhcnNlciwgdGVzdENhZmUuY29uZmlndXJhdGlvbik7XG4gICAgY29uc3QgYXV0b21hdGVkQnJvd3NlcnMgICAgICAgICAgID0gY29ycmVjdGVkQnJvd3NlcnNBbmRTb3VyY2VzLmJyb3dzZXJzO1xuICAgIGNvbnN0IHJlbW90ZUJyb3dzZXJzICAgICAgICAgICAgICA9IGF3YWl0IHJlbW90ZXNXaXphcmQodGVzdENhZmUsIGFyZ1BhcnNlci5yZW1vdGVDb3VudCwgb3B0cy5xckNvZGUpO1xuICAgIGNvbnN0IGJyb3dzZXJzICAgICAgICAgICAgICAgICAgICA9IGF1dG9tYXRlZEJyb3dzZXJzLmNvbmNhdChyZW1vdGVCcm93c2Vycyk7XG4gICAgY29uc3Qgc291cmNlcyAgICAgICAgICAgICAgICAgICAgID0gY29ycmVjdGVkQnJvd3NlcnNBbmRTb3VyY2VzLnNvdXJjZXM7XG5cbiAgICBjb25zdCBydW5uZXIgPSBvcHRzLmxpdmUgPyB0ZXN0Q2FmZS5jcmVhdGVMaXZlTW9kZVJ1bm5lcigpIDogdGVzdENhZmUuY3JlYXRlUnVubmVyKCk7XG5cbiAgICBsZXQgZmFpbGVkID0gMDtcblxuICAgIHJ1bm5lclxuICAgICAgICAudXNlUHJveHkocHJveHksIHByb3h5QnlwYXNzKVxuICAgICAgICAuc3JjKHNvdXJjZXMpXG4gICAgICAgIC50c0NvbmZpZ1BhdGgoYXJnUGFyc2VyLm9wdHMudHNDb25maWdQYXRoKVxuICAgICAgICAuYnJvd3NlcnMoYnJvd3NlcnMpXG4gICAgICAgIC5yZXBvcnRlcihhcmdQYXJzZXIub3B0cy5yZXBvcnRlcilcbiAgICAgICAgLmNvbmN1cnJlbmN5KGFyZ1BhcnNlci5vcHRzLmNvbmN1cnJlbmN5KVxuICAgICAgICAuZmlsdGVyKGFyZ1BhcnNlci5vcHRzLmZpbHRlcilcbiAgICAgICAgLnZpZGVvKG9wdHMudmlkZW8sIG9wdHMudmlkZW9PcHRpb25zLCBvcHRzLnZpZGVvRW5jb2RpbmdPcHRpb25zKVxuICAgICAgICAuc2NyZWVuc2hvdHMob3B0cy5zY3JlZW5zaG90cylcbiAgICAgICAgLnN0YXJ0QXBwKG9wdHMuYXBwLCBvcHRzLmFwcEluaXREZWxheSlcbiAgICAgICAgLmNsaWVudFNjcmlwdHMoYXJnUGFyc2VyLm9wdHMuY2xpZW50U2NyaXB0cylcbiAgICAgICAgLmNvbXBpbGVyT3B0aW9ucyhhcmdQYXJzZXIub3B0cy5jb21waWxlck9wdGlvbnMpO1xuXG4gICAgcnVubmVyLm9uY2UoJ2RvbmUtYm9vdHN0cmFwcGluZycsICgpID0+IGxvZy5oaWRlU3Bpbm5lcigpKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJ1bk9wdHMgPSBhcmdQYXJzZXIuZ2V0UnVuT3B0aW9ucygpO1xuXG4gICAgICAgIGZhaWxlZCA9IGF3YWl0IHJ1bm5lci5ydW4ocnVuT3B0cyk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBzaG93TWVzc2FnZU9uRXhpdCA9IGZhbHNlO1xuICAgICAgICBhd2FpdCB0ZXN0Q2FmZS5jbG9zZSgpO1xuICAgIH1cblxuICAgIGV4aXQoZmFpbGVkKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuRGFzaGJvYXJkSW50ZWdyYXRpb24gKHN0YXRlKSB7XG4gICAgYXdhaXQgZGFzaGJvYXJkSW50ZWdyYXRpb24oc3RhdGUpO1xuXG4gICAgZXhpdCgwKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdEJyb3dzZXJzIChwcm92aWRlck5hbWUpIHtcbiAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IGJyb3dzZXJQcm92aWRlclBvb2wuZ2V0UHJvdmlkZXIocHJvdmlkZXJOYW1lKTtcblxuICAgIGlmICghcHJvdmlkZXIpXG4gICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuYnJvd3NlclByb3ZpZGVyTm90Rm91bmQsIHByb3ZpZGVyTmFtZSk7XG5cbiAgICBpZiAocHJvdmlkZXIuaXNNdWx0aUJyb3dzZXIpIHtcbiAgICAgICAgY29uc3QgYnJvd3Nlck5hbWVzID0gYXdhaXQgcHJvdmlkZXIuZ2V0QnJvd3Nlckxpc3QoKTtcblxuICAgICAgICBhd2FpdCBicm93c2VyUHJvdmlkZXJQb29sLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAocHJvdmlkZXJOYW1lID09PSAnbG9jYWxseS1pbnN0YWxsZWQnKVxuICAgICAgICAgICAgY29uc29sZS5sb2coYnJvd3Nlck5hbWVzLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY29uc29sZS5sb2coYnJvd3Nlck5hbWVzLm1hcChicm93c2VyTmFtZSA9PiBgXCIkeyBwcm92aWRlck5hbWUgfTokeyBicm93c2VyTmFtZSB9XCJgKS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgY29uc29sZS5sb2coYFwiJHsgcHJvdmlkZXJOYW1lIH1cImApO1xuXG4gICAgZXhpdCgwKTtcbn1cblxuKGFzeW5jIGZ1bmN0aW9uIGNsaSAoKSB7XG4gICAgY29uc3QgdGVybWluYXRpb25IYW5kbGVyID0gbmV3IFRlcm1pbmF0aW9uSGFuZGxlcigpO1xuXG4gICAgdGVybWluYXRpb25IYW5kbGVyLm9uKFRlcm1pbmF0aW9uSGFuZGxlci5URVJNSU5BVElPTl9MRVZFTF9JTkNSRUFTRURfRVZFTlQsIGV4aXRIYW5kbGVyKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGFyZ1BhcnNlciA9IG5ldyBDbGlBcmd1bWVudFBhcnNlcigpO1xuXG4gICAgICAgIGxvZ0VudHJ5KExPR0dFUiwgcHJvY2Vzcy5hcmd2KTtcblxuICAgICAgICBhd2FpdCBhcmdQYXJzZXIucGFyc2UocHJvY2Vzcy5hcmd2KTtcblxuICAgICAgICBsb2dFbnRyeShMT0dHRVIsIGFyZ1BhcnNlci5vcHRzKTtcblxuICAgICAgICBpZiAoYXJnUGFyc2VyLmlzRGFzaGJvYXJkQ29tbWFuZClcbiAgICAgICAgICAgIGF3YWl0IHJ1bkRhc2hib2FyZEludGVncmF0aW9uKGFyZ1BhcnNlci5zZW5kUmVwb3J0U3RhdGUpO1xuICAgICAgICBlbHNlIGlmIChhcmdQYXJzZXIub3B0cy5saXN0QnJvd3NlcnMpXG4gICAgICAgICAgICBhd2FpdCBsaXN0QnJvd3NlcnMoYXJnUGFyc2VyLm9wdHMucHJvdmlkZXJOYW1lKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgYXdhaXQgcnVuVGVzdHMoYXJnUGFyc2VyKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBzaG93TWVzc2FnZU9uRXhpdCA9IGZhbHNlO1xuICAgICAgICBlcnJvcihlcnIpO1xuICAgIH1cbn0pKCk7XG5cbiJdfQ==
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS9jbGkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsK0NBQTJEO0FBQzNELDJDQUFpRDtBQUNqRCx3RUFBa0Q7QUFDbEQsZ0ZBQXVEO0FBQ3ZELGdEQUF3QjtBQUN4QixzRUFBNkM7QUFDN0Msa0dBQXVFO0FBQ3ZFLDRDQUFpQztBQUNqQyxrREFBMEI7QUFDMUIsbUVBQTBDO0FBRTFDLE1BQU0sTUFBTSxHQUFHLElBQUEsZUFBSyxFQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRXJDLDZEQUE2RDtBQUM3RCxNQUFNLFdBQVcsR0FBVyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUQsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUVwRSxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUM3QixJQUFJLGdCQUFnQixHQUFJLEtBQUssQ0FBQztBQUM5QixJQUFJLE9BQU8sR0FBYSxLQUFLLENBQUM7QUFFOUIsU0FBUyxXQUFXLENBQUUsZ0JBQWdCO0lBQ2xDLElBQUksaUJBQWlCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtRQUN4QyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFeEIsYUFBRyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRWxDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNuRDtJQUVELElBQUksT0FBTyxJQUFJLGdCQUFnQixHQUFHLENBQUM7UUFDL0IsT0FBTztJQUVYLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFFZixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUUsSUFBSTtJQUNm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QVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUMzQixNQUFNLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDOztZQUVoRCxNQUFNLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNqQztJQUNELE9BQU8sR0FBRyxFQUFFO1FBQ1IsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNkO0FBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBHZW5lcmFsRXJyb3IsIEFQSUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IENsaUFyZ3VtZW50UGFyc2VyIGZyb20gJy4vYXJndW1lbnQtcGFyc2VyJztcbmltcG9ydCBUZXJtaW5hdGlvbkhhbmRsZXIgZnJvbSAnLi90ZXJtaW5hdGlvbi1oYW5kbGVyJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2cnO1xuaW1wb3J0IHJlbW90ZXNXaXphcmQgZnJvbSAnLi9yZW1vdGVzLXdpemFyZCc7XG5pbXBvcnQgY29ycmVjdEJyb3dzZXJzQW5kU291cmNlcyBmcm9tICcuL2NvcnJlY3QtYnJvd3NlcnMtYW5kLXNvdXJjZXMnO1xuaW1wb3J0IGNyZWF0ZVRlc3RDYWZlIGZyb20gJy4uLyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IGxvZ0VudHJ5IGZyb20gJy4uL3V0aWxzL2xvZy1lbnRyeSc7XG5cbmNvbnN0IExPR0dFUiA9IGRlYnVnKCd0ZXN0Y2FmZTpjbGknKTtcblxuLy8gTk9URTogTG9hZCB0aGUgcHJvdmlkZXIgcG9vbCBsYXppbHkgdG8gcmVkdWNlIHN0YXJ0dXAgdGltZVxuY29uc3QgbGF6eVJlcXVpcmUgICAgICAgICA9IHJlcXVpcmUoJ2ltcG9ydC1sYXp5JykocmVxdWlyZSk7XG5jb25zdCBicm93c2VyUHJvdmlkZXJQb29sID0gbGF6eVJlcXVpcmUoJy4uL2Jyb3dzZXIvcHJvdmlkZXIvcG9vbCcpO1xuXG5sZXQgc2hvd01lc3NhZ2VPbkV4aXQgPSB0cnVlO1xubGV0IGV4aXRNZXNzYWdlU2hvd24gID0gZmFsc2U7XG5sZXQgZXhpdGluZyAgICAgICAgICAgPSBmYWxzZTtcblxuZnVuY3Rpb24gZXhpdEhhbmRsZXIgKHRlcm1pbmF0aW9uTGV2ZWwpIHtcbiAgICBpZiAoc2hvd01lc3NhZ2VPbkV4aXQgJiYgIWV4aXRNZXNzYWdlU2hvd24pIHtcbiAgICAgICAgZXhpdE1lc3NhZ2VTaG93biA9IHRydWU7XG5cbiAgICAgICAgbG9nLndyaXRlKCdTdG9wcGluZyBUZXN0Q2FmZS4uLicpO1xuXG4gICAgICAgIHByb2Nlc3Mub24oJ2V4aXQnLCAoKSA9PiBsb2cuaGlkZVNwaW5uZXIodHJ1ZSkpO1xuICAgIH1cblxuICAgIGlmIChleGl0aW5nIHx8IHRlcm1pbmF0aW9uTGV2ZWwgPCAyKVxuICAgICAgICByZXR1cm47XG5cbiAgICBleGl0aW5nID0gdHJ1ZTtcblxuICAgIGV4aXQoMCk7XG59XG5cbmZ1bmN0aW9uIGV4aXQgKGNvZGUpIHtcbiAgICBsb2cuaGlkZVNwaW5uZXIodHJ1ZSk7XG5cbiAgICAvLyBOT1RFOiBnaXZlIGEgcHJvY2VzcyB0aW1lIHRvIGZsdXNoIHRoZSBvdXRwdXQuXG4gICAgLy8gSXQncyBuZWNlc3NhcnkgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gICAgc2V0VGltZW91dCgoKSA9PiBwcm9jZXNzLmV4aXQoY29kZSksIDApO1xufVxuXG5mdW5jdGlvbiBlcnJvciAoZXJyKSB7XG4gICAgbG9nLmhpZGVTcGlubmVyKCk7XG5cbiAgICBsZXQgbWVzc2FnZSA9IG51bGw7XG5cbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgR2VuZXJhbEVycm9yKVxuICAgICAgICBtZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG5cbiAgICBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBBUElFcnJvcilcbiAgICAgICAgbWVzc2FnZSA9IGVyci5jb2xvcmVkU3RhY2s7XG5cbiAgICBlbHNlXG4gICAgICAgIG1lc3NhZ2UgPSBlcnIuc3RhY2s7XG5cbiAgICBsb2cud3JpdGUoY2hhbGsucmVkKCdFUlJPUiAnKSArIG1lc3NhZ2UgKyAnXFxuJyk7XG4gICAgbG9nLndyaXRlKGNoYWxrLmdyYXkoJ1R5cGUgXCJ0ZXN0Y2FmZSAtaFwiIGZvciBoZWxwLicpKTtcblxuICAgIGV4aXQoMSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blRlc3RzIChhcmdQYXJzZXIpIHtcbiAgICBjb25zdCBvcHRzICAgICAgICA9IGFyZ1BhcnNlci5vcHRzO1xuICAgIGNvbnN0IHBvcnQxICAgICAgID0gb3B0cy5wb3J0cyAmJiBvcHRzLnBvcnRzWzBdO1xuICAgIGNvbnN0IHBvcnQyICAgICAgID0gb3B0cy5wb3J0cyAmJiBvcHRzLnBvcnRzWzFdO1xuICAgIGNvbnN0IHByb3h5ICAgICAgID0gb3B0cy5wcm94eTtcbiAgICBjb25zdCBwcm94eUJ5cGFzcyA9IG9wdHMucHJveHlCeXBhc3M7XG4gICAgY29uc3QgY29uZmlnRmlsZSAgPSBvcHRzLmNvbmZpZ0ZpbGU7XG5cbiAgICBsb2cuc2hvd1NwaW5uZXIoKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHNzbCxcbiAgICAgICAgZGV2LFxuICAgICAgICByZXRyeVRlc3RQYWdlcyxcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIGRpc2FibGVIdHRwMixcbiAgICAgICAgdjhGbGFncyxcbiAgICAgICAgZGlzYWJsZUNyb3NzRG9tYWluLFxuICAgICAgICBlc20sXG4gICAgfSA9IG9wdHM7XG5cbiAgICBjb25zdCB0ZXN0Q2FmZSA9IGF3YWl0IGNyZWF0ZVRlc3RDYWZlKHtcbiAgICAgICAgZGV2ZWxvcG1lbnRNb2RlOiBkZXYsXG4gICAgICAgIGlzQ2xpOiAgICAgICAgICAgdHJ1ZSxcblxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcG9ydDEsXG4gICAgICAgIHBvcnQyLFxuICAgICAgICBzc2wsXG4gICAgICAgIHJldHJ5VGVzdFBhZ2VzLFxuICAgICAgICBjYWNoZSxcbiAgICAgICAgY29uZmlnRmlsZSxcbiAgICAgICAgZGlzYWJsZUh0dHAyLFxuICAgICAgICB2OEZsYWdzLFxuICAgICAgICBkaXNhYmxlQ3Jvc3NEb21haW4sXG4gICAgICAgIGVzbSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvcnJlY3RlZEJyb3dzZXJzQW5kU291cmNlcyA9IGF3YWl0IGNvcnJlY3RCcm93c2Vyc0FuZFNvdXJjZXMoYXJnUGFyc2VyLCB0ZXN0Q2FmZS5jb25maWd1cmF0aW9uKTtcbiAgICBjb25zdCBhdXRvbWF0ZWRCcm93c2VycyAgICAgICAgICAgPSBjb3JyZWN0ZWRCcm93c2Vyc0FuZFNvdXJjZXMuYnJvd3NlcnM7XG4gICAgY29uc3QgcmVtb3RlQnJvd3NlcnMgICAgICAgICAgICAgID0gYXdhaXQgcmVtb3Rlc1dpemFyZCh0ZXN0Q2FmZSwgYXJnUGFyc2VyLnJlbW90ZUNvdW50LCBvcHRzLnFyQ29kZSk7XG4gICAgY29uc3QgYnJvd3NlcnMgICAgICAgICAgICAgICAgICAgID0gYXV0b21hdGVkQnJvd3NlcnMuY29uY2F0KHJlbW90ZUJyb3dzZXJzKTtcbiAgICBjb25zdCBzb3VyY2VzICAgICAgICAgICAgICAgICAgICAgPSBjb3JyZWN0ZWRCcm93c2Vyc0FuZFNvdXJjZXMuc291cmNlcztcblxuICAgIGNvbnN0IHJ1bm5lciA9IG9wdHMubGl2ZSA/IHRlc3RDYWZlLmNyZWF0ZUxpdmVNb2RlUnVubmVyKCkgOiB0ZXN0Q2FmZS5jcmVhdGVSdW5uZXIoKTtcblxuICAgIGxldCBmYWlsZWQgPSAwO1xuXG4gICAgcnVubmVyXG4gICAgICAgIC51c2VQcm94eShwcm94eSwgcHJveHlCeXBhc3MpXG4gICAgICAgIC5zcmMoc291cmNlcylcbiAgICAgICAgLnRzQ29uZmlnUGF0aChhcmdQYXJzZXIub3B0cy50c0NvbmZpZ1BhdGgpXG4gICAgICAgIC5icm93c2Vycyhicm93c2VycylcbiAgICAgICAgLnJlcG9ydGVyKGFyZ1BhcnNlci5vcHRzLnJlcG9ydGVyKVxuICAgICAgICAuY29uY3VycmVuY3koYXJnUGFyc2VyLm9wdHMuY29uY3VycmVuY3kpXG4gICAgICAgIC5maWx0ZXIoYXJnUGFyc2VyLm9wdHMuZmlsdGVyKVxuICAgICAgICAudmlkZW8ob3B0cy52aWRlbywgb3B0cy52aWRlb09wdGlvbnMsIG9wdHMudmlkZW9FbmNvZGluZ09wdGlvbnMpXG4gICAgICAgIC5zY3JlZW5zaG90cyhvcHRzLnNjcmVlbnNob3RzKVxuICAgICAgICAuc3RhcnRBcHAob3B0cy5hcHAsIG9wdHMuYXBwSW5pdERlbGF5KVxuICAgICAgICAuY2xpZW50U2NyaXB0cyhhcmdQYXJzZXIub3B0cy5jbGllbnRTY3JpcHRzKVxuICAgICAgICAuY29tcGlsZXJPcHRpb25zKGFyZ1BhcnNlci5vcHRzLmNvbXBpbGVyT3B0aW9ucyk7XG5cbiAgICBydW5uZXIub25jZSgnZG9uZS1ib290c3RyYXBwaW5nJywgKCkgPT4gbG9nLmhpZGVTcGlubmVyKCkpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcnVuT3B0cyA9IGFyZ1BhcnNlci5nZXRSdW5PcHRpb25zKCk7XG5cbiAgICAgICAgZmFpbGVkID0gYXdhaXQgcnVubmVyLnJ1bihydW5PcHRzKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHNob3dNZXNzYWdlT25FeGl0ID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IHRlc3RDYWZlLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgZXhpdChmYWlsZWQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0QnJvd3NlcnMgKHByb3ZpZGVyTmFtZSkge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgYnJvd3NlclByb3ZpZGVyUG9vbC5nZXRQcm92aWRlcihwcm92aWRlck5hbWUpO1xuXG4gICAgaWYgKCFwcm92aWRlcilcbiAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5icm93c2VyUHJvdmlkZXJOb3RGb3VuZCwgcHJvdmlkZXJOYW1lKTtcblxuICAgIGlmIChwcm92aWRlci5pc011bHRpQnJvd3Nlcikge1xuICAgICAgICBjb25zdCBicm93c2VyTmFtZXMgPSBhd2FpdCBwcm92aWRlci5nZXRCcm93c2VyTGlzdCgpO1xuXG4gICAgICAgIGF3YWl0IGJyb3dzZXJQcm92aWRlclBvb2wuZGlzcG9zZSgpO1xuXG4gICAgICAgIGlmIChwcm92aWRlck5hbWUgPT09ICdsb2NhbGx5LWluc3RhbGxlZCcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhicm93c2VyTmFtZXMuam9pbignXFxuJykpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhicm93c2VyTmFtZXMubWFwKGJyb3dzZXJOYW1lID0+IGBcIiR7IHByb3ZpZGVyTmFtZSB9OiR7IGJyb3dzZXJOYW1lIH1cImApLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICBjb25zb2xlLmxvZyhgXCIkeyBwcm92aWRlck5hbWUgfVwiYCk7XG5cbiAgICBleGl0KDApO1xufVxuXG4oYXN5bmMgZnVuY3Rpb24gY2xpICgpIHtcbiAgICBjb25zdCB0ZXJtaW5hdGlvbkhhbmRsZXIgPSBuZXcgVGVybWluYXRpb25IYW5kbGVyKCk7XG5cbiAgICB0ZXJtaW5hdGlvbkhhbmRsZXIub24oVGVybWluYXRpb25IYW5kbGVyLlRFUk1JTkFUSU9OX0xFVkVMX0lOQ1JFQVNFRF9FVkVOVCwgZXhpdEhhbmRsZXIpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXJnUGFyc2VyID0gbmV3IENsaUFyZ3VtZW50UGFyc2VyKCk7XG5cbiAgICAgICAgbG9nRW50cnkoTE9HR0VSLCBwcm9jZXNzLmFyZ3YpO1xuXG4gICAgICAgIGF3YWl0IGFyZ1BhcnNlci5wYXJzZShwcm9jZXNzLmFyZ3YpO1xuXG4gICAgICAgIGxvZ0VudHJ5KExPR0dFUiwgYXJnUGFyc2VyLm9wdHMpO1xuXG4gICAgICAgIGlmIChhcmdQYXJzZXIub3B0cy5saXN0QnJvd3NlcnMpXG4gICAgICAgICAgICBhd2FpdCBsaXN0QnJvd3NlcnMoYXJnUGFyc2VyLm9wdHMucHJvdmlkZXJOYW1lKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgYXdhaXQgcnVuVGVzdHMoYXJnUGFyc2VyKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBzaG93TWVzc2FnZU9uRXhpdCA9IGZhbHNlO1xuICAgICAgICBlcnJvcihlcnIpO1xuICAgIH1cbn0pKCk7XG5cbiJdfQ==
@@ -117,6 +117,18 @@ window['%hammerhead%'].utils.removeInjectedScript();
117
117
  function __() { this.constructor = d; }
118
118
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
119
119
  }
120
+ var __assign = function () {
121
+ __assign = Object.assign || function __assign(t) {
122
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
123
+ s = arguments[i];
124
+ for (var p in s)
125
+ if (Object.prototype.hasOwnProperty.call(s, p))
126
+ t[p] = s[p];
127
+ }
128
+ return t;
129
+ };
130
+ return __assign.apply(this, arguments);
131
+ };
120
132
  function __awaiter(thisArg, _arguments, P, generator) {
121
133
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
122
134
  return new (P || (P = Promise$e))(function (resolve, reject) {
@@ -2896,7 +2908,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
2896
2908
  var _a;
2897
2909
  return __generator(this, function (_b) {
2898
2910
  switch (_b.label) {
2899
- case 0: return [4 /*yield*/, ((_a = this.nativeAutomationInput) === null || _a === void 0 ? void 0 : _a.createMouseMoveEvent(currPosition))];
2911
+ case 0: return [4 /*yield*/, ((_a = this.nativeAutomationInput) === null || _a === void 0 ? void 0 : _a.createMouseMoveEvent(currPosition, this.modifiers))];
2900
2912
  case 1:
2901
2913
  moveEvent = _b.sent();
2902
2914
  events_1.push(moveEvent);
@@ -3167,7 +3179,8 @@ window['%hammerhead%'].utils.removeInjectedScript();
3167
3179
  return 'left';
3168
3180
  }
3169
3181
 
3170
- var messageSandbox$1 = hammerhead.eventSandbox.message;
3182
+ var utils = hammerhead__default.utils, eventSandbox = hammerhead__default.eventSandbox, nativeMethods$7 = hammerhead__default.nativeMethods;
3183
+ var messageSandbox$1 = eventSandbox.message;
3171
3184
  var MOUSE_EVENT_OPTIONS = {
3172
3185
  clickCount: 1,
3173
3186
  };
@@ -3230,10 +3243,14 @@ window['%hammerhead%'].utils.removeInjectedScript();
3230
3243
  var CDPEventDescriptor = /** @class */ (function () {
3231
3244
  function CDPEventDescriptor() {
3232
3245
  }
3246
+ CDPEventDescriptor._isNonCharKeyModifier = function (modifiers) {
3247
+ var nonCharModifiers = [KeyModifierValues.ctrl, KeyModifierValues.alt, KeyModifierValues.meta];
3248
+ return nativeMethods$7.arrayIndexOf.call(nonCharModifiers, modifiers) > -1;
3249
+ };
3233
3250
  CDPEventDescriptor._getKeyDownEventText = function (options) {
3234
3251
  if (options.isNewLine)
3235
3252
  return '\r';
3236
- if (options.keyProperty.length === 1)
3253
+ if (options.keyProperty.length === 1 && !CDPEventDescriptor._isNonCharKeyModifier(options.modifiers))
3237
3254
  return options.keyProperty;
3238
3255
  return '';
3239
3256
  };
@@ -3263,7 +3280,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
3263
3280
  case 0: return [4 /*yield*/, calculateIFrameTopLeftPoint()];
3264
3281
  case 1:
3265
3282
  _a = _b.sent(), x = _a.x, y = _a.y;
3266
- return [2 /*return*/, hammerhead.utils.extend({
3283
+ return [2 /*return*/, utils.extend({
3267
3284
  x: options.options.clientX + x,
3268
3285
  y: options.options.clientY + y,
3269
3286
  modifiers: calculateKeyModifiersValue(options.options),
@@ -3343,17 +3360,13 @@ window['%hammerhead%'].utils.removeInjectedScript();
3343
3360
  });
3344
3361
  });
3345
3362
  };
3346
- NativeAutomationInput.prototype.createMouseMoveEvent = function (currPosition) {
3363
+ NativeAutomationInput.prototype.createMouseMoveEvent = function (currPosition, modifiers) {
3347
3364
  return __awaiter(this, void 0, void 0, function () {
3348
3365
  var options;
3349
3366
  return __generator(this, function (_a) {
3350
3367
  switch (_a.label) {
3351
3368
  case 0: return [4 /*yield*/, CDPEventDescriptor.createMouseEventOptions('mouseMoved', {
3352
- options: {
3353
- clientX: currPosition.x,
3354
- clientY: currPosition.y,
3355
- button: 'none',
3356
- },
3369
+ options: __assign({ clientX: currPosition.x, clientY: currPosition.y, button: 'none' }, modifiers),
3357
3370
  })];
3358
3371
  case 1:
3359
3372
  options = _a.sent();
@@ -3736,7 +3749,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
3736
3749
  }(VisibleElementAutomation));
3737
3750
 
3738
3751
  var Promise$4 = hammerhead__default.Promise;
3739
- var nativeMethods$7 = hammerhead__default.nativeMethods;
3752
+ var nativeMethods$8 = hammerhead__default.nativeMethods;
3740
3753
  var browserUtils$3 = hammerhead__default.utils.browser;
3741
3754
  var focusBlurSandbox = hammerhead__default.eventSandbox.focusBlur;
3742
3755
  var contentEditable = testCafeCore__default.contentEditable;
@@ -3811,7 +3824,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
3811
3824
  preventScrolling = false;
3812
3825
  if (!isElementFocusable && !isContentEditable) {
3813
3826
  curDocument = domUtils$1.findDocument(elementForFocus);
3814
- curActiveElement = nativeMethods$7.documentActiveElementGetter.call(curDocument);
3827
+ curActiveElement = nativeMethods$8.documentActiveElementGetter.call(curDocument);
3815
3828
  isActiveElementBody = domUtils$1.isBodyElement(curActiveElement);
3816
3829
  focusableParent = domUtils$1.isBodyElement(elementForFocus) ?
3817
3830
  elementForFocus : domUtils$1.getFocusableParent(elementForFocus);
@@ -3865,7 +3878,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
3865
3878
  var browserUtils$4 = hammerhead__default.utils.browser;
3866
3879
  var eventSimulator$3 = hammerhead__default.eventSandbox.eventSimulator;
3867
3880
  var listeners$2 = hammerhead__default.eventSandbox.listeners;
3868
- var nativeMethods$8 = hammerhead__default.nativeMethods;
3881
+ var nativeMethods$9 = hammerhead__default.nativeMethods;
3869
3882
  var domUtils$2 = testCafeCore__default.domUtils;
3870
3883
  var styleUtils$2 = testCafeCore__default.styleUtils;
3871
3884
  var selectController = testCafeCore__default.selectController;
@@ -3895,7 +3908,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
3895
3908
  var _this = this;
3896
3909
  var focusRaised = false;
3897
3910
  var ensureFocusRaised = function (e) {
3898
- focusRaised = nativeMethods$8.eventTargetGetter.call(e) === _this.input;
3911
+ focusRaised = nativeMethods$9.eventTargetGetter.call(e) === _this.input;
3899
3912
  };
3900
3913
  listeners$2.addInternalEventBeforeListener(window, ['focus'], ensureFocusRaised);
3901
3914
  _super.prototype.run.call(this);
@@ -4398,7 +4411,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
4398
4411
  var featureDetection$1 = hammerhead__default.utils.featureDetection;
4399
4412
  var eventSimulator$6 = hammerhead__default.eventSandbox.eventSimulator;
4400
4413
  var focusBlurSandbox$1 = hammerhead__default.eventSandbox.focusBlur;
4401
- var nativeMethods$9 = hammerhead__default.nativeMethods;
4414
+ var nativeMethods$a = hammerhead__default.nativeMethods;
4402
4415
  var domUtils$5 = testCafeCore__default.domUtils;
4403
4416
  var styleUtils$4 = testCafeCore__default.styleUtils;
4404
4417
  var delay$1 = testCafeCore__default.delay;
@@ -4423,7 +4436,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
4423
4436
  var selectedIndex = this.parentSelect.selectedIndex;
4424
4437
  this.childIndex = isOption ? domUtils$5.getElementIndexInParent(this.parentSelect, this.element) :
4425
4438
  domUtils$5.getElementIndexInParent(this.parentSelect, this.element);
4426
- var parent_1 = nativeMethods$9.nodeParentNodeGetter.call(this.element);
4439
+ var parent_1 = nativeMethods$a.nodeParentNodeGetter.call(this.element);
4427
4440
  var parentOptGroup = domUtils$5.isOptionGroupElement(parent_1) ? parent_1 : null;
4428
4441
  var isDisabled = this.element.disabled || parentOptGroup && parentOptGroup.disabled;
4429
4442
  this.clickCausesChange = isOption && !isDisabled && this.childIndex !== selectedIndex;
@@ -4628,7 +4641,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
4628
4641
  return DragAndDropState;
4629
4642
  }());
4630
4643
 
4631
- var nativeMethods$a = hammerhead__default.nativeMethods;
4644
+ var nativeMethods$b = hammerhead__default.nativeMethods;
4632
4645
  var featureDetection$3 = hammerhead__default.utils.featureDetection;
4633
4646
  var htmlUtils$1 = hammerhead__default.utils.html;
4634
4647
  var urlUtils = hammerhead__default.utils.url;
@@ -4642,7 +4655,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
4642
4655
  while (parentNode) {
4643
4656
  if (parentNode.draggable)
4644
4657
  return parentNode;
4645
- parentNode = nativeMethods$a.nodeParentNodeGetter.call(parentNode);
4658
+ parentNode = nativeMethods$b.nodeParentNodeGetter.call(parentNode);
4646
4659
  }
4647
4660
  return null;
4648
4661
  }
@@ -4708,7 +4721,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
4708
4721
  var srcAttr = isLink ? 'href' : 'src';
4709
4722
  var parsedUrl = urlUtils.parseProxyUrl(_this.dragElement[srcAttr]);
4710
4723
  var src = parsedUrl ? parsedUrl.destUrl : _this.dragElement[srcAttr];
4711
- var outerHTML = htmlUtils$1.cleanUpHtml(nativeMethods$a.elementOuterHTMLGetter.call(_this.dragElement));
4724
+ var outerHTML = htmlUtils$1.cleanUpHtml(nativeMethods$b.elementOuterHTMLGetter.call(_this.dragElement));
4712
4725
  _this.dragAndDropState.dataTransfer.setData('text/plain', src);
4713
4726
  _this.dragAndDropState.dataTransfer.setData('text/uri-list', src);
4714
4727
  _this.dragAndDropState.dataTransfer.setData('text/html', outerHTML);
@@ -4929,10 +4942,10 @@ window['%hammerhead%'].utils.removeInjectedScript();
4929
4942
  }(VisibleElementAutomation));
4930
4943
 
4931
4944
  var browserUtils$8 = hammerhead__default.utils.browser;
4932
- var eventSandbox = hammerhead__default.sandbox.event;
4945
+ var eventSandbox$1 = hammerhead__default.sandbox.event;
4933
4946
  var eventSimulator$9 = hammerhead__default.eventSandbox.eventSimulator;
4934
4947
  var listeners$4 = hammerhead__default.eventSandbox.listeners;
4935
- var nativeMethods$b = hammerhead__default.nativeMethods;
4948
+ var nativeMethods$c = hammerhead__default.nativeMethods;
4936
4949
  var domUtils$7 = testCafeCore__default.domUtils;
4937
4950
  var contentEditable$1 = testCafeCore__default.contentEditable;
4938
4951
  var textSelection$1 = testCafeCore__default.textSelection;
@@ -4952,7 +4965,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
4952
4965
  }
4953
4966
  function _updateSelectionAfterDeletionContent(element, selection) {
4954
4967
  var startNode = selection.startPos.node;
4955
- var startParent = nativeMethods$b.nodeParentNodeGetter.call(startNode);
4968
+ var startParent = nativeMethods$c.nodeParentNodeGetter.call(startNode);
4956
4969
  var hasStartParent = startParent && startNode.parentElement;
4957
4970
  var browserRequiresSelectionUpdating = browserUtils$8.isChrome && browserUtils$8.version < 58 || browserUtils$8.isSafari;
4958
4971
  if (browserRequiresSelectionUpdating || !hasStartParent || !domUtils$7.isElementContainsNode(element, startNode)) {
@@ -4971,11 +4984,11 @@ window['%hammerhead%'].utils.removeInjectedScript();
4971
4984
  var nodeForTyping = document.createTextNode(text);
4972
4985
  var textLength = text.length;
4973
4986
  var selectPosition = { node: nodeForTyping, offset: textLength };
4974
- var parent = nativeMethods$b.nodeParentNodeGetter.call(elementNode);
4987
+ var parent = nativeMethods$c.nodeParentNodeGetter.call(elementNode);
4975
4988
  if (domUtils$7.getTagName(elementNode) === 'br')
4976
4989
  parent.insertBefore(nodeForTyping, elementNode);
4977
4990
  else if (offset > 0) {
4978
- var childNodes = nativeMethods$b.nodeChildNodesGetter.call(elementNode);
4991
+ var childNodes = nativeMethods$c.nodeChildNodesGetter.call(elementNode);
4979
4992
  elementNode.insertBefore(nodeForTyping, childNodes[offset]);
4980
4993
  }
4981
4994
  else
@@ -5039,12 +5052,12 @@ window['%hammerhead%'].utils.removeInjectedScript();
5039
5052
  }
5040
5053
  if (browserUtils$8.isSafari) {
5041
5054
  listeners$4.addInternalEventBeforeListener(window, ['textInput'], onSafariTextInput);
5042
- eventSandbox.on(eventSandbox.EVENT_PREVENTED_EVENT, onSafariPreventTextInput);
5055
+ eventSandbox$1.on(eventSandbox$1.EVENT_PREVENTED_EVENT, onSafariPreventTextInput);
5043
5056
  }
5044
5057
  var isInputEventRequired = browserUtils$8.isFirefox || eventSimulator$9.textInput(element, text) || forceInputInSafari;
5045
5058
  if (browserUtils$8.isSafari) {
5046
5059
  listeners$4.removeInternalEventBeforeListener(window, ['textInput'], onSafariTextInput);
5047
- eventSandbox.off(eventSandbox.EVENT_PREVENTED_EVENT, onSafariPreventTextInput);
5060
+ eventSandbox$1.off(eventSandbox$1.EVENT_PREVENTED_EVENT, onSafariPreventTextInput);
5048
5061
  }
5049
5062
  return isInputEventRequired || browserUtils$8.isIE11;
5050
5063
  }
@@ -5164,7 +5177,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
5164
5177
  return key.length === 1 && (key >= 'a' && key <= 'z' || key >= 'A' && key <= 'Z');
5165
5178
  }
5166
5179
 
5167
- var nativeMethods$c = hammerhead__default.nativeMethods;
5180
+ var nativeMethods$d = hammerhead__default.nativeMethods;
5168
5181
  var browserUtils$9 = hammerhead__default.utils.browser;
5169
5182
  var focusBlurSandbox$3 = hammerhead__default.eventSandbox.focusBlur;
5170
5183
  var Promise$8 = hammerhead__default.Promise;
@@ -5212,9 +5225,9 @@ window['%hammerhead%'].utils.removeInjectedScript();
5212
5225
  var activeElement = getActiveElement$1(doc);
5213
5226
  var activeElementInIframe = null;
5214
5227
  if (activeElement && testCafeCore.domUtils.isIframeElement(activeElement) &&
5215
- nativeMethods$c.contentDocumentGetter.call(activeElement)) {
5228
+ nativeMethods$d.contentDocumentGetter.call(activeElement)) {
5216
5229
  try {
5217
- activeElementInIframe = getDeepActiveElement(nativeMethods$c.contentDocumentGetter.call(activeElement));
5230
+ activeElementInIframe = getDeepActiveElement(nativeMethods$d.contentDocumentGetter.call(activeElement));
5218
5231
  }
5219
5232
  catch (e) { // eslint-disable-line no-empty
5220
5233
  }
@@ -5268,7 +5281,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
5268
5281
  return checkedRadioButtonElementWithSameName || element;
5269
5282
  }
5270
5283
  function activeElementHasNegativeTabIndex(doc) {
5271
- var activeElement = nativeMethods$c.documentActiveElementGetter.call(doc);
5284
+ var activeElement = nativeMethods$d.documentActiveElementGetter.call(doc);
5272
5285
  var activeElementTabIndex = activeElement && getTabIndexAttributeIntValue(activeElement);
5273
5286
  return activeElement && activeElementTabIndex < 0;
5274
5287
  }
@@ -6025,7 +6038,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
6025
6038
 
6026
6039
  var Promise$a = hammerhead__default.Promise;
6027
6040
  var messageSandbox$4 = hammerhead__default.eventSandbox.message;
6028
- var nativeMethods$d = hammerhead__default.nativeMethods;
6041
+ var nativeMethods$e = hammerhead__default.nativeMethods;
6029
6042
  var PRESS_REQUEST_CMD = 'automation|press|request';
6030
6043
  var PRESS_RESPONSE_CMD = 'automation|press|response';
6031
6044
  // Setup cross-iframe interaction
@@ -6165,13 +6178,13 @@ window['%hammerhead%'].utils.removeInjectedScript();
6165
6178
  var _this = this;
6166
6179
  var activeElement = testCafeCore.domUtils.getActiveElement();
6167
6180
  var activeElementIsIframe = testCafeCore.domUtils.isIframeElement(activeElement);
6168
- if (!isIframeWindow(window) && activeElementIsIframe && nativeMethods$d.contentWindowGetter.call(activeElement)) {
6181
+ if (!isIframeWindow(window) && activeElementIsIframe && nativeMethods$e.contentWindowGetter.call(activeElement)) {
6169
6182
  var msg = {
6170
6183
  cmd: PRESS_REQUEST_CMD,
6171
6184
  keyCombinations: this.keyCombinations,
6172
6185
  options: this.options,
6173
6186
  };
6174
- return testCafeCore.sendRequestToFrame(msg, PRESS_RESPONSE_CMD, nativeMethods$d.contentWindowGetter.call(activeElement));
6187
+ return testCafeCore.sendRequestToFrame(msg, PRESS_RESPONSE_CMD, nativeMethods$e.contentWindowGetter.call(activeElement));
6175
6188
  }
6176
6189
  if (this.nativeAutomationInput) {
6177
6190
  var eventSequence = this._calculateCDPEventSequence();
@@ -7077,11 +7090,11 @@ window['%hammerhead%'].utils.removeInjectedScript();
7077
7090
  exports$1.getElementFromPoint = getElementFromPoint$2;
7078
7091
  // NOTE: for testing purposes
7079
7092
  exports$1.MoveAutomation = MoveAutomation;
7080
- var nativeMethods$e = hammerhead__default.nativeMethods;
7093
+ var nativeMethods$f = hammerhead__default.nativeMethods;
7081
7094
  var evalIframeScript = hammerhead__default.EVENTS.evalIframeScript;
7082
- nativeMethods$e.objectDefineProperty(window, '%testCafeAutomation%', { configurable: true, value: exports$1 });
7095
+ nativeMethods$f.objectDefineProperty(window, '%testCafeAutomation%', { configurable: true, value: exports$1 });
7083
7096
  // eslint-disable-next-line no-undef
7084
- hammerhead__default.on(evalIframeScript, function (e) { return initTestCafeAutomation(nativeMethods$e.contentWindowGetter.call(e.iframe), true); });
7097
+ hammerhead__default.on(evalIframeScript, function (e) { return initTestCafeAutomation(nativeMethods$f.contentWindowGetter.call(e.iframe), true); });
7085
7098
 
7086
7099
  }(window['%hammerhead%'], window['%hammerhead%'].Promise, window['%testCafeCore%'], window['%testCafeUI%']));
7087
7100