|
|
'use strict'; |
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true }); |
|
|
|
|
|
var helperPluginUtils = require('@babel/helper-plugin-utils'); |
|
|
var core = require('@babel/core'); |
|
|
|
|
|
function needsWrapping(node) { |
|
|
if (core.types.isLiteral(node) && !core.types.isTemplateLiteral(node)) { |
|
|
return false; |
|
|
} |
|
|
if (core.types.isCallExpression(node) || core.types.isOptionalCallExpression(node) || core.types.isNewExpression(node)) { |
|
|
return needsWrapping(node.callee) || node.arguments.some(needsWrapping); |
|
|
} |
|
|
if (core.types.isTemplateLiteral(node)) { |
|
|
return node.expressions.some(needsWrapping); |
|
|
} |
|
|
if (core.types.isTaggedTemplateExpression(node)) { |
|
|
return needsWrapping(node.tag) || needsWrapping(node.quasi); |
|
|
} |
|
|
if (core.types.isArrayExpression(node)) { |
|
|
return node.elements.some(needsWrapping); |
|
|
} |
|
|
if (core.types.isObjectExpression(node)) { |
|
|
return node.properties.some(prop => { |
|
|
if (core.types.isObjectProperty(prop)) { |
|
|
return needsWrapping(prop.value) || prop.computed && needsWrapping(prop.key); |
|
|
} |
|
|
if (core.types.isObjectMethod(prop)) { |
|
|
return false; |
|
|
} |
|
|
return false; |
|
|
}); |
|
|
} |
|
|
if (core.types.isMemberExpression(node) || core.types.isOptionalMemberExpression(node)) { |
|
|
return needsWrapping(node.object) || node.computed && needsWrapping(node.property); |
|
|
} |
|
|
if (core.types.isFunctionExpression(node) || core.types.isArrowFunctionExpression(node) || core.types.isClassExpression(node)) { |
|
|
return false; |
|
|
} |
|
|
if (core.types.isThisExpression(node)) { |
|
|
return false; |
|
|
} |
|
|
if (core.types.isSequenceExpression(node)) { |
|
|
return node.expressions.some(needsWrapping); |
|
|
} |
|
|
return true; |
|
|
} |
|
|
function wrapInitializer(path) { |
|
|
const { |
|
|
value |
|
|
} = path.node; |
|
|
if (value && needsWrapping(value)) { |
|
|
path.node.value = core.types.callExpression(core.types.arrowFunctionExpression([], value), []); |
|
|
} |
|
|
} |
|
|
var index = helperPluginUtils.declare(api => { |
|
|
api.assertVersion("^7.16.0"); |
|
|
return { |
|
|
name: "plugin-bugfix-safari-class-field-initializer-scope", |
|
|
visitor: { |
|
|
ClassProperty(path) { |
|
|
wrapInitializer(path); |
|
|
}, |
|
|
ClassPrivateProperty(path) { |
|
|
wrapInitializer(path); |
|
|
} |
|
|
} |
|
|
}; |
|
|
}); |
|
|
|
|
|
exports.default = index; |
|
|
|
|
|
|