browser-debugger-cli
Version:
DevTools telemetry in your terminal. For humans and agents. Direct WebSocket to Chrome's debugging port.
110 lines • 3.62 kB
JavaScript
/**
* Key name to CDP key event parameters mapping.
*
* Maps human-readable key names to Chrome DevTools Protocol Input.dispatchKeyEvent parameters.
*/
/**
* Modifier key bit flags for CDP Input.dispatchKeyEvent.
*/
export const MODIFIER_FLAGS = {
shift: 1,
ctrl: 2,
alt: 4,
meta: 8,
};
/**
* Map of supported key names to their CDP parameters.
*
* Keys are case-insensitive for user convenience.
*/
const KEY_DEFINITIONS = {
enter: { code: 'Enter', key: 'Enter', keyCode: 13 },
tab: { code: 'Tab', key: 'Tab', keyCode: 9 },
escape: { code: 'Escape', key: 'Escape', keyCode: 27 },
space: { code: 'Space', key: ' ', keyCode: 32 },
backspace: { code: 'Backspace', key: 'Backspace', keyCode: 8 },
delete: { code: 'Delete', key: 'Delete', keyCode: 46 },
arrowup: { code: 'ArrowUp', key: 'ArrowUp', keyCode: 38 },
arrowdown: { code: 'ArrowDown', key: 'ArrowDown', keyCode: 40 },
arrowleft: { code: 'ArrowLeft', key: 'ArrowLeft', keyCode: 37 },
arrowright: { code: 'ArrowRight', key: 'ArrowRight', keyCode: 39 },
home: { code: 'Home', key: 'Home', keyCode: 36 },
end: { code: 'End', key: 'End', keyCode: 35 },
pageup: { code: 'PageUp', key: 'PageUp', keyCode: 33 },
pagedown: { code: 'PageDown', key: 'PageDown', keyCode: 34 },
f1: { code: 'F1', key: 'F1', keyCode: 112 },
f2: { code: 'F2', key: 'F2', keyCode: 113 },
f3: { code: 'F3', key: 'F3', keyCode: 114 },
f4: { code: 'F4', key: 'F4', keyCode: 115 },
f5: { code: 'F5', key: 'F5', keyCode: 116 },
f6: { code: 'F6', key: 'F6', keyCode: 117 },
f7: { code: 'F7', key: 'F7', keyCode: 118 },
f8: { code: 'F8', key: 'F8', keyCode: 119 },
f9: { code: 'F9', key: 'F9', keyCode: 120 },
f10: { code: 'F10', key: 'F10', keyCode: 121 },
f11: { code: 'F11', key: 'F11', keyCode: 122 },
f12: { code: 'F12', key: 'F12', keyCode: 123 },
};
for (let i = 0; i < 26; i++) {
const letter = String.fromCharCode(97 + i); // 'a' = 97
const upperLetter = letter.toUpperCase();
KEY_DEFINITIONS[letter] = {
code: `Key${upperLetter}`,
key: letter,
keyCode: 65 + i, // 'A' = 65
};
}
for (let i = 0; i < 10; i++) {
const digit = String(i);
KEY_DEFINITIONS[digit] = {
code: `Digit${digit}`,
key: digit,
keyCode: 48 + i, // '0' = 48
};
}
/**
* Get key definition by name (case-insensitive).
*
* @param keyName - Human-readable key name (e.g., "Enter", "Tab", "a")
* @returns Key definition or undefined if not found
*
* @example
* ```typescript
* const def = getKeyDefinition('Enter');
* // { code: 'Enter', key: 'Enter', keyCode: 13 }
*
* const letterDef = getKeyDefinition('a');
* // { code: 'KeyA', key: 'a', keyCode: 65 }
* ```
*/
export function getKeyDefinition(keyName) {
return KEY_DEFINITIONS[keyName.toLowerCase()];
}
/**
* Parse modifier string into CDP modifier flags.
*
* @param modifiers - Comma-separated modifier names (e.g., "ctrl,shift")
* @returns Combined modifier bit flags
*
* @example
* ```typescript
* parseModifiers('ctrl,shift'); // Returns 3 (1 + 2)
* parseModifiers('alt'); // Returns 4
* parseModifiers(''); // Returns 0
* ```
*/
export function parseModifiers(modifiers) {
if (!modifiers) {
return 0;
}
let flags = 0;
const parts = modifiers.toLowerCase().split(',');
for (const part of parts) {
const trimmed = part.trim();
if (trimmed in MODIFIER_FLAGS) {
flags |= MODIFIER_FLAGS[trimmed];
}
}
return flags;
}
//# sourceMappingURL=keyMapping.js.map