broccoli-ember-preparse
Advanced tools
Comparing version 0.0.2 to 0.0.3
@@ -5,4 +5,5 @@ var DefineRewriter = require('./lib/define-rewriter/src/index'); | ||
module.exports = function(distNode, loaderNode) { | ||
var node = new DefineRewriter(merge([distNode, loaderNode])); | ||
module.exports = function(distNode, loaderNode, options) { | ||
var input = merge([distNode, loaderNode]) | ||
var node = new DefineRewriter(input, options); | ||
return removeFile(node, { | ||
@@ -12,1 +13,3 @@ path: 'loader' | ||
} | ||
module.exports.DefineRewriter = DefineRewriter; |
@@ -10,2 +10,59 @@ 'use strict'; | ||
var DEFAULT_HTMLBARS_EAGER = [ | ||
'ember/index', | ||
'ember-htmlbars/system/render-view', | ||
'ember-metal/streams/key-stream' | ||
]; | ||
var DEFAULT_GLIMMER_EAGER = [ | ||
'ember-glimmer/components/checkbox', | ||
'ember-glimmer/components/link-to', | ||
'ember-glimmer/components/text_area', | ||
'ember-glimmer/components/text_field', | ||
'ember-glimmer/renderer', | ||
'ember-glimmer/make-bound-helper', | ||
'ember-glimmer/setup-registry', | ||
'ember-glimmer/views/outlet', | ||
'ember-glimmer/templates/outlet', | ||
'ember-glimmer/templates/component', | ||
'ember-glimmer/dom', | ||
'ember/index' | ||
]; | ||
function defaultFilter(node) { | ||
if (isUMDModule(node)) { | ||
console.log('removing UMD module:', node.name); | ||
return true; | ||
} | ||
if (isTSLINTModule(node)) { | ||
console.log('removing TSLINT module:', node.name); | ||
return true; | ||
} | ||
if (isEmptyModule(node)) { | ||
console.log('removing empty module:', node.name); | ||
return true; | ||
} | ||
return false; | ||
} | ||
function isUMDModule(node) { | ||
var name = node.name; | ||
var l = name.length; | ||
return l > 4 && name.charCodeAt(l - 4) === 46 && | ||
name.indexOf('umd', l - 3) !== -1; | ||
} | ||
function isEmptyModule(node) { | ||
return node.functionExpression.body.body.length === 0; | ||
} | ||
function isTSLINTModule(node) { | ||
var name = node.name; | ||
var l = name.length; | ||
return l > 7 && name.charCodeAt(l - 7) === 46 && | ||
name.indexOf('tslint', l - 6) !== -1; | ||
} | ||
/** | ||
@@ -24,2 +81,3 @@ * NOTES | ||
function DefineRewriter(inputNode, options) { | ||
console.log('DefineRewriter', options) | ||
if (options && options.eagerLoad) { | ||
@@ -32,7 +90,15 @@ if (Array.isArray(options.eagerLoad)) { | ||
} else { | ||
this.eagerLoad = ['ember/index', 'ember-htmlbars/system/render-view', 'ember-metal/streams/key-stream']; | ||
if (options && options.glimmer) { | ||
this.eagerLoad = DEFAULT_GLIMMER_EAGER; | ||
} else { | ||
this.eagerLoad = DEFAULT_HTMLBARS_EAGER; | ||
} | ||
} | ||
if (options && options.filter) { | ||
this.moduleFilter = options.filter; | ||
} else { | ||
this.moduleFilter = defaultFilter; | ||
} | ||
this.loaderDeferred = RSVP.defer(); | ||
inputNode = toString.call(inputNode) === '[object Array]' ? inputNode : [inputNode]; | ||
Filter.call(this, inputNode, options); | ||
Filter.call(this, Array.isArray(inputNode) ? inputNode : [ inputNode ], options); | ||
} | ||
@@ -44,3 +110,4 @@ | ||
var EMBER_PATHS = { | ||
'ember.prod.js': true, 'ember.debug.js': true | ||
'ember.prod.js': true, | ||
'ember.debug.js': true | ||
}; | ||
@@ -52,3 +119,3 @@ | ||
return this.loaderDeferred.promise.then(function(loader) { | ||
return processEmber(string, relativePath, this.eagerLoad, loader); | ||
return processEmber(string, relativePath, this.eagerLoad, loader, this.moduleFilter); | ||
}.bind(this)); | ||
@@ -55,0 +122,0 @@ } else if (relativePath.indexOf('loader') > -1) { |
@@ -6,6 +6,7 @@ var graphlib = require('graphlib'); | ||
function ModuleGraph() { | ||
function ModuleGraph(moduleFilter) { | ||
this.graph = new graphlib.Graph(); | ||
this.set = new NameSet(); | ||
this.eagerSet = new NameSet(); | ||
this.moduleFilter = moduleFilter; | ||
} | ||
@@ -66,12 +67,2 @@ | ||
if (/\.umd$/.test(name)) { | ||
console.log('removing unused: '+name); | ||
return; | ||
} | ||
if (!functionExpression.body.body.length) { | ||
console.log('removing empty module: '+name); | ||
return; | ||
} | ||
var parentParts = name.split('/'); | ||
@@ -95,4 +86,6 @@ | ||
this.graph.setNode(name, node); | ||
this.set.add(name); | ||
if (!this.moduleFilter(node)) { | ||
this.graph.setNode(name, node); | ||
this.set.add(name); | ||
} | ||
}; | ||
@@ -99,0 +92,0 @@ |
@@ -8,3 +8,3 @@ var babylon = require('babylon'); | ||
module.exports = function processEmber(string, relativePath, eagerLoadList, loader) { | ||
module.exports = function processEmber(string, relativePath, eagerLoadList, loader, moduleFilter) { | ||
var ast = babylon.parse(string); | ||
@@ -15,3 +15,3 @@ | ||
var count = 0; | ||
var graph = new ModuleGraph(); | ||
var graph = new ModuleGraph(moduleFilter); | ||
@@ -57,3 +57,3 @@ var visitor = { | ||
// Workaround for the fact that ember-metal imports ember-debug via require | ||
// https://github.com/emberjs/ember.js/blob/1a2cd166a86219717a0cde1df4dab497d8dda3e3/packages/ember-metal/lib/main.js#L363 | ||
// https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/index.js#L360 | ||
graph.createEdge('ember-metal', 'ember-debug'); | ||
@@ -60,0 +60,0 @@ } |
{ | ||
"name": "broccoli-ember-preparse", | ||
"version": "0.0.2", | ||
"version": "0.0.3", | ||
"description": "Broccoli plugin that applies some compile time performance optimizations to an ember build. ", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
17647
449