testcafe 2.3.1 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +150 -0
- package/LICENSE +1 -1
- package/README.md +40 -46
- package/bin/testcafe-with-v8-flag-filter.js +10 -16
- package/lib/api/exportable-lib/index.js +1 -11
- package/lib/api/structure/test.js +4 -11
- package/lib/api/test-controller/execution-context.js +4 -2
- package/lib/api/test-controller/index.js +8 -10
- package/lib/api/test-run-tracker.js +1 -1
- package/lib/assertions/executor.js +2 -11
- package/lib/browser/connection/gateway/index.js +272 -0
- package/lib/browser/connection/gateway/status.js +10 -0
- package/lib/browser/connection/index.js +60 -47
- package/lib/browser/connection/service-routes.js +4 -2
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +3 -2
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +48 -23
- package/lib/browser/provider/built-in/dedicated/edge/index.js +4 -1
- package/lib/browser/provider/index.js +13 -4
- package/lib/browser/provider/plugin-host.js +7 -1
- package/lib/cli/argument-parser/index.js +10 -16
- package/lib/cli/cli.js +4 -13
- package/lib/cli/remotes-wizard.js +2 -1
- package/lib/cli/utils/should-move-option-to-end.js +17 -0
- package/lib/client/automation/deps/hammerhead.js +24 -0
- package/lib/client/automation/deps/testcafe-core.js +24 -0
- package/lib/client/automation/index.js +567 -187
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/automation/playback/press/get-key-info.js +44 -0
- package/lib/client/automation/playback/press/utils.js +142 -0
- package/lib/client/automation/utils/get-key-code.js +15 -0
- package/lib/client/automation/utils/get-key-identifier.js +14 -0
- package/lib/client/automation/utils/is-letter.js +7 -0
- package/lib/client/automation/utils/key-identifier-maps.js +93 -0
- package/lib/client/browser/idle-page/index.html.mustache +2 -2
- package/lib/client/browser/idle-page/index.js +24 -11
- package/lib/client/core/index.js +67 -13
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/core/utils/array.js +77 -0
- package/lib/client/core/utils/dom.js +459 -0
- package/lib/client/core/utils/send-request-to-frame.js +22 -0
- package/lib/client/core/utils/style.js +102 -0
- package/lib/client/core/utils/values/boundary-values.js +41 -0
- package/lib/client/driver/index.js +270 -242
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/test-run/iframe.js.mustache +6 -6
- package/lib/client/test-run/index.js.mustache +37 -33
- package/lib/client/ui/index.js +3238 -54
- package/lib/client/ui/index.min.js +1 -1
- package/lib/client/ui/sprite.svg +15 -0
- package/lib/client/ui/styles.css +184 -41
- package/lib/compiler/babel/load-libs.js +6 -6
- package/lib/compiler/compilers.js +7 -7
- package/lib/compiler/index.js +6 -6
- package/lib/compiler/interfaces.js +1 -1
- package/lib/compiler/test-file/add-export-api.js +3 -3
- package/lib/compiler/test-file/api-based.js +8 -37
- package/lib/compiler/test-file/formats/es-next/compiler.js +5 -5
- package/lib/compiler/test-file/formats/typescript/compiler.js +9 -9
- package/lib/compiler/test-file/get-exportable-lib-path.js +3 -3
- package/lib/configuration/configuration-base.js +9 -6
- package/lib/configuration/default-values.js +3 -3
- package/lib/configuration/formats.js +9 -5
- package/lib/configuration/interfaces.js +1 -1
- package/lib/configuration/option-names.js +3 -4
- package/lib/configuration/run-option-names.js +2 -2
- package/lib/configuration/testcafe-configuration.js +41 -24
- package/lib/configuration/types.js +1 -1
- package/lib/configuration/utils.js +32 -0
- package/lib/custom-client-scripts/client-script.js +2 -2
- package/lib/custom-client-scripts/get-code.js +3 -3
- package/lib/custom-client-scripts/routing.js +10 -12
- package/lib/errors/runtime/templates.js +3 -2
- package/lib/errors/test-run/templates.js +4 -1
- package/lib/errors/types.js +3 -1
- package/lib/index.js +6 -31
- package/lib/live/bootstrapper.js +3 -3
- package/lib/live/test-runner.js +9 -7
- package/lib/native-automation/add-custom-debug-formatters.js +23 -0
- package/lib/native-automation/api-base.js +27 -0
- package/lib/native-automation/client/event-descriptor.js +118 -0
- package/lib/native-automation/client/input.js +46 -0
- package/lib/native-automation/client/key-press/utils.js +31 -0
- package/lib/native-automation/client/types.js +11 -0
- package/lib/native-automation/client/utils.js +54 -0
- package/lib/native-automation/cookie-provider.js +115 -0
- package/lib/native-automation/empty-page-markup.js +11 -0
- package/lib/native-automation/error-route.js +7 -0
- package/lib/native-automation/errors.js +20 -0
- package/lib/native-automation/index.js +53 -0
- package/lib/native-automation/request-hooks/event-factory/frame-navigated-event-based.js +40 -0
- package/lib/native-automation/request-hooks/event-factory/request-paused-event-based.js +94 -0
- package/lib/native-automation/request-hooks/event-provider.js +55 -0
- package/lib/native-automation/request-hooks/pipeline-context.js +11 -0
- package/lib/{proxyless → native-automation}/request-pipeline/constants.js +1 -1
- package/lib/native-automation/request-pipeline/context-info.js +58 -0
- package/lib/native-automation/request-pipeline/index.js +329 -0
- package/lib/native-automation/request-pipeline/resendAuthRequest.js +23 -0
- package/lib/native-automation/request-pipeline/safe-api.js +66 -0
- package/lib/native-automation/request-pipeline/special-handlers.js +76 -0
- package/lib/native-automation/request-pipeline/test-run-bridge.js +45 -0
- package/lib/native-automation/resource-injector.js +175 -0
- package/lib/native-automation/session-storage/index.js +43 -0
- package/lib/native-automation/storages-provider.js +17 -0
- package/lib/native-automation/types.js +12 -0
- package/lib/native-automation/utils/cdp.js +71 -0
- package/lib/native-automation/utils/convert.js +11 -0
- package/lib/native-automation/utils/get-active-client.js +8 -0
- package/lib/native-automation/utils/headers.js +30 -0
- package/lib/native-automation/utils/string.js +32 -0
- package/lib/reporter/index.js +52 -4
- package/lib/reporter/interfaces.js +1 -1
- package/lib/reporter/plugin-host.js +44 -4
- package/lib/reporter/plugin-methods.js +2 -1
- package/lib/reporter/report-data-log.js +25 -0
- package/lib/role/role.js +4 -39
- package/lib/runner/bootstrapper.js +40 -15
- package/lib/runner/browser-job.js +4 -5
- package/lib/runner/fixture-hook-controller.js +1 -7
- package/lib/runner/index.js +87 -94
- package/lib/runner/interfaces.js +1 -1
- package/lib/runner/task/index.js +2 -32
- package/lib/runner/test-run-controller.js +46 -4
- package/lib/shared/errors/index.js +8 -2
- package/lib/shared/utils/is-file-protocol.js +2 -2
- package/lib/test-run/bookmark.js +5 -23
- package/lib/test-run/commands/actions.js +16 -4
- package/lib/test-run/commands/service.js +2 -3
- package/lib/test-run/commands/type.js +2 -1
- package/lib/test-run/commands/utils.js +4 -2
- package/lib/test-run/cookies/base.js +4 -1
- package/lib/test-run/cookies/factory.js +4 -4
- package/lib/test-run/cookies/provider.js +9 -2
- package/lib/test-run/execute-js-expression/index.js +4 -2
- package/lib/test-run/index.js +35 -151
- package/lib/test-run/request/create-request-options.js +37 -24
- package/lib/test-run/request/send.js +2 -3
- package/lib/test-run/role-provider.js +5 -5
- package/lib/test-run/session-controller.js +5 -5
- package/lib/test-run/storages/factory.js +4 -4
- package/lib/testcafe.js +17 -18
- package/lib/utils/check-is-vm.js +58 -0
- package/lib/utils/debug-loggers.js +9 -7
- package/lib/utils/get-browser.js +5 -2
- package/lib/utils/get-options/boolean-or-object-option.js +18 -0
- package/lib/utils/get-options/quarantine.js +10 -13
- package/lib/utils/get-options/skip-js-errors.js +12 -16
- package/lib/utils/parse-user-agent.js +20 -13
- package/lib/utils/string.js +1 -1
- package/package.json +14 -11
- package/ts-defs/index.d.ts +12 -2
- package/ts-defs/selectors.d.ts +8 -1
- package/ts-defs/testcafe-scripts.d.ts +8 -1
- package/lib/browser/connection/gateway.js +0 -205
- package/lib/compiler/test-file/test-file-temp-variable-name.js +0 -6
- package/lib/dashboard/config-storage.js +0 -26
- package/lib/dashboard/connector.js +0 -84
- package/lib/dashboard/documentation-url.js +0 -6
- package/lib/dashboard/formatting.js +0 -26
- package/lib/dashboard/get-dashboard-url.js +0 -10
- package/lib/dashboard/get-default-project-link.js +0 -23
- package/lib/dashboard/get-env-options.js +0 -26
- package/lib/dashboard/index.js +0 -145
- package/lib/dashboard/interfaces.js +0 -3
- package/lib/dashboard/messages.js +0 -21
- package/lib/proxyless/add-custom-debug-formatters.js +0 -22
- package/lib/proxyless/api-base.js +0 -25
- package/lib/proxyless/client/event-simulator.js +0 -40
- package/lib/proxyless/client/types.js +0 -11
- package/lib/proxyless/client/utils.js +0 -24
- package/lib/proxyless/cookie-provider.js +0 -87
- package/lib/proxyless/default-setup-options.js +0 -9
- package/lib/proxyless/empty-page-markup.js +0 -11
- package/lib/proxyless/error-route.js +0 -7
- package/lib/proxyless/index.js +0 -53
- package/lib/proxyless/request-hooks/event-factory/frame-navigated-event-based.js +0 -40
- package/lib/proxyless/request-hooks/event-factory/request-paused-event-based.js +0 -95
- package/lib/proxyless/request-hooks/event-provider.js +0 -52
- package/lib/proxyless/request-hooks/pipeline-context.js +0 -11
- package/lib/proxyless/request-pipeline/context-info.js +0 -55
- package/lib/proxyless/request-pipeline/index.js +0 -230
- package/lib/proxyless/request-pipeline/resendAuthRequest.js +0 -23
- package/lib/proxyless/request-pipeline/safe-api.js +0 -62
- package/lib/proxyless/request-pipeline/special-handlers.js +0 -73
- package/lib/proxyless/request-pipeline/test-run-bridge.js +0 -45
- package/lib/proxyless/resource-injector.js +0 -162
- package/lib/proxyless/session-storage/index.js +0 -39
- package/lib/proxyless/storages-provider.js +0 -17
- package/lib/proxyless/types.js +0 -10
- package/lib/proxyless/utils/cdp.js +0 -66
- package/lib/proxyless/utils/get-active-client.js +0 -8
- package/lib/proxyless/utils/headers.js +0 -30
- package/lib/proxyless/utils/string.js +0 -32
- package/lib/services/compiler/esm-runtime-holder-name.js +0 -6
- package/lib/services/compiler/host.js +0 -370
- package/lib/services/compiler/interfaces.js +0 -3
- package/lib/services/compiler/io.js +0 -10
- package/lib/services/compiler/protocol.js +0 -17
- package/lib/services/compiler/service-loader.js +0 -18
- package/lib/services/compiler/service.js +0 -361
- package/lib/services/compiler/test-run-proxy.js +0 -156
- package/lib/services/interfaces.js +0 -3
- package/lib/services/process-title.js +0 -10
- package/lib/services/serialization/prepare-options.js +0 -23
- package/lib/services/serialization/replicator/create-replicator.js +0 -58
- package/lib/services/serialization/replicator/interfaces.js +0 -3
- package/lib/services/serialization/replicator/transforms/base-transform.js +0 -16
- package/lib/services/serialization/replicator/transforms/browser-console-messages-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +0 -24
- package/lib/services/serialization/replicator/transforms/command-base-trasform/assertion-command-constructors.js +0 -28
- package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +0 -66
- package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +0 -49
- package/lib/services/serialization/replicator/transforms/command-base-trasform/types.js +0 -3
- package/lib/services/serialization/replicator/transforms/configure-response-event-option-transform.js +0 -21
- package/lib/services/serialization/replicator/transforms/custom-error-transform.js +0 -29
- package/lib/services/serialization/replicator/transforms/function-marker-transform/index.js +0 -21
- package/lib/services/serialization/replicator/transforms/function-marker-transform/marker.js +0 -9
- package/lib/services/serialization/replicator/transforms/promise-marker-transform/index.js +0 -21
- package/lib/services/serialization/replicator/transforms/promise-marker-transform/marker.js +0 -9
- package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +0 -22
- package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/index.js +0 -22
- package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/marker.js +0 -6
- package/lib/services/serialization/replicator/transforms/request-filter-rule-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/request-hook-event-data-transform.js +0 -41
- package/lib/services/serialization/replicator/transforms/response-mock-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/role-transform.js +0 -21
- package/lib/services/serialization/replicator/transforms/testcafe-error-list-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/url-transform.js +0 -23
- package/lib/services/serialization/test-structure.js +0 -91
- package/lib/services/utils/ipc/interfaces.js +0 -29
- package/lib/services/utils/ipc/io.js +0 -109
- package/lib/services/utils/ipc/message.js +0 -84
- package/lib/services/utils/ipc/packet.js +0 -57
- package/lib/services/utils/ipc/proxy.js +0 -94
- package/lib/services/utils/ipc/transport.js +0 -65
- package/lib/services/utils/method-should-not-be-called-error.js +0 -10
|
@@ -0,0 +1,44 @@
|
|
|
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 is_letter_1 = __importDefault(require("../../utils/is-letter"));
|
|
7
|
+
// @ts-ignore
|
|
8
|
+
const testcafe_core_1 = require("../../deps/testcafe-core");
|
|
9
|
+
const get_key_identifier_1 = __importDefault(require("../../utils/get-key-identifier"));
|
|
10
|
+
const get_key_code_1 = __importDefault(require("../../utils/get-key-code"));
|
|
11
|
+
function isNewLineKey(key) {
|
|
12
|
+
return testcafe_core_1.KEY_MAPS.newLineKeys.indexOf(key) > -1;
|
|
13
|
+
}
|
|
14
|
+
function default_1(key, eventKeyProperty) {
|
|
15
|
+
const sanitizedKey = (0, testcafe_core_1.getSanitizedKey)(key);
|
|
16
|
+
const isChar = key.length === 1 || key === 'space';
|
|
17
|
+
const isNewLine = isNewLineKey(key);
|
|
18
|
+
const modifierKeyCode = testcafe_core_1.KEY_MAPS.modifiers[sanitizedKey];
|
|
19
|
+
const specialKeyCode = testcafe_core_1.KEY_MAPS.specialKeys[sanitizedKey];
|
|
20
|
+
eventKeyProperty = eventKeyProperty || key;
|
|
21
|
+
return {
|
|
22
|
+
sanitizedKey,
|
|
23
|
+
isChar,
|
|
24
|
+
modifierKeyCode,
|
|
25
|
+
specialKeyCode,
|
|
26
|
+
isNewLine,
|
|
27
|
+
isLetter: (0, is_letter_1.default)(key),
|
|
28
|
+
keyIdentifierProperty: (0, get_key_identifier_1.default)(eventKeyProperty),
|
|
29
|
+
keyProperty: testcafe_core_1.KEY_MAPS.keyProperty[eventKeyProperty] || eventKeyProperty,
|
|
30
|
+
keyCode: getResultKeyCode(key, isChar, sanitizedKey, modifierKeyCode, specialKeyCode),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
exports.default = default_1;
|
|
34
|
+
function getResultKeyCode(key, isChar, sanitizedKey, modifierKeyCode, specialKeyCode) {
|
|
35
|
+
let keyCode = null;
|
|
36
|
+
if (isChar && key !== 'space')
|
|
37
|
+
keyCode = (0, get_key_code_1.default)(sanitizedKey);
|
|
38
|
+
else if (modifierKeyCode)
|
|
39
|
+
keyCode = modifierKeyCode;
|
|
40
|
+
else if (specialKeyCode)
|
|
41
|
+
keyCode = specialKeyCode;
|
|
42
|
+
return keyCode;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWtleS1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hdXRvbWF0aW9uL3BsYXliYWNrL3ByZXNzL2dldC1rZXktaW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNFQUFnRDtBQUNoRCxhQUFhO0FBQ2IsNERBQXFFO0FBQ3JFLHdGQUE4RDtBQUM5RCw0RUFBa0Q7QUFjbEQsU0FBUyxZQUFZLENBQUUsR0FBVztJQUM5QixPQUFPLHdCQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsbUJBQXlCLEdBQVcsRUFBRSxnQkFBeUI7SUFDM0QsTUFBTSxZQUFZLEdBQU0sSUFBQSwrQkFBZSxFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sTUFBTSxHQUFZLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxPQUFPLENBQUM7SUFDNUQsTUFBTSxTQUFTLEdBQVMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sZUFBZSxHQUFHLHdCQUFRLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pELE1BQU0sY0FBYyxHQUFJLHdCQUFRLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTNELGdCQUFnQixHQUFHLGdCQUFnQixJQUFJLEdBQUcsQ0FBQztJQUUzQyxPQUFPO1FBQ0gsWUFBWTtRQUNaLE1BQU07UUFDTixlQUFlO1FBQ2YsY0FBYztRQUNkLFNBQVM7UUFDVCxRQUFRLEVBQWUsSUFBQSxtQkFBVyxFQUFDLEdBQUcsQ0FBQztRQUN2QyxxQkFBcUIsRUFBRSxJQUFBLDRCQUFnQixFQUFDLGdCQUFnQixDQUFDO1FBQ3pELFdBQVcsRUFBWSx3QkFBUSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLGdCQUFnQjtRQUNqRixPQUFPLEVBQWdCLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUM7S0FDdEcsQ0FBQztBQUNOLENBQUM7QUFwQkQsNEJBb0JDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBRSxHQUFXLEVBQUUsTUFBZSxFQUFFLFlBQW9CLEVBQUUsZUFBdUIsRUFBRSxjQUFzQjtJQUMxSCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFFbkIsSUFBSSxNQUFNLElBQUksR0FBRyxLQUFLLE9BQU87UUFDekIsT0FBTyxHQUFHLElBQUEsc0JBQVUsRUFBQyxZQUFZLENBQUMsQ0FBQztTQUNsQyxJQUFJLGVBQWU7UUFDcEIsT0FBTyxHQUFHLGVBQWUsQ0FBQztTQUN6QixJQUFJLGNBQWM7UUFDbkIsT0FBTyxHQUFHLGNBQWMsQ0FBQztJQUU3QixPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzTGV0dGVyS2V5IGZyb20gJy4uLy4uL3V0aWxzL2lzLWxldHRlcic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBnZXRTYW5pdGl6ZWRLZXksIEtFWV9NQVBTIH0gZnJvbSAnLi4vLi4vZGVwcy90ZXN0Y2FmZS1jb3JlJztcbmltcG9ydCBnZXRLZXlJZGVudGlmaWVyIGZyb20gJy4uLy4uL3V0aWxzL2dldC1rZXktaWRlbnRpZmllcic7XG5pbXBvcnQgZ2V0S2V5Q29kZSBmcm9tICcuLi8uLi91dGlscy9nZXQta2V5LWNvZGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEtleUluZm8ge1xuICAgIHNhbml0aXplZEtleTogc3RyaW5nO1xuICAgIGlzQ2hhcjogYm9vbGVhbjtcbiAgICBtb2RpZmllcktleUNvZGU6IHN0cmluZztcbiAgICBzcGVjaWFsS2V5Q29kZTogc3RyaW5nO1xuICAgIGlzTGV0dGVyOiBib29sZWFuO1xuICAgIGlzTmV3TGluZTogYm9vbGVhbjtcbiAgICBrZXlJZGVudGlmaWVyUHJvcGVydHk6IHN0cmluZztcbiAgICBrZXlQcm9wZXJ0eTogc3RyaW5nO1xuICAgIGtleUNvZGU6IHN0cmluZyB8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTmV3TGluZUtleSAoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gS0VZX01BUFMubmV3TGluZUtleXMuaW5kZXhPZihrZXkpID4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChrZXk6IHN0cmluZywgZXZlbnRLZXlQcm9wZXJ0eT86IHN0cmluZyk6IEtleUluZm8ge1xuICAgIGNvbnN0IHNhbml0aXplZEtleSAgICA9IGdldFNhbml0aXplZEtleShrZXkpO1xuICAgIGNvbnN0IGlzQ2hhciAgICAgICAgICA9IGtleS5sZW5ndGggPT09IDEgfHwga2V5ID09PSAnc3BhY2UnO1xuICAgIGNvbnN0IGlzTmV3TGluZSAgICAgICA9IGlzTmV3TGluZUtleShrZXkpO1xuICAgIGNvbnN0IG1vZGlmaWVyS2V5Q29kZSA9IEtFWV9NQVBTLm1vZGlmaWVyc1tzYW5pdGl6ZWRLZXldO1xuICAgIGNvbnN0IHNwZWNpYWxLZXlDb2RlICA9IEtFWV9NQVBTLnNwZWNpYWxLZXlzW3Nhbml0aXplZEtleV07XG5cbiAgICBldmVudEtleVByb3BlcnR5ID0gZXZlbnRLZXlQcm9wZXJ0eSB8fCBrZXk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBzYW5pdGl6ZWRLZXksXG4gICAgICAgIGlzQ2hhcixcbiAgICAgICAgbW9kaWZpZXJLZXlDb2RlLFxuICAgICAgICBzcGVjaWFsS2V5Q29kZSxcbiAgICAgICAgaXNOZXdMaW5lLFxuICAgICAgICBpc0xldHRlcjogICAgICAgICAgICAgIGlzTGV0dGVyS2V5KGtleSksXG4gICAgICAgIGtleUlkZW50aWZpZXJQcm9wZXJ0eTogZ2V0S2V5SWRlbnRpZmllcihldmVudEtleVByb3BlcnR5KSxcbiAgICAgICAga2V5UHJvcGVydHk6ICAgICAgICAgICBLRVlfTUFQUy5rZXlQcm9wZXJ0eVtldmVudEtleVByb3BlcnR5XSB8fCBldmVudEtleVByb3BlcnR5LFxuICAgICAgICBrZXlDb2RlOiAgICAgICAgICAgICAgIGdldFJlc3VsdEtleUNvZGUoa2V5LCBpc0NoYXIsIHNhbml0aXplZEtleSwgbW9kaWZpZXJLZXlDb2RlLCBzcGVjaWFsS2V5Q29kZSksXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVzdWx0S2V5Q29kZSAoa2V5OiBzdHJpbmcsIGlzQ2hhcjogYm9vbGVhbiwgc2FuaXRpemVkS2V5OiBzdHJpbmcsIG1vZGlmaWVyS2V5Q29kZTogc3RyaW5nLCBzcGVjaWFsS2V5Q29kZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgbGV0IGtleUNvZGUgPSBudWxsO1xuXG4gICAgaWYgKGlzQ2hhciAmJiBrZXkgIT09ICdzcGFjZScpXG4gICAgICAgIGtleUNvZGUgPSBnZXRLZXlDb2RlKHNhbml0aXplZEtleSk7XG4gICAgZWxzZSBpZiAobW9kaWZpZXJLZXlDb2RlKVxuICAgICAgICBrZXlDb2RlID0gbW9kaWZpZXJLZXlDb2RlO1xuICAgIGVsc2UgaWYgKHNwZWNpYWxLZXlDb2RlKVxuICAgICAgICBrZXlDb2RlID0gc3BlY2lhbEtleUNvZGU7XG5cbiAgICByZXR1cm4ga2V5Q29kZTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,142 @@
|
|
|
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
|
+
exports.getNextFocusableElement = exports.focusNextElement = exports.getDeepActiveElement = exports.getChar = exports.getActualKeysAndEventKeyProperties = exports.changeLetterCase = void 0;
|
|
7
|
+
const hammerhead_1 = __importDefault(require("../../deps/hammerhead"));
|
|
8
|
+
const testcafe_core_1 = require("../../deps/testcafe-core");
|
|
9
|
+
const is_letter_1 = __importDefault(require("../../utils/is-letter"));
|
|
10
|
+
const nativeMethods = hammerhead_1.default.nativeMethods;
|
|
11
|
+
const browserUtils = hammerhead_1.default.utils.browser;
|
|
12
|
+
const focusBlurSandbox = hammerhead_1.default.eventSandbox.focusBlur;
|
|
13
|
+
const Promise = hammerhead_1.default.Promise;
|
|
14
|
+
const { isRadioButtonElement, getActiveElement, getTabIndexAttributeIntValue } = testcafe_core_1.domUtils;
|
|
15
|
+
function changeLetterCase(letter) {
|
|
16
|
+
const isLowCase = letter === letter.toLowerCase();
|
|
17
|
+
return isLowCase ? letter.toUpperCase() : letter.toLowerCase();
|
|
18
|
+
}
|
|
19
|
+
exports.changeLetterCase = changeLetterCase;
|
|
20
|
+
function getActualKeysAndEventKeyProperties(keyArray) {
|
|
21
|
+
const eventKeyProperties = keyArray.slice();
|
|
22
|
+
//NOTE: check 'shift' modifier in keys
|
|
23
|
+
for (let i = 0; i < keyArray.length; i++) {
|
|
24
|
+
const key = keyArray[i];
|
|
25
|
+
if (key.toLowerCase() === 'shift') {
|
|
26
|
+
const nextKey = keyArray[i + 1];
|
|
27
|
+
if (!nextKey)
|
|
28
|
+
continue;
|
|
29
|
+
if (testcafe_core_1.KEY_MAPS.shiftMap[nextKey])
|
|
30
|
+
keyArray[i + 1] = testcafe_core_1.KEY_MAPS.shiftMap[nextKey];
|
|
31
|
+
else if (testcafe_core_1.KEY_MAPS.reversedShiftMap[nextKey])
|
|
32
|
+
eventKeyProperties[i + 1] = testcafe_core_1.KEY_MAPS.reversedShiftMap[nextKey];
|
|
33
|
+
}
|
|
34
|
+
if (testcafe_core_1.KEY_MAPS.shiftMap[key] && (!keyArray[i - 1] || keyArray[i - 1].toLowerCase() !== 'shift')) {
|
|
35
|
+
keyArray[i] = testcafe_core_1.KEY_MAPS.shiftMap[key];
|
|
36
|
+
keyArray.splice(i, 0, 'shift');
|
|
37
|
+
eventKeyProperties.splice(i, 0, 'shift');
|
|
38
|
+
i++;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { actualKeys: keyArray, eventKeyProperties };
|
|
42
|
+
}
|
|
43
|
+
exports.getActualKeysAndEventKeyProperties = getActualKeysAndEventKeyProperties;
|
|
44
|
+
function getChar(key, shiftModified) {
|
|
45
|
+
if (key === 'space')
|
|
46
|
+
return ' ';
|
|
47
|
+
if (shiftModified) {
|
|
48
|
+
if ((0, is_letter_1.default)(key))
|
|
49
|
+
return changeLetterCase(key);
|
|
50
|
+
if (testcafe_core_1.KEY_MAPS.reversedShiftMap[key])
|
|
51
|
+
return testcafe_core_1.KEY_MAPS.reversedShiftMap[key];
|
|
52
|
+
}
|
|
53
|
+
return key;
|
|
54
|
+
}
|
|
55
|
+
exports.getChar = getChar;
|
|
56
|
+
function getDeepActiveElement(currentDocument) {
|
|
57
|
+
const doc = currentDocument || document;
|
|
58
|
+
const activeElement = getActiveElement(doc);
|
|
59
|
+
let activeElementInIframe = null;
|
|
60
|
+
if (activeElement && testcafe_core_1.domUtils.isIframeElement(activeElement) &&
|
|
61
|
+
nativeMethods.contentDocumentGetter.call(activeElement)) {
|
|
62
|
+
try {
|
|
63
|
+
activeElementInIframe = getDeepActiveElement(nativeMethods.contentDocumentGetter.call(activeElement));
|
|
64
|
+
}
|
|
65
|
+
catch (e) { // eslint-disable-line no-empty
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return activeElementInIframe || activeElement;
|
|
69
|
+
}
|
|
70
|
+
exports.getDeepActiveElement = getDeepActiveElement;
|
|
71
|
+
function focusNextElement(element, reverse, skipRadioGroups) {
|
|
72
|
+
return new Promise(resolve => {
|
|
73
|
+
const nextElement = getNextFocusableElement(element, reverse, skipRadioGroups);
|
|
74
|
+
if (nextElement)
|
|
75
|
+
focusBlurSandbox.focus(nextElement, () => resolve(nextElement));
|
|
76
|
+
else
|
|
77
|
+
resolve();
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
exports.focusNextElement = focusNextElement;
|
|
81
|
+
function getFocusableElementsFilter(sourceElement, skipRadioGroups) {
|
|
82
|
+
let filter = null;
|
|
83
|
+
if (skipRadioGroups) {
|
|
84
|
+
// NOTE: in all browsers except Mozilla and Opera focus sets on one radio set from group only.
|
|
85
|
+
// in Mozilla and Opera focus sets on any radio set.
|
|
86
|
+
if (sourceElement.name !== '' && !browserUtils.isFirefox)
|
|
87
|
+
filter = item => !item.name || item === sourceElement || item.name !== sourceElement.name;
|
|
88
|
+
}
|
|
89
|
+
// NOTE arrow navigations works with radio buttons in all browsers only between radio buttons with same names
|
|
90
|
+
// Navigation between radio buttons without name just moves focus between radio buttons in Chrome
|
|
91
|
+
// In other browsers navigation between radio buttons without name does not work
|
|
92
|
+
else if (sourceElement.name !== '')
|
|
93
|
+
filter = item => isRadioButtonElement(item) && item.name === sourceElement.name;
|
|
94
|
+
else if (browserUtils.isChrome)
|
|
95
|
+
filter = item => isRadioButtonElement(item) && !item.name;
|
|
96
|
+
return filter;
|
|
97
|
+
}
|
|
98
|
+
function filterFocusableElements(elements, sourceElement, skipRadioGroups) {
|
|
99
|
+
if (!isRadioButtonElement(sourceElement))
|
|
100
|
+
return elements;
|
|
101
|
+
if (!skipRadioGroups && !sourceElement.name && !browserUtils.isChrome)
|
|
102
|
+
return [sourceElement];
|
|
103
|
+
const filterFn = getFocusableElementsFilter(sourceElement, skipRadioGroups);
|
|
104
|
+
if (filterFn)
|
|
105
|
+
elements = testcafe_core_1.arrayUtils.filter(elements, filterFn);
|
|
106
|
+
return elements;
|
|
107
|
+
}
|
|
108
|
+
function correctFocusableElement(elements, element, skipRadioGroups) {
|
|
109
|
+
const isNotCheckedRadioButtonElement = isRadioButtonElement(element) && element.name && !element.checked;
|
|
110
|
+
let checkedRadioButtonElementWithSameName = null;
|
|
111
|
+
if (skipRadioGroups && isNotCheckedRadioButtonElement) {
|
|
112
|
+
checkedRadioButtonElementWithSameName = testcafe_core_1.arrayUtils.find(elements, el => {
|
|
113
|
+
return isRadioButtonElement(el) && el.name === element.name && el.checked;
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return checkedRadioButtonElementWithSameName || element;
|
|
117
|
+
}
|
|
118
|
+
function activeElementHasNegativeTabIndex(doc) {
|
|
119
|
+
const activeElement = nativeMethods.documentActiveElementGetter.call(doc);
|
|
120
|
+
const activeElementTabIndex = activeElement && getTabIndexAttributeIntValue(activeElement);
|
|
121
|
+
return activeElement && activeElementTabIndex < 0;
|
|
122
|
+
}
|
|
123
|
+
function getNextFocusableElement(element, reverse, skipRadioGroups) {
|
|
124
|
+
const offset = reverse ? -1 : 1;
|
|
125
|
+
const doc = testcafe_core_1.domUtils.getTopSameDomainWindow(window).document;
|
|
126
|
+
const sort = !activeElementHasNegativeTabIndex(doc);
|
|
127
|
+
let allFocusable = testcafe_core_1.domUtils.getFocusableElements(doc, sort);
|
|
128
|
+
allFocusable = filterFocusableElements(allFocusable, element, skipRadioGroups);
|
|
129
|
+
const isRadioInput = isRadioButtonElement(element);
|
|
130
|
+
const currentIndex = testcafe_core_1.arrayUtils.indexOf(allFocusable, element);
|
|
131
|
+
const isLastElementFocused = reverse ? currentIndex === 0 : currentIndex === allFocusable.length - 1;
|
|
132
|
+
if (isLastElementFocused) {
|
|
133
|
+
if (!reverse && element.tabIndex < 0)
|
|
134
|
+
return testcafe_core_1.arrayUtils.find(allFocusable, el => el.tabIndex === 0);
|
|
135
|
+
return skipRadioGroups || !isRadioInput ? document.body : allFocusable[allFocusable.length - 1 - currentIndex];
|
|
136
|
+
}
|
|
137
|
+
if (reverse && currentIndex === -1)
|
|
138
|
+
return allFocusable[allFocusable.length - 1];
|
|
139
|
+
return correctFocusableElement(allFocusable, allFocusable[currentIndex + offset], skipRadioGroups);
|
|
140
|
+
}
|
|
141
|
+
exports.getNextFocusableElement = getNextFocusableElement;
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2F1dG9tYXRpb24vcGxheWJhY2svcHJlc3MvdXRpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsdUVBQStDO0FBQy9DLDREQUlrQztBQUVsQyxzRUFBNkM7QUFHN0MsTUFBTSxhQUFhLEdBQU0sb0JBQVUsQ0FBQyxhQUFhLENBQUM7QUFDbEQsTUFBTSxZQUFZLEdBQU8sb0JBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsb0JBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO0FBQzNELE1BQU0sT0FBTyxHQUFZLG9CQUFVLENBQUMsT0FBTyxDQUFDO0FBRTVDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSw0QkFBNEIsRUFBRSxHQUFHLHdCQUFRLENBQUM7QUFFMUYsU0FBZ0IsZ0JBQWdCLENBQUUsTUFBTTtJQUNwQyxNQUFNLFNBQVMsR0FBRyxNQUFNLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRWxELE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNuRSxDQUFDO0FBSkQsNENBSUM7QUFFRCxTQUFnQixrQ0FBa0MsQ0FBRSxRQUFRO0lBQ3hELE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRTVDLHNDQUFzQztJQUN0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEIsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssT0FB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TyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVqRCxPQUFPLHVCQUF1QixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3ZHLENBQUM7QUF2QkQsMERBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGhhbW1lcmhlYWQgZnJvbSAnLi4vLi4vZGVwcy9oYW1tZXJoZWFkJztcbmltcG9ydCB7XG4gICAgS0VZX01BUFMsXG4gICAgZG9tVXRpbHMsXG4gICAgYXJyYXlVdGlscyxcbn0gZnJvbSAnLi4vLi4vZGVwcy90ZXN0Y2FmZS1jb3JlJztcblxuaW1wb3J0IGlzTGV0dGVyIGZyb20gJy4uLy4uL3V0aWxzL2lzLWxldHRlcic7XG5cblxuY29uc3QgbmF0aXZlTWV0aG9kcyAgICA9IGhhbW1lcmhlYWQubmF0aXZlTWV0aG9kcztcbmNvbnN0IGJyb3dzZXJVdGlscyAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLmJyb3dzZXI7XG5jb25zdCBmb2N1c0JsdXJTYW5kYm94ID0gaGFtbWVyaGVhZC5ldmVudFNhbmRib3guZm9jdXNCbHVyO1xuY29uc3QgUHJvbWlzZSAgICAgICAgICA9IGhhbW1lcmhlYWQuUHJvbWlzZTtcblxuY29uc3QgeyBpc1JhZGlvQnV0dG9uRWxlbWVudCwgZ2V0QWN0aXZlRWxlbWVudCwgZ2V0VGFiSW5kZXhBdHRyaWJ1dGVJbnRWYWx1ZSB9ID0gZG9tVXRpbHM7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VMZXR0ZXJDYXNlIChsZXR0ZXIpIHtcbiAgICBjb25zdCBpc0xvd0Nhc2UgPSBsZXR0ZXIgPT09IGxldHRlci50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIGlzTG93Q2FzZSA/IGxldHRlci50b1VwcGVyQ2FzZSgpIDogbGV0dGVyLnRvTG93ZXJDYXNlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3R1YWxLZXlzQW5kRXZlbnRLZXlQcm9wZXJ0aWVzIChrZXlBcnJheSkge1xuICAgIGNvbnN0IGV2ZW50S2V5UHJvcGVydGllcyA9IGtleUFycmF5LnNsaWNlKCk7XG5cbiAgICAvL05PVEU6IGNoZWNrICdzaGlmdCcgbW9kaWZpZXIgaW4ga2V5c1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5QXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5QXJyYXlbaV07XG5cbiAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnc2hpZnQnKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0S2V5ID0ga2V5QXJyYXlbaSArIDFdO1xuXG4gICAgICAgICAgICBpZiAoIW5leHRLZXkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmIChLRVlfTUFQUy5zaGlmdE1hcFtuZXh0S2V5XSlcbiAgICAgICAgICAgICAgICBrZXlBcnJheVtpICsgMV0gPSBLRVlfTUFQUy5zaGlmdE1hcFtuZXh0S2V5XTtcbiAgICAgICAgICAgIGVsc2UgaWYgKEtFWV9NQVBTLnJldmVyc2VkU2hpZnRNYXBbbmV4dEtleV0pXG4gICAgICAgICAgICAgICAgZXZlbnRLZXlQcm9wZXJ0aWVzW2kgKyAxXSA9IEtFWV9NQVBTLnJldmVyc2VkU2hpZnRNYXBbbmV4dEtleV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS0VZX01BUFMuc2hpZnRNYXBba2V5XSAmJiAoIWtleUFycmF5W2kgLSAxXSB8fCBrZXlBcnJheVtpIC0gMV0udG9Mb3dlckNhc2UoKSAhPT0gJ3NoaWZ0JykpIHtcbiAgICAgICAgICAgIGtleUFycmF5W2ldID0gS0VZX01BUFMuc2hpZnRNYXBba2V5XTtcbiAgICAgICAgICAgIGtleUFycmF5LnNwbGljZShpLCAwLCAnc2hpZnQnKTtcbiAgICAgICAgICAgIGV2ZW50S2V5UHJvcGVydGllcy5zcGxpY2UoaSwgMCwgJ3NoaWZ0Jyk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBhY3R1YWxLZXlzOiBrZXlBcnJheSwgZXZlbnRLZXlQcm9wZXJ0aWVzIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFyIChrZXksIHNoaWZ0TW9kaWZpZWQpIHtcbiAgICBpZiAoa2V5ID09PSAnc3BhY2UnKVxuICAgICAgICByZXR1cm4gJyAnO1xuXG4gICAgaWYgKHNoaWZ0TW9kaWZpZWQpIHtcbiAgICAgICAgaWYgKGlzTGV0dGVyKGtleSkpXG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlTGV0dGVyQ2FzZShrZXkpO1xuXG4gICAgICAgIGlmIChLRVlfTUFQUy5yZXZlcnNlZFNoaWZ0TWFwW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gS0VZX01BUFMucmV2ZXJzZWRTaGlmdE1hcFtrZXldO1xuICAgIH1cblxuICAgIHJldHVybiBrZXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWVwQWN0aXZlRWxlbWVudCAoY3VycmVudERvY3VtZW50KSB7XG4gICAgY29uc3QgZG9jICAgICAgICAgICAgICAgICA9IGN1cnJlbnREb2N1bWVudCB8fCBkb2N1bWVudDtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ICAgICAgID0gZ2V0QWN0aXZlRWxlbWVudChkb2MpO1xuICAgIGxldCBhY3RpdmVFbGVtZW50SW5JZnJhbWUgPSBudWxsO1xuXG5cbiAgICBpZiAoYWN0aXZlRWxlbWVudCAmJiBkb21VdGlscy5pc0lmcmFtZUVsZW1lbnQoYWN0aXZlRWxlbWVudCkgJiZcbiAgICAgICAgbmF0aXZlTWV0aG9kcy5jb250ZW50RG9jdW1lbnRHZXR0ZXIuY2FsbChhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudEluSWZyYW1lID0gZ2V0RGVlcEFjdGl2ZUVsZW1lbnQobmF0aXZlTWV0aG9kcy5jb250ZW50RG9jdW1lbnRHZXR0ZXIuY2FsbChhY3RpdmVFbGVtZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnRJbklmcmFtZSB8fCBhY3RpdmVFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNOZXh0RWxlbWVudCAoZWxlbWVudCwgcmV2ZXJzZSwgc2tpcFJhZGlvR3JvdXBzKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBjb25zdCBuZXh0RWxlbWVudCA9IGdldE5leHRGb2N1c2FibGVFbGVtZW50KGVsZW1lbnQsIHJldmVyc2UsIHNraXBSYWRpb0dyb3Vwcyk7XG5cbiAgICAgICAgaWYgKG5leHRFbGVtZW50KVxuICAgICAgICAgICAgZm9jdXNCbHVyU2FuZGJveC5mb2N1cyhuZXh0RWxlbWVudCwgKCkgPT4gcmVzb2x2ZShuZXh0RWxlbWVudCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEZvY3VzYWJsZUVsZW1lbnRzRmlsdGVyIChzb3VyY2VFbGVtZW50LCBza2lwUmFkaW9Hcm91cHMpIHtcbiAgICBsZXQgZmlsdGVyID0gbnVsbDtcblxuICAgIGlmIChza2lwUmFkaW9Hcm91cHMpIHtcbiAgICAgICAgLy8gTk9URTogaW4gYWxsIGJyb3dzZXJzIGV4Y2VwdCBNb3ppbGxhIGFuZCBPcGVyYSBmb2N1cyBzZXRzIG9uIG9uZSByYWRpbyBzZXQgZnJvbSBncm91cCBvbmx5LlxuICAgICAgICAvLyBpbiBNb3ppbGxhIGFuZCBPcGVyYSBmb2N1cyBzZXRzIG9uIGFueSByYWRpbyBzZXQuXG4gICAgICAgIGlmIChzb3VyY2VFbGVtZW50Lm5hbWUgIT09ICcnICYmICFicm93c2VyVXRpbHMuaXNGaXJlZm94KVxuICAgICAgICAgICAgZmlsdGVyID0gaXRlbSA9PiAhaXRlbS5uYW1lIHx8IGl0ZW0gPT09IHNvdXJjZUVsZW1lbnQgfHwgaXRlbS5uYW1lICE9PSBzb3VyY2VFbGVtZW50Lm5hbWU7XG4gICAgfVxuICAgIC8vIE5PVEUgYXJyb3cgbmF2aWdhdGlvbnMgd29ya3Mgd2l0aCByYWRpbyBidXR0b25zIGluIGFsbCBicm93c2VycyBvbmx5IGJldHdlZW4gcmFkaW8gYnV0dG9ucyB3aXRoIHNhbWUgbmFtZXNcbiAgICAvLyBOYXZpZ2F0aW9uIGJldHdlZW4gcmFkaW8gYnV0dG9ucyB3aXRob3V0IG5hbWUganVzdCBtb3ZlcyBmb2N1cyBiZXR3ZWVuIHJhZGlvIGJ1dHRvbnMgaW4gQ2hyb21lXG4gICAgLy8gSW4gb3RoZXIgYnJvd3NlcnMgbmF2aWdhdGlvbiBiZXR3ZWVuIHJhZGlvIGJ1dHRvbnMgd2l0aG91dCBuYW1lIGRvZXMgbm90IHdvcmtcbiAgICBlbHNlIGlmIChzb3VyY2VFbGVtZW50Lm5hbWUgIT09ICcnKVxuICAgICAgICBmaWx0ZXIgPSBpdGVtID0+IGlzUmFkaW9CdXR0b25FbGVtZW50KGl0ZW0pICYmIGl0ZW0ubmFtZSA9PT0gc291cmNlRWxlbWVudC5uYW1lO1xuICAgIGVsc2UgaWYgKGJyb3dzZXJVdGlscy5pc0Nocm9tZSlcbiAgICAgICAgZmlsdGVyID0gaXRlbSA9PiBpc1JhZGlvQnV0dG9uRWxlbWVudChpdGVtKSAmJiAhaXRlbS5uYW1lO1xuXG4gICAgcmV0dXJuIGZpbHRlcjtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRm9jdXNhYmxlRWxlbWVudHMgKGVsZW1lbnRzLCBzb3VyY2VFbGVtZW50LCBza2lwUmFkaW9Hcm91cHMpIHtcbiAgICBpZiAoIWlzUmFkaW9CdXR0b25FbGVtZW50KHNvdXJjZUVsZW1lbnQpKVxuICAgICAgICByZXR1cm4gZWxlbWVudHM7XG5cbiAgICBpZiAoIXNraXBSYWRpb0dyb3VwcyAmJiAhc291cmNlRWxlbWVudC5uYW1lICYmICFicm93c2VyVXRpbHMuaXNDaHJvbWUpXG4gICAgICAgIHJldHVybiBbc291cmNlRWxlbWVudF07XG5cbiAgICBjb25zdCBmaWx0ZXJGbiA9IGdldEZvY3VzYWJsZUVsZW1lbnRzRmlsdGVyKHNvdXJjZUVsZW1lbnQsIHNraXBSYWRpb0dyb3Vwcyk7XG5cbiAgICBpZiAoZmlsdGVyRm4pXG4gICAgICAgIGVsZW1lbnRzID0gYXJyYXlVdGlscy5maWx0ZXIoZWxlbWVudHMsIGZpbHRlckZuKTtcblxuICAgIHJldHVybiBlbGVtZW50cztcbn1cblxuZnVuY3Rpb24gY29ycmVjdEZvY3VzYWJsZUVsZW1lbnQgKGVsZW1lbnRzLCBlbGVtZW50LCBza2lwUmFkaW9Hcm91cHMpIHtcbiAgICBjb25zdCBpc05vdENoZWNrZWRSYWRpb0J1dHRvbkVsZW1lbnQgICAgICA9IGlzUmFkaW9CdXR0b25FbGVtZW50KGVsZW1lbnQpICYmIGVsZW1lbnQubmFtZSAmJiAhZWxlbWVudC5jaGVja2VkO1xuICAgIGxldCBjaGVja2VkUmFkaW9CdXR0b25FbGVtZW50V2l0aFNhbWVOYW1lID0gbnVsbDtcblxuICAgIGlmIChza2lwUmFkaW9Hcm91cHMgJiYgaXNOb3RDaGVja2VkUmFkaW9CdXR0b25FbGVtZW50KSB7XG4gICAgICAgIGNoZWNrZWRSYWRpb0J1dHRvbkVsZW1lbnRXaXRoU2FtZU5hbWUgPSBhcnJheVV0aWxzLmZpbmQoZWxlbWVudHMsIGVsID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpc1JhZGlvQnV0dG9uRWxlbWVudChlbCkgJiYgZWwubmFtZSA9PT0gZWxlbWVudC5uYW1lICYmIGVsLmNoZWNrZWQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjaGVja2VkUmFkaW9CdXR0b25FbGVtZW50V2l0aFNhbWVOYW1lIHx8IGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGFjdGl2ZUVsZW1lbnRIYXNOZWdhdGl2ZVRhYkluZGV4IChkb2MpIHtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ICAgICAgICAgPSBuYXRpdmVNZXRob2RzLmRvY3VtZW50QWN0aXZlRWxlbWVudEdldHRlci5jYWxsKGRvYyk7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudFRhYkluZGV4ID0gYWN0aXZlRWxlbWVudCAmJiBnZXRUYWJJbmRleEF0dHJpYnV0ZUludFZhbHVlKGFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQgJiYgYWN0aXZlRWxlbWVudFRhYkluZGV4IDwgMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRGb2N1c2FibGVFbGVtZW50IChlbGVtZW50LCByZXZlcnNlLCBza2lwUmFkaW9Hcm91cHMpIHtcbiAgICBjb25zdCBvZmZzZXQgICAgID0gcmV2ZXJzZSA/IC0xIDogMTtcbiAgICBjb25zdCBkb2MgICAgICAgID0gZG9tVXRpbHMuZ2V0VG9wU2FtZURvbWFpbldpbmRvdyh3aW5kb3cpLmRvY3VtZW50O1xuICAgIGNvbnN0IHNvcnQgICAgICAgPSAhYWN0aXZlRWxlbWVudEhhc05lZ2F0aXZlVGFiSW5kZXgoZG9jKTtcbiAgICBsZXQgYWxsRm9jdXNhYmxlID0gZG9tVXRpbHMuZ2V0Rm9jdXNhYmxlRWxlbWVudHMoZG9jLCBzb3J0KTtcblxuICAgIGFsbEZvY3VzYWJsZSA9IGZpbHRlckZvY3VzYWJsZUVsZW1lbnRzKGFsbEZvY3VzYWJsZSwgZWxlbWVudCwgc2tpcFJhZGlvR3JvdXBzKTtcblxuICAgIGNvbnN0IGlzUmFkaW9JbnB1dCAgICAgICAgID0gaXNSYWRpb0J1dHRvbkVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3QgY3VycmVudEluZGV4ICAgICAgICAgPSBhcnJheVV0aWxzLmluZGV4T2YoYWxsRm9jdXNhYmxlLCBlbGVtZW50KTtcbiAgICBjb25zdCBpc0xhc3RFbGVtZW50Rm9jdXNlZCA9IHJldmVyc2UgPyBjdXJyZW50SW5kZXggPT09IDAgOiBjdXJyZW50SW5kZXggPT09IGFsbEZvY3VzYWJsZS5sZW5ndGggLSAxO1xuXG4gICAgaWYgKGlzTGFzdEVsZW1lbnRGb2N1c2VkKSB7XG4gICAgICAgIGlmICghcmV2ZXJzZSAmJiBlbGVtZW50LnRhYkluZGV4IDwgMClcbiAgICAgICAgICAgIHJldHVybiBhcnJheVV0aWxzLmZpbmQoYWxsRm9jdXNhYmxlLCBlbCA9PiBlbC50YWJJbmRleCA9PT0gMCk7XG5cbiAgICAgICAgcmV0dXJuIHNraXBSYWRpb0dyb3VwcyB8fCAhaXNSYWRpb0lucHV0ID8gZG9jdW1lbnQuYm9keSA6IGFsbEZvY3VzYWJsZVthbGxGb2N1c2FibGUubGVuZ3RoIC0gMSAtIGN1cnJlbnRJbmRleF07XG4gICAgfVxuXG4gICAgaWYgKHJldmVyc2UgJiYgY3VycmVudEluZGV4ID09PSAtMSlcbiAgICAgICAgcmV0dXJuIGFsbEZvY3VzYWJsZVthbGxGb2N1c2FibGUubGVuZ3RoIC0gMV07XG5cbiAgICByZXR1cm4gY29ycmVjdEZvY3VzYWJsZUVsZW1lbnQoYWxsRm9jdXNhYmxlLCBhbGxGb2N1c2FibGVbY3VycmVudEluZGV4ICsgb2Zmc2V0XSwgc2tpcFJhZGlvR3JvdXBzKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
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_core_1 = require("../deps/testcafe-core");
|
|
7
|
+
const is_letter_1 = __importDefault(require("./is-letter"));
|
|
8
|
+
function default_1(char) {
|
|
9
|
+
if ((0, is_letter_1.default)(char))
|
|
10
|
+
return char.toUpperCase().charCodeAt(0);
|
|
11
|
+
const res = testcafe_core_1.KEY_MAPS.shiftMap[char] ? testcafe_core_1.KEY_MAPS.shiftMap[char].charCodeAt(0) : char.charCodeAt(0);
|
|
12
|
+
return testcafe_core_1.KEY_MAPS.symbolCharCodeToKeyCode[res] || res;
|
|
13
|
+
}
|
|
14
|
+
exports.default = default_1;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWtleS1jb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hdXRvbWF0aW9uL3V0aWxzL2dldC1rZXktY29kZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlEQUFpRDtBQUNqRCw0REFBbUM7QUFFbkMsbUJBQXlCLElBQUk7SUFDekIsSUFBSSxJQUFBLG1CQUFRLEVBQUMsSUFBSSxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTVDLE1BQU0sR0FBRyxHQUFHLHdCQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFakcsT0FBTyx3QkFBUSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUN4RCxDQUFDO0FBUEQsNEJBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLRVlfTUFQUyB9IGZyb20gJy4uL2RlcHMvdGVzdGNhZmUtY29yZSc7XG5pbXBvcnQgaXNMZXR0ZXIgZnJvbSAnLi9pcy1sZXR0ZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoY2hhcikge1xuICAgIGlmIChpc0xldHRlcihjaGFyKSlcbiAgICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xuXG4gICAgY29uc3QgcmVzID0gS0VZX01BUFMuc2hpZnRNYXBbY2hhcl0gPyBLRVlfTUFQUy5zaGlmdE1hcFtjaGFyXS5jaGFyQ29kZUF0KDApIDogY2hhci5jaGFyQ29kZUF0KDApO1xuXG4gICAgcmV0dXJuIEtFWV9NQVBTLnN5bWJvbENoYXJDb2RlVG9LZXlDb2RlW3Jlc10gfHwgcmVzO1xufVxuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
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 key_identifier_maps_1 = __importDefault(require("./key-identifier-maps"));
|
|
7
|
+
const is_letter_1 = __importDefault(require("./is-letter"));
|
|
8
|
+
function getKeyIdentifier(char) {
|
|
9
|
+
if ((0, is_letter_1.default)(char))
|
|
10
|
+
return key_identifier_maps_1.default.LETTERS[char.toLowerCase()];
|
|
11
|
+
return key_identifier_maps_1.default.SYMBOLS[char] || key_identifier_maps_1.default.SPECIAL_KEYS[char] || char;
|
|
12
|
+
}
|
|
13
|
+
exports.default = getKeyIdentifier;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWtleS1pZGVudGlmaWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hdXRvbWF0aW9uL3V0aWxzL2dldC1rZXktaWRlbnRpZmllci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdGQUF3RDtBQUN4RCw0REFBbUM7QUFHbkMsU0FBd0IsZ0JBQWdCLENBQUUsSUFBSTtJQUMxQyxJQUFJLElBQUEsbUJBQVEsRUFBQyxJQUFJLENBQUM7UUFDZCxPQUFPLDZCQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUUzRCxPQUFPLDZCQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSw2QkFBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0FBQy9GLENBQUM7QUFMRCxtQ0FLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBLRVlfSURFTlRJRklFUl9NQVBTIGZyb20gJy4va2V5LWlkZW50aWZpZXItbWFwcyc7XG5pbXBvcnQgaXNMZXR0ZXIgZnJvbSAnLi9pcy1sZXR0ZXInO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEtleUlkZW50aWZpZXIgKGNoYXIpIHtcbiAgICBpZiAoaXNMZXR0ZXIoY2hhcikpXG4gICAgICAgIHJldHVybiBLRVlfSURFTlRJRklFUl9NQVBTLkxFVFRFUlNbY2hhci50b0xvd2VyQ2FzZSgpXTtcblxuICAgIHJldHVybiBLRVlfSURFTlRJRklFUl9NQVBTLlNZTUJPTFNbY2hhcl0gfHwgS0VZX0lERU5USUZJRVJfTUFQUy5TUEVDSUFMX0tFWVNbY2hhcl0gfHwgY2hhcjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
function default_1(key) {
|
|
4
|
+
return key.length === 1 && (key >= 'a' && key <= 'z' || key >= 'A' && key <= 'Z');
|
|
5
|
+
}
|
|
6
|
+
exports.default = default_1;
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtbGV0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hdXRvbWF0aW9uL3V0aWxzL2lzLWxldHRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1CQUF5QixHQUFHO0lBQ3hCLE9BQU8sR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdEYsQ0FBQztBQUZELDRCQUVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBrZXkubGVuZ3RoID09PSAxICYmIChrZXkgPj0gJ2EnICYmIGtleSA8PSAneicgfHwga2V5ID49ICdBJyAmJiBrZXkgPD0gJ1onKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = {
|
|
4
|
+
SPECIAL_KEYS: {
|
|
5
|
+
capslock: 'CapsLock',
|
|
6
|
+
delete: 'U+007F',
|
|
7
|
+
end: 'End',
|
|
8
|
+
enter: 'Enter',
|
|
9
|
+
esc: 'U+001B',
|
|
10
|
+
home: 'Home',
|
|
11
|
+
ins: 'Insert',
|
|
12
|
+
pagedown: 'PageDown',
|
|
13
|
+
pageup: 'PageUp',
|
|
14
|
+
space: 'U+0020',
|
|
15
|
+
tab: 'Tab',
|
|
16
|
+
alt: 'Alt',
|
|
17
|
+
ctrl: 'Control',
|
|
18
|
+
meta: 'Meta',
|
|
19
|
+
shift: 'Shift',
|
|
20
|
+
},
|
|
21
|
+
LETTERS: {
|
|
22
|
+
a: 'U+0041',
|
|
23
|
+
b: 'U+0042',
|
|
24
|
+
c: 'U+0043',
|
|
25
|
+
d: 'U+0044',
|
|
26
|
+
e: 'U+0045',
|
|
27
|
+
f: 'U+0046',
|
|
28
|
+
g: 'U+0047',
|
|
29
|
+
h: 'U+0048',
|
|
30
|
+
i: 'U+0049',
|
|
31
|
+
j: 'U+004A',
|
|
32
|
+
k: 'U+004B',
|
|
33
|
+
l: 'U+004C',
|
|
34
|
+
m: 'U+004D',
|
|
35
|
+
n: 'U+004E',
|
|
36
|
+
o: 'U+004F',
|
|
37
|
+
p: 'U+0050',
|
|
38
|
+
q: 'U+0051',
|
|
39
|
+
r: 'U+0052',
|
|
40
|
+
s: 'U+0053',
|
|
41
|
+
t: 'U+0054',
|
|
42
|
+
u: 'U+0055',
|
|
43
|
+
v: 'U+0056',
|
|
44
|
+
w: 'U+0057',
|
|
45
|
+
x: 'U+0058',
|
|
46
|
+
y: 'U+0059',
|
|
47
|
+
z: 'U+005A',
|
|
48
|
+
},
|
|
49
|
+
SYMBOLS: {
|
|
50
|
+
'0': 'U+0030',
|
|
51
|
+
'1': 'U+0031',
|
|
52
|
+
'2': 'U+0032',
|
|
53
|
+
'3': 'U+0033',
|
|
54
|
+
'4': 'U+0034',
|
|
55
|
+
'5': 'U+0035',
|
|
56
|
+
'6': 'U+0036',
|
|
57
|
+
'7': 'U+0037',
|
|
58
|
+
'8': 'U+0038',
|
|
59
|
+
'9': 'U+0039',
|
|
60
|
+
' ': 'U+0020',
|
|
61
|
+
'!': 'U+0021',
|
|
62
|
+
'@': 'U+0040',
|
|
63
|
+
'#': 'U+0023',
|
|
64
|
+
'$': 'U+0024',
|
|
65
|
+
'%': 'U+0025',
|
|
66
|
+
'^': 'U+005E',
|
|
67
|
+
'*': 'U+002A',
|
|
68
|
+
'(': 'U+0028',
|
|
69
|
+
')': 'U+0029',
|
|
70
|
+
'_': 'U+005F',
|
|
71
|
+
'|': 'U+007C',
|
|
72
|
+
'\\': 'U+005C',
|
|
73
|
+
'/': 'U+002F',
|
|
74
|
+
'?': 'U+003F',
|
|
75
|
+
'.': 'U+002E',
|
|
76
|
+
',': 'U+002C',
|
|
77
|
+
'<': 'U+003C',
|
|
78
|
+
'>': 'U+003E',
|
|
79
|
+
'[': 'U+005B',
|
|
80
|
+
']': 'U+005D',
|
|
81
|
+
'{': 'U+007B',
|
|
82
|
+
'}': 'U+007D',
|
|
83
|
+
'§': 'U+00A7',
|
|
84
|
+
'±': 'U+00B1',
|
|
85
|
+
'\'': 'U+0027',
|
|
86
|
+
'"': 'U+0022',
|
|
87
|
+
':': 'U+003A',
|
|
88
|
+
';': 'U+003B',
|
|
89
|
+
'`': 'U+0060',
|
|
90
|
+
'~': 'U+007E',
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LWlkZW50aWZpZXItbWFwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXV0b21hdGlvbi91dGlscy9rZXktaWRlbnRpZmllci1tYXBzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWU7SUFDWCxZQUFZLEVBQUU7UUFDVixRQUFRLEVBQUUsVUFBVTtRQUNwQixNQUFNLEVBQUksUUFBUTtRQUNsQixHQUFHLEVBQU8sS0FBSztRQUNmLEtBQUssRUFBSyxPQUFPO1FBQ2pCLEdBQUcsRUFBTyxRQUFRO1FBQ2xCLElBQUksRUFBTSxNQUFNO1FBQ2hCLEdBQUcsRUFBTyxRQUFRO1FBQ2xCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE1BQU0sRUFBSSxRQUFRO1FBQ2xCLEtBQUssRUFBSyxRQUFRO1FBQ2xCLEdBQUcsRUFBTyxLQUFLO1FBQ2YsR0FBRyxFQUFPLEtBQUs7UUFDZixJQUFJLEVBQU0sU0FBUztRQUNuQixJQUFJLEVBQU0sTUFBTTtRQUNoQixLQUFLLEVBQUssT0FBTztLQUNwQjtJQUVELE9BQU8sRUFBRTtRQUNMLENBQUMsRUFBRSxRQUFRO1FBQ1gsQ0FBQyxFQUFFLFFBQVE7UUFDWCxDQUFDLEVBQUUsUUFBUTtRQUNYLENBQUMsRUFBRSxRQUFRO1FBQ1gsQ0FBQyxFQUFFLFFBQVE7UUFDWCxDQUFDLEVBQUUsUUFBUTtRQUNYLENBQUMsRUFBRSxRQUFRO1FBQ1gsQ0FBQyxFQUFFLFFBQVE7UUFDWCxDQUFDLEVBQUUsUUFBUTtRQUNYLENBQUMsRUFBRSxRQUFRO1FBQ1gsQ0FBQyxFQUFFLFFBQVE7UUFDWCxDQUFDLEVBQUUsUUFBUTtRQUNYLENBQUMsRUFBRSxRQUFRO1FBQ1gsQ0FBQyxFQUFFLFFBQVE7UUFDWCxDQUFDLEVBQUUsUUFBUTtRQUNYLENBQUMsRUFBRSxRQUFRO1FBQ1gsQ0FBQyxFQUFFLFFBQVE7UUFDWCxDQUFDLEVBQUUsUUFBUTtRQUNYLENBQUMsRUFBRSxRQUFRO1FBQ1gsQ0FBQyxFQUFFLFFBQVE7UUFDWCxDQUFDLEVBQUUsUUFBUTtRQUNYLENBQUMsRUFBRSxRQUFRO1FBQ1gsQ0FBQyxFQUFFLFFBQVE7UUFDWCxDQUFDLEVBQUUsUUFBUTtRQUNYLENBQUMsRUFBRSxRQUFRO1FBQ1gsQ0FBQyxFQUFFLFFBQVE7S0FDZDtJQUVELE9BQU8sRUFBRTtRQUNMLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsSUFBSSxFQUFFLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxJQUFJLEVBQUUsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7UUFDZCxHQUFHLEVBQUcsUUFBUTtRQUNkLEdBQUcsRUFBRyxRQUFRO1FBQ2QsR0FBRyxFQUFHLFFBQVE7S0FDakI7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICAgIFNQRUNJQUxfS0VZUzoge1xuICAgICAgICBjYXBzbG9jazogJ0NhcHNMb2NrJyxcbiAgICAgICAgZGVsZXRlOiAgICdVKzAwN0YnLFxuICAgICAgICBlbmQ6ICAgICAgJ0VuZCcsXG4gICAgICAgIGVudGVyOiAgICAnRW50ZXInLFxuICAgICAgICBlc2M6ICAgICAgJ1UrMDAxQicsXG4gICAgICAgIGhvbWU6ICAgICAnSG9tZScsXG4gICAgICAgIGluczogICAgICAnSW5zZXJ0JyxcbiAgICAgICAgcGFnZWRvd246ICdQYWdlRG93bicsXG4gICAgICAgIHBhZ2V1cDogICAnUGFnZVVwJyxcbiAgICAgICAgc3BhY2U6ICAgICdVKzAwMjAnLFxuICAgICAgICB0YWI6ICAgICAgJ1RhYicsXG4gICAgICAgIGFsdDogICAgICAnQWx0JyxcbiAgICAgICAgY3RybDogICAgICdDb250cm9sJyxcbiAgICAgICAgbWV0YTogICAgICdNZXRhJyxcbiAgICAgICAgc2hpZnQ6ICAgICdTaGlmdCcsXG4gICAgfSxcblxuICAgIExFVFRFUlM6IHtcbiAgICAgICAgYTogJ1UrMDA0MScsXG4gICAgICAgIGI6ICdVKzAwNDInLFxuICAgICAgICBjOiAnVSswMDQzJyxcbiAgICAgICAgZDogJ1UrMDA0NCcsXG4gICAgICAgIGU6ICdVKzAwNDUnLFxuICAgICAgICBmOiAnVSswMDQ2JyxcbiAgICAgICAgZzogJ1UrMDA0NycsXG4gICAgICAgIGg6ICdVKzAwNDgnLFxuICAgICAgICBpOiAnVSswMDQ5JyxcbiAgICAgICAgajogJ1UrMDA0QScsXG4gICAgICAgIGs6ICdVKzAwNEInLFxuICAgICAgICBsOiAnVSswMDRDJyxcbiAgICAgICAgbTogJ1UrMDA0RCcsXG4gICAgICAgIG46ICdVKzAwNEUnLFxuICAgICAgICBvOiAnVSswMDRGJyxcbiAgICAgICAgcDogJ1UrMDA1MCcsXG4gICAgICAgIHE6ICdVKzAwNTEnLFxuICAgICAgICByOiAnVSswMDUyJyxcbiAgICAgICAgczogJ1UrMDA1MycsXG4gICAgICAgIHQ6ICdVKzAwNTQnLFxuICAgICAgICB1OiAnVSswMDU1JyxcbiAgICAgICAgdjogJ1UrMDA1NicsXG4gICAgICAgIHc6ICdVKzAwNTcnLFxuICAgICAgICB4OiAnVSswMDU4JyxcbiAgICAgICAgeTogJ1UrMDA1OScsXG4gICAgICAgIHo6ICdVKzAwNUEnLFxuICAgIH0sXG5cbiAgICBTWU1CT0xTOiB7XG4gICAgICAgICcwJzogICdVKzAwMzAnLFxuICAgICAgICAnMSc6ICAnVSswMDMxJyxcbiAgICAgICAgJzInOiAgJ1UrMDAzMicsXG4gICAgICAgICczJzogICdVKzAwMzMnLFxuICAgICAgICAnNCc6ICAnVSswMDM0JyxcbiAgICAgICAgJzUnOiAgJ1UrMDAzNScsXG4gICAgICAgICc2JzogICdVKzAwMzYnLFxuICAgICAgICAnNyc6ICAnVSswMDM3JyxcbiAgICAgICAgJzgnOiAgJ1UrMDAzOCcsXG4gICAgICAgICc5JzogICdVKzAwMzknLFxuICAgICAgICAnICc6ICAnVSswMDIwJyxcbiAgICAgICAgJyEnOiAgJ1UrMDAyMScsXG4gICAgICAgICdAJzogICdVKzAwNDAnLFxuICAgICAgICAnIyc6ICAnVSswMDIzJyxcbiAgICAgICAgJyQnOiAgJ1UrMDAyNCcsXG4gICAgICAgICclJzogICdVKzAwMjUnLFxuICAgICAgICAnXic6ICAnVSswMDVFJyxcbiAgICAgICAgJyonOiAgJ1UrMDAyQScsXG4gICAgICAgICcoJzogICdVKzAwMjgnLFxuICAgICAgICAnKSc6ICAnVSswMDI5JyxcbiAgICAgICAgJ18nOiAgJ1UrMDA1RicsXG4gICAgICAgICd8JzogICdVKzAwN0MnLFxuICAgICAgICAnXFxcXCc6ICdVKzAwNUMnLFxuICAgICAgICAnLyc6ICAnVSswMDJGJyxcbiAgICAgICAgJz8nOiAgJ1UrMDAzRicsXG4gICAgICAgICcuJzogICdVKzAwMkUnLFxuICAgICAgICAnLCc6ICAnVSswMDJDJyxcbiAgICAgICAgJzwnOiAgJ1UrMDAzQycsXG4gICAgICAgICc+JzogICdVKzAwM0UnLFxuICAgICAgICAnWyc6ICAnVSswMDVCJyxcbiAgICAgICAgJ10nOiAgJ1UrMDA1RCcsXG4gICAgICAgICd7JzogICdVKzAwN0InLFxuICAgICAgICAnfSc6ICAnVSswMDdEJyxcbiAgICAgICAgJ8KnJzogICdVKzAwQTcnLFxuICAgICAgICAnwrEnOiAgJ1UrMDBCMScsXG4gICAgICAgICdcXCcnOiAnVSswMDI3JyxcbiAgICAgICAgJ1wiJzogICdVKzAwMjInLFxuICAgICAgICAnOic6ICAnVSswMDNBJyxcbiAgICAgICAgJzsnOiAgJ1UrMDAzQicsXG4gICAgICAgICdgJzogICdVKzAwNjAnLFxuICAgICAgICAnfic6ICAnVSswMDdFJyxcbiAgICB9LFxufTtcbiJdfQ==
|
|
@@ -378,7 +378,9 @@
|
|
|
378
378
|
closeWindow: '/browser/close-window',
|
|
379
379
|
serviceWorker: '/service-worker.js',
|
|
380
380
|
openFileProtocol: '/browser/open-file-protocol',
|
|
381
|
-
|
|
381
|
+
dispatchNativeAutomationEvent: '/browser/dispatch-native-automation-event',
|
|
382
|
+
dispatchNativeAutomationEventSequence: '/browser/dispatch-native-automation-event-sequence',
|
|
383
|
+
parseSelector: '/parse-selector',
|
|
382
384
|
assets: {
|
|
383
385
|
index: '/browser/assets/index.js',
|
|
384
386
|
styles: '/browser/assets/styles.css',
|
|
@@ -386,7 +388,7 @@
|
|
|
386
388
|
},
|
|
387
389
|
};
|
|
388
390
|
|
|
389
|
-
var FILE_PROTOCOL = 'file
|
|
391
|
+
var FILE_PROTOCOL = 'file://';
|
|
390
392
|
function isFileProtocol(url) {
|
|
391
393
|
if (url === void 0) { url = ''; }
|
|
392
394
|
return url.indexOf(FILE_PROTOCOL) === 0;
|
|
@@ -465,14 +467,25 @@
|
|
|
465
467
|
function stopInitScriptExecution() {
|
|
466
468
|
allowInitScriptExecution = false;
|
|
467
469
|
}
|
|
468
|
-
function
|
|
470
|
+
function redirectUsingCdp(command, _a) {
|
|
471
|
+
var openFileProtocolUrl = _a.openFileProtocolUrl, createXHR = _a.createXHR;
|
|
472
|
+
sendXHR(openFileProtocolUrl, createXHR, { method: 'POST', data: JSON.stringify({ url: command.url }) }); //eslint-disable-line no-restricted-globals
|
|
473
|
+
}
|
|
474
|
+
function redirect(command, opts) {
|
|
469
475
|
stopInitScriptExecution();
|
|
470
476
|
if (isFileProtocol(command.url))
|
|
471
|
-
|
|
477
|
+
redirectUsingCdp(command, opts);
|
|
472
478
|
else
|
|
473
|
-
|
|
479
|
+
setLocation(command, opts);
|
|
480
|
+
}
|
|
481
|
+
function setLocation(command, opts) {
|
|
482
|
+
var hashIndex = command.url.indexOf('#');
|
|
483
|
+
var onlyHashChanged = hashIndex !== -1 && command.url.slice(0, hashIndex) === LOCATION_HREF.slice(0, hashIndex);
|
|
484
|
+
document.location = command.url;
|
|
485
|
+
if (opts.nativeAutomation && onlyHashChanged)
|
|
486
|
+
document.location.reload();
|
|
474
487
|
}
|
|
475
|
-
function
|
|
488
|
+
function nativeAutomationCheckRedirecting(_a) {
|
|
476
489
|
var result = _a.result;
|
|
477
490
|
if (result.cmd === COMMAND.idle)
|
|
478
491
|
return regularCheckRedirecting(result);
|
|
@@ -486,7 +499,7 @@
|
|
|
486
499
|
}
|
|
487
500
|
function getStatus(_a, createXHR, _b) {
|
|
488
501
|
var statusUrl = _a.statusUrl, openFileProtocolUrl = _a.openFileProtocolUrl;
|
|
489
|
-
var _c = _b === void 0 ? {} : _b, manualRedirect = _c.manualRedirect,
|
|
502
|
+
var _c = _b === void 0 ? {} : _b, manualRedirect = _c.manualRedirect, nativeAutomation = _c.nativeAutomation;
|
|
490
503
|
return __awaiter(this, void 0, void 0, function () {
|
|
491
504
|
var result, redirecting;
|
|
492
505
|
return __generator(this, function (_d) {
|
|
@@ -494,9 +507,9 @@
|
|
|
494
507
|
case 0: return [4 /*yield*/, sendXHR(statusUrl, createXHR)];
|
|
495
508
|
case 1:
|
|
496
509
|
result = _d.sent();
|
|
497
|
-
redirecting =
|
|
510
|
+
redirecting = nativeAutomation ? nativeAutomationCheckRedirecting({ result: result }) : regularCheckRedirecting(result);
|
|
498
511
|
if (redirecting && !manualRedirect)
|
|
499
|
-
redirect(result, createXHR, openFileProtocolUrl);
|
|
512
|
+
redirect(result, { createXHR: createXHR, openFileProtocolUrl: openFileProtocolUrl, nativeAutomation: nativeAutomation });
|
|
500
513
|
return [2 /*return*/, { command: result, redirecting: redirecting }];
|
|
501
514
|
}
|
|
502
515
|
});
|
|
@@ -796,7 +809,7 @@
|
|
|
796
809
|
statusUrl: this.communicationUrls.statusUrl,
|
|
797
810
|
openFileProtocolUrl: this.communicationUrls.openFileProtocolUrl,
|
|
798
811
|
};
|
|
799
|
-
return [4 /*yield*/, checkStatus(urls, createXHR, {
|
|
812
|
+
return [4 /*yield*/, checkStatus(urls, createXHR, { nativeAutomation: this.options.nativeAutomation })];
|
|
800
813
|
case 1:
|
|
801
814
|
command = (_a.sent()).command;
|
|
802
815
|
_a.label = 2;
|
|
@@ -805,7 +818,7 @@
|
|
|
805
818
|
return [4 /*yield*/, delay(CHECK_STATUS_DELAY)];
|
|
806
819
|
case 3:
|
|
807
820
|
_a.sent();
|
|
808
|
-
return [4 /*yield*/, checkStatus(urls, createXHR, {
|
|
821
|
+
return [4 /*yield*/, checkStatus(urls, createXHR, { nativeAutomation: this.options.nativeAutomation })];
|
|
809
822
|
case 4:
|
|
810
823
|
(command = (_a.sent()).command);
|
|
811
824
|
return [3 /*break*/, 2];
|