From 6597a472b30419493f123bff1e9194e4c09e488e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20T=C3=B6r=C3=B6k?= Date: Tue, 10 Apr 2018 23:33:38 +0200 Subject: [PATCH] Add "use strict" directive (#7411) * #7349 - Add "use strict" directive to transformed class bodies * Update tests (#7349) * Add test for program with use strict directive (#7349) * Update tests (#7349) * Update source mapping (#7349) * Add test for parent blockStatement with use strict directive (#7349) * Update tests (#7349) * Update tests (#7349) * Update tests (#7349) * Add test for constructor-only class (#7349) * Constructor only classes are strict, too But constructor only that use non-simple parameters must use a strict function wrapper. * Fix test * Wrapper not needed if class is already strict * Revert change to lerna.json --- .../misc/regression-1155/output.js | 2 + .../source-maps/class/output.js | 2 + .../source-maps/class/source-mappings.json | 4 +- .../fixtures/public-loose/computed/output.js | 2 + .../constructor-collision/output.js | 2 + .../fixtures/public-loose/derived/output.js | 2 + .../fixtures/public-loose/foobar/output.js | 2 + .../public-loose/instance-computed/output.js | 2 + .../public-loose/instance-undefined/output.js | 2 + .../fixtures/public-loose/instance/output.js | 2 + .../public-loose/regression-T6719/output.js | 2 + .../public-loose/static-infer-name/output.js | 2 + .../public-loose/static-undefined/output.js | 2 + .../fixtures/public-loose/static/output.js | 2 + .../public-loose/super-call/output.js | 4 ++ .../public-loose/super-expression/output.js | 2 + .../public-loose/super-statement/output.js | 2 + .../super-with-collision/output.js | 2 + .../test/fixtures/public/computed/output.js | 2 + .../public/constructor-collision/output.js | 2 + .../test/fixtures/public/derived/output.js | 2 + .../test/fixtures/public/foobar/output.js | 2 + .../public/instance-computed/output.js | 2 + .../public/instance-undefined/output.js | 2 + .../test/fixtures/public/instance/output.js | 2 + .../public/regression-T6719/output.js | 2 + .../public/static-infer-name/output.js | 2 + .../public/static-undefined/output.js | 2 + .../test/fixtures/public/static/output.js | 2 + .../test/fixtures/public/super-call/output.js | 4 ++ .../public/super-expression/output.js | 2 + .../fixtures/public/super-statement/output.js | 2 + .../public/super-with-collision/output.js | 2 + .../test/fixtures/regression/6154/output.js | 2 + .../test/fixtures/regression/T6719/output.js | 2 + .../test/fixtures/regression/7030/output.js | 2 + .../test/fixtures/regression/T6984/output.js | 2 + .../src/transformClass.js | 41 +++++++++++++++++-- .../fixtures/extend-builtins/loose/output.js | 2 + .../extend-builtins/shadowed/output.js | 4 ++ .../fixtures/extend-builtins/spec/output.js | 2 + .../loose-classCallCheck/class/output.js | 4 +- .../with-constructor/output.js | 4 ++ .../with-superClass/output.js | 6 ++- .../loose/accessing-super-class/output.js | 2 + .../accessing-super-properties/output.js | 2 + .../input.js | 6 +++ .../output.js | 15 +++++++ .../loose/calling-super-properties/output.js | 2 + .../loose/constructor-order/output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../test/fixtures/loose/literal-key/output.js | 2 + .../method-return-type-annotation/output.js | 2 + .../loose/method-reuse-prototype/output.js | 2 + .../input.js | 7 ++++ .../output.js | 13 ++++++ .../output.js | 4 ++ .../test/fixtures/loose/super-class/output.js | 2 + .../loose/super-function-fallback/output.js | 2 + .../test/fixtures/regression/5817/output.js | 2 + .../test/fixtures/regression/T2494/output.js | 2 + .../test/fixtures/regression/T2997/output.js | 4 ++ .../test/fixtures/regression/T6712/output.js | 2 + .../test/fixtures/regression/T6755/output.js | 2 + .../test/fixtures/regression/T7010/output.js | 2 + .../test/fixtures/regression/T7537/output.js | 4 ++ .../spec/accessing-super-class/output.js | 2 + .../spec/accessing-super-properties/output.js | 2 + .../spec/calling-super-properties/output.js | 2 + .../fixtures/spec/computed-methods/output.js | 2 + .../constructor-binding-collision/output.js | 2 + .../fixtures/spec/constructor-only/input.js | 5 +++ .../fixtures/spec/constructor-only/output.js | 5 +++ .../test/fixtures/spec/constructor/output.js | 6 +++ .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../spec/inferred-expression-name/output.js | 2 + .../spec/instance-getter-and-setter/output.js | 2 + .../fixtures/spec/instance-getter/output.js | 2 + .../fixtures/spec/instance-method/output.js | 2 + .../fixtures/spec/instance-setter/output.js | 2 + .../method-return-type-annotation/output.js | 2 + .../test/fixtures/spec/plain-class/output.js | 2 + .../spec/preserves-directives/output.js | 3 ++ .../spec/relaxed-method-coercion/output.js | 2 + .../test/fixtures/spec/statement/output.js | 6 +++ .../test/fixtures/spec/static/output.js | 2 + .../spec/super-class-anonymous/output.js | 20 +++++++++ .../output.js | 4 ++ .../test/fixtures/spec/super-class/output.js | 2 + .../spec/super-function-fallback/output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../regression/class-prop-types/output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../function-name/class-method/output.js | 2 + .../fixtures/jscript/simple-class/output.js | 2 + .../parameters/default-iife-4253/output.js | 18 +++++--- .../parameters/default-iife-self/output.js | 36 +++++++++++----- .../parameters/rest-arrow-functions/output.js | 2 + .../parameters/rest-nested-iife/output.js | 2 + .../output.js | 2 + .../test/fixtures/runtime/class/output.js | 2 + .../fixtures/runtime/no-helpers/output.js | 2 + .../useBuiltIns-useESModules/output.js | 2 + .../use-options/useBuiltIns/output.js | 2 + .../use-options/useESModules/output.js | 2 + packages/babel-standalone/test/babel.js | 2 +- 127 files changed, 410 insertions(+), 23 deletions(-) create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/blockstatement-with-use-strict-directive/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/blockstatement-with-use-strict-directive/output.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/program-with-use-strict-directive/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/program-with-use-strict-directive/output.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-only/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-only/output.js diff --git a/packages/babel-core/test/fixtures/transformation/misc/regression-1155/output.js b/packages/babel-core/test/fixtures/transformation/misc/regression-1155/output.js index f1349b84f7..78220af85d 100644 --- a/packages/babel-core/test/fixtures/transformation/misc/regression-1155/output.js +++ b/packages/babel-core/test/fixtures/transformation/misc/regression-1155/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo(options) { diff --git a/packages/babel-core/test/fixtures/transformation/source-maps/class/output.js b/packages/babel-core/test/fixtures/transformation/source-maps/class/output.js index c68f687b3a..76b7ca7f89 100644 --- a/packages/babel-core/test/fixtures/transformation/source-maps/class/output.js +++ b/packages/babel-core/test/fixtures/transformation/source-maps/class/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function () { + "use strict"; + function Test() { babelHelpers.classCallCheck(this, Test); } diff --git a/packages/babel-core/test/fixtures/transformation/source-maps/class/source-mappings.json b/packages/babel-core/test/fixtures/transformation/source-maps/class/source-mappings.json index 5d8c4d8816..b53208fbe4 100644 --- a/packages/babel-core/test/fixtures/transformation/source-maps/class/source-mappings.json +++ b/packages/babel-core/test/fixtures/transformation/source-maps/class/source-mappings.json @@ -4,7 +4,7 @@ "column": 10 }, "generated": { - "line": 11, + "line": 13, "column": 15 } -}] +}] \ No newline at end of file diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/computed/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/computed/output.js index 0c45f99e1d..9389374c65 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/computed/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/computed/output.js @@ -24,6 +24,8 @@ var _ref4 = `template${expression}`; var MyClass = /*#__PURE__*/ function () { + "use strict"; + function MyClass() { babelHelpers.classCallCheck(this, MyClass); this[null] = "null"; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/constructor-collision/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/constructor-collision/output.js index b15e5d8f86..e1a32c84b8 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/constructor-collision/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/constructor-collision/output.js @@ -1,6 +1,8 @@ var foo = "bar"; var Foo = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); this.bar = foo; var _foo = "foo"; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/derived/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/derived/output.js index 3554a0e804..c4ec254b61 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/derived/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/derived/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo(...args) { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/output.js index 0fab0c8e95..3f43d7eb0f 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/output.js @@ -1,6 +1,8 @@ var Child = /*#__PURE__*/ function (_Parent) { + "use strict"; + babelHelpers.inherits(Child, _Parent); function Child() { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance-computed/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance-computed/output.js index d565431f92..0e98b482c7 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance-computed/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance-computed/output.js @@ -2,6 +2,8 @@ function test(x) { var _x = x; var F = function F() { + "use strict"; + babelHelpers.classCallCheck(this, F); this[_x] = 1; }; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance-undefined/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance-undefined/output.js index 7266d5fa3e..fce9e3540e 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance-undefined/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance-undefined/output.js @@ -1,4 +1,6 @@ var Foo = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); this.bar = void 0; }; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance/output.js index f832ea3565..0a72dc1bf7 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/instance/output.js @@ -1,4 +1,6 @@ var Foo = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); this.bar = "foo"; }; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/regression-T6719/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/regression-T6719/output.js index c815369e9e..f8aebbe026 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/regression-T6719/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/regression-T6719/output.js @@ -4,6 +4,8 @@ function withContext(ComposedComponent) { return _temp = _class = /*#__PURE__*/ function (_Component) { + "use strict"; + babelHelpers.inherits(WithContext, _Component); function WithContext() { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-infer-name/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-infer-name/output.js index b9dfd403a2..293485cf34 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-infer-name/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-infer-name/output.js @@ -1,5 +1,7 @@ var _class, _temp; var Foo = (_temp = _class = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); }, _class.num = 0, _temp); diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-undefined/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-undefined/output.js index 94707d5451..463ea3130e 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-undefined/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-undefined/output.js @@ -1,4 +1,6 @@ var Foo = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); }; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static/output.js index 4d0c09379d..50eea8c486 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static/output.js @@ -1,4 +1,6 @@ var Foo = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); }; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-call/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-call/output.js index 201ad4d5dc..36274bc9f9 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-call/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-call/output.js @@ -1,6 +1,8 @@ var A = /*#__PURE__*/ function () { + "use strict"; + function A() { babelHelpers.classCallCheck(this, A); } @@ -17,6 +19,8 @@ function () { var B = /*#__PURE__*/ function (_A) { + "use strict"; + babelHelpers.inherits(B, _A); function B(...args) { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-expression/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-expression/output.js index 0aff7fc69f..d682e4a6ed 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-expression/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-expression/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-statement/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-statement/output.js index e286be95c0..c63a614d02 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-statement/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-statement/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-with-collision/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-with-collision/output.js index bd91aee83d..778fd34564 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-with-collision/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-with-collision/output.js @@ -1,4 +1,6 @@ var A = function A(_force) { + "use strict"; + babelHelpers.classCallCheck(this, A); this.force = force; this.foo = babelHelpers.get(babelHelpers.getPrototypeOf(A.prototype), "method", babelHelpers.assertThisInitialized(this)).call(this); diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/computed/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/computed/output.js index a52e83bc2f..155ee19677 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/computed/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/computed/output.js @@ -24,6 +24,8 @@ var _ref4 = `template${expression}`; var MyClass = /*#__PURE__*/ function () { + "use strict"; + function MyClass() { babelHelpers.classCallCheck(this, MyClass); Object.defineProperty(this, null, { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/constructor-collision/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/constructor-collision/output.js index 9d80c3926c..cd3bee9780 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/constructor-collision/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/constructor-collision/output.js @@ -1,6 +1,8 @@ var foo = "bar"; var Foo = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); Object.defineProperty(this, "bar", { configurable: true, diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived/output.js index 332f2cb090..29668c34fd 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo(...args) { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/foobar/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/foobar/output.js index 6404800a00..db8ae705a9 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/foobar/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/foobar/output.js @@ -1,6 +1,8 @@ var Child = /*#__PURE__*/ function (_Parent) { + "use strict"; + babelHelpers.inherits(Child, _Parent); function Child() { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance-computed/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance-computed/output.js index 8e21a1801f..7edfd976f9 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance-computed/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance-computed/output.js @@ -2,6 +2,8 @@ function test(x) { var _x = x; var F = function F() { + "use strict"; + babelHelpers.classCallCheck(this, F); Object.defineProperty(this, _x, { configurable: true, diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance-undefined/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance-undefined/output.js index a039021e41..e9996a624b 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance-undefined/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance-undefined/output.js @@ -1,4 +1,6 @@ var Foo = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); Object.defineProperty(this, "bar", { configurable: true, diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance/output.js index caa2e35bbc..ef0a7c734e 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/instance/output.js @@ -1,4 +1,6 @@ var Foo = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); Object.defineProperty(this, "bar", { configurable: true, diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/regression-T6719/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/regression-T6719/output.js index 874bc077bb..4e45d2b07f 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/regression-T6719/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/regression-T6719/output.js @@ -4,6 +4,8 @@ function withContext(ComposedComponent) { return _temp = _class = /*#__PURE__*/ function (_Component) { + "use strict"; + babelHelpers.inherits(WithContext, _Component); function WithContext() { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-infer-name/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-infer-name/output.js index 479b45b8ef..2b91078682 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-infer-name/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-infer-name/output.js @@ -1,6 +1,8 @@ var _class, _temp; var Foo = (_temp = _class = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); }, Object.defineProperty(_class, "num", { configurable: true, diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-undefined/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-undefined/output.js index dd57556d7c..efcc95d4ed 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-undefined/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-undefined/output.js @@ -1,4 +1,6 @@ var Foo = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); }; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static/output.js index 4f84872b8a..34b428919a 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static/output.js @@ -1,4 +1,6 @@ var Foo = function Foo() { + "use strict"; + babelHelpers.classCallCheck(this, Foo); }; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-call/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-call/output.js index 365452158f..526591d0ef 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-call/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-call/output.js @@ -1,6 +1,8 @@ var A = /*#__PURE__*/ function () { + "use strict"; + function A() { babelHelpers.classCallCheck(this, A); } @@ -17,6 +19,8 @@ function () { var B = /*#__PURE__*/ function (_A) { + "use strict"; + babelHelpers.inherits(B, _A); function B(...args) { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-expression/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-expression/output.js index 942670c9bf..c47e317152 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-expression/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-expression/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-statement/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-statement/output.js index c28e24fbb3..87c98cac68 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-statement/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-statement/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-with-collision/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-with-collision/output.js index f172e7c8b8..08c52c6d10 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-with-collision/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-with-collision/output.js @@ -1,4 +1,6 @@ var A = function A(_force) { + "use strict"; + babelHelpers.classCallCheck(this, A); Object.defineProperty(this, "force", { configurable: true, diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/6154/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/6154/output.js index d6b68f2eee..7cb8f5de65 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/6154/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/6154/output.js @@ -17,6 +17,8 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.getPrototypeOf || functio function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } var Test = function Test() { + "use strict"; + var _this2 = this; _classCallCheck(this, Test); diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/output.js index c815369e9e..f8aebbe026 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/output.js @@ -4,6 +4,8 @@ function withContext(ComposedComponent) { return _temp = _class = /*#__PURE__*/ function (_Component) { + "use strict"; + babelHelpers.inherits(WithContext, _Component); function WithContext() { diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/regression/7030/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/regression/7030/output.js index af11401cc0..aa7a196e26 100644 --- a/packages/babel-plugin-proposal-decorators/test/fixtures/regression/7030/output.js +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/regression/7030/output.js @@ -30,6 +30,8 @@ function generateAsyncAction(type) { var A = /*#__PURE__*/ function (_B) { + "use strict"; + _inherits(A, _B); function A(timestamp) { diff --git a/packages/babel-plugin-proposal-function-bind/test/fixtures/regression/T6984/output.js b/packages/babel-plugin-proposal-function-bind/test/fixtures/regression/T6984/output.js index 2d5326366b..6e30a3b425 100644 --- a/packages/babel-plugin-proposal-function-bind/test/fixtures/regression/T6984/output.js +++ b/packages/babel-plugin-proposal-function-bind/test/fixtures/regression/T6984/output.js @@ -11,6 +11,8 @@ function _two() {} let Test1 = /*#__PURE__*/ function () { + "use strict"; + function Test1() { _classCallCheck(this, Test1); } diff --git a/packages/babel-plugin-transform-classes/src/transformClass.js b/packages/babel-plugin-transform-classes/src/transformClass.js index 8a2c9d6439..b4283eedf8 100644 --- a/packages/babel-plugin-transform-classes/src/transformClass.js +++ b/packages/babel-plugin-transform-classes/src/transformClass.js @@ -688,16 +688,51 @@ export default function transformClass( classState.staticPropBody.map(fn => fn(t.cloneNode(classState.classRef))), ); - if (classState.classId && body.length === 1) { + const strictParent = path.findParent(path => { + if (path.isProgram() && path.node.sourceType === "module") { + return true; + } + + if (path.isClassBody()) { + return true; + } + + if (!path.isProgram() && !path.isBlockStatement()) { + return false; + } + + return path.node.directives.some( + directive => directive.value.value === "use strict", + ); + }); + + let constructorOnly = classState.classId && body.length === 1; + if (constructorOnly && !strictParent) { + for (const param of classState.construct.params) { + // It's illegal to put a use strict directive into the body of a function + // with non-simple parameters for some reason. So, we have to use a strict + // wrapper function. + if (!t.isIdentifier(param)) { + constructorOnly = false; + break; + } + } + } + + const directives = constructorOnly ? body[0].body.directives : []; + if (!strictParent) { + directives.push(t.directive(t.directiveLiteral("use strict"))); + } + + if (constructorOnly) { // named class with only a constructor return t.toExpression(body[0]); } body.push(t.returnStatement(t.cloneNode(classState.classRef))); - const container = t.arrowFunctionExpression( closureParams, - t.blockStatement(body), + t.blockStatement(body, directives), ); return t.callExpression(container, closureArgs); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/loose/output.js b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/loose/output.js index 409e1211ac..b4cb5c179a 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/loose/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/loose/output.js @@ -11,6 +11,8 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.getPrototypeOf || functio var List = /*#__PURE__*/ function (_Array) { + "use strict"; + _inheritsLoose(List, _Array); function List() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/shadowed/output.js b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/shadowed/output.js index 19472774a1..dae6970860 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/shadowed/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/shadowed/output.js @@ -1,10 +1,14 @@ let Array = function Array() { + "use strict"; + babelHelpers.classCallCheck(this, Array); }; let List = /*#__PURE__*/ function (_Array) { + "use strict"; + babelHelpers.inherits(List, _Array); function List() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/spec/output.js b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/spec/output.js index df62b55860..708a9c4b80 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/spec/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/spec/output.js @@ -17,6 +17,8 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.getPrototypeOf || functio var List = /*#__PURE__*/ function (_Array) { + "use strict"; + _inherits(List, _Array); function List() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/class/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/class/output.js index 8311a6c3db..ad9405abde 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/class/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/class/output.js @@ -1 +1,3 @@ -let A = function A() {}; +let A = function A() { + "use strict"; +}; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-constructor/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-constructor/output.js index b06aa9274b..1844688c05 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-constructor/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-constructor/output.js @@ -1,10 +1,14 @@ let A = function A() { + "use strict"; + console.log('a'); }; let B = /*#__PURE__*/ function () { + "use strict"; + function B() {} var _proto = B.prototype; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-superClass/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-superClass/output.js index a8e18067dd..7dfbc2cda9 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-superClass/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-superClass/output.js @@ -2,11 +2,15 @@ function _assertThisInitialized(self) { if (self === void 0) { throw new Referen function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } -let B = function B() {}; +let B = function B() { + "use strict"; +}; let A = /*#__PURE__*/ function (_B) { + "use strict"; + _inheritsLoose(A, _B); function A(track) { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-class/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-class/output.js index 89e2167cad..ceb0946730 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-class/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-class/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function (_Foo) { + "use strict"; + babelHelpers.inheritsLoose(Test, _Foo); function Test() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-properties/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-properties/output.js index c4f39bbb58..8ecd49b4ca 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-properties/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-properties/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function (_Foo) { + "use strict"; + babelHelpers.inheritsLoose(Test, _Foo); function Test() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/blockstatement-with-use-strict-directive/input.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/blockstatement-with-use-strict-directive/input.js new file mode 100644 index 0000000000..6ae68b11c2 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/blockstatement-with-use-strict-directive/input.js @@ -0,0 +1,6 @@ +function t() { + "use strict"; + class Foo { + method() {} + } + } \ No newline at end of file diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/blockstatement-with-use-strict-directive/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/blockstatement-with-use-strict-directive/output.js new file mode 100644 index 0000000000..9295d5720e --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/blockstatement-with-use-strict-directive/output.js @@ -0,0 +1,15 @@ +function t() { + "use strict"; + + var Foo = + /*#__PURE__*/ + function () { + function Foo() {} + + var _proto = Foo.prototype; + + _proto.method = function method() {}; + + return Foo; + }(); +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/calling-super-properties/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/calling-super-properties/output.js index 81b0cc1098..2e6eba2520 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/calling-super-properties/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/calling-super-properties/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function (_Foo) { + "use strict"; + babelHelpers.inheritsLoose(Test, _Foo); function Test() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/constructor-order/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/constructor-order/output.js index 41baf4126a..388e99e459 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/constructor-order/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/constructor-order/output.js @@ -1,6 +1,8 @@ var x = /*#__PURE__*/ function () { + "use strict"; + var _proto = x.prototype; _proto.f = function f() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-must-call-super/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-must-call-super/output.js index ecb4d54469..a221b7cfb7 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-must-call-super/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-must-call-super/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inheritsLoose(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-falsey/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-falsey/output.js index 8f91a1a798..c8ecc7ad2a 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-falsey/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-falsey/output.js @@ -1,6 +1,8 @@ var Child = /*#__PURE__*/ function (_Base) { + "use strict"; + babelHelpers.inheritsLoose(Child, _Base); function Child() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-object/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-object/output.js index 9d6464d2f2..fe7950eb71 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-object/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-object/output.js @@ -1,6 +1,8 @@ var Child = /*#__PURE__*/ function (_Base) { + "use strict"; + babelHelpers.inheritsLoose(Child, _Base); function Child() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/literal-key/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/literal-key/output.js index f03cd91ce8..15ab4f17a6 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/literal-key/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/literal-key/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function () { + "use strict"; + function Foo() {} var _proto = Foo.prototype; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-return-type-annotation/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-return-type-annotation/output.js index 70948a6738..a545674a57 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-return-type-annotation/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-return-type-annotation/output.js @@ -2,6 +2,8 @@ var C = /*#__PURE__*/ function () { + "use strict"; + function C() {} var _proto = C.prototype; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-reuse-prototype/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-reuse-prototype/output.js index fbfea1f9dd..49978484eb 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-reuse-prototype/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-reuse-prototype/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function () { + "use strict"; + function Test() {} var _proto = Test.prototype; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/program-with-use-strict-directive/input.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/program-with-use-strict-directive/input.js new file mode 100644 index 0000000000..4bbf0638b3 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/program-with-use-strict-directive/input.js @@ -0,0 +1,7 @@ +"use strict"; + +class Foo { + method() { + + } +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/program-with-use-strict-directive/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/program-with-use-strict-directive/output.js new file mode 100644 index 0000000000..54034fca62 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/program-with-use-strict-directive/output.js @@ -0,0 +1,13 @@ +"use strict"; + +var Foo = +/*#__PURE__*/ +function () { + function Foo() {} + + var _proto = Foo.prototype; + + _proto.method = function method() {}; + + return Foo; +}(); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class-id-member-expression/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class-id-member-expression/output.js index 7d4a5eceee..1a90473147 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class-id-member-expression/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class-id-member-expression/output.js @@ -1,6 +1,8 @@ var BaseController = /*#__PURE__*/ function (_Chaplin$Controller) { + "use strict"; + babelHelpers.inheritsLoose(BaseController, _Chaplin$Controller); function BaseController() { @@ -13,6 +15,8 @@ function (_Chaplin$Controller) { var BaseController2 = /*#__PURE__*/ function (_Chaplin$Controller$A) { + "use strict"; + babelHelpers.inheritsLoose(BaseController2, _Chaplin$Controller$A); function BaseController2() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class/output.js index 232a9f97e3..779cd3877c 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function (_Foo) { + "use strict"; + babelHelpers.inheritsLoose(Test, _Foo); function Test() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/super-function-fallback/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/super-function-fallback/output.js index 090bb67b1b..078d48fe93 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/super-function-fallback/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/super-function-fallback/output.js @@ -1,3 +1,5 @@ var Test = function Test() { + "use strict"; + Function.prototype.hasOwnProperty.call(this, "test"); }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/5817/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/5817/output.js index 51fb5e2723..af6350f201 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/5817/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/5817/output.js @@ -1,6 +1,8 @@ var A = /*#__PURE__*/ function (_B) { + "use strict"; + babelHelpers.inherits(A, _B); function A() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/T2494/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/T2494/output.js index e343968a10..2ec0ec90d8 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/T2494/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/T2494/output.js @@ -2,6 +2,8 @@ var x = { Foo: /*#__PURE__*/ function (_Foo) { + "use strict"; + babelHelpers.inherits(_class, _Foo); function _class() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/T2997/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/T2997/output.js index 0437a00e7b..5779429055 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/T2997/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/T2997/output.js @@ -1,10 +1,14 @@ var A = function A() { + "use strict"; + babelHelpers.classCallCheck(this, A); }; var B = /*#__PURE__*/ function (_A) { + "use strict"; + babelHelpers.inherits(B, _A); function B() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/T6712/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/T6712/output.js index 08cac4b578..0ab1f6cb2b 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/T6712/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/T6712/output.js @@ -1,6 +1,8 @@ var A = /*#__PURE__*/ function () { + "use strict"; + function A() { babelHelpers.classCallCheck(this, A); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/T6755/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/T6755/output.js index 6b2fd1e691..bf1bf08282 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/T6755/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/T6755/output.js @@ -1,6 +1,8 @@ var Example = /*#__PURE__*/ function () { + "use strict"; + function Example() {} var _proto = Example.prototype; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/T7010/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/T7010/output.js index 4f8dfbdae2..724512cb32 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/T7010/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/T7010/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function () { + "use strict"; + function Foo(val) { babelHelpers.classCallCheck(this, Foo); this._val = val; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/T7537/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/T7537/output.js index 4f7e6d5549..d9ca778729 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/T7537/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/T7537/output.js @@ -15,12 +15,16 @@ function _instanceof(left, right) { if (right != null && typeof Symbol !== "unde function _classCallCheck(instance, Constructor) { if (!_instanceof(instance, Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var B = function B() { + "use strict"; + _classCallCheck(this, B); }; var A = /*#__PURE__*/ function (_B) { + "use strict"; + _inherits(A, _B); function A(track) { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-class/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-class/output.js index d6d2dcd716..fd268f2e93 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-class/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-class/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function (_Foo) { + "use strict"; + babelHelpers.inherits(Test, _Foo); function Test() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-properties/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-properties/output.js index df07a5fe01..aef35bbb31 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-properties/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-properties/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function (_Foo) { + "use strict"; + babelHelpers.inherits(Test, _Foo); function Test() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/calling-super-properties/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/calling-super-properties/output.js index 5ff3862b0e..2451b695d1 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/calling-super-properties/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/calling-super-properties/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function (_Foo) { + "use strict"; + babelHelpers.inherits(Test, _Foo); function Test() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/computed-methods/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/computed-methods/output.js index cd00a3ce2d..63761f596e 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/computed-methods/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/computed-methods/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function () { + "use strict"; + function Foo() { babelHelpers.classCallCheck(this, Foo); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-binding-collision/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-binding-collision/output.js index 5247dab668..176b0b84d7 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-binding-collision/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-binding-collision/output.js @@ -1,4 +1,6 @@ var Example = function Example() { + "use strict"; + babelHelpers.classCallCheck(this, Example); var _Example; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-only/input.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-only/input.js new file mode 100644 index 0000000000..f5e21bc1d7 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-only/input.js @@ -0,0 +1,5 @@ +class Foo { + constructor() { + + } +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-only/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-only/output.js new file mode 100644 index 0000000000..43ce45f806 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor-only/output.js @@ -0,0 +1,5 @@ +var Foo = function Foo() { + "use strict"; + + babelHelpers.classCallCheck(this, Foo); +}; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor/output.js index f43f3601bd..2ebe633512 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor/output.js @@ -1,4 +1,6 @@ var Test = function Test() { + "use strict"; + babelHelpers.classCallCheck(this, Test); this.state = "test"; }; @@ -6,6 +8,8 @@ var Test = function Test() { var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { @@ -21,6 +25,8 @@ function (_Bar) { }(Bar); var ConstructorScoping = function ConstructorScoping() { + "use strict"; + babelHelpers.classCallCheck(this, ConstructorScoping); var bar; { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/delay-arrow-function-for-bare-super-derived/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/delay-arrow-function-for-bare-super-derived/output.js index 18e3b10e80..83a4d9b341 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/delay-arrow-function-for-bare-super-derived/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/delay-arrow-function-for-bare-super-derived/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-2/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-2/output.js index 3fdb9ef413..876987aef3 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-2/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-2/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-3/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-3/output.js index 3211f729d8..1859492a7b 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-3/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-3/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-4/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-4/output.js index 0bd914d207..3ffe7db5e6 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-4/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-4/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super/output.js index d1029e22e3..1a1fed3e09 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-falsey/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-falsey/output.js index 59f3410c93..231c297d7d 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-falsey/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-falsey/output.js @@ -1,6 +1,8 @@ var Child = /*#__PURE__*/ function (_Base) { + "use strict"; + babelHelpers.inherits(Child, _Base); function Child() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-object/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-object/output.js index fb91ff5148..f0f8887eda 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-object/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-object/output.js @@ -1,6 +1,8 @@ var Child = /*#__PURE__*/ function (_Base) { + "use strict"; + babelHelpers.inherits(Child, _Base); function Child() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/inferred-expression-name/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/inferred-expression-name/output.js index f2bb238d0a..dc3d9a57e1 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/inferred-expression-name/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/inferred-expression-name/output.js @@ -1,5 +1,7 @@ var o = { foo: function foo() { + "use strict"; + babelHelpers.classCallCheck(this, foo); } }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-getter-and-setter/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-getter-and-setter/output.js index 4e6b1addd2..fb7c1e0a44 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-getter-and-setter/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-getter-and-setter/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function () { + "use strict"; + function Test() { babelHelpers.classCallCheck(this, Test); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-getter/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-getter/output.js index 3623db226b..7881728022 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-getter/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-getter/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function () { + "use strict"; + function Test() { babelHelpers.classCallCheck(this, Test); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-method/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-method/output.js index 240b4c1f05..88d63804cf 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-method/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-method/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function () { + "use strict"; + function Test() { babelHelpers.classCallCheck(this, Test); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-setter/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-setter/output.js index 62c12ab32a..86ccf7f552 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-setter/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/instance-setter/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function () { + "use strict"; + function Test() { babelHelpers.classCallCheck(this, Test); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-return-type-annotation/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-return-type-annotation/output.js index e25af88244..3452df1054 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-return-type-annotation/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-return-type-annotation/output.js @@ -2,6 +2,8 @@ var C = /*#__PURE__*/ function () { + "use strict"; + function C() { babelHelpers.classCallCheck(this, C); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/plain-class/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/plain-class/output.js index c18eb5aa04..19a9beffaf 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/plain-class/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/plain-class/output.js @@ -1,3 +1,5 @@ var Test = function Test() { + "use strict"; + babelHelpers.classCallCheck(this, Test); }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/preserves-directives/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/preserves-directives/output.js index df1be86af7..2e1347219e 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/preserves-directives/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/preserves-directives/output.js @@ -1,5 +1,6 @@ var MyCtrl = function MyCtrl(a) { "any directive prologue"; + "use strict"; babelHelpers.classCallCheck(this, MyCtrl); foo; @@ -8,6 +9,7 @@ var MyCtrl = function MyCtrl(a) { var MyCtrl2 = function MyCtrl2(a) { "a"; "b"; + "use strict"; babelHelpers.classCallCheck(this, MyCtrl2); foo; @@ -15,6 +17,7 @@ var MyCtrl2 = function MyCtrl2(a) { var MyCtrl3 = function MyCtrl3(a) { "a"; + "use strict"; babelHelpers.classCallCheck(this, MyCtrl3); foo; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/relaxed-method-coercion/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/relaxed-method-coercion/output.js index 13ebcf8dc3..c233a15a0e 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/relaxed-method-coercion/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/relaxed-method-coercion/output.js @@ -2,6 +2,8 @@ var Foo = /*#__PURE__*/ function () { + "use strict"; + function Foo() { babelHelpers.classCallCheck(this, Foo); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/statement/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/statement/output.js index b7cfb0487c..29c3bfc821 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/statement/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/statement/output.js @@ -1,9 +1,13 @@ var BaseView = function BaseView() { + "use strict"; + babelHelpers.classCallCheck(this, BaseView); this.autoRender = true; }; var BaseView = function BaseView() { + "use strict"; + babelHelpers.classCallCheck(this, BaseView); this.autoRender = true; }; @@ -11,6 +15,8 @@ var BaseView = function BaseView() { var BaseView = /*#__PURE__*/ function () { + "use strict"; + function BaseView() { babelHelpers.classCallCheck(this, BaseView); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/static/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/static/output.js index 4aa9146b9f..9b1a8ffa5c 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/static/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/static/output.js @@ -1,6 +1,8 @@ var A = /*#__PURE__*/ function () { + "use strict"; + function A() { babelHelpers.classCallCheck(this, A); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-anonymous/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-anonymous/output.js index f12479e6ae..614dc6c2d9 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-anonymous/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-anonymous/output.js @@ -1,6 +1,8 @@ var TestEmpty = /*#__PURE__*/ function (_ref) { + "use strict"; + babelHelpers.inherits(TestEmpty, _ref); function TestEmpty() { @@ -12,6 +14,8 @@ function (_ref) { }( /*#__PURE__*/ function () { + "use strict"; + function _class() { babelHelpers.classCallCheck(this, _class); } @@ -22,6 +26,8 @@ function () { var TestConstructorOnly = /*#__PURE__*/ function (_ref2) { + "use strict"; + babelHelpers.inherits(TestConstructorOnly, _ref2); function TestConstructorOnly() { @@ -33,6 +39,8 @@ function (_ref2) { }( /*#__PURE__*/ function () { + "use strict"; + function _class2() { babelHelpers.classCallCheck(this, _class2); } @@ -43,6 +51,8 @@ function () { var TestMethodOnly = /*#__PURE__*/ function (_ref3) { + "use strict"; + babelHelpers.inherits(TestMethodOnly, _ref3); function TestMethodOnly() { @@ -54,6 +64,8 @@ function (_ref3) { }( /*#__PURE__*/ function () { + "use strict"; + function _class3() { babelHelpers.classCallCheck(this, _class3); } @@ -68,6 +80,8 @@ function () { var TestConstructorAndMethod = /*#__PURE__*/ function (_ref4) { + "use strict"; + babelHelpers.inherits(TestConstructorAndMethod, _ref4); function TestConstructorAndMethod() { @@ -79,6 +93,8 @@ function (_ref4) { }( /*#__PURE__*/ function () { + "use strict"; + function _class4() { babelHelpers.classCallCheck(this, _class4); } @@ -93,6 +109,8 @@ function () { var TestMultipleMethods = /*#__PURE__*/ function (_ref5) { + "use strict"; + babelHelpers.inherits(TestMultipleMethods, _ref5); function TestMultipleMethods() { @@ -104,6 +122,8 @@ function (_ref5) { }( /*#__PURE__*/ function () { + "use strict"; + function _class5() { babelHelpers.classCallCheck(this, _class5); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-id-member-expression/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-id-member-expression/output.js index b7198ea8bd..d656ac9528 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-id-member-expression/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-id-member-expression/output.js @@ -1,6 +1,8 @@ var BaseController = /*#__PURE__*/ function (_Chaplin$Controller) { + "use strict"; + babelHelpers.inherits(BaseController, _Chaplin$Controller); function BaseController() { @@ -14,6 +16,8 @@ function (_Chaplin$Controller) { var BaseController2 = /*#__PURE__*/ function (_Chaplin$Controller$A) { + "use strict"; + babelHelpers.inherits(BaseController2, _Chaplin$Controller$A); function BaseController2() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class/output.js index da7a6bd2c0..8a994335e8 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class/output.js @@ -1,6 +1,8 @@ var Test = /*#__PURE__*/ function (_Foo) { + "use strict"; + babelHelpers.inherits(Test, _Foo); function Test() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-function-fallback/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-function-fallback/output.js index a78ae7926c..301cbfcf3c 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-function-fallback/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-function-fallback/output.js @@ -1,4 +1,6 @@ var Test = function Test() { + "use strict"; + babelHelpers.classCallCheck(this, Test); babelHelpers.get(babelHelpers.getPrototypeOf(Test.prototype), "hasOwnProperty", babelHelpers.assertThisInitialized(this)).call(this, "test"); }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super-inline/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super-inline/output.js index 1ecbab222f..bd488d16ac 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super-inline/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super-inline/output.js @@ -15,6 +15,8 @@ function _assertThisInitialized(self) { if (self === void 0) { throw new Referen var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + _inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super/output.js index be48d55267..9298b53093 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super/output.js @@ -15,6 +15,8 @@ function _assertThisInitialized(self) { if (self === void 0) { throw new Referen var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + _inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/output.js index a64a59ae18..7ecacc3f02 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/output.js index 0493d62900..72f55beab6 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/output.js index 79a4b98be3..7a86f50a19 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-in-prop-exression/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-in-prop-exression/output.js index 5d1dd6f69c..eeb5168030 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-in-prop-exression/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-in-prop-exression/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-2/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-2/output.js index a38f951718..ec1d652c8d 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-2/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-2/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-3/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-3/output.js index 753e40bf0a..06e41b47d3 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-3/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-3/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-4/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-4/output.js index f012933cec..2bce474839 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-4/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-4/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-5/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-5/output.js index ef448dd71d..a49d2be809 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-5/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-5/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes/output.js index 75bd134ebd..cab6da87e8 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes/output.js @@ -1,6 +1,8 @@ var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/output.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/output.js index d39c634e40..8b6befeca1 100644 --- a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/output.js +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/output.js @@ -2,6 +2,8 @@ var C = /*#__PURE__*/ function () { + "use strict"; + function C() {} var _proto = C.prototype; diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/output.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/output.js index cca8f738c3..33fc41f5b9 100644 --- a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/output.js +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/output.js @@ -2,6 +2,8 @@ var C = /*#__PURE__*/ function () { + "use strict"; + function C() { babelHelpers.classCallCheck(this, C); } diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/class-prop-types/output.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/class-prop-types/output.js index a63c4ab872..864e3000b9 100644 --- a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/class-prop-types/output.js +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/class-prop-types/output.js @@ -1,3 +1,5 @@ let Test = function Test() { + "use strict"; + babelHelpers.classCallCheck(this, Test); }; diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/output.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/output.js index f5f9fc21cb..ce79f9ddf9 100644 --- a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/output.js +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/output.js @@ -1,6 +1,8 @@ var C = /*#__PURE__*/ function () { + "use strict"; + function C() {} var _proto = C.prototype; diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/output.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/output.js index 8665e0ced3..8c3aab1226 100644 --- a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/output.js +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/output.js @@ -1,6 +1,8 @@ var C = /*#__PURE__*/ function () { + "use strict"; + function C() { babelHelpers.classCallCheck(this, C); } diff --git a/packages/babel-plugin-transform-function-name/test/fixtures/function-name/class-method/output.js b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/class-method/output.js index 6c554f273d..80ef49fb81 100644 --- a/packages/babel-plugin-transform-function-name/test/fixtures/function-name/class-method/output.js +++ b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/class-method/output.js @@ -1,6 +1,8 @@ let Foo = /*#__PURE__*/ function () { + "use strict"; + function Foo() { babelHelpers.classCallCheck(this, Foo); } diff --git a/packages/babel-plugin-transform-jscript/test/fixtures/jscript/simple-class/output.js b/packages/babel-plugin-transform-jscript/test/fixtures/jscript/simple-class/output.js index 7d28d4011e..df1e015e5e 100644 --- a/packages/babel-plugin-transform-jscript/test/fixtures/jscript/simple-class/output.js +++ b/packages/babel-plugin-transform-jscript/test/fixtures/jscript/simple-class/output.js @@ -1,5 +1,7 @@ var Test = function () { function Test() { + "use strict"; + babelHelpers.classCallCheck(this, Test); } diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-4253/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-4253/output.js index 47997457af..4432ba6ae3 100644 --- a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-4253/output.js +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-4253/output.js @@ -1,7 +1,15 @@ -var Ref = function Ref() { - var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ++Ref.nextID; - babelHelpers.classCallCheck(this, Ref); - this.id = id; -}; +var Ref = +/*#__PURE__*/ +function () { + "use strict"; + + function Ref() { + var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ++Ref.nextID; + babelHelpers.classCallCheck(this, Ref); + this.id = id; + } + + return Ref; +}(); Ref.nextID = 0; diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-self/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-self/output.js index 1148c355e4..c63f10e437 100644 --- a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-self/output.js +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-iife-self/output.js @@ -1,11 +1,27 @@ -var Ref = function Ref() { - var ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Ref; - babelHelpers.classCallCheck(this, Ref); - this.ref = ref; -}; +var Ref = +/*#__PURE__*/ +function () { + "use strict"; -var X = function X() { - var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : foo; - babelHelpers.classCallCheck(this, X); - this.x = x; -}; + function Ref() { + var ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Ref; + babelHelpers.classCallCheck(this, Ref); + this.ref = ref; + } + + return Ref; +}(); + +var X = +/*#__PURE__*/ +function () { + "use strict"; + + function X() { + var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : foo; + babelHelpers.classCallCheck(this, X); + this.x = x; + } + + return X; +}(); diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-arrow-functions/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-arrow-functions/output.js index d2856c566e..83b41f4d72 100644 --- a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-arrow-functions/output.js +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-arrow-functions/output.js @@ -51,6 +51,8 @@ var innerclassproperties = function () { } return _temp = _class = function _class() { + "use strict"; + babelHelpers.classCallCheck(this, _class); this.args = args; }, _class.args = args, _temp; diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-nested-iife/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-nested-iife/output.js index 7975fc6d85..d11588d86b 100644 --- a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-nested-iife/output.js +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-nested-iife/output.js @@ -3,6 +3,8 @@ function broken(x) { var Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + babelHelpers.inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js index 985568ba1d..1af954e468 100644 --- a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js @@ -9,6 +9,8 @@ var _ref = let App = /*#__PURE__*/ function (_React$Component) { + "use strict"; + babelHelpers.inherits(App, _React$Component); function App() { diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime/class/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime/class/output.js index a273aa1824..60d3e2fb72 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/runtime/class/output.js +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime/class/output.js @@ -1,5 +1,7 @@ var _classCallCheck = require("@babel/runtime/helpers/classCallCheck"); let Foo = function Foo() { + "use strict"; + _classCallCheck(this, Foo); }; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime/no-helpers/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime/no-helpers/output.js index 0040583f47..b8dfb31983 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/runtime/no-helpers/output.js +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime/no-helpers/output.js @@ -1,5 +1,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } let Foo = function Foo() { + "use strict"; + _classCallCheck(this, Foo); }; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useBuiltIns-useESModules/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useBuiltIns-useESModules/output.js index e6a57dbeb5..d5ad90a1c2 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useBuiltIns-useESModules/output.js +++ b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useBuiltIns-useESModules/output.js @@ -9,6 +9,8 @@ var _inherits = require("@babel/runtime/helpers/builtin/es6/inherits"); let Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + _inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useBuiltIns/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useBuiltIns/output.js index a9cfc25a85..0dcb1a6dc1 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useBuiltIns/output.js +++ b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useBuiltIns/output.js @@ -9,6 +9,8 @@ var _inherits = require("@babel/runtime/helpers/builtin/inherits"); let Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + _inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules/output.js index 19375e1d05..9d1599d1f2 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules/output.js +++ b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules/output.js @@ -9,6 +9,8 @@ var _inherits = require("@babel/runtime/helpers/es6/inherits"); let Foo = /*#__PURE__*/ function (_Bar) { + "use strict"; + _inherits(Foo, _Bar); function Foo() { diff --git a/packages/babel-standalone/test/babel.js b/packages/babel-standalone/test/babel.js index 0bc617450e..46f9187288 100644 --- a/packages/babel-standalone/test/babel.js +++ b/packages/babel-standalone/test/babel.js @@ -19,7 +19,7 @@ sourceType: "script", presets: ["es2015-loose"], }).code; - expect(output).toBe("var A = function A() {};"); + expect(output).toBe('var A = function A() {\n "use strict";\n};'); }); it("handles the typescript preset", () => { const output = Babel.transform("var a: string;", {