| 
									
										
										
										
											2015-04-10 16:45:24 -07:00
										 |  |  | /// <reference path="../broccoli-writer.d.ts" />
 | 
					
						
							|  |  |  | /// <reference path="../../typings/fs-extra/fs-extra.d.ts" />
 | 
					
						
							|  |  |  | /// <reference path="../../typings/node/node.d.ts" />
 | 
					
						
							|  |  |  | import fs = require('fs'); | 
					
						
							|  |  |  | import fse = require('fs-extra'); | 
					
						
							|  |  |  | import path = require('path'); | 
					
						
							|  |  |  | var traceur = require('../../../tools/transpiler'); | 
					
						
							| 
									
										
										
										
											2015-04-06 13:30:35 -07:00
										 |  |  | var walkSync = require('walk-sync'); | 
					
						
							| 
									
										
										
										
											2015-04-10 16:45:24 -07:00
										 |  |  | import Writer = require('broccoli-writer'); | 
					
						
							| 
									
										
										
										
											2015-04-06 13:30:35 -07:00
										 |  |  | var xtend = require('xtend'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TraceurFilter extends Writer { | 
					
						
							| 
									
										
										
										
											2015-04-08 08:28:12 -07:00
										 |  |  |   static RUNTIME_PATH = traceur.RUNTIME_PATH; | 
					
						
							| 
									
										
										
										
											2015-04-10 13:28:35 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   constructor(private inputTree, private destExtension: string, | 
					
						
							| 
									
										
										
										
											2015-04-10 16:45:24 -07:00
										 |  |  |               private destSourceMapExtension: string, private options = {}) { | 
					
						
							|  |  |  |     super(); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-04-10 13:28:35 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-06 13:30:35 -07:00
										 |  |  |   write(readTree, destDir) { | 
					
						
							|  |  |  |     return readTree(this.inputTree) | 
					
						
							| 
									
										
										
										
											2015-04-08 08:28:12 -07:00
										 |  |  |         .then(srcDir => { | 
					
						
							|  |  |  |           walkSync(srcDir) | 
					
						
							|  |  |  |               .filter(filepath => | 
					
						
							|  |  |  |                       { | 
					
						
							|  |  |  |                         var extension = path.extname(filepath).toLowerCase(); | 
					
						
							| 
									
										
										
										
											2015-04-09 15:56:54 -07:00
										 |  |  |                         return extension === '.js' || extension === '.es6' || extension === '.cjs'; | 
					
						
							| 
									
										
										
										
											2015-04-08 08:28:12 -07:00
										 |  |  |                       }) | 
					
						
							|  |  |  |               .map(filepath => { | 
					
						
							|  |  |  |                 var options = xtend({filename: filepath}, this.options); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 var fsOpts = {encoding: 'utf-8'}; | 
					
						
							|  |  |  |                 var sourcecode = fs.readFileSync(path.join(srcDir, filepath), fsOpts); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 var result = traceur.compile(options, filepath, sourcecode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 // TODO: we should fix the sourceMappingURL written by Traceur instead of overriding
 | 
					
						
							|  |  |  |                 // (but we might switch to typescript first)
 | 
					
						
							| 
									
										
										
										
											2015-04-10 13:28:35 -07:00
										 |  |  |                 var mapFilepath = filepath.replace(/\.\w+$/, '') + this.destSourceMapExtension; | 
					
						
							| 
									
										
										
										
											2015-04-13 09:52:02 -07:00
										 |  |  |                 result.js = result.js + '\n//# sourceMappingURL=./' + path.basename(mapFilepath); | 
					
						
							| 
									
										
										
										
											2015-04-08 08:28:12 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 var destFilepath = filepath.replace(/\.\w+$/, this.destExtension); | 
					
						
							|  |  |  |                 var destFile = path.join(destDir, destFilepath); | 
					
						
							|  |  |  |                 fse.mkdirsSync(path.dirname(destFile)); | 
					
						
							|  |  |  |                 fs.writeFileSync(destFile, result.js, fsOpts); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-10 13:28:35 -07:00
										 |  |  |                 var destMap = path.join(destDir, mapFilepath); | 
					
						
							| 
									
										
										
										
											2015-04-08 08:28:12 -07:00
										 |  |  |                 result.sourceMap.file = destFilepath; | 
					
						
							|  |  |  |                 fs.writeFileSync(destMap, JSON.stringify(result.sourceMap), fsOpts); | 
					
						
							|  |  |  |               }); | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2015-04-06 13:30:35 -07:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = TraceurFilter; |