Bones/node_modules/buble/bin/runBuble.js

137 lines
3.1 KiB
JavaScript
Raw Normal View History

2017-05-17 13:45:25 -04:00
var fs = require( 'fs' );
var path = require( 'path' );
var buble = require( '../dist/buble.deps.js' );
var handleError = require( './handleError.js' );
var EOL = require('os').EOL;
function compile ( from, to, command, options ) {
try {
var stats = fs.statSync( from );
if ( stats.isDirectory() ) {
compileDir( from, to, command, options );
} else {
compileFile( from, to, command, options );
}
} catch ( err ) {
handleError( err );
}
}
function compileDir ( from, to, command, options ) {
if ( !command.output ) handleError({ code: 'MISSING_OUTPUT_DIR' });
try {
fs.mkdirSync( to )
} catch ( e ) {
if ( e.code !== 'EEXIST' ) throw e
}
fs.readdirSync( from ).forEach( function ( file ) {
compile( path.resolve( from, file ), path.resolve( to, file ), command, options );
});
}
function compileFile ( from, to, command, options ) {
var ext = path.extname( from );
if ( ext !== '.js' && ext !== '.jsm' && ext !== '.es6' ) return;
if ( to ) to = to.slice( 0, -ext.length ) + '.js';
var source = fs.readFileSync( from, 'utf-8' );
var result = buble.transform( source, {
target: options.target,
transforms: options.transforms,
source: from,
file: to,
jsx: options.jsx
});
write( result, to, command );
}
function write ( result, to, command ) {
if ( command.sourcemap === 'inline' ) {
result.code += EOL + '//# sourceMappingURL=' + result.map.toUrl();
} else if ( command.sourcemap ) {
if ( !to ) {
handleError({ code: 'MISSING_OUTPUT_FILE' });
}
result.code += EOL + '//# sourceMappingURL=' + path.basename( to ) + '.map';
fs.writeFileSync( to + '.map', result.map.toString() );
}
if ( to ) {
fs.writeFileSync( to, result.code );
} else {
console.log( result.code ); // eslint-disable-line no-console
}
}
module.exports = function ( command ) {
if ( command._.length > 1 ) {
handleError({ code: 'ONE_AT_A_TIME' });
}
if ( command._.length === 1 ) {
if ( command.input ) {
handleError({ code: 'DUPLICATE_IMPORT_OPTIONS' });
}
command.input = command._[0];
}
var options = {
target: {},
transforms: {},
jsx: command.jsx
};
if ( command.target ) {
if ( !/^(?:(\w+):([\d\.]+),)*(\w+):([\d\.]+)$/.test( command.target ) ) {
handleError({ code: 'BAD_TARGET' });
}
command.target.split( ',' )
.map( function ( target ) {
return target.split( ':' );
})
.forEach( function ( pair ) {
options.target[ pair[0] ] = pair[1];
});
}
if ( command.yes ) {
command.yes.split( ',' ).forEach( function ( transform ) {
options.transforms[ transform ] = true;
});
}
if ( command.no ) {
command.no.split( ',' ).forEach( function ( transform ) {
options.transforms[ transform ] = false;
});
}
if ( command.input ) {
compile( command.input, command.output, command, options );
}
else {
process.stdin.resume();
process.stdin.setEncoding( 'utf8' );
var source = '';
process.stdin.on( 'data', function ( chunk ) {
source += chunk;
});
process.stdin.on( 'end', function () {
var result = buble.transform( source, options );
write( result, null, command );
});
}
};