Created
February 3, 2014 21:08
-
-
Save joliss/8792437 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module.exports = function (factory, broccoli) { | |
var UglifyJSFilter = require('broccoli-uglify-js')(broccoli) | |
var ES6ConcatenatorCompiler = require('broccoli-es6-concatenator')(broccoli) | |
var StaticCompiler = require('broccoli-static-compiler')(broccoli) | |
// Should we really rely on cwd to read features.json? | |
var featuresJSON = JSON.parse(fs.readFileSync('features.json', { encoding: 'ascii' }})) | |
var devDefeaturifyFilter = new DefeaturifyFilter({ | |
features: featuresJSON.features, | |
debugStatements: features.debugStatements | |
}) | |
var prodDefeaturifyFilter = new DefeaturifyFilter({ | |
features: featuresJSON.features | |
}) | |
var devEmberTree = factory.makeTree() | |
.map('packages/ember-core/lib', '/') // should perhaps move to simply 'lib' | |
// Let ember-core contain all of the following: | |
// .map('packages/ember/lib', '/') | |
// .map('packages/ember-handlebars/lib', '/') | |
// .map('packages/ember-handlebars-compiler/lib', '/') | |
// .map('packages/ember-metal/lib', '/') | |
// .map('packages/ember-routing/lib', '/') | |
// .map('packages/ember-runtime/lib', '/') | |
// .map('packages/ember-views/lib', '/') | |
// .map('packages/ember-application/lib', '/') | |
// .map('packages/ember-extension-support/lib', '/') | |
.map('packages/ember-debug/lib', '/') | |
.map('packages/ember-testing/lib', '/') | |
.addTransformer(devDefeaturifyFilter) | |
var prodEmberTree = factory.makeTree() | |
.map('packages/ember-core/lib', '/') | |
// We may need a no-op replacement for ember-debug here | |
.addTransformer(prodDefeaturifyFilter) | |
var containerTree = factory.makeTree() | |
.map('packages/container/lib', '/') | |
var metamorphTree = factory.makeTree() | |
.map('packages/metamorph/lib', '/') | |
var rsvpTree = factory.makeTree() | |
.map('packages/rsvp/lib', '/') | |
// We pick-and-choose which dependencies we include, so we need to manually | |
// make a tree for each bower package | |
var backburnerTree = factory.makeTree() | |
.map('bower_components/backburner/lib', '/') | |
var routeRecognizerTree = factory.makeTree() | |
.map('bower_components/route-recognizer/lib', '/') | |
var routerTree = factory.makeTree() | |
.map('bower_components/router/lib', '/') | |
var handlebarsTree = factory.makeTree() | |
.map('bower_components/handlebars/lib', '') // includes runtime | |
var jQueryTree = factory.makeTree() | |
.map('bower_components/jquery/lib', '/') | |
var testTrees = [ | |
// need QUnit too | |
factory.makeTree().map('packages/ember-core/tests', 'ember/tests'), | |
factory.makeTree().map('packages/ember-testing/tests', 'ember/tests'), | |
factory.makeTree().map('packages/container/tests', 'ember-testing/tests'), | |
] | |
var includedDependencies = [ | |
containerTree, | |
metamorphTree, | |
rsvpTree, | |
backburnerTree, | |
routeRecognizerTree, | |
routerTree | |
] | |
var excludedDependencies = [ | |
handlebarsTree, | |
jQueryTree | |
] | |
// Global exports | |
function globalES6Concatenator (trees, outputFile, wrapInEval) { | |
return new ES6ConcatenatorCompiler({ | |
loadPaths: trees.concat(includedDependencies), | |
importGlobalMapping: { | |
'jquery': 'jQuery', | |
'handlebars': 'Handlebars' | |
}, | |
exportGlobalMapping: { | |
'ember': 'Ember', | |
'rsvp': 'RSVP' | |
}, | |
wrapInEval: wrapInEval, // should have source maps eventually | |
outputFile: outputFile | |
}) | |
} | |
var emberJs = globalES6Concatenator([devEmberTree], 'ember.js', true) | |
var emberProdJs = globalES6Concatenator([prodEmberTree], 'ember.prod.js', false) | |
var emberMinJs = globalES6Concatenator([prodEmberTree], 'ember.min.js', false) | |
// Chain methods must stop mutating | |
.addTransformer(new UglifyJSFilter()) | |
// ES6 (defeaturified); this should be pushed onto bower eventually | |
var es6LibDev = new MergedTree([ | |
devEmberTree, | |
// The following should become bower dependencies. For now they are | |
// included. | |
containerTree, rsvpTree, metamorphTree | |
]) | |
.addTransformer(new Renamer({ | |
srcDir: '/', | |
files: ['**'] | |
destDir: '/lib-dev' | |
})) | |
var es6LibProd = new MergedTree({ | |
prodEmberTree, | |
containerTree, rsvpTree, metamorphTree | |
}) | |
.addTransformer(new Renamer({ | |
srcDir: '/', | |
files: ['**'] | |
destDir: '/lib-prod' | |
})) | |
// Test | |
var emberTestsJs = new ES6ConcatenatorCompiler({ | |
loadPaths: [devEmberTree, testTrees].concat(includedDependencies), | |
wrapInEval: true, | |
// Um. It's not clear how we should expose this. | |
// ember-dev/support/tests/index.html.erb has a scary line count. | |
// Maybe we just load one particular main module. | |
mainModule: 'ember/test/main', | |
outputFile: 'ember-tests.js' | |
}) | |
return [emberJs, emberProdJs, emberMinJs, es6LibDev, es6LibProd, emberTestsJs] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment