| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-04 08:19:25 -07:00
										 |  |  | import destCopy from '../broccoli-dest-copy'; | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | 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'); | 
					
						
							| 
									
										
										
										
											2015-05-04 08:19:25 -07:00
										 |  |  | import transpileWithTraceur from '../traceur/index'; | 
					
						
							| 
									
										
										
										
											2015-05-04 08:27:14 -07:00
										 |  |  | import compileWithTypescript from '../broccoli-typescript'; | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-26 01:04:28 -07:00
										 |  |  | var projectRootDir = path.normalize(path.join(__dirname, '..', '..', '..', '..')); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-26 00:31:53 -07:00
										 |  |  | module.exports = function makeNodeTree(destinationPath) { | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  |   // 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/**'], | 
					
						
							| 
									
										
										
										
											2015-04-13 23:56:07 -07:00
										 |  |  |     exclude: [ | 
					
						
							| 
									
										
										
										
											2015-04-26 18:04:45 -07:00
										 |  |  |       // the following code and tests are not compatible with CJS/node environment
 | 
					
						
							| 
									
										
										
										
											2015-04-13 23:56:07 -07:00
										 |  |  |       'angular2/src/core/zone/vm_turn_zone.es6', | 
					
						
							| 
									
										
										
										
											2015-04-28 00:23:39 +02:00
										 |  |  |       'angular2/test/core/zone/**' | 
					
						
							| 
									
										
										
										
											2015-04-13 23:56:07 -07:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-04 08:19:25 -07:00
										 |  |  |   var nodeTree = transpileWithTraceur(modulesTree, { | 
					
						
							|  |  |  |     destExtension: '.js', | 
					
						
							|  |  |  |     destSourceMapExtension: '.map', | 
					
						
							|  |  |  |     traceurOptions: { | 
					
						
							|  |  |  |       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' | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // 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}}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-04 08:27:14 -07:00
										 |  |  |   var typescriptTree = compileWithTypescript(modulesTree, { | 
					
						
							|  |  |  |     allowNonTsExtensions: false, | 
					
						
							| 
									
										
										
										
											2015-05-01 14:05:19 -07:00
										 |  |  |     emitDecoratorMetadata: true, | 
					
						
							| 
									
										
										
										
											2015-05-04 08:27:14 -07:00
										 |  |  |     declaration: true, | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  |     mapRoot: '', /* force sourcemaps to use relative path */ | 
					
						
							| 
									
										
										
										
											2015-04-27 16:11:20 -07:00
										 |  |  |     module: 'commonjs', | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  |     noEmitOnError: true, | 
					
						
							| 
									
										
										
										
											2015-05-04 08:27:14 -07:00
										 |  |  |     rootDir: '.', | 
					
						
							|  |  |  |     rootFilePaths: ['angular2/traceur-runtime.d.ts'], | 
					
						
							|  |  |  |     sourceMap: true, | 
					
						
							|  |  |  |     sourceRoot: '.', | 
					
						
							|  |  |  |     target: 'ES5' | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-04 08:27:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-27 16:11:20 -07:00
										 |  |  |   nodeTree = mergeTrees([nodeTree, typescriptTree, docs, packageJsons]); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-27 00:46:48 -07:00
										 |  |  |   // 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, ''); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-26 00:31:53 -07:00
										 |  |  |   return destCopy(nodeTree, destinationPath); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | }; |