Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
babel-plugin-transform-do-expressions
Advanced tools
The babel-plugin-transform-do-expressions package is a Babel plugin that allows you to use 'do expressions' in your JavaScript code. 'Do expressions' enable you to use statements like loops and conditionals in expression contexts, which can be particularly useful for complex logic within JSX or other expression-based syntaxes.
Basic Do Expression
This feature allows you to use conditional logic within an expression. The 'do' expression evaluates the if-else statement and assigns the result to the variable 'result'.
const result = do {
if (x > 10) {
'greater';
} else {
'lesser';
}
};
Do Expression with Loop
This feature allows you to use loops within an expression. The 'do' expression evaluates the for loop and assigns the final value of 'total' to the variable 'sum'.
const sum = do {
let total = 0;
for (let i = 0; i < 5; i++) {
total += i;
}
total;
};
Do Expression in JSX
This feature allows you to use 'do expressions' within JSX. The 'do' expression evaluates the conditional logic and renders either the <Welcome> or <Login> component based on the user's login status.
const element = <div>{do {
if (user.isLoggedIn) {
<Welcome user={user} />;
} else {
<Login />;
}
}}</div>;
This Babel plugin allows you to inline environment variables into your code. While it doesn't provide the same 'do expression' functionality, it is useful for injecting environment-specific values into your code at build time.
This Babel plugin transforms JSX syntax into JavaScript. While it doesn't offer 'do expressions', it is essential for working with JSX in React applications, making it a complementary tool for developers using 'do expressions' within JSX.
Compile
do
expressions to ES5
The
do { .. }
expression executes a block (with one or many statements in it), and the final statement completion value inside the block becomes the completion value of the do expression.
from You Don't Know JS
It can be seen as a complex version of the ternary operator:
let a = do {
if(x > 10) {
'big';
} else {
'small';
}
};
// is equivalent to:
let a = x > 10 ? 'big' : 'small';
This example is not the best usage because it is too simple and using a ternary operator is a better option but you can have a much more complex condition in the do { ... }
expression with several if ... else
chains:
let x = 100;
let y = 20;
let a = do {
if(x > 10) {
if(y > 20) {
'big x, big y';
} else {
'big x, small y';
}
} else {
if(y > 10) {
'small x, big y';
} else {
'small x, small y';
}
}
};
One of the most useful usage of the do
expression is inside JSX. If we want to conditionally display a component we usually have to call another function which would implement the condition and return the correct value, for example:
const getColoredComponent = color => {
if(color === 'blue') { return <BlueComponent/>; }
if(color === 'red') { return <RedComponent/>; }
if(color === 'green') { return <GreenComponent/>; }
}
const Component = props =>
<div className='myComponent'>
{getColoredComponent()}
</div>
;
Using a do expression you can add logic inside JSX:
const Component = props =>
<div className='myComponent'>
{do {
if(color === 'blue') { <BlueComponent/>; }
if(color === 'red') { <RedComponent/>; }
if(color === 'green') { <GreenComponent/>; }
}}
</div>
;
npm install --save-dev babel-plugin-transform-do-expressions
.babelrc
(Recommended).babelrc
{
"plugins": ["transform-do-expressions"]
}
babel --plugins transform-do-expressions script.js
require("babel-core").transform("code", {
plugins: ["transform-do-expressions"]
});
FAQs
Compile do expressions to ES5
We found that babel-plugin-transform-do-expressions demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers 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.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.