#!/usr/bin/env node // Attention: This file will be distributed with our npm packages! var gulp = require('gulp'); var traceur = require('gulp-traceur'); var rename = require('gulp-rename'); var sourcemaps = require('gulp-sourcemaps'); var through2 = require('through2'); var fs = require('fs'); var path = require('path'); module.exports = run; if (!module.parent) { var argv = require('yargs') .usage('Transpile to es5.\n\n'+ 'Usage: $0 -m [format] -s [folder] -d [folder]') .example('$0 -d tmp', 'transpile in `instantate` format to tmp/') .options({ 's': { alias: 'source', describe: 'source folder', default: '.' }, 'd': { alias: 'dest', describe: 'output folder', demand: true }, 'm': { alias: 'modules', describe: 'module format, https://github.com/google/traceur-compiler/wiki/Options-for-Compiling', default: 'instantiate' } }) .help('help') .wrap(40) .strict() .argv ; run({ src: argv.s, dest: argv.d, modules: argv.m }); } function run(config) { var src = ['!node_modules', '!node_modules/**', './**/*.es6']; return gulp.src(src, {cwd: config.src}) .pipe(rename(function(file) { file.extname = file.extname.replace('.es6', '.js'); })) // TODO(tbosch): Using sourcemaps.init({loadMaps:true}) does not combine // the sourcemaps correctly! .pipe(sourcemaps.init()) .pipe(through2.obj(function(file, encoding, done) { var self = this; fs.readFile(file.path.replace('.js', '.map'), function(error, buffer) { if (error) { return done(error); } file.sourceMap = JSON.parse(buffer.toString()); // The filename needs to be the same as the one that is transpiled // so that gulp-sourcemaps can update the mapping file.sourceMap.file = file.relative; file.sourceMap.sourceRoot = path.dirname(file.relative); self.push(file); done(); }); })) .pipe(traceur({ modules: config.modules, sourceMaps: true })) .pipe(sourcemaps.write('.')) .pipe(gulp.dest(config.dest)); };