summaryrefslogtreecommitdiff
path: root/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js')
-rw-r--r--node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js b/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js
new file mode 100644
index 00000000..e80d70af
--- /dev/null
+++ b/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js
@@ -0,0 +1,49 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+var _helperPluginUtils = require("@babel/helper-plugin-utils");
+var _core = require("@babel/core");
+var _default = (0, _helperPluginUtils.declare)((api, {
+ loose = false
+}) => {
+ var _api$assumption;
+ api.assertVersion(7);
+ const noDocumentAll = (_api$assumption = api.assumption("noDocumentAll")) != null ? _api$assumption : loose;
+ return {
+ name: "transform-nullish-coalescing-operator",
+ inherits: require("@babel/plugin-syntax-nullish-coalescing-operator").default,
+ visitor: {
+ LogicalExpression(path) {
+ const {
+ node,
+ scope
+ } = path;
+ if (node.operator !== "??") {
+ return;
+ }
+ let ref;
+ let assignment;
+ if (scope.isStatic(node.left)) {
+ ref = node.left;
+ assignment = _core.types.cloneNode(node.left);
+ } else if (scope.path.isPattern()) {
+ path.replaceWith(_core.template.statement.ast`(() => ${path.node})()`);
+ return;
+ } else {
+ ref = scope.generateUidIdentifierBasedOnNode(node.left);
+ scope.push({
+ id: _core.types.cloneNode(ref)
+ });
+ assignment = _core.types.assignmentExpression("=", ref, node.left);
+ }
+ path.replaceWith(_core.types.conditionalExpression(noDocumentAll ? _core.types.binaryExpression("!=", assignment, _core.types.nullLiteral()) : _core.types.logicalExpression("&&", _core.types.binaryExpression("!==", assignment, _core.types.nullLiteral()), _core.types.binaryExpression("!==", _core.types.cloneNode(ref), scope.buildUndefinedNode())), _core.types.cloneNode(ref), node.right));
+ }
+ }
+ };
+});
+exports.default = _default;
+
+//# sourceMappingURL=index.js.map