
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
fluent-keys
Advanced tools
A simple, fluent library for handling keyboard events.
Writing one-off functions to handle keyboard events for specific keys can be tedious:
render() {
const { text } = this.props;
return <button onKeyDown={event => this.handleKeyDown(event)}>{text}</button>;
}
...
handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>) {
if (event.key === 'Enter') {
this.props.doSomething();
}
}
Not only do you have to add a new function (usually lower down in the file), but also need to add a fair amount of boiler plate. This is exacerbated if you end up needing special keys (i.e. ctrl, shift, alt) or multiple keys to map to a function.
One alternative is to use fluent-keys. It provides convenient alternatives to map key presses (that is either up, down, or press) to bound functions:
render() {
const { doSomething, text } = this.props;
return <button onKeyDown={Key.is.enter.then(doSomething)}>{text}</button>;
}
| Example | Explanation |
|---|---|
Key.is.alphanumeric.then(...) | For any alphanumeric (capital and lowercase letters and numerals), invoke function |
Key.is.letter.then(...) | For any letter (capital or lowercase), invoke function |
Key.is.lowercase.letter.then(...) | Lowercase letters |
Key.is.uppercase.letter.then(...) | Uppercase letters |
Key.matches('F').then(...) | Can match any single character |
Key.matches('{', '[', '(').then(...) | Can match any character in list of characters |
Key.is.space.then(...) | Space bar |
Key.meets(/^[1-5]{1}$/).then(...) | can define arbitrary regex |
Fluent-keys is a good choice for many use cases. That said, consider these other cool approaches. They may or may not be better for your usecase or complement fluent-keys:
FAQs
A simple, fluent library for handling KeyboardEvents
We found that fluent-keys demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.