From 2fb0c16bfd427f015d77ddec17f23054d19a41db Mon Sep 17 00:00:00 2001 From: Cory Date: Tue, 13 Mar 2018 12:51:53 -0700 Subject: [PATCH 1/2] Fix an issue with helpers where we re-export the default as a named export This fixes the issue described here: https://github.com/emberjs/ember.js/issues/16361#issuecomment-372707411 --- lib/transforms/import-declarations.js | 31 ++++++++++++++++--- test/fixtures/classic-named-exports/input.js | 4 +-- test/fixtures/classic-named-exports/output.js | 4 +-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/lib/transforms/import-declarations.js b/lib/transforms/import-declarations.js index 21ce4bc..95bd091 100644 --- a/lib/transforms/import-declarations.js +++ b/lib/transforms/import-declarations.js @@ -3,8 +3,31 @@ var path_utils = require('../utils/path'); function transformer(file, api) { var j = api.jscodeshift; - return j(file.source) - .find(j.ImportDeclaration) + let root = j(file.source); + + let foundHelper; + + root.find(j.ImportDeclaration, { + source: { value: '@ember/component/helper' }, + }).filter(path => { + return path.value.specifiers[0].local.name === 'helper'; + }) + .forEach(function(path) { + foundHelper = true; + let specifier = j.importSpecifier(j.identifier('helper'), j.identifier('buildHelper')); + + path.value.specifiers[0] = specifier; + }); + + if (foundHelper) { + root.find(j.CallExpression, { + callee: { name: 'helper' } + }).forEach(path => { + path.value.callee.name = 'buildHelper'; + }); + } + + root.find(j.ImportDeclaration) .find(j.Literal) .forEach(function(path) { var importPath = path.value.value + '.js'; @@ -55,9 +78,9 @@ function transformer(file, api) { // remove extension newImportPath = newImportPath.slice(0, -targetFileInfo.ext.length); j(path).replaceWith(j.literal(newImportPath)); - }) - .toSource(); + }); + return root.toSource(); } module.exports = transformer; diff --git a/test/fixtures/classic-named-exports/input.js b/test/fixtures/classic-named-exports/input.js index ff8bc73..4f65b75 100644 --- a/test/fixtures/classic-named-exports/input.js +++ b/test/fixtures/classic-named-exports/input.js @@ -4,8 +4,8 @@ module.exports = { 'app.js': 'export default App', 'router.js': 'export default Router', helpers: { - 'titleize.js': 'export default helper(function() { });', - 'capitalize.js': 'export default helper(function() { });' + 'titleize.js': 'import { helper } from \'@ember/component/helper\';\nexport default helper(function() { });', + 'capitalize.js': 'import { helper } from \'@ember/component/helper\';\nexport default helper(function() { });' } }, diff --git a/test/fixtures/classic-named-exports/output.js b/test/fixtures/classic-named-exports/output.js index 76c65e9..5c70b9c 100644 --- a/test/fixtures/classic-named-exports/output.js +++ b/test/fixtures/classic-named-exports/output.js @@ -4,9 +4,9 @@ module.exports = { 'router.js': 'export default Router', ui: { components: { - 'titleize.js': 'export const helper = helper(function() { });', + 'titleize.js': 'import { helper as buildHelper } from \'@ember/component/helper\';\nexport const helper = buildHelper(function() { });', 'capitalize': { - 'helper.js': 'export default helper(function() { });', + 'helper.js': 'import { helper as buildHelper } from \'@ember/component/helper\';\nexport default buildHelper(function() { });', 'helper-integration-test.js': '"capitalize helper test"' } } From 56a0ce15bd821dec9da6e1994210597035382397 Mon Sep 17 00:00:00 2001 From: Cory Date: Tue, 13 Mar 2018 12:55:03 -0700 Subject: [PATCH 2/2] use var instead of let --- lib/transforms/import-declarations.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/transforms/import-declarations.js b/lib/transforms/import-declarations.js index 95bd091..7c7e7e1 100644 --- a/lib/transforms/import-declarations.js +++ b/lib/transforms/import-declarations.js @@ -3,9 +3,9 @@ var path_utils = require('../utils/path'); function transformer(file, api) { var j = api.jscodeshift; - let root = j(file.source); + var root = j(file.source); - let foundHelper; + var foundHelper; root.find(j.ImportDeclaration, { source: { value: '@ember/component/helper' }, @@ -14,7 +14,7 @@ function transformer(file, api) { }) .forEach(function(path) { foundHelper = true; - let specifier = j.importSpecifier(j.identifier('helper'), j.identifier('buildHelper')); + var specifier = j.importSpecifier(j.identifier('helper'), j.identifier('buildHelper')); path.value.specifiers[0] = specifier; });