diff --git a/Brocfile-js_dev.js b/Brocfile-js_dev.js index 1913bbe825..8ecf34d5e0 100644 --- a/Brocfile-js_dev.js +++ b/Brocfile-js_dev.js @@ -1,11 +1,15 @@ var Funnel = require('broccoli-funnel'); +var flatten = require('broccoli-flatten'); var mergeTrees = require('broccoli-merge-trees'); var stew = require('broccoli-stew'); var TraceurCompiler = require('./tools/broccoli/traceur'); +var replace = require('broccoli-replace'); +var htmlReplace = require('./tools/broccoli/html-replace'); +var path = require('path'); var modulesTree = new Funnel('modules', {include: ['**/**'], destDir: '/'}); -// First, use Traceur to transpile original sources to ES6 +// Use Traceur to transpile original sources to ES6 var es6DevTree = new TraceurCompiler(modulesTree, '.es6', { sourceMaps: true, annotations: true, // parse annotations @@ -17,6 +21,7 @@ var es6DevTree = new TraceurCompiler(modulesTree, '.es6', { typeAssertions: true, outputLanguage: 'es6' }); +// Munge the filenames since we use an '.es6' extension es6DevTree = stew.rename(es6DevTree, function(relativePath) { return relativePath.replace(/\.(js|es6)\.map$/, '.map').replace(/\.js$/, '.es6'); }); @@ -25,4 +30,79 @@ es6DevTree = stew.rename(es6DevTree, function(relativePath) { var es5DevTree = new TraceurCompiler(es6DevTree, '.js', {modules: 'instantiate', sourceMaps: true}); es5DevTree = stew.rename(es5DevTree, '.es6.map', '.js.map'); +// Now we add a few more files to the es6 tree that Traceur should not see +['angular2', 'benchmarks', 'benchmarks_external', 'benchpress', 'examples', 'rtts_assert'].forEach( + function(destDir) { + var extras = new Funnel('tools/build', {files: ['es5build.js'], destDir: destDir}); + es6DevTree = mergeTrees([es6DevTree, extras]); + }); + +var vendorScriptsTree = flatten(new Funnel('.', { + files: [ + 'node_modules/es6-module-loader/dist/es6-module-loader-sans-promises.src.js', + 'node_modules/zone.js/zone.js', + 'node_modules/zone.js/long-stack-trace-zone.js', + 'node_modules/systemjs/dist/system.src.js', + 'node_modules/systemjs/lib/extension-register.js', + 'node_modules/systemjs/lib/extension-cjs.js', + 'node_modules/rx/dist/rx.all.js', + 'tools/build/snippets/runtime_paths.js', + path.relative(__dirname, TraceurCompiler.RUNTIME_PATH) + ] +})); +var vendorScripts_benchmark = + new Funnel('tools/build/snippets', {files: ['url_params_to_form.js'], destDir: '/'}); +var vendorScripts_benchmarks_external = + new Funnel('node_modules/angular', {files: ['angular.js'], destDir: '/'}); + +var servingTrees = []; +function copyVendorScriptsTo(destDir) { + servingTrees.push(new Funnel(vendorScriptsTree, {srcDir: '/', destDir: destDir})); + if (destDir.indexOf('benchmarks') > -1) { + servingTrees.push(new Funnel(vendorScripts_benchmark, {srcDir: '/', destDir: destDir})); + } + if (destDir.indexOf('benchmarks_external') > -1) { + servingTrees.push( + new Funnel(vendorScripts_benchmarks_external, {srcDir: '/', destDir: destDir})); + } +} + +function writeScriptsForPath(relativePath, result) { + copyVendorScriptsTo(path.dirname(relativePath)); + return result.replace('@@FILENAME_NO_EXT', relativePath.replace(/\.\w+$/, '')); +} + +var htmlTree = new Funnel(modulesTree, {include: ['*/src/**/*.html'], destDir: '/'}); +htmlTree = replace(htmlTree, { + files: ['examples*/**'], + patterns: [{match: /\$SCRIPTS\$/, replacement: htmlReplace('SCRIPTS')}], + replaceWithPath: writeScriptsForPath +}); +htmlTree = replace(htmlTree, { + files: ['benchmarks/**'], + patterns: [{match: /\$SCRIPTS\$/, replacement: htmlReplace('SCRIPTS_benchmarks')}], + replaceWithPath: writeScriptsForPath +}); +htmlTree = replace(htmlTree, { + files: ['benchmarks_external/**'], + patterns: [{match: /\$SCRIPTS\$/, replacement: htmlReplace('SCRIPTS_benchmarks_external')}], + replaceWithPath: writeScriptsForPath +}); +// TODO(broccoli): are these needed here, if not loaded by a script tag?? +['benchmarks/src', 'benchmarks_external/src', 'examples/src/benchpress'].forEach( + copyVendorScriptsTo); + +var scripts = mergeTrees(servingTrees, {overwrite: true}); +var css = new Funnel(modulesTree, {include: ["**/*.css"]}); +var polymerFiles = new Funnel('.', { + files: [ + 'bower_components/polymer/lib/polymer.html', + 'tools/build/snippets/url_params_to_form.js' + ] +}); +var polymer = stew.mv(flatten(polymerFiles), 'benchmarks_external/src/tree/polymer'); +htmlTree = mergeTrees([htmlTree, scripts, polymer, css]); + +es5DevTree = mergeTrees([es5DevTree, htmlTree]); + module.exports = mergeTrees([stew.mv(es6DevTree, 'js/dev/es6'), stew.mv(es5DevTree, 'js/dev/es5')]); diff --git a/gulpfile.js b/gulpfile.js index cb51a8b2ff..338d9704a8 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -344,10 +344,6 @@ gulp.task('build/transpile.js.dev.es5', function() { }); }); -gulp.task('broccoli.js.dev', function() { - return broccoliBuild(require('./Brocfile-js_dev.js'), path.join('js', 'dev')); -}); - gulp.task('build/transpile.js.prod.es6', transpile(gulp, gulpPlugins, { src: CONFIG.transpile.src.js, dest: CONFIG.dest.js.prod.es6, @@ -542,7 +538,7 @@ gulp.task('build/format.dart', rundartpackage(gulp, gulpPlugins, { })); gulp.task('check-format', function() { - return gulp.src(['modules/**/*.ts', '!**/typings/**/*.d.ts']) + return gulp.src(['Brocfile*.js', 'modules/**/*.ts', '!**/typings/**/*.d.ts']) .pipe(format.checkFormat('file')); }); @@ -793,10 +789,12 @@ gulp.task('build.dart', function(done) { ); }); +gulp.task('broccoli.js.dev', function() { + return broccoliBuild(require('./Brocfile-js_dev.js'), path.join('js', 'dev')); +}); gulp.task('build.js.dev', function(done) { runSequence( 'broccoli.js.dev', - ['build/html.js.dev', 'build/copy.js.dev', 'build/multicopy.js.dev.es6'], 'build/checkCircularDependencies', done ); diff --git a/modules/benchmarks_external/src/tree/polymer/index.html b/modules/benchmarks_external/src/tree/polymer/index.html index 2aba6179e0..e3ad735192 100644 --- a/modules/benchmarks_external/src/tree/polymer/index.html +++ b/modules/benchmarks_external/src/tree/polymer/index.html @@ -22,7 +22,8 @@