Socket
Socket
Sign inDemoInstall

@babel/plugin-transform-classes

Package Overview
Dependencies
Maintainers
5
Versions
106
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@babel/plugin-transform-classes - npm Package Compare versions

Comparing version 7.0.0-beta.44 to 7.0.0-beta.45

192

lib/transformClass.js

@@ -19,3 +19,3 @@ "use strict";

function _helperReplaceSupers() {
var data = _interopRequireDefault(require("@babel/helper-replace-supers"));
var data = _interopRequireWildcard(require("@babel/helper-replace-supers"));

@@ -67,11 +67,2 @@ _helperReplaceSupers = function _helperReplaceSupers() {

var noMethodVisitor = {
"FunctionExpression|FunctionDeclaration": function FunctionExpressionFunctionDeclaration(path) {
path.skip();
},
Method: function Method(path) {
path.skip();
}
};
function buildConstructor(classRef, constructorBody, node) {

@@ -85,2 +76,32 @@ var func = _core().types.functionDeclaration(_core().types.cloneNode(classRef), [], constructorBody);

var verifyConstructorVisitor = _core().traverse.visitors.merge([_helperReplaceSupers().environmentVisitor, {
Super: function Super(path, state) {
if (state.isDerived) return;
var node = path.node,
parentPath = path.parentPath;
if (parentPath.isCallExpression({
callee: node
})) {
throw path.buildCodeFrameError("super() is only allowed in a derived constructor");
}
},
ThisExpression: function ThisExpression(path, state) {
if (!state.isDerived) return;
var node = path.node,
parentPath = path.parentPath;
if (parentPath.isMemberExpression({
object: node
})) {
return;
}
var assertion = _core().types.callExpression(state.file.addHelper("assertThisInitialized"), [node]);
path.replaceWith(assertion);
path.skip();
}
}]);
function transformClass(path, file, builtinClasses, isLoose) {

@@ -108,3 +129,3 @@ var classState = {

body: [],
bareSupers: [],
bareSupers: new Set(),
superThises: [],

@@ -115,5 +136,2 @@ pushedConstructor: false,

isLoose: false,
hasBareSuper: false,
instanceInitializersId: undefined,
staticInitializersId: undefined,
hasInstanceDescriptors: false,

@@ -129,34 +147,4 @@ hasStaticDescriptors: false,

var verifyConstructorVisitor = _core().traverse.visitors.merge([noMethodVisitor, {
CallExpression: {
exit: function exit(path) {
if (path.get("callee").isSuper()) {
setState({
hasBareSuper: true
});
if (!classState.isDerived) {
throw path.buildCodeFrameError("super() is only allowed in a derived constructor");
}
}
}
},
var findThisesVisitor = _core().traverse.visitors.merge([_helperReplaceSupers().environmentVisitor, {
ThisExpression: function ThisExpression(path) {
if (classState.isDerived) {
if (path.parentPath.isMemberExpression({
object: path.node
})) {
return;
}
var assertion = _core().types.callExpression(classState.file.addHelper("assertThisInitialized"), [path.node]);
path.replaceWith(assertion);
path.skip();
}
}
}]);
var findThisesVisitor = _core().traverse.visitors.merge([noMethodVisitor, {
ThisExpression: function ThisExpression(path) {
classState.superThises.push(path);

@@ -248,2 +236,3 @@ }

pushDescriptors();
pushInheritsToBody();
}

@@ -281,21 +270,41 @@

if (isConstructor) {
_path2.traverse(verifyConstructorVisitor);
_path2.traverse(verifyConstructorVisitor, {
isDerived: classState.isDerived,
file: classState.file
});
}
var replaceSupers = new (_helperReplaceSupers().default)({
forceSuperMemoisation: isConstructor,
methodPath: _path2,
methodNode: node,
objectRef: classState.classRef,
superRef: classState.superName,
inConstructor: isConstructor,
isStatic: node.static,
isLoose: classState.isLoose,
scope: classState.scope,
file: classState.file
}, true);
});
replaceSupers.replace();
var state = {
returns: [],
bareSupers: new Set()
};
_path2.traverse(_core().traverse.visitors.merge([_helperReplaceSupers().environmentVisitor, {
ReturnStatement: function ReturnStatement(path, state) {
if (!path.getFunctionParent().isArrowFunctionExpression()) {
state.returns.push(path);
}
},
Super: function Super(path, state) {
var node = path.node,
parentPath = path.parentPath;
if (parentPath.isCallExpression({
callee: node
})) {
state.bareSupers.add(parentPath);
}
}
}]), state);
if (isConstructor) {
pushConstructor(replaceSupers, node, _path2);
pushConstructor(state, node, _path2);
} else {

@@ -318,3 +327,2 @@ pushMethod(node, _path2);

function pushDescriptors() {
pushInheritsToBody();
var body = classState.body;

@@ -341,16 +349,5 @@ var instanceProps;

var args = [_core().types.cloneNode(classState.classRef), _core().types.nullLiteral(), _core().types.nullLiteral(), _core().types.nullLiteral(), _core().types.nullLiteral()];
var args = [_core().types.cloneNode(classState.classRef), _core().types.nullLiteral(), _core().types.nullLiteral()];
if (instanceProps) args[1] = instanceProps;
if (staticProps) args[2] = staticProps;
if (classState.instanceInitializersId) {
args[3] = classState.instanceInitializersId;
body.unshift(buildObjectAssignment(classState.instanceInitializersId));
}
if (classState.staticInitializersId) {
args[4] = classState.staticInitializersId;
body.unshift(buildObjectAssignment(classState.staticInitializersId));
}
var lastNonNullIndex = 0;

@@ -369,6 +366,2 @@

function buildObjectAssignment(id) {
return _core().types.variableDeclaration("var", [_core().types.variableDeclarator(id, _core().types.objectExpression([]))]);
}
function wrapSuperCall(bareSuper, superRef, thisRef, body) {

@@ -392,3 +385,3 @@ var bareSuperNode = bareSuper.node;

} else {
bareSuperNode = (0, _helperOptimiseCallExpression().default)(_core().types.logicalExpression("||", _core().types.memberExpression(_core().types.cloneNode(classState.classRef), _core().types.identifier("__proto__")), _core().types.callExpression(_core().types.memberExpression(_core().types.identifier("Object"), _core().types.identifier("getPrototypeOf")), [_core().types.cloneNode(classState.classRef)])), _core().types.thisExpression(), bareSuperNode.arguments);
bareSuperNode = (0, _helperOptimiseCallExpression().default)(_core().types.callExpression(classState.file.addHelper("getPrototypeOf"), [_core().types.cloneNode(classState.classRef)]), _core().types.thisExpression(), bareSuperNode.arguments);
call = _core().types.callExpression(classState.file.addHelper("possibleConstructorReturn"), [_core().types.thisExpression(), bareSuperNode]);

@@ -413,6 +406,4 @@ }

path.traverse(findThisesVisitor);
var guaranteedSuperBeforeFinish = !!classState.bareSupers.length;
var guaranteedSuperBeforeFinish = !!classState.bareSupers.size;
var superRef = classState.superName || _core().types.identifier("Function");
var _thisRef = function thisRef() {

@@ -441,3 +432,3 @@ var ref = path.scope.generateDeclaredUidIdentifier("this");

var bareSuper = _ref3;
wrapSuperCall(bareSuper, superRef, _thisRef, body);
wrapSuperCall(bareSuper, classState.superName, _thisRef, body);

@@ -471,3 +462,13 @@ if (guaranteedSuperBeforeFinish) {

var thisPath = _ref4;
thisPath.replaceWith(_thisRef());
var node = thisPath.node,
parentPath = thisPath.parentPath;
if (parentPath.isMemberExpression({
object: node
})) {
thisPath.replaceWith(_thisRef());
continue;
}
thisPath.replaceWith(_core().types.callExpression(classState.file.addHelper("assertThisInitialized"), [_thisRef()]));
}

@@ -605,3 +606,2 @@

classState.body.push(classState.construct);
pushInheritsToBody();
}

@@ -614,3 +614,3 @@

});
classState.body.unshift(_core().types.expressionStatement(_core().types.callExpression(classState.file.addHelper(classState.isLoose ? "inheritsLoose" : "inherits"), [_core().types.cloneNode(classState.classRef), _core().types.cloneNode(classState.superName)])));
classState.body.push(_core().types.expressionStatement(_core().types.callExpression(classState.file.addHelper(classState.isLoose ? "inheritsLoose" : "inherits"), [_core().types.cloneNode(classState.classRef), _core().types.cloneNode(classState.superName)])));
}

@@ -651,3 +651,3 @@

classRef: classState.node.id ? _core().types.identifier(classState.node.id.name) : classState.scope.generateUidIdentifier("class"),
superName: classState.node.superClass || _core().types.identifier("Function"),
superName: classState.node.superClass,
isDerived: !!classState.node.superClass,

@@ -680,4 +680,34 @@ constructorBody: _core().types.blockStatement([])

}));
var isStrict = path.isInStrictMode();
var constructorOnly = classState.classId && body.length === 1;
if (classState.classId && body.length === 1) {
if (constructorOnly && !isStrict) {
for (var _iterator6 = classState.construct.params, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
var _ref6;
if (_isArray6) {
if (_i6 >= _iterator6.length) break;
_ref6 = _iterator6[_i6++];
} else {
_i6 = _iterator6.next();
if (_i6.done) break;
_ref6 = _i6.value;
}
var param = _ref6;
if (!_core().types.isIdentifier(param)) {
constructorOnly = false;
break;
}
}
}
var directives = constructorOnly ? body[0].body.directives : [];
if (!isStrict) {
directives.push(_core().types.directive(_core().types.directiveLiteral("use strict")));
}
if (constructorOnly) {
return _core().types.toExpression(body[0]);

@@ -688,3 +718,3 @@ }

var container = _core().types.arrowFunctionExpression(closureParams, _core().types.blockStatement(body));
var container = _core().types.arrowFunctionExpression(closureParams, _core().types.blockStatement(body, directives));

@@ -691,0 +721,0 @@ return _core().types.callExpression(container, closureArgs);

{
"name": "@babel/plugin-transform-classes",
"version": "7.0.0-beta.44",
"version": "7.0.0-beta.45",
"description": "Compile ES2015 classes to ES5",

@@ -9,9 +9,9 @@ "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-classes",

"dependencies": {
"@babel/helper-annotate-as-pure": "7.0.0-beta.44",
"@babel/helper-define-map": "7.0.0-beta.44",
"@babel/helper-function-name": "7.0.0-beta.44",
"@babel/helper-optimise-call-expression": "7.0.0-beta.44",
"@babel/helper-plugin-utils": "7.0.0-beta.44",
"@babel/helper-replace-supers": "7.0.0-beta.44",
"@babel/helper-split-export-declaration": "7.0.0-beta.44",
"@babel/helper-annotate-as-pure": "7.0.0-beta.45",
"@babel/helper-define-map": "7.0.0-beta.45",
"@babel/helper-function-name": "7.0.0-beta.45",
"@babel/helper-optimise-call-expression": "7.0.0-beta.45",
"@babel/helper-plugin-utils": "7.0.0-beta.45",
"@babel/helper-replace-supers": "7.0.0-beta.45",
"@babel/helper-split-export-declaration": "7.0.0-beta.45",
"globals": "^11.1.0"

@@ -23,8 +23,8 @@ },

"peerDependencies": {
"@babel/core": "7.0.0-beta.44"
"@babel/core": "7.0.0-beta.45"
},
"devDependencies": {
"@babel/core": "7.0.0-beta.44",
"@babel/helper-plugin-test-runner": "7.0.0-beta.44"
"@babel/core": "7.0.0-beta.45",
"@babel/helper-plugin-test-runner": "7.0.0-beta.45"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc