110 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| 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() {
 | |
|   // 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: ['angular2/src/core/zone/vm_turn_zone.es6']
 | |
|   });
 | |
| 
 | |
|   var nodeTree = new 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: /*system.js*/ 'commonjs',
 | |
|     allowNonTsExtensions: false,
 | |
|     typescript: require('typescript'),
 | |
|     // declarationFiles: true,
 | |
|     noEmitOnError: true,
 | |
|     outDir: 'angular2'
 | |
|   });
 | |
| 
 | |
|   // For now, we just overwrite the Traceur-compiled files with their Typescript equivalent
 | |
|   nodeTree = mergeTrees([nodeTree, typescriptTree], { overwrite: true });
 | |
|   nodeTree = mergeTrees([nodeTree, docs, packageJsons]);
 | |
| 
 | |
|   return stew.mv(nodeTree, 'js/cjs');
 | |
| };
 |