63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| var through = require('through2');
 | |
| var compiler = require('./index');
 | |
| var path = require('path');
 | |
| 
 | |
| module.exports = gulpTraceur;
 | |
| gulpTraceur.RUNTIME_PATH = compiler.RUNTIME_PATH;
 | |
| gulpTraceur.sourcesChanged = compiler.sourcesChanged;
 | |
| 
 | |
| function gulpTraceur(options, resolveModuleName) {
 | |
|   options = options || {};
 | |
| 
 | |
|   return through.obj(function (file, enc, done) {
 | |
|     if (file.isNull()) {
 | |
|       done();
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     if (file.isStream()) {
 | |
|       throw new Error('gulp-traceur: Streaming not supported');
 | |
|     }
 | |
| 
 | |
|     try {
 | |
|       var originalFilePath = file.history[0];
 | |
|       var moduleName = resolveModuleName ? resolveModuleName(file.relative) : null;
 | |
|       var result = compiler.compile(options, {
 | |
|         inputPath: originalFilePath,
 | |
|         outputPath: file.relative,
 | |
|         moduleName: moduleName
 | |
|       }, file.contents.toString());
 | |
| 
 | |
|       var transpiledContent = result.js;
 | |
|       var sourceMap = result.sourceMap;
 | |
| 
 | |
|       if (sourceMap) {
 | |
|         sourceMap.file = file.relative;
 | |
|         var sourceMapFile = cloneFile(file, {
 | |
|           path: file.path.replace(/\.\w+$/, '.map'),
 | |
|           contents: JSON.stringify(sourceMap)
 | |
|         });
 | |
| 
 | |
|         transpiledContent += '\n//# sourceMappingURL=./' + path.basename(sourceMapFile.path);
 | |
|         this.push(sourceMapFile);
 | |
|       }
 | |
| 
 | |
|       this.push(cloneFile(file, {contents: transpiledContent}));
 | |
|       done();
 | |
|     } catch (errors) {
 | |
|       if (errors.join) {
 | |
|          throw new Error('gulp-traceur:\n  ' + errors.join('\n  '));
 | |
|       } else {
 | |
|         console.error('Error when transpiling:\n  ' + originalFilePath);
 | |
|         throw errors;
 | |
|       }
 | |
|     }
 | |
|   });
 | |
| };
 | |
| 
 | |
| function cloneFile(file, override) {
 | |
|   var File = file.constructor;
 | |
|   return new File({path: override.path || file.path, cwd: override.cwd || file.cwd, contents: new Buffer(override.contents || file.contents), base: override.base || file.base});
 | |
| }
 |