'use strict'; var _ = require('underscore'); var assetRev = require('broccoli-asset-rev'); var autoprefixer = require('broccoli-autoprefixer'); var browserify = require('broccoli-browserify'); var compileSass = require('broccoli-sass'); var csso = require('broccoli-csso'); var env = require('broccoli-env').getEnv(); var filterReact = require('broccoli-react'); var findBowerTrees = require('broccoli-bower'); var fs = require('fs'); var htmlmin = require('broccoli-htmlmin'); var imagemin = require('broccoli-imagemin'); var mergeTrees = require('broccoli-merge-trees'); var peg = require('broccoli-pegjs'); var pickFiles = require('broccoli-static-compiler'); var replace = require('broccoli-replace'); var sourceMap = require('broccoli-source-map'); var uglifyJs = require('broccoli-uglify-js'); var watchedTree = require('broccoli-watched-tree'); var appJs = pickFiles('src/js', { srcDir: '/', files: ['**/*.js', '**/*.jsx'], destDir: 'js' }); var compiledAppJs = filterReact(appJs); var pegs = pickFiles('src/js', { srcDir: '/', files: ['**/*.pegjs'], destDir: 'js' }); var compiledPegs = peg(pegs); var shimJs = pickFiles('src', { srcDir: '/shims', destDir: '/shims' }); var jqueryJs = pickFiles('src', { srcDir: '/vendor', files: ['jquery/dist/jquery.js'], destDir: '/vendor' }); var vendorJs = mergeTrees([shimJs, jqueryJs]); vendorJs = browserify(vendorJs, { entries: [ './shims/es5-sham.js', './shims/es5-shim.js', './vendor/jquery/dist/jquery.js' ], browserify: { debug: (env == 'development' ? true : false) }, outputFile: 'js/vendor.js' }); compiledAppJs = mergeTrees([compiledAppJs, compiledPegs]); var config = JSON.parse(fs.readFileSync('./config/' + env + '.json')); compiledAppJs = replace(compiledAppJs, { files: ['js/config.js'], patterns: [{ json: config }] }); var nodeModules = watchedTree('node_modules'); compiledAppJs = mergeTrees([compiledAppJs, nodeModules]); compiledAppJs = browserify(compiledAppJs, { entries: [ './js/app.js' ], browserify: { debug: (env == 'development' ? true : false) }, outputFile: 'js/app.js' }); var js = mergeTrees([compiledAppJs, vendorJs]); if (env != 'development') { js = uglifyJs(js, { compress: true }); } var appScss = pickFiles('src', { srcDir: '/css', destDir: '/css' }); var appHtml = pickFiles('src', { srcDir: '/', files: ['index.html'], destDir: '/' }); var bootstrapScss = pickFiles('src', { srcDir: '/vendor/bootstrap-sass-official/assets/stylesheets', destDir: '/vendor/bootstrap/bootstrap-sass-official/assets/stylesheets' }); var scss = mergeTrees([appScss, bootstrapScss]) var css = compileSass([scss], 'css/app.scss', 'css/app.css', { sourceMap: (env == 'development' ? true : false) }); if (env == 'development') { css = sourceMap.inline(css, { srcDir: '/css', destDir: '/css' }); } css = autoprefixer(css, { browsers: ['last 1 version'] }); if (env != 'development') { css = csso(css); } var fonts = pickFiles('src', { srcDir: '/vendor/bootstrap-sass-official/assets/fonts/bootstrap', destDir: '/fonts' }); var images = pickFiles('src/images', { srcDir: '/', files: ['**/*.svg', '**/*.png'], destDir: '/images' }); images = imagemin(images, { interlaced: true, optimizationLevel: 3, progressive: true, lossyPNG: false }); appHtml = htmlmin(appHtml); var result = mergeTrees([js, css, fonts, /*images,*/ appHtml]); if (env != 'development') { result = assetRev(result, { extensions: ['js', 'css', 'png', 'jpg', 'gif', 'svg', 'eot', 'ttf', 'woff'], replaceExtensions: ['html', 'js', 'css'] }); } module.exports = result;