Files
angular__angular/ember-cli-build.js
T

120 lines
4.0 KiB
JavaScript
Raw Normal View History

2016-03-26 15:29:13 -07:00
'use strict';
var fs = require('fs');
var path = require('path');
2016-01-06 10:48:32 -08:00
// Import the require hook. Enables us to require TS files natively.
require('ts-node/register');
const detect = require('./tools/build/dart').detect;
2016-01-29 14:01:19 -08:00
var mergeTrees = require('broccoli-merge-trees');
2016-01-06 10:48:32 -08:00
var Angular2App = require('angular-cli/lib/broccoli/angular2-app');
var BroccoliSass = require('broccoli-sass');
var broccoliAutoprefixer = require('broccoli-autoprefixer');
2016-01-29 14:01:19 -08:00
const BroccoliTs2Dart = require('./tools/broccoli/broccoli-ts2dart').default;
const BroccoliDartFmt = require('./tools/broccoli/broccoli-dartfmt').default;
const BroccoliFunnel = require('broccoli-funnel');
var autoprefixerOptions = require('./build/autoprefixer-options');
2016-01-06 10:48:32 -08:00
2016-03-26 15:29:13 -07:00
/**
* Almost the same as using a plain string for a tree; but unlike a plain
* string, Broccoli won't watch this. Used only internally.
*/
class UnwatchedTree {
constructor(dir) { this.dir = dir; }
read() { return this.dir; }
cleanup() { /* DoNothing */ }
}
2016-01-06 10:48:32 -08:00
module.exports = function(defaults) {
var demoAppCssTree = new BroccoliSass(['src/demo-app'], './demo-app.scss', 'demo-app/demo-app.css');
var demoCssTree = getCssTree('demo-app');
var componentCssTree = getCssTree('components');
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: []
});
var dartAppTree = getDartTree('src/');
return mergeTrees([
angularAppTree.toTree(),
componentCssTree,
mainCssTree,
demoAppCssTree,
2016-03-26 15:29:13 -07:00
demoCssTree
].concat(dartAppTree || []));
2016-01-06 10:48:32 -08:00
};
/** Gets the Dart tree - Transpile Dart files and format them afterward. */
function getDartTree(root) {
const dartSDK = detect();
2016-01-29 14:01:19 -08:00
if (!dartSDK) {
console.warn('---------------------------------------');
console.warn('You do not have the Dart SDK installed.');
console.warn('In order to contribute to this repo, please refer to');
console.warn('https://github.com/angular/material2/blob/master/CONTRIBUTING.md');
console.warn('');
console.warn('You can still build and serve the demo app without dart support.');
return null;
}
2016-01-29 14:01:19 -08:00
2016-03-26 15:29:13 -07:00
const ts2dart = new BroccoliTs2Dart([root], {
2016-01-29 14:01:19 -08:00
generateLibraryName: true,
generateSourceMap: false,
translateBuiltins: true,
2016-03-26 15:29:13 -07:00
basePath: path.join(__dirname, root),
typingsRoot: '../typings/browser/ambient/',
additionalFiles: [path.join(process.cwd(), root, 'typings.d.ts')]
2016-01-29 14:01:19 -08:00
});
2016-03-26 15:29:13 -07:00
const formatter = new BroccoliDartFmt([ts2dart], { dartSDK });
2016-01-29 14:01:19 -08:00
const dartSources = new BroccoliFunnel(root, {
include: ['**/*.dart'],
destDir: 'dart/lib',
2016-01-29 14:01:19 -08:00
});
const allDartFiles = mergeTrees([
dartSources,
formatter
]);
2016-03-26 15:29:13 -07:00
const pubSpecTree = new BroccoliFunnel(new UnwatchedTree('.'), {
2016-01-29 14:01:19 -08:00
files: ['pubspec.yaml'],
2016-03-26 15:29:13 -07:00
destDir: 'dart'
2016-01-29 14:01:19 -08:00
});
// Publishes the Dart files and pubspec inside a
return mergeTrees([
pubSpecTree,
2016-03-26 15:29:13 -07:00
new BroccoliFunnel(formatter, { destDir: 'dart/lib' }),
allDartFiles
2016-01-29 14:01:19 -08:00
]);
}
/** Gets the tree for all of the components' CSS. */
function getCssTree(folder) {
var srcPath = `src/${folder}/`;
var components = fs.readdirSync(srcPath)
.filter(file => fs.statSync(path.join(srcPath, file)).isDirectory());
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.
var scssFiles = fs.readdirSync(path.join(srcPath, component))
.filter(file => path.extname(file) === '.scss')
.map(file => path.basename(file, '.scss'));
return scssFiles.map(fileName => {
return BroccoliSass(
[`${srcPath}/${component}`, 'src/core/style'], // Directories w/ scss sources
`./${fileName}.scss`, // Root scss input file
`${folder}/${component}/${fileName}.css`); // Css output file
}).concat(trees);
}, []);
return broccoliAutoprefixer(mergeTrees(componentCssTrees), autoprefixerOptions);
}