From a6c38625eab16214b74892b57eb1d42c5a0cc54f Mon Sep 17 00:00:00 2001 From: Pat O'Callaghan Date: Tue, 16 Mar 2021 21:24:10 +0000 Subject: [PATCH 1/2] Do not transform imports to Ember Global on certain version --- lib/babel-options-util.js | 13 ++--- lib/ember-plugins.js | 17 +++--- node-tests/addon-test.js | 106 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+), 13 deletions(-) diff --git a/lib/babel-options-util.js b/lib/babel-options-util.js index 6995773b..587c1bfa 100644 --- a/lib/babel-options-util.js +++ b/lib/babel-options-util.js @@ -98,11 +98,12 @@ function _getDebugMacroPlugins(config) { ]; } -function _emberVersionRequiresModulesAPIPolyfill() { - // once a version of Ember ships with the - // emberjs/rfcs#176 modules natively this will - // be updated to detect that and return false - return true; +function _emberVersionRequiresModulesAPIPolyfill(parent) { + let checker = new VersionChecker(parent).for("ember-source", "npm"); + if (!checker.exists()) { + return true; + } + return checker.lt("3.27.0-alpha.1"); } function _emberDataVersionRequiresPackagesPolyfill(project) { @@ -125,7 +126,7 @@ function _getEmberModulesAPIPolyfill(config, parent, project) { return; } - if (_emberVersionRequiresModulesAPIPolyfill()) { + if (_emberVersionRequiresModulesAPIPolyfill(parent)) { const ignore = _getEmberModulesAPIIgnore(parent, project); return [ diff --git a/lib/ember-plugins.js b/lib/ember-plugins.js index 275cfb83..11a30b33 100644 --- a/lib/ember-plugins.js +++ b/lib/ember-plugins.js @@ -46,11 +46,14 @@ function _getDebugMacroPlugins() { ], ]; } -function _emberVersionRequiresModulesAPIPolyfill() { - // once a version of Ember ships with the - // emberjs/rfcs#176 modules natively this will - // be updated to detect that and return false - return true; +function _emberVersionRequiresModulesAPIPolyfill(appRoot) { + let packagePath = resolvePackagePath("ember-source", appRoot); + if (packagePath === null) { + return true; + } + + let pkg = require(packagePath); + return pkg && semver.lt(pkg.version, "3.27.0-alpha.1"); } function _getEmberModulesAPIPolyfill(appRoot, config) { @@ -58,7 +61,7 @@ function _getEmberModulesAPIPolyfill(appRoot, config) { return; } - if (_emberVersionRequiresModulesAPIPolyfill()) { + if (_emberVersionRequiresModulesAPIPolyfill(appRoot)) { const ignore = _getEmberModulesAPIIgnore(appRoot, config); return [ @@ -128,7 +131,7 @@ function _getEmberDataPackagesPolyfill(appRoot, config) { function _getModuleResolutionPlugins(config) { if (!config.disableModuleResolution) { const resolvePath = require("../lib/relative-module-paths") - .resolveRelativeModulePath; + .resolveRelativeModulePath; return [ [require.resolve("babel-plugin-module-resolver"), { resolvePath }], [ diff --git a/node-tests/addon-test.js b/node-tests/addon-test.js index 0661cf71..4dc99a96 100644 --- a/node-tests/addon-test.js +++ b/node-tests/addon-test.js @@ -216,6 +216,112 @@ describe('ember-cli-babel', function() { })); }); + describe("Opting out of the ember modules API polyfill", function () { + let dependencies; + + beforeEach(function () { + dependencies = {}; + let project = { + root: input.path(), + emberCLIVersion: () => "2.16.2", + dependencies() { + return dependencies; + }, + addons: [], + targets: { + browsers: ["ie 11"], + }, + }; + + this.addon = new Addon({ + project, + parent: project, + ui: this.ui, + }); + + project.addons.push(this.addon); + }); + + function buildEmberSourceFixture(version) { + return { + node_modules: { + "ember-source": { + "package.json": JSON.stringify({ name: "ember-source", version }), + "index.js": "module.exports = {};", + }, + }, + }; + } + + it( + "should replace imports with Ember Globals", + co.wrap(function* () { + const PRE_GLOBAL_RESOLVER_DEPRECATION_VERSION = "3.26.0"; + dependencies[ + "ember-source" + ] = PRE_GLOBAL_RESOLVER_DEPRECATION_VERSION; + input.write( + buildEmberSourceFixture(PRE_GLOBAL_RESOLVER_DEPRECATION_VERSION) + ); + input.write({ + "foo.js": `import Component from '@ember/component'; Component.extend()`, + "app.js": `import Application from '@ember/application'; Application.extend()`, + }); + + subject = this.addon.transpileTree(input.path()); + output = createBuilder(subject); + + yield output.build(); + + expect(output.read()).to.deep.equal({ + "foo.js": `define("foo", [], function () {\n "use strict";\n\n Ember.Component.extend();\n});`, + "app.js": `define("app", [], function () {\n "use strict";\n\n Ember.Application.extend();\n});`, + node_modules: { + "ember-source": { + "index.js": + 'define("node_modules/ember-source/index", [], function () {\n "use strict";\n\n module.exports = {};\n});', + "package.json": '{"name":"ember-source","version":"3.26.0"}', + }, + }, + }); + }) + ); + + it( + "should not replace the imports with Ember Globals when using an ember-source version that supports it", + co.wrap(function* () { + const POST_GLOBAL_RESOLVER_DEPRECATION_VERSION = "3.27.0"; + dependencies[ + "ember-source" + ] = POST_GLOBAL_RESOLVER_DEPRECATION_VERSION; + input.write( + buildEmberSourceFixture(POST_GLOBAL_RESOLVER_DEPRECATION_VERSION) + ); + input.write({ + "foo.js": `import Component from '@ember/component'; Component.extend()`, + "app.js": `import Application from '@ember/application'; Application.extend()`, + }); + + subject = this.addon.transpileTree(input.path()); + output = createBuilder(subject); + + yield output.build(); + + expect(output.read()).to.deep.equal({ + "foo.js": `define("foo", ["@ember/component"], function (_component) {\n "use strict";\n\n _component.default.extend();\n});`, + "app.js": `define("app", ["@ember/application"], function (_application) {\n "use strict";\n\n _application.default.extend();\n});`, + node_modules: { + "ember-source": { + "index.js": + 'define("node_modules/ember-source/index", [], function () {\n "use strict";\n\n module.exports = {};\n});', + "package.json": '{"name":"ember-source","version":"3.27.0"}', + }, + }, + }); + }) + ); + }); + describe('debug macros', function() { it("can opt-out via ember-cli-babel.disableDebugTooling", co.wrap(function* () { process.env.EMBER_ENV = 'development'; From c57329537e6d24460e688b0c43f4ea6fce7ca328 Mon Sep 17 00:00:00 2001 From: Chris Garrett Date: Wed, 17 Mar 2021 13:02:53 -0700 Subject: [PATCH 2/2] update module-api-polyfill, update variable name --- node-tests/addon-test.js | 10 +++++----- package.json | 2 +- yarn.lock | 17 +++++++++++------ 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/node-tests/addon-test.js b/node-tests/addon-test.js index 4dc99a96..95580988 100644 --- a/node-tests/addon-test.js +++ b/node-tests/addon-test.js @@ -256,12 +256,12 @@ describe('ember-cli-babel', function() { it( "should replace imports with Ember Globals", co.wrap(function* () { - const PRE_GLOBAL_RESOLVER_DEPRECATION_VERSION = "3.26.0"; + const PRE_EMBER_MODULE_IMPORTS_VERSION = "3.26.0"; dependencies[ "ember-source" - ] = PRE_GLOBAL_RESOLVER_DEPRECATION_VERSION; + ] = PRE_EMBER_MODULE_IMPORTS_VERSION; input.write( - buildEmberSourceFixture(PRE_GLOBAL_RESOLVER_DEPRECATION_VERSION) + buildEmberSourceFixture(PRE_EMBER_MODULE_IMPORTS_VERSION) ); input.write({ "foo.js": `import Component from '@ember/component'; Component.extend()`, @@ -1712,13 +1712,13 @@ describe('babel config file', function() { let self = this; setupForVersion = co.wrap(function*(plugins) { let fixturifyProject = new FixturifyProject('whatever', '0.0.1'); - + fixturifyProject.addDependency('ember-cli-babel', 'babel/ember-cli-babel#master'); fixturifyProject.addDependency('random-addon', '0.0.1', addon => { return prepareAddon(addon); }); let pkg = JSON.parse(fixturifyProject.toJSON('package.json')); - fixturifyProject.files['babel.config.js'] = + fixturifyProject.files['babel.config.js'] = `module.exports = function (api) { api.cache(true); return { diff --git a/package.json b/package.json index 06909c9b..e6d7fb4d 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "amd-name-resolver": "^1.3.1", "babel-plugin-debug-macros": "^0.3.4", "babel-plugin-ember-data-packages-polyfill": "^0.1.2", - "babel-plugin-ember-modules-api-polyfill": "^3.4.0", + "babel-plugin-ember-modules-api-polyfill": "^3.5.0", "babel-plugin-module-resolver": "^3.2.0", "broccoli-babel-transpiler": "^7.8.0", "broccoli-debug": "^0.6.4", diff --git a/yarn.lock b/yarn.lock index 30fda675..25a3ae41 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1784,12 +1784,12 @@ babel-plugin-ember-modules-api-polyfill@^2.12.0, babel-plugin-ember-modules-api- dependencies: ember-rfc176-data "^0.3.13" -babel-plugin-ember-modules-api-polyfill@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-3.4.0.tgz#3f5e0457e135f8a29b3a8b6910806bb5b524649e" - integrity sha512-nVu/LqbZBAup1zLij6xGvQwVLWVk4XYu2fl4vIOUR3S6ukdonMLhKAb0d4QXSzH30Pd7OczVTlPffWbiwahdJw== +babel-plugin-ember-modules-api-polyfill@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-3.5.0.tgz#27b6087fac75661f779f32e60f94b14d0e9f6965" + integrity sha512-pJajN/DkQUnStw0Az8c6khVcMQHgzqWr61lLNtVeu0g61LRW0k9jyK7vaedrHDWGe/Qe8sxG5wpiyW9NsMqFzA== dependencies: - ember-rfc176-data "^0.3.16" + ember-rfc176-data "^0.3.17" babel-plugin-htmlbars-inline-precompile@^0.2.5: version "0.2.6" @@ -4091,11 +4091,16 @@ ember-resolver@^5.0.1: ember-cli-version-checker "^3.0.0" resolve "^1.10.0" -ember-rfc176-data@^0.3.1, ember-rfc176-data@^0.3.13, ember-rfc176-data@^0.3.16, ember-rfc176-data@^0.3.5: +ember-rfc176-data@^0.3.1, ember-rfc176-data@^0.3.13, ember-rfc176-data@^0.3.5: version "0.3.16" resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.16.tgz#2ace0ac9cf9016d493a74a1d931643a308679803" integrity sha512-IYAzffS90r2ybAcx8c2qprYfkxa70G+/UPkxMN1hw55DU5S2aLOX6v3umKDZItoRhrvZMCnzwsdfKSrKdC9Wbg== +ember-rfc176-data@^0.3.17: + version "0.3.17" + resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.17.tgz#d4fc6c33abd6ef7b3440c107a28e04417b49860a" + integrity sha512-EVzTTKqxv9FZbEh6Ktw56YyWRAA0MijKvl7H8C06wVF+8f/cRRz3dXxa4nkwjzyVwx4rzKGuIGq77hxJAQhWWw== + ember-router-generator@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/ember-router-generator/-/ember-router-generator-1.2.3.tgz#8ed2ca86ff323363120fc14278191e9e8f1315ee"