diff --git a/lib/stripped-build-plugins.js b/lib/stripped-build-plugins.js index af4310c6d25..f5011b4621d 100644 --- a/lib/stripped-build-plugins.js +++ b/lib/stripped-build-plugins.js @@ -55,12 +55,9 @@ module.exports = function(environment) { plugins.push( [FilterImports, filteredImports], + [StripFilteredImports, filteredImports], [TransformBlockScoping, { 'throwIfClosureRequired': true }] ); - if (environment === 'production') { - plugins.push([StripFilteredImports, 'ember-data/-debug']); - } - return { plugins, postTransformPlugins }; }; diff --git a/lib/transforms/babel-plugin-remove-imports.js b/lib/transforms/babel-plugin-remove-imports.js index aec7d8852d0..2ba35b7e3ed 100644 --- a/lib/transforms/babel-plugin-remove-imports.js +++ b/lib/transforms/babel-plugin-remove-imports.js @@ -1,15 +1,15 @@ -var path = require('path'); - function removeImports() { var importDeclarationsToRemove; var filteredImports; + var filteredImportNames; return { name: 'remove-filtered-imports', visitor: { Program: { enter: function(_, state) { - filteredImports = state.opts instanceof Array ? state.opts : (state.opts ? [state.opts] : []); + filteredImports = state.opts || {}; + filteredImportNames = Object.keys(filteredImports); importDeclarationsToRemove = []; }, exit: function() { @@ -24,8 +24,29 @@ function removeImports() { ImportDeclaration: function(path) { var name = path.node.source.value; - if (filteredImports.indexOf(name) !== -1) { - importDeclarationsToRemove.push(path); + if (filteredImportNames.indexOf(name) !== -1) { + if (filteredImports[name] === true) { + importDeclarationsToRemove.push(path); + } else { + let removables = []; + let imports = path.node.specifiers; + + for (let i = 0; i < imports.length; i++) { + let specifier = imports[i].imported; + if (filteredImports[name].indexOf(specifier.name) !== -1) { + removables.push(imports[i]); + } + } + + if (removables.length === imports.length) { + importDeclarationsToRemove.push(path); + } else { + for (let i = 0; i < removables.length; i++) { + let index = imports.indexOf(removables[i]); + imports.splice(index, 1); + } + } + } } }