| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  | /// <reference path="../../typings/node/node.d.ts" />
 | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-26 00:31:53 -07:00
										 |  |  | import {MultiCopy} from './../multi_copy'; | 
					
						
							| 
									
										
										
										
											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'); | 
					
						
							| 
									
										
										
										
											2015-05-21 12:07:52 -04:00
										 |  |  | import mergeTrees from '../broccoli-merge-trees'; | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | var path = require('path'); | 
					
						
							| 
									
										
										
										
											2015-06-09 13:35:58 -04:00
										 |  |  | import renderLodashTemplate from '../broccoli-lodash'; | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | var stew = require('broccoli-stew'); | 
					
						
							| 
									
										
										
										
											2015-05-08 12:46:38 -05:00
										 |  |  | import ts2dart from '../broccoli-ts2dart'; | 
					
						
							| 
									
										
										
										
											2015-05-28 18:54:54 -04:00
										 |  |  | import dartfmt from '../broccoli-dartfmt'; | 
					
						
							| 
									
										
										
										
											2015-06-08 11:05:32 -07:00
										 |  |  | import replace from '../broccoli-replace'; | 
					
						
							| 
									
										
										
										
											2016-04-07 10:14:38 -07:00
										 |  |  | import {AngularBuilderOptions} from '../angular_builder'; | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  | import generateForTest from '../broccoli-generate-for-test'; | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-12 13:03:28 -07:00
										 |  |  | var global_excludes = [ | 
					
						
							| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  |   'angular2/examples/**/ts/**/*', | 
					
						
							|  |  |  |   'angular2/http*', | 
					
						
							|  |  |  |   'angular2/http/**/*', | 
					
						
							|  |  |  |   'angular2/src/http/**/*', | 
					
						
							|  |  |  |   'angular2/src/upgrade/**/*', | 
					
						
							|  |  |  |   'angular2/test/http/**/*', | 
					
						
							|  |  |  |   'angular2/test/upgrade/**/*', | 
					
						
							|  |  |  |   'angular2/upgrade*', | 
					
						
							|  |  |  |   'payload_tests/**/ts/**/*', | 
					
						
							|  |  |  |   'playground/src/http/**/*', | 
					
						
							|  |  |  |   'playground/src/jsonp/**/*', | 
					
						
							|  |  |  |   'playground/test/http/**/*', | 
					
						
							|  |  |  |   'playground/test/jsonp/**/*' | 
					
						
							| 
									
										
										
										
											2015-08-12 13:03:28 -07:00
										 |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * A funnel starting at modules, including the given filters, and moving into the root. | 
					
						
							|  |  |  |  * @param include Include glob filters. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | function modulesFunnel(include: string[], exclude?: string[]) { | 
					
						
							| 
									
										
										
										
											2015-08-12 13:03:28 -07:00
										 |  |  |   exclude = exclude || []; | 
					
						
							|  |  |  |   exclude = exclude.concat(global_excludes); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   return new Funnel('modules', {include, destDir: '/', exclude}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Replaces $SCRIPT$ in .html files with actual <script> tags. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2015-06-08 19:01:22 -07:00
										 |  |  | function replaceScriptTagInHtml(placeholder: string, relativePath: string): string { | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   var scriptTags = ''; | 
					
						
							|  |  |  |   if (relativePath.match(/^benchmarks/)) { | 
					
						
							|  |  |  |     scriptTags += '<script src="url_params_to_form.js" type="text/javascript"></script>\n'; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-06-25 16:56:59 +02:00
										 |  |  |   var scriptName = relativePath.replace(/\\/g, '/').replace(/.*\/([^/]+)\.html$/, '$1.dart'); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   scriptTags += '<script src="' + scriptName + '" type="application/dart"></script>\n' + | 
					
						
							| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  |                 '<script src="packages/browser/dart.js" type="text/javascript"></script>'; | 
					
						
							| 
									
										
										
										
											2015-06-08 19:01:22 -07:00
										 |  |  |   return scriptTags; | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function stripModulePrefix(relativePath: string): string { | 
					
						
							|  |  |  |   if (!relativePath.match(/^modules\//)) { | 
					
						
							|  |  |  |     throw new Error('Expected path to root at modules/: ' + relativePath); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return relativePath.replace(/^modules\//, ''); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  | function getSourceTree(options: AngularBuilderOptions) { | 
					
						
							| 
									
										
										
										
											2016-04-25 21:31:46 -07:00
										 |  |  |   var tsInputTree = modulesFunnel( | 
					
						
							| 
									
										
										
										
											2016-04-28 23:28:13 -07:00
										 |  |  |       [ | 
					
						
							|  |  |  |         'tsconfig-ts2dart.json', | 
					
						
							|  |  |  |         'upgrade-ts2dart.d.ts', | 
					
						
							|  |  |  |         'zone-ts2dart.d.ts', | 
					
						
							|  |  |  |         '**/*.js', | 
					
						
							|  |  |  |         '**/*.ts', | 
					
						
							|  |  |  |         '**/*.dart' | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |       [ | 
					
						
							|  |  |  |         'rollup-test/**/*', | 
					
						
							|  |  |  |         'angular1_router/**/*', | 
					
						
							|  |  |  |         'angular2/upgrade/**/*', | 
					
						
							|  |  |  |         'angular2/core/test/typings.d.ts', | 
					
						
							|  |  |  |         'angular2/manual_typings/globals.d.ts', | 
					
						
							|  |  |  |         'angular2/typings/es6-collections/es6-collections.d.ts', | 
					
						
							|  |  |  |         'angular2/typings/es6-promise/es6-promise.d.ts', | 
					
						
							|  |  |  |         'angular2/typings/tsd.d.ts', | 
					
						
							|  |  |  |         'angular2/typings.d.ts', | 
					
						
							|  |  |  |       ]); | 
					
						
							| 
									
										
										
										
											2015-06-11 18:50:41 -07:00
										 |  |  |   var transpiled = ts2dart(tsInputTree, { | 
					
						
							|  |  |  |     generateLibraryName: true, | 
					
						
							|  |  |  |     generateSourceMap: false, | 
					
						
							|  |  |  |     translateBuiltins: true, | 
					
						
							| 
									
										
										
										
											2016-04-25 21:31:46 -07:00
										 |  |  |     tsconfig: 'tsconfig-ts2dart.json' | 
					
						
							| 
									
										
										
										
											2015-06-11 18:50:41 -07:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   // Native sources, dart only examples, etc.
 | 
					
						
							| 
									
										
										
										
											2015-12-05 02:21:38 -08:00
										 |  |  |   var dartSrcs = modulesFunnel( | 
					
						
							|  |  |  |       ['**/*.dart', '**/*.ng_meta.json', '**/*.aliases.json', '**/css/**', '**/*.css']); | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   var compiledTree = mergeTrees([transpiled, dartSrcs]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Generate test files
 | 
					
						
							|  |  |  |   let generatedDartTestFiles = generateForTest( | 
					
						
							|  |  |  |       mergeTrees([compiledTree, new Funnel('packages', {include: ['path/**', 'stack_trace/**']})]), | 
					
						
							|  |  |  |       {files: ['*/test/**/*_codegen_typed.dart'], dartPath: options.dartSDK.VM}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return mergeTrees([compiledTree, generatedDartTestFiles], {overwrite: true}); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  | function fixDartFolderLayout(sourceTree) { | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  |   // Move around files to match Dart's layout expectations.
 | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   return stew.rename(sourceTree, function(relativePath) { | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  |     // If a file matches the `pattern`, insert the given `insertion` as the second path part.
 | 
					
						
							|  |  |  |     var replacements = [ | 
					
						
							| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  |       {pattern: /^benchmarks\/test\//, insertion: ''}, | 
					
						
							|  |  |  |       {pattern: /^benchmarks\//, insertion: 'web'}, | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  |       {pattern: /^benchmarks_external\/test\//, insertion: ''}, | 
					
						
							|  |  |  |       {pattern: /^benchmarks_external\//, insertion: 'web'}, | 
					
						
							| 
									
										
										
										
											2015-10-10 00:25:17 +02:00
										 |  |  |       {pattern: /^playground\/test\//, insertion: ''}, | 
					
						
							| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  |       {pattern: /^playground\//, insertion: 'web/'}, | 
					
						
							|  |  |  |       {pattern: /^[^\/]*\/test\//, insertion: ''}, | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  |       {pattern: /^./, insertion: 'lib'},  // catch all.
 | 
					
						
							|  |  |  |     ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for (var i = 0; i < replacements.length; i++) { | 
					
						
							|  |  |  |       var repl = replacements[i]; | 
					
						
							|  |  |  |       if (relativePath.match(repl.pattern)) { | 
					
						
							|  |  |  |         var parts = relativePath.split('/'); | 
					
						
							|  |  |  |         parts.splice(1, 0, repl.insertion); | 
					
						
							|  |  |  |         return path.join.apply(path, parts); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     throw new Error('Failed to match any path: ' + relativePath); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getHtmlSourcesTree() { | 
					
						
							|  |  |  |   // Replace $SCRIPT$ markers in HTML files.
 | 
					
						
							| 
									
										
										
										
											2015-06-08 19:01:22 -07:00
										 |  |  |   var htmlSrcsTree = modulesFunnel(['*/src/**/*.html']); | 
					
						
							|  |  |  |   htmlSrcsTree = replace( | 
					
						
							|  |  |  |       htmlSrcsTree, | 
					
						
							|  |  |  |       {files: ['*/**'], patterns: [{match: '$SCRIPTS$', replacement: replaceScriptTagInHtml}]}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   // Copy a url_params_to_form.js for each benchmark html file.
 | 
					
						
							|  |  |  |   var urlParamsToFormTree = new MultiCopy('', { | 
					
						
							|  |  |  |     srcPath: 'tools/build/snippets/url_params_to_form.js', | 
					
						
							|  |  |  |     targetPatterns: ['modules/benchmarks*/src/*', 'modules/benchmarks*/src/*/*'], | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   urlParamsToFormTree = stew.rename(urlParamsToFormTree, stripModulePrefix); | 
					
						
							|  |  |  |   return mergeTrees([htmlSrcsTree, urlParamsToFormTree]); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-19 12:14:12 -07:00
										 |  |  | function getExamplesJsonTree() { | 
					
						
							|  |  |  |   // Copy JSON files
 | 
					
						
							| 
									
										
										
										
											2015-10-10 00:25:17 +02:00
										 |  |  |   return modulesFunnel(['playground/**/*.json']); | 
					
						
							| 
									
										
										
										
											2015-06-19 12:14:12 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | function getTemplatedPubspecsTree() { | 
					
						
							|  |  |  |   // The JSON structure for templating pubspec.yaml files.
 | 
					
						
							| 
									
										
										
										
											2015-04-26 01:04:28 -07:00
										 |  |  |   var BASE_PACKAGE_JSON = require('../../../../package.json'); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   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, | 
					
						
							| 
									
										
										
										
											2015-10-03 18:48:44 +02:00
										 |  |  |     devDependencies: {} | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   }; | 
					
						
							|  |  |  |   // Generate pubspec.yaml from templates.
 | 
					
						
							| 
									
										
										
										
											2015-06-09 13:35:58 -04:00
										 |  |  |   var pubspecs = modulesFunnel(['**/pubspec.yaml']); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   // Then render the templates.
 | 
					
						
							| 
									
										
										
										
											2015-06-09 13:35:58 -04:00
										 |  |  |   return renderLodashTemplate(pubspecs, {context: {'packageJson': COMMON_PACKAGE_JSON}}); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getDocsTree() { | 
					
						
							|  |  |  |   // LICENSE files
 | 
					
						
							|  |  |  |   var licenses = new MultiCopy('', { | 
					
						
							|  |  |  |     srcPath: 'LICENSE', | 
					
						
							|  |  |  |     targetPatterns: ['modules/*'], | 
					
						
							| 
									
										
										
										
											2016-01-08 17:51:02 +01:00
										 |  |  |     exclude: [ | 
					
						
							| 
									
										
										
										
											2016-04-25 21:31:46 -07:00
										 |  |  |       '*/@angular', | 
					
						
							|  |  |  |       '*/angular2', | 
					
						
							| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  |       '*/angular1_router', | 
					
						
							|  |  |  |       '*/angular2/src/http', | 
					
						
							|  |  |  |       '*/payload_tests', | 
					
						
							| 
									
										
										
										
											2016-01-08 17:51:02 +01:00
										 |  |  |       '*/upgrade' | 
					
						
							|  |  |  |     ]  // Not in dart.
 | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  |   licenses = stew.rename(licenses, stripModulePrefix); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Documentation.
 | 
					
						
							|  |  |  |   // Rename *.dart.md -> *.dart.
 | 
					
						
							| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  |   var mdTree = stew.rename(modulesFunnel(['**/*.dart.md']), | 
					
						
							|  |  |  |                            relativePath => relativePath.replace(/\.dart\.md$/, '.md')); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   // Copy all assets, ignore .js. and .dart. (handled above).
 | 
					
						
							| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  |   var docs = modulesFunnel(['**/*.md', '**/*.png', '**/*.html', '**/*.css', '**/*.scss'], | 
					
						
							|  |  |  |                            ['**/*.js.md', '**/*.dart.md', 'angular1_router/**/*']); | 
					
						
							| 
									
										
										
										
											2015-07-09 15:34:33 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-10 00:25:17 +02:00
										 |  |  |   var assets = modulesFunnel(['playground/**/*.json']); | 
					
						
							| 
									
										
										
										
											2015-07-09 15:34:33 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return mergeTrees([licenses, mdTree, docs, assets]); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-28 18:54:54 -04:00
										 |  |  | module.exports = function makeDartTree(options: AngularBuilderOptions) { | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |   var dartSources = dartfmt(getSourceTree(options), {dartSDK: options.dartSDK, logs: options.logs}); | 
					
						
							| 
									
										
										
										
											2015-06-19 12:14:12 -07:00
										 |  |  |   var sourceTree = mergeTrees([dartSources, getHtmlSourcesTree(), getExamplesJsonTree()]); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:22:23 -07:00
										 |  |  |   sourceTree = fixDartFolderLayout(sourceTree); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-26 00:31:53 -07:00
										 |  |  |   var dartTree = mergeTrees([sourceTree, getTemplatedPubspecsTree(), getDocsTree()]); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-28 18:54:54 -04:00
										 |  |  |   return destCopy(dartTree, options.outputPath); | 
					
						
							| 
									
										
										
										
											2015-04-13 16:39:47 -07:00
										 |  |  | }; |