babel-plugin-transform-nullish-operator
v1.0.2
Published
A Babel plugin which emulates the `a?` existence check from CoffeeScript using the `??` syntax
Downloads
331
Maintainers
Readme
babel-plugin-transform-nullish-operator
This package is a babel
plugin which can be used to emulate the Coffeescript existence operator (a?
) in Babel using the new coalescing nullish operator (Stage 4 proposal).
This is completely non-standard, experimental and could break at any time.
Example
In
var fooExists = object.foo ?? EXISTS;
Out
var _object$foo;
var fooExists = (_object$foo = object.foo) !== null && _object$foo !== void 0;
NOTE: We cannot use
!= null
here becausedocument.all == null
anddocument.all
has been deemed not "nullish".
Installation
npm install --save-dev babel-plugin-transform-nullish-operator
Usage
With a configuration file (Recommended)
{
"plugins": ["babel-plugin-transform-nullish-operator"]
}
Via CLI
babel --plugins babel-plugin-transform-nullish-operator script.js
Via Node API
require("@babel/core").transform("code", {
plugins: ["babel-plugin-transform-nullish-operator"]
});
Options
identifier
string
, defaults to EXISTS
.
Can be used to change the identifier which is used to trigger this alternative behavior of the nullish coalescing operator.
Example with {"identifier": "DO_YOU_EXIST"}
In
var fooExists = object.foo ?? DO_YOU_EXIST;
Out
var _object$foo;
var fooExists = (_object$foo = object.foo) !== null && _object$foo !== void 0;
Linting
Your linter might EXISTS
as undefined (which is true, the symbol doesn't actually exists, it is only a placeholder), in that case you will need to explicitely add it in your config.
Example using eslint
:
{
...
"globals": {
"EXISTS": "readonly"
},
...
}
References & Thanks
This is project is heavily based on Babel's @babel/plugin-proposal-nullish-coalescing-operator
(including code, tests, usage, etc).
License
MIT, Copyright (c) 2020-2020 Louis Brunner