@babel/plugin-transform-classes
Advanced tools
Comparing version 7.0.0-beta.44 to 7.0.0-beta.45
@@ -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" | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
30151
691
+ Added@babel/code-frame@7.0.0-beta.45(transitive)
+ Added@babel/core@7.0.0-beta.45(transitive)
+ Added@babel/generator@7.0.0-beta.45(transitive)
+ Added@babel/helper-annotate-as-pure@7.0.0-beta.45(transitive)
+ Added@babel/helper-define-map@7.0.0-beta.45(transitive)
+ Added@babel/helper-function-name@7.0.0-beta.45(transitive)
+ Added@babel/helper-get-function-arity@7.0.0-beta.45(transitive)
+ Added@babel/helper-member-expression-to-functions@7.0.0-beta.45(transitive)
+ Added@babel/helper-optimise-call-expression@7.0.0-beta.45(transitive)
+ Added@babel/helper-plugin-utils@7.0.0-beta.45(transitive)
+ Added@babel/helper-replace-supers@7.0.0-beta.45(transitive)
+ Added@babel/helper-split-export-declaration@7.0.0-beta.45(transitive)
+ Added@babel/helpers@7.0.0-beta.45(transitive)
+ Added@babel/highlight@7.0.0-beta.45(transitive)
+ Added@babel/template@7.0.0-beta.45(transitive)
+ Added@babel/traverse@7.0.0-beta.45(transitive)
+ Added@babel/types@7.0.0-beta.45(transitive)
+ Addedbabylon@7.0.0-beta.45(transitive)
- Removed@babel/code-frame@7.0.0-beta.44(transitive)
- Removed@babel/core@7.0.0-beta.44(transitive)
- Removed@babel/generator@7.0.0-beta.44(transitive)
- Removed@babel/helper-annotate-as-pure@7.0.0-beta.44(transitive)
- Removed@babel/helper-define-map@7.0.0-beta.44(transitive)
- Removed@babel/helper-function-name@7.0.0-beta.44(transitive)
- Removed@babel/helper-get-function-arity@7.0.0-beta.44(transitive)
- Removed@babel/helper-optimise-call-expression@7.0.0-beta.44(transitive)
- Removed@babel/helper-plugin-utils@7.0.0-beta.44(transitive)
- Removed@babel/helper-replace-supers@7.0.0-beta.44(transitive)
- Removed@babel/helper-split-export-declaration@7.0.0-beta.44(transitive)
- Removed@babel/helpers@7.0.0-beta.44(transitive)
- Removed@babel/highlight@7.0.0-beta.44(transitive)
- Removed@babel/template@7.0.0-beta.44(transitive)
- Removed@babel/traverse@7.0.0-beta.44(transitive)
- Removed@babel/types@7.0.0-beta.44(transitive)
- Removedbabylon@7.0.0-beta.44(transitive)