testcafe 2.3.1-rc.2 → 2.4.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/LICENSE +1 -1
  3. package/README.md +40 -46
  4. package/lib/api/test-controller/execution-context.js +4 -2
  5. package/lib/browser/connection/gateway.js +43 -1
  6. package/lib/browser/connection/index.js +24 -10
  7. package/lib/browser/connection/service-routes.js +3 -1
  8. package/lib/browser/provider/built-in/dedicated/chrome/index.js +19 -5
  9. package/lib/browser/provider/index.js +4 -1
  10. package/lib/client/automation/deps/hammerhead.js +24 -0
  11. package/lib/client/automation/deps/testcafe-core.js +24 -0
  12. package/lib/client/automation/index.js +251 -54
  13. package/lib/client/automation/index.min.js +1 -1
  14. package/lib/client/automation/playback/press/get-key-info.js +44 -0
  15. package/lib/client/automation/playback/press/utils.js +142 -0
  16. package/lib/client/automation/utils/get-key-code.js +15 -0
  17. package/lib/client/automation/utils/get-key-identifier.js +14 -0
  18. package/lib/client/automation/utils/is-letter.js +7 -0
  19. package/lib/client/automation/utils/key-identifier-maps.js +93 -0
  20. package/lib/client/browser/idle-page/index.js +7 -2
  21. package/lib/client/core/index.js +46 -3
  22. package/lib/client/core/index.min.js +1 -1
  23. package/lib/client/driver/index.js +45 -17
  24. package/lib/client/driver/index.min.js +1 -1
  25. package/lib/client/test-run/index.js.mustache +34 -30
  26. package/lib/client/ui/index.js +3230 -48
  27. package/lib/client/ui/index.min.js +1 -1
  28. package/lib/client/ui/sprite.svg +15 -0
  29. package/lib/client/ui/styles.css +183 -41
  30. package/lib/live/test-runner.js +4 -2
  31. package/lib/proxyless/api-base.js +3 -2
  32. package/lib/proxyless/client/event-descriptor.js +67 -0
  33. package/lib/proxyless/client/input.js +36 -0
  34. package/lib/proxyless/client/key-press/utils.js +31 -0
  35. package/lib/proxyless/client/types.js +1 -1
  36. package/lib/proxyless/client/utils.js +32 -2
  37. package/lib/proxyless/cookie-provider.js +31 -3
  38. package/lib/proxyless/errors.js +20 -0
  39. package/lib/proxyless/index.js +2 -10
  40. package/lib/proxyless/request-pipeline/index.js +32 -3
  41. package/lib/proxyless/resource-injector.js +5 -4
  42. package/lib/proxyless/types.js +3 -2
  43. package/lib/proxyless/utils/cdp.js +4 -3
  44. package/lib/reporter/index.js +2 -1
  45. package/lib/runner/bootstrapper.js +8 -1
  46. package/lib/runner/index.js +57 -44
  47. package/lib/shared/utils/is-file-protocol.js +2 -2
  48. package/lib/test-run/commands/actions.js +2 -2
  49. package/lib/test-run/cookies/base.js +4 -1
  50. package/lib/test-run/cookies/provider.js +9 -2
  51. package/lib/test-run/execute-js-expression/index.js +4 -2
  52. package/lib/test-run/index.js +17 -12
  53. package/lib/test-run/request/create-request-options.js +23 -12
  54. package/lib/test-run/request/send.js +2 -3
  55. package/lib/utils/check-is-vm.js +58 -0
  56. package/package.json +9 -6
  57. package/lib/proxyless/client/event-simulator.js +0 -40
@@ -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==
@@ -379,6 +379,8 @@
379
379
  serviceWorker: '/service-worker.js',
380
380
  openFileProtocol: '/browser/open-file-protocol',
381
381
  dispatchProxylessEvent: '/browser/dispatch-proxyless-event',
382
+ dispatchProxylessEventSequence: '/browser/dispatch-proxyless-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,10 +467,13 @@
465
467
  function stopInitScriptExecution() {
466
468
  allowInitScriptExecution = false;
467
469
  }
470
+ function redirectUsingCdp(command, createXHR, openFileProtocolUrl) {
471
+ sendXHR(openFileProtocolUrl, createXHR, { method: 'POST', data: JSON.stringify({ url: command.url }) }); //eslint-disable-line no-restricted-globals
472
+ }
468
473
  function redirect(command, createXHR, openFileProtocolUrl) {
469
474
  stopInitScriptExecution();
470
475
  if (isFileProtocol(command.url))
471
- sendXHR(openFileProtocolUrl, createXHR, { method: 'POST', data: JSON.stringify({ url: command.url }) }); //eslint-disable-line no-restricted-globals
476
+ redirectUsingCdp(command, createXHR, openFileProtocolUrl);
472
477
  else
473
478
  document.location = command.url;
474
479
  }
@@ -82,6 +82,11 @@ window['%hammerhead%'].utils.removeInjectedScript();
82
82
  meta: 'Meta',
83
83
  shift: 'Shift',
84
84
  };
85
+ var NEW_LINE_KEYS = [
86
+ 'enter',
87
+ '\n',
88
+ '\r',
89
+ ];
85
90
  function reverseMap(map) {
86
91
  var reversed = {};
87
92
  for (var key in map) {
@@ -143,6 +148,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
143
148
  reversedShiftMap: reverseMap(SHIFT_MAP),
144
149
  reversedSpecialKeys: reverseMap(SPECIAL_KEYS),
145
150
  reversedKeyProperty: reverseMap(KEY_PROPERTY),
151
+ newLineKeys: NEW_LINE_KEYS,
146
152
  };
147
153
 
148
154
  var Promise = hammerhead__default.Promise;
@@ -610,6 +616,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
610
616
  var reduce = createNativeMethodWrapper('reduce');
611
617
  var concat = createNativeMethodWrapper('concat');
612
618
  var join = createNativeMethodWrapper('join');
619
+ var every = createNativeMethodWrapper('every');
613
620
  function isArray(arg) {
614
621
  return hammerhead.nativeMethods.objectToString.call(arg) === '[object Array]';
615
622
  }
@@ -676,6 +683,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
676
683
  reduce: reduce,
677
684
  concat: concat,
678
685
  join: join,
686
+ every: every,
679
687
  isArray: isArray,
680
688
  from: from,
681
689
  find: find,
@@ -3828,6 +3836,8 @@ window['%hammerhead%'].utils.removeInjectedScript();
3828
3836
  serviceWorker: '/service-worker.js',
3829
3837
  openFileProtocol: '/browser/open-file-protocol',
3830
3838
  dispatchProxylessEvent: '/browser/dispatch-proxyless-event',
3839
+ dispatchProxylessEventSequence: '/browser/dispatch-proxyless-event-sequence',
3840
+ parseSelector: '/parse-selector',
3831
3841
  assets: {
3832
3842
  index: '/browser/assets/index.js',
3833
3843
  styles: '/browser/assets/styles.css',
@@ -3835,7 +3845,7 @@ window['%hammerhead%'].utils.removeInjectedScript();
3835
3845
  },
3836
3846
  };
3837
3847
 
3838
- var FILE_PROTOCOL = 'file:///';
3848
+ var FILE_PROTOCOL = 'file://';
3839
3849
  function isFileProtocol(url) {
3840
3850
  if (url === void 0) { url = ''; }
3841
3851
  return url.indexOf(FILE_PROTOCOL) === 0;
@@ -3917,10 +3927,13 @@ window['%hammerhead%'].utils.removeInjectedScript();
3917
3927
  function stopInitScriptExecution() {
3918
3928
  allowInitScriptExecution = false;
3919
3929
  }
3930
+ function redirectUsingCdp(command, createXHR, openFileProtocolUrl) {
3931
+ sendXHR(openFileProtocolUrl, createXHR, { method: 'POST', data: JSON.stringify({ url: command.url }) }); //eslint-disable-line no-restricted-globals
3932
+ }
3920
3933
  function redirect(command, createXHR, openFileProtocolUrl) {
3921
3934
  stopInitScriptExecution();
3922
3935
  if (isFileProtocol(command.url))
3923
- sendXHR(openFileProtocolUrl, createXHR, { method: 'POST', data: JSON.stringify({ url: command.url }) }); //eslint-disable-line no-restricted-globals
3936
+ redirectUsingCdp(command, createXHR, openFileProtocolUrl);
3924
3937
  else
3925
3938
  document.location = command.url;
3926
3939
  }
@@ -4079,6 +4092,33 @@ window['%hammerhead%'].utils.removeInjectedScript();
4079
4092
  }
4080
4093
  });
4081
4094
  });
4095
+ }
4096
+ function dispatchProxylessEventSequence(dispatchProxylessEventSequenceUrl, testCafeUI, createXHR, sequence) {
4097
+ return __awaiter(this, void 0, void 0, function () {
4098
+ return __generator(this, function (_a) {
4099
+ switch (_a.label) {
4100
+ case 0: return [4 /*yield*/, testCafeUI.hide()];
4101
+ case 1:
4102
+ _a.sent();
4103
+ return [4 /*yield*/, sendXHR(dispatchProxylessEventSequenceUrl, createXHR, {
4104
+ method: 'POST',
4105
+ data: JSON.stringify(sequence), //eslint-disable-line no-restricted-globals
4106
+ })];
4107
+ case 2:
4108
+ _a.sent();
4109
+ return [4 /*yield*/, testCafeUI.show()];
4110
+ case 3:
4111
+ _a.sent();
4112
+ return [2 /*return*/];
4113
+ }
4114
+ });
4115
+ });
4116
+ }
4117
+ function parseSelector(parseSelectorUrl, createXHR, selector) {
4118
+ return sendXHR(parseSelectorUrl, createXHR, {
4119
+ method: 'POST',
4120
+ data: JSON.stringify({ selector: selector }), //eslint-disable-line no-restricted-globals
4121
+ });
4082
4122
  }
4083
4123
 
4084
4124
  var browser = /*#__PURE__*/Object.freeze({
@@ -4089,13 +4129,16 @@ window['%hammerhead%'].utils.removeInjectedScript();
4089
4129
  stopHeartbeat: stopHeartbeat,
4090
4130
  startInitScriptExecution: startInitScriptExecution,
4091
4131
  stopInitScriptExecution: stopInitScriptExecution,
4132
+ redirectUsingCdp: redirectUsingCdp,
4092
4133
  redirect: redirect,
4093
4134
  checkStatus: checkStatus,
4094
4135
  enableRetryingTestPages: enableRetryingTestPages,
4095
4136
  getActiveWindowId: getActiveWindowId,
4096
4137
  setActiveWindowId: setActiveWindowId,
4097
4138
  closeWindow: closeWindow,
4098
- dispatchProxylessEvent: dispatchProxylessEvent
4139
+ dispatchProxylessEvent: dispatchProxylessEvent,
4140
+ dispatchProxylessEventSequence: dispatchProxylessEventSequence,
4141
+ parseSelector: parseSelector
4099
4142
  });
4100
4143
 
4101
4144
  // -------------------------------------------------------------