
This removes .es6 files which are pure duplicates of a .ts file in the same folder. Next we need to remove .js files as well, and remove karma preprocessors for dart.
117 lines
4.4 KiB
TypeScript
117 lines
4.4 KiB
TypeScript
'use strict';
|
|
|
|
var destCopy = require('../broccoli-dest-copy');
|
|
var Funnel = require('broccoli-funnel');
|
|
var mergeTrees = require('broccoli-merge-trees');
|
|
var path = require('path');
|
|
var renderLodashTemplate = require('broccoli-lodash');
|
|
var replace = require('broccoli-replace');
|
|
var stew = require('broccoli-stew');
|
|
var ts2dart = require('../broccoli-ts2dart');
|
|
var traceurCompiler = require('../traceur');
|
|
var TypescriptCompiler = require('../typescript');
|
|
|
|
var projectRootDir = path.normalize(path.join(__dirname, '..', '..', '..', '..'));
|
|
|
|
|
|
module.exports = function makeNodeTree(destinationPath) {
|
|
// list of npm packages that this build will create
|
|
var outputPackages = ['angular2', 'benchpress', 'rtts_assert'];
|
|
|
|
var modulesTree = new Funnel('modules', {
|
|
include: ['angular2/**', 'benchpress/**', 'rtts_assert/**', '**/e2e_test/**'],
|
|
exclude: [
|
|
// the following code and tests are not compatible with CJS/node environment
|
|
'angular2/src/core/zone/vm_turn_zone.es6',
|
|
'angular2/test/core/zone/**'
|
|
]
|
|
});
|
|
|
|
var nodeTree = traceurCompiler(modulesTree, '.js', '.map', {
|
|
sourceMaps: true,
|
|
annotations: true, // parse annotations
|
|
types: true, // parse types
|
|
script: false, // parse as a module
|
|
memberVariables: true, // parse class fields
|
|
typeAssertionModule: 'rtts_assert/rtts_assert',
|
|
// Don't use type assertions since this is partly transpiled by typescript
|
|
typeAssertions: false,
|
|
modules: 'commonjs'
|
|
});
|
|
|
|
// Transform all tests to make them runnable in node
|
|
nodeTree = replace(nodeTree, {
|
|
files: ['**/test/**/*_spec.js'],
|
|
patterns: [
|
|
{
|
|
// Override the default DOM adapter with Parse5 for all tests
|
|
match: /"use strict";/,
|
|
replacement:
|
|
"'use strict'; var parse5Adapter = require('angular2/src/dom/parse5_adapter'); " +
|
|
"parse5Adapter.Parse5DomAdapter.makeCurrent();"
|
|
},
|
|
{
|
|
// Append main() to all tests since all of our tests are wrapped in exported main fn
|
|
match: /$/g,
|
|
replacement: "\r\n main();"
|
|
}
|
|
]
|
|
});
|
|
|
|
// Now we add the LICENSE file into all the folders that will become npm packages
|
|
outputPackages.forEach(function(destDir) {
|
|
var license = new Funnel('.', {files: ['LICENSE'], destDir: destDir});
|
|
nodeTree = mergeTrees([nodeTree, license]);
|
|
});
|
|
|
|
// Get all docs and related assets and prepare them for js build
|
|
var docs = new Funnel(modulesTree, {include: ['**/*.md', '**/*.png'], exclude: ['**/*.dart.md']});
|
|
docs = stew.rename(docs, 'README.js.md', 'README.md');
|
|
|
|
// Generate shared package.json info
|
|
var BASE_PACKAGE_JSON = require(path.join(projectRootDir, 'package.json'));
|
|
var COMMON_PACKAGE_JSON = {
|
|
version: BASE_PACKAGE_JSON.version,
|
|
homepage: BASE_PACKAGE_JSON.homepage,
|
|
bugs: BASE_PACKAGE_JSON.bugs,
|
|
license: BASE_PACKAGE_JSON.license,
|
|
contributors: BASE_PACKAGE_JSON.contributors,
|
|
dependencies: BASE_PACKAGE_JSON.dependencies,
|
|
devDependencies: {
|
|
"yargs": BASE_PACKAGE_JSON.devDependencies['yargs'],
|
|
"gulp-sourcemaps": BASE_PACKAGE_JSON.devDependencies['gulp-sourcemaps'],
|
|
"gulp-traceur": BASE_PACKAGE_JSON.devDependencies['gulp-traceur'],
|
|
"gulp": BASE_PACKAGE_JSON.devDependencies['gulp'],
|
|
"gulp-rename": BASE_PACKAGE_JSON.devDependencies['gulp-rename'],
|
|
"through2": BASE_PACKAGE_JSON.devDependencies['through2']
|
|
}
|
|
};
|
|
|
|
// Add a .template extension since renderLodashTemplate strips one extension
|
|
var packageJsons = stew.rename(new Funnel(modulesTree, {include: ['**/package.json']}), '.json',
|
|
'.json.template');
|
|
packageJsons = renderLodashTemplate(
|
|
packageJsons, {files: ["**/**"], context: {'packageJson': COMMON_PACKAGE_JSON}});
|
|
|
|
|
|
var typescriptTree = new TypescriptCompiler(modulesTree, {
|
|
target: 'ES5',
|
|
sourceMap: true,
|
|
mapRoot: '', /* force sourcemaps to use relative path */
|
|
module: 'commonjs',
|
|
allowNonTsExtensions: false,
|
|
typescript: require('typescript'),
|
|
noEmitOnError: true,
|
|
outDir: 'angular2'
|
|
});
|
|
|
|
nodeTree = mergeTrees([nodeTree, typescriptTree, docs, packageJsons]);
|
|
|
|
// TODO(iminar): tree differ seems to have issues with trees created by mergeTrees, investigate!
|
|
// ENOENT error is thrown while doing fs.readdirSync on inputRoot
|
|
// in the meantime, we just do noop mv to create a new tree
|
|
nodeTree = stew.mv(nodeTree, '');
|
|
|
|
return destCopy(nodeTree, destinationPath);
|
|
};
|