@babel/plugin-proposal-optional-chaining
Advanced tools
Comparing version 7.0.0-beta.42 to 7.0.0-beta.43
104
lib/index.js
"use strict"; | ||
exports.__esModule = true; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _helperPluginUtils = require("@babel/helper-plugin-utils"); | ||
function _helperPluginUtils() { | ||
const data = require("@babel/helper-plugin-utils"); | ||
var _pluginSyntaxOptionalChaining = _interopRequireDefault(require("@babel/plugin-syntax-optional-chaining")); | ||
_helperPluginUtils = function () { | ||
return data; | ||
}; | ||
var _core = require("@babel/core"); | ||
return data; | ||
} | ||
function _pluginSyntaxOptionalChaining() { | ||
const data = _interopRequireDefault(require("@babel/plugin-syntax-optional-chaining")); | ||
_pluginSyntaxOptionalChaining = function () { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _core() { | ||
const data = require("@babel/core"); | ||
_core = function () { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var _default = (0, _helperPluginUtils.declare)(function (api, options) { | ||
var _default = (0, _helperPluginUtils().declare)((api, options) => { | ||
api.assertVersion(7); | ||
var _options$loose = options.loose, | ||
loose = _options$loose === void 0 ? false : _options$loose; | ||
const { | ||
loose = false | ||
} = options; | ||
function optional(path, replacementPath) { | ||
var scope = path.scope; | ||
var optionals = []; | ||
var objectPath = path; | ||
const { | ||
scope | ||
} = path; | ||
const optionals = []; | ||
let objectPath = path; | ||
while (objectPath.isOptionalMemberExpression() || objectPath.isOptionalCallExpression()) { | ||
var _objectPath = objectPath, | ||
node = _objectPath.node; | ||
const { | ||
node | ||
} = objectPath; | ||
@@ -41,12 +71,12 @@ if (node.optional) { | ||
for (var i = optionals.length - 1; i >= 0; i--) { | ||
var _node = optionals[i]; | ||
_node.optional = false; | ||
for (let i = optionals.length - 1; i >= 0; i--) { | ||
const node = optionals[i]; | ||
node.optional = false; | ||
var isCall = _core.types.isCallExpression(_node); | ||
const isCall = _core().types.isCallExpression(node); | ||
var replaceKey = isCall ? "callee" : "object"; | ||
var chain = _node[replaceKey]; | ||
var ref = void 0; | ||
var check = void 0; | ||
const replaceKey = isCall ? "callee" : "object"; | ||
const chain = node[replaceKey]; | ||
let ref; | ||
let check; | ||
@@ -59,4 +89,4 @@ if (loose && isCall) { | ||
if (ref) { | ||
check = _core.types.assignmentExpression("=", _core.types.cloneNode(ref), chain); | ||
_node[replaceKey] = ref; | ||
check = _core().types.assignmentExpression("=", _core().types.cloneNode(ref), chain); | ||
node[replaceKey] = ref; | ||
} else { | ||
@@ -67,11 +97,13 @@ check = ref = chain; | ||
if (isCall && _core.types.isMemberExpression(chain)) { | ||
if (isCall && _core().types.isMemberExpression(chain)) { | ||
if (loose) { | ||
_node.callee = chain; | ||
node.callee = chain; | ||
} else { | ||
var object = chain.object; | ||
var context = scope.maybeGenerateMemoised(object); | ||
const { | ||
object | ||
} = chain; | ||
let context = scope.maybeGenerateMemoised(object); | ||
if (context) { | ||
chain.object = _core.types.assignmentExpression("=", context, object); | ||
chain.object = _core().types.assignmentExpression("=", context, object); | ||
} else { | ||
@@ -81,9 +113,8 @@ context = object; | ||
_node.arguments.unshift(_core.types.cloneNode(context)); | ||
_node.callee = _core.types.memberExpression(_node.callee, _core.types.identifier("call")); | ||
node.arguments.unshift(_core().types.cloneNode(context)); | ||
node.callee = _core().types.memberExpression(node.callee, _core().types.identifier("call")); | ||
} | ||
} | ||
replacementPath.replaceWith(_core.types.conditionalExpression(loose ? _core.types.binaryExpression("==", _core.types.cloneNode(check), _core.types.nullLiteral()) : _core.types.logicalExpression("||", _core.types.binaryExpression("===", _core.types.cloneNode(check), _core.types.nullLiteral()), _core.types.binaryExpression("===", _core.types.cloneNode(ref), scope.buildUndefinedNode())), scope.buildUndefinedNode(), replacementPath.node)); | ||
replacementPath.replaceWith(_core().types.conditionalExpression(loose ? _core().types.binaryExpression("==", _core().types.cloneNode(check), _core().types.nullLiteral()) : _core().types.logicalExpression("||", _core().types.binaryExpression("===", _core().types.cloneNode(check), _core().types.nullLiteral()), _core().types.binaryExpression("===", _core().types.cloneNode(ref), scope.buildUndefinedNode())), scope.buildUndefinedNode(), replacementPath.node)); | ||
replacementPath = replacementPath.get("alternate"); | ||
@@ -94,4 +125,6 @@ } | ||
function findReplacementPath(path) { | ||
return path.find(function (path) { | ||
var parentPath = path.parentPath; | ||
return path.find(path => { | ||
const { | ||
parentPath | ||
} = path; | ||
@@ -117,5 +150,5 @@ if (path.key == "object" && parentPath.isOptionalMemberExpression()) { | ||
return { | ||
inherits: _pluginSyntaxOptionalChaining.default, | ||
inherits: _pluginSyntaxOptionalChaining().default, | ||
visitor: { | ||
"OptionalCallExpression|OptionalMemberExpression": function OptionalCallExpressionOptionalMemberExpression(path) { | ||
"OptionalCallExpression|OptionalMemberExpression"(path) { | ||
if (!path.node.optional) { | ||
@@ -127,2 +160,3 @@ return; | ||
} | ||
} | ||
@@ -129,0 +163,0 @@ }; |
{ | ||
"name": "@babel/plugin-proposal-optional-chaining", | ||
"version": "7.0.0-beta.42", | ||
"version": "7.0.0-beta.43", | ||
"description": "Transform optional chaining operators into a series of nil checks", | ||
@@ -12,12 +12,12 @@ "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-proposal-optional-chaining", | ||
"dependencies": { | ||
"@babel/helper-plugin-utils": "7.0.0-beta.42", | ||
"@babel/plugin-syntax-optional-chaining": "7.0.0-beta.42" | ||
"@babel/helper-plugin-utils": "7.0.0-beta.43", | ||
"@babel/plugin-syntax-optional-chaining": "7.0.0-beta.43" | ||
}, | ||
"peerDependencies": { | ||
"@babel/core": "7.0.0-beta.42" | ||
"@babel/core": "7.0.0-beta.43" | ||
}, | ||
"devDependencies": { | ||
"@babel/core": "7.0.0-beta.42", | ||
"@babel/helper-plugin-test-runner": "7.0.0-beta.42" | ||
"@babel/core": "7.0.0-beta.43", | ||
"@babel/helper-plugin-test-runner": "7.0.0-beta.43" | ||
} | ||
} |
7292
125
+ Added@babel/code-frame@7.0.0-beta.43(transitive)
+ Added@babel/core@7.0.0-beta.43(transitive)
+ Added@babel/generator@7.0.0-beta.43(transitive)
+ Added@babel/helper-function-name@7.0.0-beta.43(transitive)
+ Added@babel/helper-get-function-arity@7.0.0-beta.43(transitive)
+ Added@babel/helper-plugin-utils@7.0.0-beta.43(transitive)
+ Added@babel/helper-split-export-declaration@7.0.0-beta.43(transitive)
+ Added@babel/helpers@7.0.0-beta.43(transitive)
+ Added@babel/highlight@7.0.0-beta.43(transitive)
+ Added@babel/plugin-syntax-optional-chaining@7.0.0-beta.43(transitive)
+ Added@babel/template@7.0.0-beta.43(transitive)
+ Added@babel/traverse@7.0.0-beta.43(transitive)
+ Added@babel/types@7.0.0-beta.43(transitive)
+ Addedbabylon@7.0.0-beta.43(transitive)
- Removed@babel/code-frame@7.0.0-beta.42(transitive)
- Removed@babel/core@7.0.0-beta.42(transitive)
- Removed@babel/generator@7.0.0-beta.42(transitive)
- Removed@babel/helper-function-name@7.0.0-beta.42(transitive)
- Removed@babel/helper-get-function-arity@7.0.0-beta.42(transitive)
- Removed@babel/helper-plugin-utils@7.0.0-beta.42(transitive)
- Removed@babel/helper-split-export-declaration@7.0.0-beta.42(transitive)
- Removed@babel/helpers@7.0.0-beta.42(transitive)
- Removed@babel/highlight@7.0.0-beta.42(transitive)
- Removed@babel/plugin-syntax-optional-chaining@7.0.0-beta.42(transitive)
- Removed@babel/template@7.0.0-beta.42(transitive)
- Removed@babel/traverse@7.0.0-beta.42(transitive)
- Removed@babel/types@7.0.0-beta.42(transitive)
- Removedbabylon@7.0.0-beta.42(transitive)