Security News
The Unpaid Backbone of Open Source: Solo Maintainers Face Increasing Security Demands
Solo open source maintainers face burnout and security challenges, with 60% unpaid and 60% considering quitting.
@babel/plugin-proposal-optional-chaining
Advanced tools
Transform optional chaining operators into a series of nil checks
The @babel/plugin-proposal-optional-chaining package is a Babel plugin that allows developers to use the optional chaining syntax in JavaScript. Optional chaining enables developers to read the value of a property located deep within a chain of connected objects without having to check that each reference in the chain is valid.
Optional Property Access
Safely access a property on an object. If 'obj' is null or undefined, 'value' will be undefined instead of throwing an error.
const value = obj?.prop;
Optional Method Calls
Safely call a method on an object. If 'obj' or 'obj.method' is null or undefined, 'result' will be undefined instead of throwing an error.
const result = obj?.method?.();
Optional Element Access
Safely access an array element. If 'arr' is null or undefined, 'item' will be undefined instead of throwing an error.
const item = arr?.[index];
This package allows safe property access on objects but does not use the optional chaining syntax. It's a utility function rather than a Babel plugin and requires manual function calls.
Lodash provides a 'get' function that allows safe access to object properties. It's similar in purpose to optional chaining but uses a different syntax and is a part of the larger Lodash utility library.
The Optional Chaining Operator allows you to handle properties of deeply nested objects without worrying about undefined intermediate objects.
const obj = {
foo: {
bar: {
baz: 42,
},
},
};
const baz = obj?.foo?.bar?.baz; // 42
const safe = obj?.qux?.baz; // undefined
// Optional chaining and normal chaining can be intermixed
obj?.foo.bar?.baz; // Only access `foo` if `obj` exists, and `baz` if
// `bar` exists
const obj = {
foo: {
bar: {
baz() {
return 42;
},
},
},
};
const baz = obj?.foo?.bar?.baz(); // 42
const safe = obj?.qux?.baz(); // undefined
const safe2 = obj?.foo.bar.qux?.(); // undefined
const willThrow = obj?.foo.bar.qux(); // Error: not a function
// Top function can be called directly, too.
function test() {
return 42;
}
test?.(); // 42
exists?.(); // undefined
const obj = {
foo: {
bar: {
baz: class {
},
},
},
};
const baz = new obj?.foo?.bar?.baz(); // baz instance
const safe = new obj?.qux?.baz(); // undefined
const safe2 = new obj?.foo.bar.qux?.(); // undefined
const willThrow = new obj?.foo.bar.qux(); // Error: not a constructor
// Top classes can be called directly, too.
class Test {
}
new Test?.(); // test instance
new exists?.(); // undefined
npm install --save-dev @babel/plugin-proposal-optional-chaining
.babelrc
(Recommended).babelrc
{
"plugins": ["@babel/plugin-proposal-optional-chaining"]
}
babel --plugins @babel/plugin-proposal-optional-chaining script.js
require("@babel/core").transform("code", {
plugins: ["@babel/plugin-proposal-optional-chaining"]
});
loose
boolean
, defaults to false
.
When true
, this transform will pretend document.all
does not exist,
and perform loose equality checks with null
instead of string equality checks
against both null
and undefined
.
In
foo?.bar;
Out (loose === true
)
foo == null ? void 0 : foo.bar;
Out (loose === false
)
foo === null || foo === void 0 ? void 0 : foo.bar;
FAQs
Transform optional chaining operators into a series of nil checks
The npm package @babel/plugin-proposal-optional-chaining receives a total of 9,853,520 weekly downloads. As such, @babel/plugin-proposal-optional-chaining popularity was classified as popular.
We found that @babel/plugin-proposal-optional-chaining demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 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
Solo open source maintainers face burnout and security challenges, with 60% unpaid and 60% considering quitting.
Security News
License exceptions modify the terms of open source licenses, impacting how software can be used, modified, and distributed. Developers should be aware of the legal implications of these exceptions.
Security News
A developer is accusing Tencent of violating the GPL by modifying a Python utility and changing its license to BSD, highlighting the importance of copyleft compliance.