From 423a4c5568038be53f05bf63859e39ac4408c7a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Sat, 7 Nov 2020 16:25:19 +0100 Subject: [PATCH 1/2] Use the correct `context` when re-using a cached path from a different traversal --- .../fixtures/regression/issue-12329/input.mjs | 5 +++++ .../regression/issue-12329/options.json | 6 ++++++ .../regression/issue-12329/output.mjs | 21 +++++++++++++++++++ .../regression/6057-expanded/output.js | 4 ++-- .../sanity/block-scoping-for-of/output.js | 2 +- packages/babel-traverse/src/path/family.js | 2 +- 6 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/input.mjs create mode 100644 packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/options.json create mode 100644 packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/output.mjs diff --git a/packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/input.mjs b/packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/input.mjs new file mode 100644 index 000000000000..988e24fa7b06 --- /dev/null +++ b/packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/input.mjs @@ -0,0 +1,5 @@ +let Vec3; + +export class Light { + _color = Vec3; +} diff --git a/packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/options.json b/packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/options.json new file mode 100644 index 000000000000..0c63717586ae --- /dev/null +++ b/packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + "transform-modules-systemjs", + "proposal-class-properties" + ] +} diff --git a/packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/output.mjs b/packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/output.mjs new file mode 100644 index 000000000000..5c21b543b57b --- /dev/null +++ b/packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/issue-12329/output.mjs @@ -0,0 +1,21 @@ +System.register([], function (_export, _context) { + "use strict"; + + var Light, Vec3; + + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + _export("Light", void 0); + + return { + setters: [], + execute: function () { + _export("Light", Light = class Light { + constructor() { + _defineProperty(this, "_color", Vec3); + } + + }); + } + }; +}); diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/regression/6057-expanded/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/regression/6057-expanded/output.js index a577785d60a6..5fedbe5fe4c2 100644 --- a/packages/babel-plugin-transform-parameters/test/fixtures/regression/6057-expanded/output.js +++ b/packages/babel-plugin-transform-parameters/test/fixtures/regression/6057-expanded/output.js @@ -1,5 +1,7 @@ "use strict"; +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + Object.defineProperty(exports, "__esModule", { value: true }); @@ -9,8 +11,6 @@ var _args = _interopRequireDefault(require("utils/url/args")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } diff --git a/packages/babel-preset-env/test/fixtures/sanity/block-scoping-for-of/output.js b/packages/babel-preset-env/test/fixtures/sanity/block-scoping-for-of/output.js index 73d72bb5be8c..b271a86027ed 100644 --- a/packages/babel-preset-env/test/fixtures/sanity/block-scoping-for-of/output.js +++ b/packages/babel-preset-env/test/fixtures/sanity/block-scoping-for-of/output.js @@ -6,7 +6,7 @@ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !( function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } +function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } diff --git a/packages/babel-traverse/src/path/family.js b/packages/babel-traverse/src/path/family.js index 436dce38c4ee..533b52722720 100644 --- a/packages/babel-traverse/src/path/family.js +++ b/packages/babel-traverse/src/path/family.js @@ -162,7 +162,7 @@ export function getAllPrevSiblings(): NodePath[] { export function get( key: string, - context?: boolean | TraversalContext, + context?: boolean | TraversalContext = true, ): NodePath | NodePath[] { if (context === true) context = this.context; const parts = key.split("."); From e7ce1bafa39cce9248a5fef6c5795bd63f8f1399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Sat, 7 Nov 2020 17:12:27 +0100 Subject: [PATCH 2/2] Skip test with older Babel versions --- scripts/integration-tests/e2e-babel-old-version.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/integration-tests/e2e-babel-old-version.sh b/scripts/integration-tests/e2e-babel-old-version.sh index ce0270a85cca..d07c0773f973 100755 --- a/scripts/integration-tests/e2e-babel-old-version.sh +++ b/scripts/integration-tests/e2e-babel-old-version.sh @@ -43,6 +43,10 @@ node "$PWD"/scripts/integration-tests/utils/bump-babel-dependencies.js fs.writeFileSync('./package.json', JSON.stringify(pkg, null, 2)); " +# https://github.com/babel/babel/pull/12331 - This test is fixed in @babel/traverse 7.12.7, +# so it will fail with older versions. We can disable it. +(cd packages/babel-plugin-transform-modules-systemjs/test/fixtures/regression/; mv issue-12329 .issue-12329) + # Update deps, build and test rm yarn.lock make -j test-ci