Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
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/>; }
else if(color === 'red') { <RedComponent/>; }
else 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
The npm package babel-plugin-transform-do-expressions receives a total of 87,212 weekly downloads. As such, babel-plugin-transform-do-expressions popularity was classified as popular.
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.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.