2016-03-26 15:29:13 -07:00
|
|
|
'use strict';
|
2016-04-05 09:45:27 -07:00
|
|
|
const fs = require('fs');
|
|
|
|
|
const path = require('path');
|
2016-01-06 10:48:32 -08:00
|
|
|
|
2016-01-26 10:13:02 -08:00
|
|
|
// Import the require hook. Enables us to require TS files natively.
|
|
|
|
|
require('ts-node/register');
|
|
|
|
|
|
2016-04-05 09:45:27 -07:00
|
|
|
const mergeTrees = require('broccoli-merge-trees');
|
2016-01-29 14:01:19 -08:00
|
|
|
const BroccoliFunnel = require('broccoli-funnel');
|
2016-04-05 09:45:27 -07:00
|
|
|
const Angular2App = require('angular-cli/lib/broccoli/angular2-app');
|
|
|
|
|
const BroccoliSass = require('broccoli-sass');
|
|
|
|
|
const broccoliAutoprefixer = require('broccoli-autoprefixer');
|
|
|
|
|
const autoprefixerOptions = require('./build/autoprefixer-options');
|
2016-03-26 15:29:13 -07:00
|
|
|
|
|
|
|
|
|
2016-01-06 10:48:32 -08:00
|
|
|
module.exports = function(defaults) {
|
2016-01-11 18:40:59 +01:00
|
|
|
var demoAppCssTree = new BroccoliSass(['src/demo-app'], './demo-app.scss', 'demo-app/demo-app.css');
|
2016-02-01 12:44:33 -08:00
|
|
|
var demoCssTree = getCssTree('demo-app');
|
|
|
|
|
var componentCssTree = getCssTree('components');
|
2016-03-23 15:10:59 -07:00
|
|
|
var mainCssTree = new BroccoliSass(['src', 'src/core/style'], './main.scss', 'main.css');
|
2016-03-26 15:29:13 -07:00
|
|
|
var angularAppTree = new Angular2App(defaults, {
|
|
|
|
|
vendorNpmFiles: []
|
|
|
|
|
});
|
2016-02-17 13:41:50 -08:00
|
|
|
|
2016-01-07 17:45:21 -08:00
|
|
|
return mergeTrees([
|
|
|
|
|
angularAppTree.toTree(),
|
|
|
|
|
componentCssTree,
|
2016-03-23 15:10:59 -07:00
|
|
|
mainCssTree,
|
2016-01-07 17:45:21 -08:00
|
|
|
demoAppCssTree,
|
2016-03-26 15:29:13 -07:00
|
|
|
demoCssTree
|
2016-01-29 14:01:19 -08:00
|
|
|
]);
|
2016-04-05 09:45:27 -07:00
|
|
|
};
|
2016-01-29 14:01:19 -08:00
|
|
|
|
2016-01-07 17:45:21 -08:00
|
|
|
/** Gets the tree for all of the components' CSS. */
|
2016-02-01 12:44:33 -08:00
|
|
|
function getCssTree(folder) {
|
|
|
|
|
var srcPath = `src/${folder}/`;
|
|
|
|
|
var components = fs.readdirSync(srcPath)
|
|
|
|
|
.filter(file => fs.statSync(path.join(srcPath, file)).isDirectory());
|
2016-01-07 17:45:21 -08:00
|
|
|
|
|
|
|
|
var componentCssTrees = components.reduce((trees, component) => {
|
|
|
|
|
// We want each individual scss file to be compiled into a corresponding css file
|
|
|
|
|
// so that they can be individually included in styleUrls.
|
2016-02-01 12:44:33 -08:00
|
|
|
var scssFiles = fs.readdirSync(path.join(srcPath, component))
|
2016-01-07 17:45:21 -08:00
|
|
|
.filter(file => path.extname(file) === '.scss')
|
|
|
|
|
.map(file => path.basename(file, '.scss'));
|
|
|
|
|
|
|
|
|
|
return scssFiles.map(fileName => {
|
|
|
|
|
return BroccoliSass(
|
2016-02-01 12:44:33 -08:00
|
|
|
[`${srcPath}/${component}`, 'src/core/style'], // Directories w/ scss sources
|
|
|
|
|
`./${fileName}.scss`, // Root scss input file
|
|
|
|
|
`${folder}/${component}/${fileName}.css`); // Css output file
|
2016-01-07 17:45:21 -08:00
|
|
|
}).concat(trees);
|
|
|
|
|
}, []);
|
|
|
|
|
return broccoliAutoprefixer(mergeTrees(componentCssTrees), autoprefixerOptions);
|
|
|
|
|
}
|