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.
- package/CHANGELOG.md +88 -10
- package/LICENSE +21 -21
- package/README.md +52 -48
- package/bin/testcafe-with-v8-flag-filter.js +0 -0
- package/lib/api/exportable-lib/index.js +50 -50
- package/lib/api/request-hooks/assert-type.js +7 -7
- package/lib/api/request-hooks/hook-method-names.js +11 -0
- package/lib/api/request-hooks/hook.js +33 -39
- package/lib/api/request-hooks/interfaces.js +3 -3
- package/lib/api/request-hooks/request-logger.js +113 -111
- package/lib/api/request-hooks/request-mock/create-request-mock.js +12 -0
- package/lib/api/request-hooks/request-mock/index.js +46 -0
- package/lib/api/request-hooks/request-mock.js +47 -48
- package/lib/api/structure/base-unit.js +11 -11
- package/lib/api/structure/fixture.js +75 -75
- package/lib/api/structure/interfaces.js +2 -2
- package/lib/api/structure/test-file.js +31 -31
- package/lib/api/structure/test-timeout.js +9 -9
- package/lib/api/structure/test.js +85 -85
- package/lib/api/structure/testing-unit.js +89 -89
- package/lib/api/structure/unit-type.js +9 -9
- package/lib/api/test-controller/assertion.js +88 -88
- package/lib/api/test-controller/execution-context.js +82 -82
- package/lib/api/test-controller/index.js +359 -319
- package/lib/api/test-controller/proxy.js +28 -28
- package/lib/api/test-page-url.js +60 -60
- package/lib/api/test-run-tracker.js +68 -68
- package/lib/api/wrap-test-function.js +49 -49
- package/lib/assertions/executor.js +74 -74
- package/lib/assertions/get-fn.js +46 -46
- package/lib/assertions/type.js +20 -20
- package/lib/assets/content-types.js +9 -9
- package/lib/assets/injectables.js +18 -18
- package/lib/browser/connection/command.js +10 -10
- package/lib/browser/connection/error-hints.js +9 -9
- package/lib/browser/connection/gateway.js +159 -159
- package/lib/browser/connection/get-hints.js +33 -33
- package/lib/browser/connection/heartbeat-status.js +8 -8
- package/lib/browser/connection/index.js +328 -328
- package/lib/browser/connection/remotes-queue.js +46 -46
- package/lib/browser/connection/service-routes.js +12 -12
- package/lib/browser/connection/status.js +12 -12
- package/lib/browser/interfaces.js +2 -2
- package/lib/browser/provider/built-in/dedicated/base.js +80 -80
- package/lib/browser/provider/built-in/dedicated/chrome/browser-client.js +204 -204
- package/lib/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +17 -17
- package/lib/browser/provider/built-in/dedicated/chrome/config.js +110 -110
- package/lib/browser/provider/built-in/dedicated/chrome/create-temp-profile.js +45 -45
- package/lib/browser/provider/built-in/dedicated/chrome/elapsed-upperbounds.js +15 -15
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +102 -102
- package/lib/browser/provider/built-in/dedicated/chrome/interfaces.js +2 -2
- package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +24 -24
- package/lib/browser/provider/built-in/dedicated/chrome/runtime-info.js +29 -29
- package/lib/browser/provider/built-in/dedicated/edge/index.js +10 -10
- package/lib/browser/provider/built-in/dedicated/edge/runtime-info.js +29 -29
- package/lib/browser/provider/built-in/dedicated/firefox/config.js +33 -33
- package/lib/browser/provider/built-in/dedicated/firefox/create-temp-profile.js +78 -78
- package/lib/browser/provider/built-in/dedicated/firefox/index.js +73 -73
- package/lib/browser/provider/built-in/dedicated/firefox/local-firefox.js +36 -36
- package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/commands.js +13 -13
- package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/index.js +200 -200
- package/lib/browser/provider/built-in/dedicated/firefox/runtime-info.js +17 -17
- package/lib/browser/provider/built-in/index.js +21 -21
- package/lib/browser/provider/built-in/locally-installed.js +30 -30
- package/lib/browser/provider/built-in/path.js +47 -47
- package/lib/browser/provider/built-in/remote.js +58 -58
- package/lib/browser/provider/index.js +303 -303
- package/lib/browser/provider/parse-provider-name.js +16 -16
- package/lib/browser/provider/plugin-host.js +121 -121
- package/lib/browser/provider/pool.js +115 -115
- package/lib/browser/provider/utils/argument-parsing.js +74 -74
- package/lib/browser/provider/utils/browser-starter.js +34 -34
- package/lib/browser/provider/utils/client-functions.js +24 -24
- package/lib/browser/provider/utils/get-maximized-headless-window-size.js +9 -9
- package/lib/cli/argument-parser.js +284 -279
- package/lib/cli/authentication-helper.js +35 -35
- package/lib/cli/cli.js +134 -134
- package/lib/cli/correct-browsers-and-sources.js +40 -40
- package/lib/cli/index.js +19 -19
- package/lib/cli/log.js +43 -43
- package/lib/cli/remotes-wizard.js +36 -36
- package/lib/cli/termination-handler.js +38 -38
- package/lib/client/automation/index.js +144 -46
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/browser/idle-page/index.html.mustache +35 -35
- package/lib/client/browser/idle-page/logo.svg +86 -86
- package/lib/client/browser/service-worker.js +4 -6
- package/lib/client/core/index.js +19 -13
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/driver/index.js +1807 -451
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/driver/internal-properties.js +9 -9
- package/lib/client/test-run/iframe.js.mustache +17 -17
- package/lib/client/test-run/index.js.mustache +51 -51
- package/lib/client/ui/index.js +14 -12
- package/lib/client/ui/index.min.js +1 -1
- package/lib/client/ui/sprite.svg +42 -42
- package/lib/client-functions/builder-symbol.js +4 -4
- package/lib/client-functions/client-function-builder.js +156 -135
- package/lib/client-functions/replicator.js +61 -61
- package/lib/client-functions/return-single-prop-mode.js +8 -8
- package/lib/client-functions/selector-api-execution-mode.js +22 -0
- package/lib/client-functions/selectors/add-api.js +646 -588
- package/lib/client-functions/selectors/create-snapshot-methods.js +13 -13
- package/lib/client-functions/selectors/prepare-api-args.js +20 -20
- package/lib/client-functions/selectors/selector-attribute-filter.js +22 -22
- package/lib/client-functions/selectors/selector-builder.js +154 -150
- package/lib/client-functions/selectors/selector-text-filter.js +43 -43
- package/lib/client-functions/selectors/snapshot-properties.js +48 -48
- package/lib/client-functions/types.js +18 -18
- package/lib/compiler/babel/format-babel-produced-code.js +10 -10
- package/lib/compiler/babel/get-base-babel-options.js +11 -11
- package/lib/compiler/babel/load-libs.js +64 -62
- package/lib/compiler/babel/preset-stage-2.js +19 -19
- package/lib/compiler/compile-client-function.js +73 -73
- package/lib/compiler/compilers.js +33 -33
- package/lib/compiler/index.js +92 -92
- package/lib/compiler/interfaces.js +2 -2
- package/lib/compiler/test-file/api-based.js +146 -146
- package/lib/compiler/test-file/base.js +36 -36
- package/lib/compiler/test-file/exportble-lib-path.js +5 -5
- package/lib/compiler/test-file/formats/coffeescript/compiler.js +38 -38
- package/lib/compiler/test-file/formats/coffeescript/get-test-list.js +29 -29
- package/lib/compiler/test-file/formats/es-next/compiler.js +43 -43
- package/lib/compiler/test-file/formats/es-next/get-test-list.js +166 -166
- package/lib/compiler/test-file/formats/es-next/is-flow-code.js +7 -7
- package/lib/compiler/test-file/formats/raw.js +85 -85
- package/lib/compiler/test-file/formats/typescript/compiler.js +135 -135
- package/lib/compiler/test-file/formats/typescript/get-test-list.js +185 -185
- package/lib/compiler/test-file/test-file-parser-base.js +214 -214
- package/lib/configuration/configuration-base.js +165 -165
- package/lib/configuration/constants.js +9 -9
- package/lib/configuration/customizable-compilers.js +7 -7
- package/lib/configuration/default-values.js +51 -51
- package/lib/configuration/interfaces.js +3 -3
- package/lib/configuration/option-names.js +53 -53
- package/lib/configuration/option-source.js +9 -9
- package/lib/configuration/option.js +14 -14
- package/lib/configuration/quarantine-option-names.js +10 -0
- package/lib/configuration/run-option-names.js +26 -26
- package/lib/configuration/screenshot-option-names.js +10 -10
- package/lib/configuration/testcafe-configuration.js +164 -165
- package/lib/configuration/types.js +2 -2
- package/lib/configuration/typescript-configuration.js +62 -62
- package/lib/custom-client-scripts/assert-type.js +7 -7
- package/lib/custom-client-scripts/client-script-init.js +3 -3
- package/lib/custom-client-scripts/client-script.js +107 -108
- package/lib/custom-client-scripts/get-code.js +11 -11
- package/lib/custom-client-scripts/get-url.js +6 -6
- package/lib/custom-client-scripts/load.js +15 -15
- package/lib/custom-client-scripts/problematic-scripts.js +2 -2
- package/lib/custom-client-scripts/routing.js +36 -36
- package/lib/custom-client-scripts/utils.js +60 -60
- package/lib/embedding-utils.js +83 -83
- package/lib/errors/create-stack-filter.js +18 -18
- package/lib/errors/error-list.js +26 -26
- package/lib/errors/get-callsite.js +31 -31
- package/lib/errors/internal-modules-prefix.js +8 -8
- package/lib/errors/is-internal-stack-frame.js +46 -46
- package/lib/errors/process-test-fn-error.js +37 -37
- package/lib/errors/runtime/index.js +123 -123
- package/lib/errors/runtime/templates.js +116 -114
- package/lib/errors/runtime/type-assertions.js +112 -112
- package/lib/errors/stack-cleaning-hook.js +64 -64
- package/lib/errors/test-run/formattable-adapter.js +59 -59
- package/lib/errors/test-run/index.js +302 -302
- package/lib/errors/test-run/render-error-template.js +31 -31
- package/lib/errors/test-run/templates.js +93 -95
- package/lib/errors/test-run/utils.js +90 -85
- package/lib/errors/types.js +157 -155
- package/lib/index.js +81 -81
- package/lib/live/bootstrapper.js +44 -44
- package/lib/live/controller.js +107 -107
- package/lib/live/file-watcher/index.js +67 -67
- package/lib/live/file-watcher/modules-graph.js +58 -58
- package/lib/live/keyboard-observer.js +76 -76
- package/lib/live/logger/index.js +64 -64
- package/lib/live/test-run-controller.js +96 -96
- package/lib/live/test-run-state.js +6 -6
- package/lib/live/test-run.js +56 -56
- package/lib/live/test-runner.js +168 -168
- package/lib/load-assets.js +29 -29
- package/lib/notifications/add-rendered-warning.js +16 -16
- package/lib/notifications/debug-logger.js +78 -78
- package/lib/notifications/deprecated.js +24 -24
- package/lib/notifications/information-message.js +12 -12
- package/lib/notifications/warning-log.js +32 -31
- package/lib/notifications/warning-message.js +48 -48
- package/lib/reporter/command/command-formatter.js +120 -109
- package/lib/reporter/command/format-command.js +8 -8
- package/lib/reporter/command/interfaces.js +2 -2
- package/lib/reporter/index.js +319 -314
- package/lib/reporter/interfaces.js +2 -2
- package/lib/reporter/plugin-host.js +136 -137
- package/lib/reporter/plugin-methods.js +12 -12
- package/lib/role/index.js +74 -74
- package/lib/role/marker-symbol.js +7 -7
- package/lib/role/phase.js +9 -9
- package/lib/runner/bootstrapper.js +272 -272
- package/lib/runner/browser-job-result.js +9 -9
- package/lib/runner/browser-job.js +153 -123
- package/lib/runner/browser-set.js +114 -114
- package/lib/runner/fixture-hook-controller.js +85 -85
- package/lib/runner/index.js +450 -442
- package/lib/runner/interfaces.js +3 -3
- package/lib/runner/reporter-stream-controller.js +28 -28
- package/lib/runner/task/index.js +152 -133
- package/lib/runner/task/phase.js +9 -9
- package/lib/runner/test-run-controller.js +166 -185
- package/lib/runner/tested-app.js +73 -72
- package/lib/screenshots/capturer.js +141 -141
- package/lib/screenshots/constants.js +11 -11
- package/lib/screenshots/crop.js +111 -111
- package/lib/screenshots/default-extension.js +4 -4
- package/lib/screenshots/index.js +67 -67
- package/lib/screenshots/utils.js +39 -39
- package/lib/services/compiler/host.js +190 -106
- package/lib/services/compiler/io.js +9 -9
- package/lib/services/compiler/protocol.js +17 -16
- package/lib/services/compiler/service.js +225 -106
- package/lib/services/compiler/test-run-proxy.js +111 -73
- package/lib/services/interfaces.js +3 -0
- package/lib/services/process-title.js +8 -8
- package/lib/services/serialization/prepare-options.js +17 -17
- package/lib/services/serialization/replicator/create-replicator.js +27 -0
- package/lib/services/serialization/replicator/custom-error-transform.js +28 -0
- package/lib/services/serialization/test-structure.js +93 -77
- package/lib/services/utils/ipc/interfaces.js +30 -30
- package/lib/services/utils/ipc/io.js +108 -108
- package/lib/services/utils/ipc/message.js +76 -73
- package/lib/services/utils/ipc/packet.js +55 -55
- package/lib/services/utils/ipc/proxy.js +110 -118
- package/lib/services/utils/ipc/transport.js +64 -64
- package/lib/shared/errors/index.js +382 -382
- package/lib/shared/node-modules-folder-name.js +4 -4
- package/lib/test-run/bookmark.js +90 -90
- package/lib/test-run/browser-console-messages.js +73 -73
- package/lib/test-run/browser-manipulation-queue.js +92 -92
- package/lib/test-run/client-messages.js +9 -9
- package/lib/test-run/commands/actions.js +486 -425
- package/lib/test-run/commands/assertion.js +45 -45
- package/lib/test-run/commands/base.js +14 -14
- package/lib/test-run/commands/browser-manipulation.js +95 -95
- package/lib/test-run/commands/from-object.js +82 -82
- package/lib/test-run/commands/observation.js +61 -61
- package/lib/test-run/commands/options.js +231 -215
- package/lib/test-run/commands/service.js +54 -48
- package/lib/test-run/commands/type.js +65 -60
- package/lib/test-run/commands/utils.js +87 -87
- package/lib/test-run/commands/validations/argument.js +90 -90
- package/lib/test-run/commands/validations/factories.js +47 -47
- package/lib/test-run/commands/validations/initializers.js +44 -44
- package/lib/test-run/debug-log.js +32 -32
- package/lib/test-run/execute-js-expression.js +74 -74
- package/lib/test-run/index.js +823 -752
- package/lib/test-run/marker-symbol.js +7 -7
- package/lib/test-run/observed-callsites-storage.js +17 -17
- package/lib/test-run/phase.js +16 -16
- package/lib/test-run/session-controller.js +104 -104
- package/lib/testcafe.js +119 -114
- package/lib/utils/assignable.js +39 -39
- package/lib/utils/async-event-emitter.js +28 -28
- package/lib/utils/async-queue.js +14 -14
- package/lib/utils/browser-connection-timeouts.js +19 -19
- package/lib/utils/callsite.js +17 -17
- package/lib/utils/check-file-path.js +31 -31
- package/lib/utils/check-url.js +51 -51
- package/lib/utils/convert-to-best-fit-type.js +16 -16
- package/lib/utils/correct-file-path.js +21 -21
- package/lib/utils/define-lazy-property.js +13 -13
- package/lib/utils/delay.js +6 -6
- package/lib/utils/delegated-api.js +44 -44
- package/lib/utils/detect-display.js +6 -6
- package/lib/utils/detect-ffmpeg.js +44 -44
- package/lib/utils/diff/colors.js +29 -29
- package/lib/utils/diff/index.js +53 -53
- package/lib/utils/diff/util.js +24 -22
- package/lib/utils/diff.js +29 -29
- package/lib/utils/escape-user-agent.js +10 -10
- package/lib/utils/flag-list.js +17 -17
- package/lib/utils/get-any-key.js +8 -8
- package/lib/utils/get-browser.js +8 -8
- package/lib/utils/get-common-path.js +34 -34
- package/lib/utils/get-filter-fn.js +40 -40
- package/lib/utils/get-options/base.js +36 -36
- package/lib/utils/get-options/compiler.js +33 -33
- package/lib/utils/get-options/grep.js +15 -15
- package/lib/utils/get-options/index.js +21 -19
- package/lib/utils/get-options/meta.js +22 -22
- package/lib/utils/get-options/quarantine.js +92 -0
- package/lib/utils/get-options/screenshot.js +17 -17
- package/lib/utils/get-options/ssl.js +45 -45
- package/lib/utils/get-options/video.js +10 -10
- package/lib/utils/get-viewport-width.js +18 -18
- package/lib/utils/guard-time-execution.js +10 -10
- package/lib/utils/handle-errors.js +74 -74
- package/lib/utils/handle-tag-args.js +8 -8
- package/lib/utils/http.js +30 -30
- package/lib/utils/is-localhost.js +11 -11
- package/lib/utils/is-password-input.js +11 -0
- package/lib/utils/is-repl.js +12 -0
- package/lib/utils/is-window-in-iframe.js +6 -6
- package/lib/utils/limit-number.js +10 -10
- package/lib/utils/make-reg-exp.js +7 -7
- package/lib/utils/moment-loader.js +20 -20
- package/lib/utils/parse-file-list.js +71 -71
- package/lib/utils/parse-user-agent.js +55 -55
- package/lib/utils/path-pattern.js +114 -114
- package/lib/utils/prepare-reporters.js +30 -30
- package/lib/utils/prerender-callsite.js +18 -18
- package/lib/utils/process.js +119 -119
- package/lib/utils/promisified-functions.js +46 -46
- package/lib/utils/re-executable-promise.js +39 -39
- package/lib/utils/render-callsite-sync.js +29 -29
- package/lib/utils/render-template.js +10 -10
- package/lib/utils/reporter.js +30 -30
- package/lib/utils/resolve-path-relatively-cwd.js +7 -7
- package/lib/utils/string.js +105 -105
- package/lib/utils/temp-directory/cleanup-process/commands.js +7 -7
- package/lib/utils/temp-directory/cleanup-process/index.js +143 -143
- package/lib/utils/temp-directory/cleanup-process/worker.js +58 -58
- package/lib/utils/temp-directory/index.js +87 -87
- package/lib/utils/temp-directory/lockfile.js +56 -56
- package/lib/utils/thennable.js +7 -7
- package/lib/utils/timer.js +15 -15
- package/lib/utils/to-posix-path.js +8 -8
- package/lib/utils/types.js +2 -2
- package/lib/video-recorder/interfaces.js +2 -2
- package/lib/video-recorder/process.js +126 -126
- package/lib/video-recorder/recorder.js +136 -136
- package/lib/video-recorder/test-run-video-recorder.js +69 -69
- package/lib/video-recorder/videos.js +37 -37
- package/package.json +7 -7
- package/ts-defs/index.d.ts +109 -17
- package/ts-defs/selectors.d.ts +95 -7
- package/ts-defs/testcafe-scripts.d.ts +96 -8
|
@@ -1,201 +1,201 @@
|
|
|
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 net_1 = require("net");
|
|
7
|
-
const promisify_event_1 = __importDefault(require("promisify-event"));
|
|
8
|
-
const events_1 = __importDefault(require("events"));
|
|
9
|
-
const delay_1 = __importDefault(require("../../../../../../utils/delay"));
|
|
10
|
-
const client_functions_1 = require("../../../../utils/client-functions");
|
|
11
|
-
const commands_1 = __importDefault(require("./commands"));
|
|
12
|
-
const CONNECTION_TIMEOUT = 30000;
|
|
13
|
-
const CONNECTION_RETRY_DELAY = 300;
|
|
14
|
-
const MAX_RESIZE_RETRY_COUNT = 2;
|
|
15
|
-
const HEADER_SEPARATOR = ':';
|
|
16
|
-
module.exports = class MarionetteClient {
|
|
17
|
-
constructor(port = 2828, runtimeInfo, host = '127.0.0.1') {
|
|
18
|
-
this.currentPacketNumber = 1;
|
|
19
|
-
this.events = new events_1.default();
|
|
20
|
-
this.port = port;
|
|
21
|
-
this.host = host;
|
|
22
|
-
this.socket = new net_1.Socket();
|
|
23
|
-
this.buffer = Buffer.alloc(0);
|
|
24
|
-
this.getPacketPromise = Promise.resolve();
|
|
25
|
-
this.sendPacketPromise = Promise.resolve();
|
|
26
|
-
this._runtimeInfo = runtimeInfo;
|
|
27
|
-
this._windowHandles = {};
|
|
28
|
-
this.protocolInfo = {
|
|
29
|
-
applicationType: '',
|
|
30
|
-
marionetteProtocol: '',
|
|
31
|
-
};
|
|
32
|
-
this.sessionInfo = null;
|
|
33
|
-
}
|
|
34
|
-
get activeWindowId() {
|
|
35
|
-
return this._runtimeInfo.activeWindowId;
|
|
36
|
-
}
|
|
37
|
-
async _attemptToConnect(port, host) {
|
|
38
|
-
this.socket.connect(port, host);
|
|
39
|
-
const connectionPromise = Promise.race([
|
|
40
|
-
promisify_event_1.default(this.socket, 'connect'),
|
|
41
|
-
promisify_event_1.default(this.socket, 'error')
|
|
42
|
-
]);
|
|
43
|
-
return await connectionPromise
|
|
44
|
-
.then(() => true)
|
|
45
|
-
.catch(() => {
|
|
46
|
-
this.socket.removeAllListeners('connect');
|
|
47
|
-
return delay_1.default(CONNECTION_RETRY_DELAY);
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
async _connectSocket(port, host) {
|
|
51
|
-
const connectionStartTime = Date.now();
|
|
52
|
-
let connected = await this._attemptToConnect(port, host);
|
|
53
|
-
while (!connected && Date.now() - connectionStartTime < CONNECTION_TIMEOUT)
|
|
54
|
-
connected = await this._attemptToConnect(port, host);
|
|
55
|
-
if (!connected)
|
|
56
|
-
throw new Error('Unable to connect');
|
|
57
|
-
this.socket.on('data', data => this._handleNewData(data));
|
|
58
|
-
}
|
|
59
|
-
async _writeSocket(message) {
|
|
60
|
-
if (!this.socket.write(message))
|
|
61
|
-
await promisify_event_1.default(this.socket, 'drain');
|
|
62
|
-
}
|
|
63
|
-
_handleNewData(data) {
|
|
64
|
-
if (!data)
|
|
65
|
-
return;
|
|
66
|
-
this.buffer = Buffer.concat([this.buffer, data]);
|
|
67
|
-
this.events.emit('new-data');
|
|
68
|
-
}
|
|
69
|
-
_getPacket() {
|
|
70
|
-
this.getPacketPromise = this.getPacketPromise.then(async () => {
|
|
71
|
-
let headerEndIndex = this.buffer.indexOf(HEADER_SEPARATOR);
|
|
72
|
-
while (headerEndIndex < 0) {
|
|
73
|
-
await promisify_event_1.default(this.events, 'new-data');
|
|
74
|
-
headerEndIndex = this.buffer.indexOf(HEADER_SEPARATOR);
|
|
75
|
-
}
|
|
76
|
-
const packet = {
|
|
77
|
-
length: NaN,
|
|
78
|
-
body: null
|
|
79
|
-
};
|
|
80
|
-
packet.length = parseInt(this.buffer.toString('utf8', 0, headerEndIndex), 10) || 0;
|
|
81
|
-
const bodyStartIndex = headerEndIndex + HEADER_SEPARATOR.length;
|
|
82
|
-
const bodyEndIndex = bodyStartIndex + packet.length;
|
|
83
|
-
if (packet.length) {
|
|
84
|
-
while (this.buffer.length < bodyEndIndex)
|
|
85
|
-
await promisify_event_1.default(this.events, 'new-data');
|
|
86
|
-
packet.body = JSON.parse(this.buffer.toString('utf8', bodyStartIndex, bodyEndIndex));
|
|
87
|
-
}
|
|
88
|
-
this.buffer = this.buffer.slice(bodyEndIndex);
|
|
89
|
-
return packet;
|
|
90
|
-
});
|
|
91
|
-
return this.getPacketPromise;
|
|
92
|
-
}
|
|
93
|
-
_sendPacket(payload) {
|
|
94
|
-
this.sendPacketPromise = this.sendPacketPromise.then(async () => {
|
|
95
|
-
const body = [0, this.currentPacketNumber++, payload.command, payload.parameters];
|
|
96
|
-
const serialized = JSON.stringify(body);
|
|
97
|
-
const message = Buffer.byteLength(serialized, 'utf8') + HEADER_SEPARATOR + serialized;
|
|
98
|
-
this._writeSocket(message);
|
|
99
|
-
});
|
|
100
|
-
return this.sendPacketPromise;
|
|
101
|
-
}
|
|
102
|
-
_throwMarionetteError(error) {
|
|
103
|
-
throw new Error(`${error.error}${error.message ? ': ' + error.message : ''}`);
|
|
104
|
-
}
|
|
105
|
-
async _switchToWindow(windowHandle) {
|
|
106
|
-
await this._getResponse({
|
|
107
|
-
command: commands_1.default.switchToWindow,
|
|
108
|
-
parameters: { handle: windowHandle }
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
async _getActiveWindowHandle() {
|
|
112
|
-
const windowHandles = await this._getResponse({
|
|
113
|
-
command: commands_1.default.getWindowHandles
|
|
114
|
-
});
|
|
115
|
-
for (const handle of windowHandles) {
|
|
116
|
-
await this._switchToWindow(handle);
|
|
117
|
-
const title = await this._getResponse({ command: commands_1.default.getTitle });
|
|
118
|
-
if (title.value.includes(this.activeWindowId))
|
|
119
|
-
return handle;
|
|
120
|
-
}
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
async _ensureActiveWindow() {
|
|
124
|
-
let handle = this._windowHandles[this.activeWindowId];
|
|
125
|
-
if (handle) {
|
|
126
|
-
await this._switchToWindow(handle);
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
handle = await this._getActiveWindowHandle();
|
|
130
|
-
if (handle)
|
|
131
|
-
this._windowHandles[this.activeWindowId] = handle;
|
|
132
|
-
}
|
|
133
|
-
async _request(packet) {
|
|
134
|
-
await this._ensureActiveWindow();
|
|
135
|
-
return this._getResponse(packet);
|
|
136
|
-
}
|
|
137
|
-
async _getResponse(packet) {
|
|
138
|
-
const packetNumber = this.currentPacketNumber;
|
|
139
|
-
await this._sendPacket(packet);
|
|
140
|
-
let responsePacket = await this._getPacket();
|
|
141
|
-
while (!responsePacket.body || responsePacket.body[1] !== packetNumber)
|
|
142
|
-
responsePacket = await this._getPacket();
|
|
143
|
-
if (responsePacket.body[2])
|
|
144
|
-
this._throwMarionetteError(responsePacket.body[2]);
|
|
145
|
-
return responsePacket.body[3];
|
|
146
|
-
}
|
|
147
|
-
async _getScreenshotRawData(fullPage = false) {
|
|
148
|
-
return await this._request({
|
|
149
|
-
command: commands_1.default.takeScreenshot,
|
|
150
|
-
parameters: {
|
|
151
|
-
full: fullPage,
|
|
152
|
-
hash: false,
|
|
153
|
-
scroll: false
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
async connect() {
|
|
158
|
-
await this._connectSocket(this.port, this.host);
|
|
159
|
-
const infoPacket = await this._getPacket();
|
|
160
|
-
this.protocolInfo = {
|
|
161
|
-
applicationType: infoPacket.body.applicationType,
|
|
162
|
-
marionetteProtocol: infoPacket.body.marionetteProtocol
|
|
163
|
-
};
|
|
164
|
-
this.sessionInfo = await this._getResponse({ command: commands_1.default.newSession });
|
|
165
|
-
}
|
|
166
|
-
dispose() {
|
|
167
|
-
this.socket.end();
|
|
168
|
-
this.buffer = null;
|
|
169
|
-
}
|
|
170
|
-
async executeScript(code) {
|
|
171
|
-
return await this._request({
|
|
172
|
-
command: commands_1.default.executeScript,
|
|
173
|
-
parameters: { script: `return (${code})()` }
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
async getScreenshotData(fullPage) {
|
|
177
|
-
const frameData = await this._getScreenshotRawData(fullPage);
|
|
178
|
-
return Buffer.from(frameData.value, 'base64');
|
|
179
|
-
}
|
|
180
|
-
async setWindowSize(width, height) {
|
|
181
|
-
let { value: pageRect } = await this.executeScript(client_functions_1.GET_WINDOW_DIMENSIONS_INFO_SCRIPT);
|
|
182
|
-
let attemptCounter = 0;
|
|
183
|
-
while (attemptCounter++ < MAX_RESIZE_RETRY_COUNT && (pageRect.width !== width || pageRect.height !== height)) {
|
|
184
|
-
const currentRect = await this._request({ command: commands_1.default.getWindowRect });
|
|
185
|
-
await this._request({
|
|
186
|
-
command: commands_1.default.setWindowRect,
|
|
187
|
-
parameters: {
|
|
188
|
-
x: currentRect.x,
|
|
189
|
-
y: currentRect.y,
|
|
190
|
-
width: width + (currentRect.width - pageRect.width),
|
|
191
|
-
height: height + (currentRect.height - pageRect.height)
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
({ value: pageRect } = await this.executeScript(client_functions_1.GET_WINDOW_DIMENSIONS_INFO_SCRIPT));
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
async quit() {
|
|
198
|
-
await this._request({ command: commands_1.default.quit });
|
|
199
|
-
}
|
|
200
|
-
};
|
|
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 net_1 = require("net");
|
|
7
|
+
const promisify_event_1 = __importDefault(require("promisify-event"));
|
|
8
|
+
const events_1 = __importDefault(require("events"));
|
|
9
|
+
const delay_1 = __importDefault(require("../../../../../../utils/delay"));
|
|
10
|
+
const client_functions_1 = require("../../../../utils/client-functions");
|
|
11
|
+
const commands_1 = __importDefault(require("./commands"));
|
|
12
|
+
const CONNECTION_TIMEOUT = 30000;
|
|
13
|
+
const CONNECTION_RETRY_DELAY = 300;
|
|
14
|
+
const MAX_RESIZE_RETRY_COUNT = 2;
|
|
15
|
+
const HEADER_SEPARATOR = ':';
|
|
16
|
+
module.exports = class MarionetteClient {
|
|
17
|
+
constructor(port = 2828, runtimeInfo, host = '127.0.0.1') {
|
|
18
|
+
this.currentPacketNumber = 1;
|
|
19
|
+
this.events = new events_1.default();
|
|
20
|
+
this.port = port;
|
|
21
|
+
this.host = host;
|
|
22
|
+
this.socket = new net_1.Socket();
|
|
23
|
+
this.buffer = Buffer.alloc(0);
|
|
24
|
+
this.getPacketPromise = Promise.resolve();
|
|
25
|
+
this.sendPacketPromise = Promise.resolve();
|
|
26
|
+
this._runtimeInfo = runtimeInfo;
|
|
27
|
+
this._windowHandles = {};
|
|
28
|
+
this.protocolInfo = {
|
|
29
|
+
applicationType: '',
|
|
30
|
+
marionetteProtocol: '',
|
|
31
|
+
};
|
|
32
|
+
this.sessionInfo = null;
|
|
33
|
+
}
|
|
34
|
+
get activeWindowId() {
|
|
35
|
+
return this._runtimeInfo.activeWindowId;
|
|
36
|
+
}
|
|
37
|
+
async _attemptToConnect(port, host) {
|
|
38
|
+
this.socket.connect(port, host);
|
|
39
|
+
const connectionPromise = Promise.race([
|
|
40
|
+
promisify_event_1.default(this.socket, 'connect'),
|
|
41
|
+
promisify_event_1.default(this.socket, 'error')
|
|
42
|
+
]);
|
|
43
|
+
return await connectionPromise
|
|
44
|
+
.then(() => true)
|
|
45
|
+
.catch(() => {
|
|
46
|
+
this.socket.removeAllListeners('connect');
|
|
47
|
+
return delay_1.default(CONNECTION_RETRY_DELAY);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
async _connectSocket(port, host) {
|
|
51
|
+
const connectionStartTime = Date.now();
|
|
52
|
+
let connected = await this._attemptToConnect(port, host);
|
|
53
|
+
while (!connected && Date.now() - connectionStartTime < CONNECTION_TIMEOUT)
|
|
54
|
+
connected = await this._attemptToConnect(port, host);
|
|
55
|
+
if (!connected)
|
|
56
|
+
throw new Error('Unable to connect');
|
|
57
|
+
this.socket.on('data', data => this._handleNewData(data));
|
|
58
|
+
}
|
|
59
|
+
async _writeSocket(message) {
|
|
60
|
+
if (!this.socket.write(message))
|
|
61
|
+
await promisify_event_1.default(this.socket, 'drain');
|
|
62
|
+
}
|
|
63
|
+
_handleNewData(data) {
|
|
64
|
+
if (!data)
|
|
65
|
+
return;
|
|
66
|
+
this.buffer = Buffer.concat([this.buffer, data]);
|
|
67
|
+
this.events.emit('new-data');
|
|
68
|
+
}
|
|
69
|
+
_getPacket() {
|
|
70
|
+
this.getPacketPromise = this.getPacketPromise.then(async () => {
|
|
71
|
+
let headerEndIndex = this.buffer.indexOf(HEADER_SEPARATOR);
|
|
72
|
+
while (headerEndIndex < 0) {
|
|
73
|
+
await promisify_event_1.default(this.events, 'new-data');
|
|
74
|
+
headerEndIndex = this.buffer.indexOf(HEADER_SEPARATOR);
|
|
75
|
+
}
|
|
76
|
+
const packet = {
|
|
77
|
+
length: NaN,
|
|
78
|
+
body: null
|
|
79
|
+
};
|
|
80
|
+
packet.length = parseInt(this.buffer.toString('utf8', 0, headerEndIndex), 10) || 0;
|
|
81
|
+
const bodyStartIndex = headerEndIndex + HEADER_SEPARATOR.length;
|
|
82
|
+
const bodyEndIndex = bodyStartIndex + packet.length;
|
|
83
|
+
if (packet.length) {
|
|
84
|
+
while (this.buffer.length < bodyEndIndex)
|
|
85
|
+
await promisify_event_1.default(this.events, 'new-data');
|
|
86
|
+
packet.body = JSON.parse(this.buffer.toString('utf8', bodyStartIndex, bodyEndIndex));
|
|
87
|
+
}
|
|
88
|
+
this.buffer = this.buffer.slice(bodyEndIndex);
|
|
89
|
+
return packet;
|
|
90
|
+
});
|
|
91
|
+
return this.getPacketPromise;
|
|
92
|
+
}
|
|
93
|
+
_sendPacket(payload) {
|
|
94
|
+
this.sendPacketPromise = this.sendPacketPromise.then(async () => {
|
|
95
|
+
const body = [0, this.currentPacketNumber++, payload.command, payload.parameters];
|
|
96
|
+
const serialized = JSON.stringify(body);
|
|
97
|
+
const message = Buffer.byteLength(serialized, 'utf8') + HEADER_SEPARATOR + serialized;
|
|
98
|
+
this._writeSocket(message);
|
|
99
|
+
});
|
|
100
|
+
return this.sendPacketPromise;
|
|
101
|
+
}
|
|
102
|
+
_throwMarionetteError(error) {
|
|
103
|
+
throw new Error(`${error.error}${error.message ? ': ' + error.message : ''}`);
|
|
104
|
+
}
|
|
105
|
+
async _switchToWindow(windowHandle) {
|
|
106
|
+
await this._getResponse({
|
|
107
|
+
command: commands_1.default.switchToWindow,
|
|
108
|
+
parameters: { handle: windowHandle }
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
async _getActiveWindowHandle() {
|
|
112
|
+
const windowHandles = await this._getResponse({
|
|
113
|
+
command: commands_1.default.getWindowHandles
|
|
114
|
+
});
|
|
115
|
+
for (const handle of windowHandles) {
|
|
116
|
+
await this._switchToWindow(handle);
|
|
117
|
+
const title = await this._getResponse({ command: commands_1.default.getTitle });
|
|
118
|
+
if (title.value.includes(this.activeWindowId))
|
|
119
|
+
return handle;
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
async _ensureActiveWindow() {
|
|
124
|
+
let handle = this._windowHandles[this.activeWindowId];
|
|
125
|
+
if (handle) {
|
|
126
|
+
await this._switchToWindow(handle);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
handle = await this._getActiveWindowHandle();
|
|
130
|
+
if (handle)
|
|
131
|
+
this._windowHandles[this.activeWindowId] = handle;
|
|
132
|
+
}
|
|
133
|
+
async _request(packet) {
|
|
134
|
+
await this._ensureActiveWindow();
|
|
135
|
+
return this._getResponse(packet);
|
|
136
|
+
}
|
|
137
|
+
async _getResponse(packet) {
|
|
138
|
+
const packetNumber = this.currentPacketNumber;
|
|
139
|
+
await this._sendPacket(packet);
|
|
140
|
+
let responsePacket = await this._getPacket();
|
|
141
|
+
while (!responsePacket.body || responsePacket.body[1] !== packetNumber)
|
|
142
|
+
responsePacket = await this._getPacket();
|
|
143
|
+
if (responsePacket.body[2])
|
|
144
|
+
this._throwMarionetteError(responsePacket.body[2]);
|
|
145
|
+
return responsePacket.body[3];
|
|
146
|
+
}
|
|
147
|
+
async _getScreenshotRawData(fullPage = false) {
|
|
148
|
+
return await this._request({
|
|
149
|
+
command: commands_1.default.takeScreenshot,
|
|
150
|
+
parameters: {
|
|
151
|
+
full: fullPage,
|
|
152
|
+
hash: false,
|
|
153
|
+
scroll: false
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
async connect() {
|
|
158
|
+
await this._connectSocket(this.port, this.host);
|
|
159
|
+
const infoPacket = await this._getPacket();
|
|
160
|
+
this.protocolInfo = {
|
|
161
|
+
applicationType: infoPacket.body.applicationType,
|
|
162
|
+
marionetteProtocol: infoPacket.body.marionetteProtocol
|
|
163
|
+
};
|
|
164
|
+
this.sessionInfo = await this._getResponse({ command: commands_1.default.newSession });
|
|
165
|
+
}
|
|
166
|
+
dispose() {
|
|
167
|
+
this.socket.end();
|
|
168
|
+
this.buffer = null;
|
|
169
|
+
}
|
|
170
|
+
async executeScript(code) {
|
|
171
|
+
return await this._request({
|
|
172
|
+
command: commands_1.default.executeScript,
|
|
173
|
+
parameters: { script: `return (${code})()` }
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
async getScreenshotData(fullPage) {
|
|
177
|
+
const frameData = await this._getScreenshotRawData(fullPage);
|
|
178
|
+
return Buffer.from(frameData.value, 'base64');
|
|
179
|
+
}
|
|
180
|
+
async setWindowSize(width, height) {
|
|
181
|
+
let { value: pageRect } = await this.executeScript(client_functions_1.GET_WINDOW_DIMENSIONS_INFO_SCRIPT);
|
|
182
|
+
let attemptCounter = 0;
|
|
183
|
+
while (attemptCounter++ < MAX_RESIZE_RETRY_COUNT && (pageRect.width !== width || pageRect.height !== height)) {
|
|
184
|
+
const currentRect = await this._request({ command: commands_1.default.getWindowRect });
|
|
185
|
+
await this._request({
|
|
186
|
+
command: commands_1.default.setWindowRect,
|
|
187
|
+
parameters: {
|
|
188
|
+
x: currentRect.x,
|
|
189
|
+
y: currentRect.y,
|
|
190
|
+
width: width + (currentRect.width - pageRect.width),
|
|
191
|
+
height: height + (currentRect.height - pageRect.height)
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
({ value: pageRect } = await this.executeScript(client_functions_1.GET_WINDOW_DIMENSIONS_INFO_SCRIPT));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async quit() {
|
|
198
|
+
await this._request({ command: commands_1.default.quit });
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
201
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9kZWRpY2F0ZWQvZmlyZWZveC9tYXJpb25ldHRlLWNsaWVudC9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3QixzRUFBNkM7QUFDN0Msb0RBQWtDO0FBQ2xDLDBFQUFrRDtBQUNsRCx5RUFBdUY7QUFDdkYsMERBQWtDO0FBR2xDLE1BQU0sa0JBQWtCLEdBQU8sS0FBSyxDQUFDO0FBQ3JDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQ25DLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sZ0JBQWdCLEdBQVMsR0FBRyxDQUFDO0FBRW5DLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxnQkFBZ0I7SUFDbkMsWUFBYSxJQUFJLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEdBQUcsV0FBVztRQUNyRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQWdCLElBQUksZ0JBQVksRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLEdBQWtCLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFrQixJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBZ0IsSUFBSSxZQUFNLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGlCQUFpQixHQUFLLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUU3QyxJQUFJLENBQUMsWUFBWSxHQUFLLFdBQVcsQ0FBQztR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RyxRQUFRLENBQUMsTUFBTSxDQUFDO2lCQUMxRDthQUNKLENBQUMsQ0FBQztZQUVILENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLG9EQUFpQyxDQUFDLENBQUMsQ0FBQztTQUN2RjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNOLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTb2NrZXQgfSBmcm9tICduZXQnO1xuaW1wb3J0IHByb21pc2lmeUV2ZW50IGZyb20gJ3Byb21pc2lmeS1ldmVudCc7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgZGVsYXkgZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vdXRpbHMvZGVsYXknO1xuaW1wb3J0IHsgR0VUX1dJTkRPV19ESU1FTlNJT05TX0lORk9fU0NSSVBUIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvY2xpZW50LWZ1bmN0aW9ucyc7XG5pbXBvcnQgQ09NTUFORFMgZnJvbSAnLi9jb21tYW5kcyc7XG5cblxuY29uc3QgQ09OTkVDVElPTl9USU1FT1VUICAgICA9IDMwMDAwO1xuY29uc3QgQ09OTkVDVElPTl9SRVRSWV9ERUxBWSA9IDMwMDtcbmNvbnN0IE1BWF9SRVNJWkVfUkVUUllfQ09VTlQgPSAyO1xuY29uc3QgSEVBREVSX1NFUEFSQVRPUiAgICAgICA9ICc6JztcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBNYXJpb25ldHRlQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3RvciAocG9ydCA9IDI4MjgsIHJ1bnRpbWVJbmZvLCBob3N0ID0gJzEyNy4wLjAuMScpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFja2V0TnVtYmVyID0gMTtcbiAgICAgICAgdGhpcy5ldmVudHMgICAgICAgICAgICAgID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnBvcnQgICAgICAgICAgICAgICAgPSBwb3J0O1xuICAgICAgICB0aGlzLmhvc3QgICAgICAgICAgICAgICAgPSBob3N0O1xuICAgICAgICB0aGlzLnNvY2tldCAgICAgICAgICAgICAgPSBuZXcgU29ja2V0KCk7XG4gICAgICAgIHRoaXMuYnVmZmVyICAgICAgICAgICAgICA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICAgICAgdGhpcy5nZXRQYWNrZXRQcm9taXNlICAgID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHRoaXMuc2VuZFBhY2tldFByb21pc2UgICA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIHRoaXMuX3J1bnRpbWVJbmZvICAgPSBydW50aW1lSW5mbztcbiAgICAgICAgdGhpcy5fd2luZG93SGFuZGxlcyA9IHt9O1xuXG4gICAgICAgIHRoaXMucHJvdG9jb2xJbmZvID0ge1xuICAgICAgICAgICAgYXBwbGljYXRpb25UeXBlOiAgICAnJyxcbiAgICAgICAgICAgIG1hcmlvbmV0dGVQcm90b2NvbDogJycsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uSW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGFjdGl2ZVdpbmRvd0lkICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bnRpbWVJbmZvLmFjdGl2ZVdpbmRvd0lkO1xuICAgIH1cblxuICAgIGFzeW5jIF9hdHRlbXB0VG9Db25uZWN0IChwb3J0LCBob3N0KSB7XG4gICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3QocG9ydCwgaG9zdCk7XG5cbiAgICAgICAgY29uc3QgY29ubmVjdGlvblByb21pc2UgPSBQcm9taXNlLnJhY2UoW1xuICAgICAgICAgICAgcHJvbWlzaWZ5RXZlbnQodGhpcy5zb2NrZXQsICdjb25uZWN0JyksXG4gICAgICAgICAgICBwcm9taXNpZnlFdmVudCh0aGlzLnNvY2tldCwgJ2Vycm9yJylcbiAgICAgICAgXSk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNvbm5lY3Rpb25Qcm9taXNlXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2Nvbm5lY3QnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsYXkoQ09OTkVDVElPTl9SRVRSWV9ERUxBWSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBfY29ubmVjdFNvY2tldCAocG9ydCwgaG9zdCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICBsZXQgY29ubmVjdGVkID0gYXdhaXQgdGhpcy5fYXR0ZW1wdFRvQ29ubmVjdChwb3J0LCBob3N0KTtcblxuICAgICAgICB3aGlsZSAoIWNvbm5lY3RlZCAmJiBEYXRlLm5vdygpIC0gY29ubmVjdGlvblN0YXJ0VGltZSA8IENPTk5FQ1RJT05fVElNRU9VVClcbiAgICAgICAgICAgIGNvbm5lY3RlZCA9IGF3YWl0IHRoaXMuX2F0dGVtcHRUb0Nvbm5lY3QocG9ydCwgaG9zdCk7XG5cbiAgICAgICAgaWYgKCFjb25uZWN0ZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjb25uZWN0Jyk7XG5cbiAgICAgICAgdGhpcy5zb2NrZXQub24oJ2RhdGEnLCBkYXRhID0+IHRoaXMuX2hhbmRsZU5ld0RhdGEoZGF0YSkpO1xuICAgIH1cblxuICAgIGFzeW5jIF93cml0ZVNvY2tldCAobWVzc2FnZSkge1xuICAgICAgICBpZiAoIXRoaXMuc29ja2V0LndyaXRlKG1lc3NhZ2UpKVxuICAgICAgICAgICAgYXdhaXQgcHJvbWlzaWZ5RXZlbnQodGhpcy5zb2NrZXQsICdkcmFpbicpO1xuICAgIH1cblxuICAgIF9oYW5kbGVOZXdEYXRhIChkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuYnVmZmVyLCBkYXRhXSk7XG5cbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdCgnbmV3LWRhdGEnKTtcbiAgICB9XG5cbiAgICBfZ2V0UGFja2V0ICgpIHtcbiAgICAgICAgdGhpcy5nZXRQYWNrZXRQcm9taXNlID0gdGhpcy5nZXRQYWNrZXRQcm9taXNlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGhlYWRlckVuZEluZGV4ID0gdGhpcy5idWZmZXIuaW5kZXhPZihIRUFERVJfU0VQQVJBVE9SKTtcblxuICAgICAgICAgICAgd2hpbGUgKGhlYWRlckVuZEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHByb21pc2lmeUV2ZW50KHRoaXMuZXZlbnRzLCAnbmV3LWRhdGEnKTtcblxuICAgICAgICAgICAgICAgIGhlYWRlckVuZEluZGV4ID0gdGhpcy5idWZmZXIuaW5kZXhPZihIRUFERVJfU0VQQVJBVE9SKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFja2V0ID0ge1xuICAgICAgICAgICAgICAgIGxlbmd0aDogTmFOLFxuICAgICAgICAgICAgICAgIGJvZHk6ICAgbnVsbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGFja2V0Lmxlbmd0aCA9IHBhcnNlSW50KHRoaXMuYnVmZmVyLnRvU3RyaW5nKCd1dGY4JywgMCwgaGVhZGVyRW5kSW5kZXgpLCAxMCkgfHwgMDtcblxuICAgICAgICAgICAgY29uc3QgYm9keVN0YXJ0SW5kZXggPSBoZWFkZXJFbmRJbmRleCArIEhFQURFUl9TRVBBUkFUT1IubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgYm9keUVuZEluZGV4ICAgPSBib2R5U3RhcnRJbmRleCArIHBhY2tldC5sZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChwYWNrZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuYnVmZmVyLmxlbmd0aCA8IGJvZHlFbmRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHJvbWlzaWZ5RXZlbnQodGhpcy5ldmVudHMsICduZXctZGF0YScpO1xuXG4gICAgICAgICAgICAgICAgcGFja2V0LmJvZHkgPSBKU09OLnBhcnNlKHRoaXMuYnVmZmVyLnRvU3RyaW5nKCd1dGY4JywgYm9keVN0YXJ0SW5kZXgsIGJvZHlFbmRJbmRleCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnNsaWNlKGJvZHlFbmRJbmRleCk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhY2tldFByb21pc2U7XG4gICAgfVxuXG4gICAgX3NlbmRQYWNrZXQgKHBheWxvYWQpIHtcbiAgICAgICAgdGhpcy5zZW5kUGFja2V0UHJvbWlzZSA9IHRoaXMuc2VuZFBhY2tldFByb21pc2UudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBib2R5ICAgICAgID0gWzAsIHRoaXMuY3VycmVudFBhY2tldE51bWJlcisrLCBwYXlsb2FkLmNvbW1hbmQsIHBheWxvYWQucGFyYW1ldGVyc107XG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlICAgID0gQnVmZmVyLmJ5dGVMZW5ndGgoc2VyaWFsaXplZCwgJ3V0ZjgnKSArIEhFQURFUl9TRVBBUkFUT1IgKyBzZXJpYWxpemVkO1xuXG4gICAgICAgICAgICB0aGlzLl93cml0ZVNvY2tldChtZXNzYWdlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFBhY2tldFByb21pc2U7XG4gICAgfVxuXG4gICAgX3Rocm93TWFyaW9uZXR0ZUVycm9yIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3IuZXJyb3J9JHtlcnJvci5tZXNzYWdlID8gJzogJyArIGVycm9yLm1lc3NhZ2UgOiAnJ31gKTtcbiAgICB9XG5cbiAgICBhc3luYyBfc3dpdGNoVG9XaW5kb3cgKHdpbmRvd0hhbmRsZSkge1xuICAgICAgICBhd2FpdCB0aGlzLl9nZXRSZXNwb25zZSh7XG4gICAgICAgICAgICBjb21tYW5kOiAgICBDT01NQU5EUy5zd2l0Y2hUb1dpbmRvdyxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHsgaGFuZGxlOiB3aW5kb3dIYW5kbGUgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBfZ2V0QWN0aXZlV2luZG93SGFuZGxlICgpIHtcbiAgICAgICAgY29uc3Qgd2luZG93SGFuZGxlcyA9IGF3YWl0IHRoaXMuX2dldFJlc3BvbnNlKHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IENPTU1BTkRTLmdldFdpbmRvd0hhbmRsZXNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGUgb2Ygd2luZG93SGFuZGxlcykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc3dpdGNoVG9XaW5kb3coaGFuZGxlKTtcblxuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLl9nZXRSZXNwb25zZSh7IGNvbW1hbmQ6IENPTU1BTkRTLmdldFRpdGxlIH0pO1xuXG4gICAgICAgICAgICBpZiAodGl0bGUudmFsdWUuaW5jbHVkZXModGhpcy5hY3RpdmVXaW5kb3dJZCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIF9lbnN1cmVBY3RpdmVXaW5kb3cgKCkge1xuICAgICAgICBsZXQgaGFuZGxlID0gdGhpcy5fd2luZG93SGFuZGxlc1t0aGlzLmFjdGl2ZVdpbmRvd0lkXTtcblxuICAgICAgICBpZiAoaGFuZGxlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zd2l0Y2hUb1dpbmRvdyhoYW5kbGUpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGUgPSBhd2FpdCB0aGlzLl9nZXRBY3RpdmVXaW5kb3dIYW5kbGUoKTtcblxuICAgICAgICBpZiAoaGFuZGxlKVxuICAgICAgICAgICAgdGhpcy5fd2luZG93SGFuZGxlc1t0aGlzLmFjdGl2ZVdpbmRvd0lkXSA9IGhhbmRsZTtcbiAgICB9XG5cbiAgICBhc3luYyBfcmVxdWVzdCAocGFja2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2Vuc3VyZUFjdGl2ZVdpbmRvdygpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRSZXNwb25zZShwYWNrZXQpO1xuICAgIH1cblxuICAgIGFzeW5jIF9nZXRSZXNwb25zZSAocGFja2V0KSB7XG4gICAgICAgIGNvbnN0IHBhY2tldE51bWJlciA9IHRoaXMuY3VycmVudFBhY2tldE51bWJlcjtcblxuICAgICAgICBhd2FpdCB0aGlzLl9zZW5kUGFja2V0KHBhY2tldCk7XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlUGFja2V0ID0gYXdhaXQgdGhpcy5fZ2V0UGFja2V0KCk7XG5cbiAgICAgICAgd2hpbGUgKCFyZXNwb25zZVBhY2tldC5ib2R5IHx8IHJlc3BvbnNlUGFja2V0LmJvZHlbMV0gIT09IHBhY2tldE51bWJlcilcbiAgICAgICAgICAgIHJlc3BvbnNlUGFja2V0ID0gYXdhaXQgdGhpcy5fZ2V0UGFja2V0KCk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlUGFja2V0LmJvZHlbMl0pXG4gICAgICAgICAgICB0aGlzLl90aHJvd01hcmlvbmV0dGVFcnJvcihyZXNwb25zZVBhY2tldC5ib2R5WzJdKTtcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VQYWNrZXQuYm9keVszXTtcbiAgICB9XG5cbiAgICBhc3luYyBfZ2V0U2NyZWVuc2hvdFJhd0RhdGEgKGZ1bGxQYWdlID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3Qoe1xuICAgICAgICAgICAgY29tbWFuZDogICAgQ09NTUFORFMudGFrZVNjcmVlbnNob3QsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgZnVsbDogICBmdWxsUGFnZSxcbiAgICAgICAgICAgICAgICBoYXNoOiAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHNjcm9sbDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgY29ubmVjdCAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3RTb2NrZXQodGhpcy5wb3J0LCB0aGlzLmhvc3QpO1xuXG4gICAgICAgIGNvbnN0IGluZm9QYWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRQYWNrZXQoKTtcblxuICAgICAgICB0aGlzLnByb3RvY29sSW5mbyA9IHtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uVHlwZTogICAgaW5mb1BhY2tldC5ib2R5LmFwcGxpY2F0aW9uVHlwZSxcbiAgICAgICAgICAgIG1hcmlvbmV0dGVQcm90b2NvbDogaW5mb1BhY2tldC5ib2R5Lm1hcmlvbmV0dGVQcm90b2NvbFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvbkluZm8gPSBhd2FpdCB0aGlzLl9nZXRSZXNwb25zZSh7IGNvbW1hbmQ6IENPTU1BTkRTLm5ld1Nlc3Npb24gfSk7XG4gICAgfVxuXG4gICAgZGlzcG9zZSAoKSB7XG4gICAgICAgIHRoaXMuc29ja2V0LmVuZCgpO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZXhlY3V0ZVNjcmlwdCAoY29kZSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdCh7XG4gICAgICAgICAgICBjb21tYW5kOiAgICBDT01NQU5EUy5leGVjdXRlU2NyaXB0LFxuICAgICAgICAgICAgcGFyYW1ldGVyczogeyBzY3JpcHQ6IGByZXR1cm4gKCR7Y29kZX0pKClgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0U2NyZWVuc2hvdERhdGEgKGZ1bGxQYWdlKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lRGF0YSA9IGF3YWl0IHRoaXMuX2dldFNjcmVlbnNob3RSYXdEYXRhKGZ1bGxQYWdlKTtcblxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oZnJhbWVEYXRhLnZhbHVlLCAnYmFzZTY0Jyk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0V2luZG93U2l6ZSAod2lkdGgsIGhlaWdodCkge1xuICAgICAgICBsZXQgeyB2YWx1ZTogcGFnZVJlY3QgfSA9IGF3YWl0IHRoaXMuZXhlY3V0ZVNjcmlwdChHRVRfV0lORE9XX0RJTUVOU0lPTlNfSU5GT19TQ1JJUFQpO1xuICAgICAgICBsZXQgYXR0ZW1wdENvdW50ZXIgICAgICA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGF0dGVtcHRDb3VudGVyKysgPCBNQVhfUkVTSVpFX1JFVFJZX0NPVU5UICYmIChwYWdlUmVjdC53aWR0aCAhPT0gd2lkdGggfHwgcGFnZVJlY3QuaGVpZ2h0ICE9PSBoZWlnaHQpKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UmVjdCA9IGF3YWl0IHRoaXMuX3JlcXVlc3QoeyBjb21tYW5kOiBDT01NQU5EUy5nZXRXaW5kb3dSZWN0IH0pO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBDT01NQU5EUy5zZXRXaW5kb3dSZWN0LFxuXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgICAgICB4OiAgICAgIGN1cnJlbnRSZWN0LngsXG4gICAgICAgICAgICAgICAgICAgIHk6ICAgICAgY3VycmVudFJlY3QueSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICB3aWR0aCArIChjdXJyZW50UmVjdC53aWR0aCAtIHBhZ2VSZWN0LndpZHRoKSxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgKyAoY3VycmVudFJlY3QuaGVpZ2h0IC0gcGFnZVJlY3QuaGVpZ2h0KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAoeyB2YWx1ZTogcGFnZVJlY3QgfSA9IGF3YWl0IHRoaXMuZXhlY3V0ZVNjcmlwdChHRVRfV0lORE9XX0RJTUVOU0lPTlNfSU5GT19TQ1JJUFQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHF1aXQgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLl9yZXF1ZXN0KHsgY29tbWFuZDogQ09NTUFORFMucXVpdCB9KTtcbiAgICB9XG59O1xuXG4iXX0=
|
|
@@ -1,19 +1,19 @@
|
|
|
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 endpoint_utils_1 = require("endpoint-utils");
|
|
7
|
-
const config_1 = __importDefault(require("./config"));
|
|
8
|
-
const create_temp_profile_1 = __importDefault(require("./create-temp-profile"));
|
|
9
|
-
async function default_1(configString) {
|
|
10
|
-
const config = config_1.default(configString);
|
|
11
|
-
const marionettePort = config.marionettePort || (!config.userProfile ? await endpoint_utils_1.getFreePort() : null);
|
|
12
|
-
const runtimeInfo = { config, marionettePort };
|
|
13
|
-
runtimeInfo.tempProfileDir = !config.userProfile ? await create_temp_profile_1.default(runtimeInfo) : null;
|
|
14
|
-
runtimeInfo.activeWindowId = null;
|
|
15
|
-
return runtimeInfo;
|
|
16
|
-
}
|
|
17
|
-
exports.default = default_1;
|
|
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 endpoint_utils_1 = require("endpoint-utils");
|
|
7
|
+
const config_1 = __importDefault(require("./config"));
|
|
8
|
+
const create_temp_profile_1 = __importDefault(require("./create-temp-profile"));
|
|
9
|
+
async function default_1(configString) {
|
|
10
|
+
const config = config_1.default(configString);
|
|
11
|
+
const marionettePort = config.marionettePort || (!config.userProfile ? await endpoint_utils_1.getFreePort() : null);
|
|
12
|
+
const runtimeInfo = { config, marionettePort };
|
|
13
|
+
runtimeInfo.tempProfileDir = !config.userProfile ? await create_temp_profile_1.default(runtimeInfo) : null;
|
|
14
|
+
runtimeInfo.activeWindowId = null;
|
|
15
|
+
return runtimeInfo;
|
|
16
|
+
}
|
|
17
|
+
exports.default = default_1;
|
|
18
18
|
module.exports = exports.default;
|
|
19
19
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Jyb3dzZXIvcHJvdmlkZXIvYnVpbHQtaW4vZGVkaWNhdGVkL2ZpcmVmb3gvcnVudGltZS1pbmZvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbURBQTZDO0FBQzdDLHNEQUFpQztBQUNqQyxnRkFBc0Q7QUFHdkMsS0FBSyxvQkFBVyxZQUFZO0lBQ3ZDLE1BQU0sTUFBTSxHQUFXLGdCQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0MsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSw0QkFBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25HLE1BQU0sV0FBVyxHQUFNLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBRWxELFdBQVcsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0YsV0FBVyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFFbEMsT0FBTyxXQUFXLENBQUM7QUFDdkIsQ0FBQztBQVRELDRCQVNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RnJlZVBvcnQgfSBmcm9tICdlbmRwb2ludC11dGlscyc7XG5pbXBvcnQgZ2V0Q29uZmlnIGZyb20gJy4vY29uZmlnJztcbmltcG9ydCBjcmVhdGVUZW1wUHJvZmlsZSBmcm9tICcuL2NyZWF0ZS10ZW1wLXByb2ZpbGUnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIChjb25maWdTdHJpbmcpIHtcbiAgICBjb25zdCBjb25maWcgICAgICAgICA9IGdldENvbmZpZyhjb25maWdTdHJpbmcpO1xuICAgIGNvbnN0IG1hcmlvbmV0dGVQb3J0ID0gY29uZmlnLm1hcmlvbmV0dGVQb3J0IHx8ICghY29uZmlnLnVzZXJQcm9maWxlID8gYXdhaXQgZ2V0RnJlZVBvcnQoKSA6IG51bGwpO1xuICAgIGNvbnN0IHJ1bnRpbWVJbmZvICAgID0geyBjb25maWcsIG1hcmlvbmV0dGVQb3J0IH07XG5cbiAgICBydW50aW1lSW5mby50ZW1wUHJvZmlsZURpciA9ICFjb25maWcudXNlclByb2ZpbGUgPyBhd2FpdCBjcmVhdGVUZW1wUHJvZmlsZShydW50aW1lSW5mbykgOiBudWxsO1xuICAgIHJ1bnRpbWVJbmZvLmFjdGl2ZVdpbmRvd0lkID0gbnVsbDtcblxuICAgIHJldHVybiBydW50aW1lSW5mbztcbn1cbiJdfQ==
|
|
@@ -1,23 +1,23 @@
|
|
|
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 path_1 = __importDefault(require("./path"));
|
|
7
|
-
const locally_installed_1 = __importDefault(require("./locally-installed"));
|
|
8
|
-
const remote_1 = __importDefault(require("./remote"));
|
|
9
|
-
const firefox_1 = __importDefault(require("./dedicated/firefox"));
|
|
10
|
-
const chrome_1 = __importDefault(require("./dedicated/chrome"));
|
|
11
|
-
const edge_1 = __importDefault(require("./dedicated/edge"));
|
|
12
|
-
exports.default = Object.assign({
|
|
13
|
-
'locally-installed': locally_installed_1.default,
|
|
14
|
-
'path': path_1.default,
|
|
15
|
-
'remote': remote_1.default,
|
|
16
|
-
'firefox': firefox_1.default,
|
|
17
|
-
'chrome': chrome_1.default,
|
|
18
|
-
'chromium': chrome_1.default,
|
|
19
|
-
'chrome-canary': chrome_1.default,
|
|
20
|
-
'edge': edge_1.default
|
|
21
|
-
});
|
|
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 path_1 = __importDefault(require("./path"));
|
|
7
|
+
const locally_installed_1 = __importDefault(require("./locally-installed"));
|
|
8
|
+
const remote_1 = __importDefault(require("./remote"));
|
|
9
|
+
const firefox_1 = __importDefault(require("./dedicated/firefox"));
|
|
10
|
+
const chrome_1 = __importDefault(require("./dedicated/chrome"));
|
|
11
|
+
const edge_1 = __importDefault(require("./dedicated/edge"));
|
|
12
|
+
exports.default = Object.assign({
|
|
13
|
+
'locally-installed': locally_installed_1.default,
|
|
14
|
+
'path': path_1.default,
|
|
15
|
+
'remote': remote_1.default,
|
|
16
|
+
'firefox': firefox_1.default,
|
|
17
|
+
'chrome': chrome_1.default,
|
|
18
|
+
'chromium': chrome_1.default,
|
|
19
|
+
'chrome-canary': chrome_1.default,
|
|
20
|
+
'edge': edge_1.default
|
|
21
|
+
});
|
|
22
22
|
module.exports = exports.default;
|
|
23
23
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGtEQUF5QztBQUN6Qyw0RUFBa0U7QUFDbEUsc0RBQTZDO0FBQzdDLGtFQUFrRDtBQUNsRCxnRUFBZ0Q7QUFDaEQsNERBQTRDO0FBRTVDLGtCQUFlLE1BQU0sQ0FBQyxNQUFNLENBQ3hCO0lBQ0ksbUJBQW1CLEVBQUUsMkJBQStCO0lBQ3BELE1BQU0sRUFBZSxjQUFtQjtJQUN4QyxRQUFRLEVBQWEsZ0JBQXFCO0lBQzFDLFNBQVMsRUFBWSxpQkFBZTtJQUNwQyxRQUFRLEVBQWEsZ0JBQWM7SUFDbkMsVUFBVSxFQUFXLGdCQUFjO0lBQ25DLGVBQWUsRUFBTSxnQkFBYztJQUNuQyxNQUFNLEVBQWUsY0FBWTtDQUNwQyxDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aEJyb3dzZXJQcm92aWRlciBmcm9tICcuL3BhdGgnO1xuaW1wb3J0IGxvY2FsbHlJbnN0YWxsZWRCcm93c2VyUHJvdmlkZXIgZnJvbSAnLi9sb2NhbGx5LWluc3RhbGxlZCc7XG5pbXBvcnQgcmVtb3RlQnJvd3NlclByb3ZpZGVyIGZyb20gJy4vcmVtb3RlJztcbmltcG9ydCBmaXJlZm94UHJvdmlkZXIgZnJvbSAnLi9kZWRpY2F0ZWQvZmlyZWZveCc7XG5pbXBvcnQgY2hyb21lUHJvdmlkZXIgZnJvbSAnLi9kZWRpY2F0ZWQvY2hyb21lJztcbmltcG9ydCBlZGdlUHJvdmlkZXIgZnJvbSAnLi9kZWRpY2F0ZWQvZWRnZSc7XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgICAnbG9jYWxseS1pbnN0YWxsZWQnOiBsb2NhbGx5SW5zdGFsbGVkQnJvd3NlclByb3ZpZGVyLFxuICAgICAgICAncGF0aCc6ICAgICAgICAgICAgICBwYXRoQnJvd3NlclByb3ZpZGVyLFxuICAgICAgICAncmVtb3RlJzogICAgICAgICAgICByZW1vdGVCcm93c2VyUHJvdmlkZXIsXG4gICAgICAgICdmaXJlZm94JzogICAgICAgICAgIGZpcmVmb3hQcm92aWRlcixcbiAgICAgICAgJ2Nocm9tZSc6ICAgICAgICAgICAgY2hyb21lUHJvdmlkZXIsXG4gICAgICAgICdjaHJvbWl1bSc6ICAgICAgICAgIGNocm9tZVByb3ZpZGVyLFxuICAgICAgICAnY2hyb21lLWNhbmFyeSc6ICAgICBjaHJvbWVQcm92aWRlcixcbiAgICAgICAgJ2VkZ2UnOiAgICAgICAgICAgICAgZWRnZVByb3ZpZGVyXG4gICAgfVxuKTtcbiJdfQ==
|
|
@@ -1,32 +1,32 @@
|
|
|
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 testcafe_browser_tools_1 = __importDefault(require("testcafe-browser-tools"));
|
|
7
|
-
exports.default = {
|
|
8
|
-
isMultiBrowser: true,
|
|
9
|
-
async openBrowser(browserId, pageUrl, browserName) {
|
|
10
|
-
const args = browserName.split(' ');
|
|
11
|
-
const alias = args.shift();
|
|
12
|
-
const browserInfo = await testcafe_browser_tools_1.default.getBrowserInfo(alias);
|
|
13
|
-
const openParameters = Object.assign({}, browserInfo);
|
|
14
|
-
if (args.length)
|
|
15
|
-
openParameters.cmd = args.join(' ') + (openParameters.cmd ? ' ' + openParameters.cmd : '');
|
|
16
|
-
await testcafe_browser_tools_1.default.open(openParameters, pageUrl);
|
|
17
|
-
},
|
|
18
|
-
async isLocalBrowser() {
|
|
19
|
-
return true;
|
|
20
|
-
},
|
|
21
|
-
async getBrowserList() {
|
|
22
|
-
const installations = await testcafe_browser_tools_1.default.getInstallations();
|
|
23
|
-
return Object.keys(installations);
|
|
24
|
-
},
|
|
25
|
-
async isValidBrowserName(browserName) {
|
|
26
|
-
const browserNames = await this.getBrowserList();
|
|
27
|
-
browserName = browserName.toLowerCase().split(' ')[0];
|
|
28
|
-
return browserNames.indexOf(browserName) > -1;
|
|
29
|
-
}
|
|
30
|
-
};
|
|
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 testcafe_browser_tools_1 = __importDefault(require("testcafe-browser-tools"));
|
|
7
|
+
exports.default = {
|
|
8
|
+
isMultiBrowser: true,
|
|
9
|
+
async openBrowser(browserId, pageUrl, browserName) {
|
|
10
|
+
const args = browserName.split(' ');
|
|
11
|
+
const alias = args.shift();
|
|
12
|
+
const browserInfo = await testcafe_browser_tools_1.default.getBrowserInfo(alias);
|
|
13
|
+
const openParameters = Object.assign({}, browserInfo);
|
|
14
|
+
if (args.length)
|
|
15
|
+
openParameters.cmd = args.join(' ') + (openParameters.cmd ? ' ' + openParameters.cmd : '');
|
|
16
|
+
await testcafe_browser_tools_1.default.open(openParameters, pageUrl);
|
|
17
|
+
},
|
|
18
|
+
async isLocalBrowser() {
|
|
19
|
+
return true;
|
|
20
|
+
},
|
|
21
|
+
async getBrowserList() {
|
|
22
|
+
const installations = await testcafe_browser_tools_1.default.getInstallations();
|
|
23
|
+
return Object.keys(installations);
|
|
24
|
+
},
|
|
25
|
+
async isValidBrowserName(browserName) {
|
|
26
|
+
const browserNames = await this.getBrowserList();
|
|
27
|
+
browserName = browserName.toLowerCase().split(' ')[0];
|
|
28
|
+
return browserNames.indexOf(browserName) > -1;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
31
|
module.exports = exports.default;
|
|
32
32
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxseS1pbnN0YWxsZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9sb2NhbGx5LWluc3RhbGxlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9GQUFrRDtBQUVsRCxrQkFBZTtJQUNYLGNBQWMsRUFBRSxJQUFJO0lBRXBCLEtBQUssQ0FBQyxXQUFXLENBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxXQUFXO1FBQzlDLE1BQU0sSUFBSSxHQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTNCLE1BQU0sV0FBVyxHQUFNLE1BQU0sZ0NBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFdEQsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUNYLGNBQWMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUvRixNQUFNLGdDQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2hCLE1BQU0sYUFBYSxHQUFHLE1BQU0sZ0NBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFFLFdBQVc7UUFDakMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFakQsV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEQsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJyb3dzZXJUb29scyBmcm9tICd0ZXN0Y2FmZS1icm93c2VyLXRvb2xzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGlzTXVsdGlCcm93c2VyOiB0cnVlLFxuXG4gICAgYXN5bmMgb3BlbkJyb3dzZXIgKGJyb3dzZXJJZCwgcGFnZVVybCwgYnJvd3Nlck5hbWUpIHtcbiAgICAgICAgY29uc3QgYXJncyAgPSBicm93c2VyTmFtZS5zcGxpdCgnICcpO1xuICAgICAgICBjb25zdCBhbGlhcyA9IGFyZ3Muc2hpZnQoKTtcblxuICAgICAgICBjb25zdCBicm93c2VySW5mbyAgICA9IGF3YWl0IGJyb3dzZXJUb29scy5nZXRCcm93c2VySW5mbyhhbGlhcyk7XG4gICAgICAgIGNvbnN0IG9wZW5QYXJhbWV0ZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgYnJvd3NlckluZm8pO1xuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aClcbiAgICAgICAgICAgIG9wZW5QYXJhbWV0ZXJzLmNtZCA9IGFyZ3Muam9pbignICcpICsgKG9wZW5QYXJhbWV0ZXJzLmNtZCA/ICcgJyArIG9wZW5QYXJhbWV0ZXJzLmNtZCA6ICcnKTtcblxuICAgICAgICBhd2FpdCBicm93c2VyVG9vbHMub3BlbihvcGVuUGFyYW1ldGVycywgcGFnZVVybCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGlzTG9jYWxCcm93c2VyICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJyb3dzZXJMaXN0ICgpIHtcbiAgICAgICAgY29uc3QgaW5zdGFsbGF0aW9ucyA9IGF3YWl0IGJyb3dzZXJUb29scy5nZXRJbnN0YWxsYXRpb25zKCk7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGluc3RhbGxhdGlvbnMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBpc1ZhbGlkQnJvd3Nlck5hbWUgKGJyb3dzZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJOYW1lcyA9IGF3YWl0IHRoaXMuZ2V0QnJvd3Nlckxpc3QoKTtcblxuICAgICAgICBicm93c2VyTmFtZSA9IGJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKVswXTtcblxuICAgICAgICByZXR1cm4gYnJvd3Nlck5hbWVzLmluZGV4T2YoYnJvd3Nlck5hbWUpID4gLTE7XG4gICAgfVxufTtcbiJdfQ==
|