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-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/proposal-optional-chaining"]
}
babel --plugins @babel/proposal-optional-chaining script.js
require("@babel/core").transform("code", {
plugins: ["@babel/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,246,194 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
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.