diff --git a/main.js b/main.js index fc67157a3ac1..826104ff89a4 100644 --- a/main.js +++ b/main.js @@ -2,15 +2,40 @@ var visitors = require('./vendor/fbtransform/visitors'); var transform = require('jstransform').transform; +var Buffer = require('buffer').Buffer; module.exports = { - transform: function(code, options) { - var visitorList; - if (options && options.harmony) { - visitorList = visitors.getAllVisitors(); - } else { - visitorList = visitors.transformVisitors.react; + React: React, + transform: function(input, options) { + options = options || {}; + var visitorList = getVisitors(options.harmony); + var result = transform(visitorList, input, options); + var output = result.code; + if (options.sourceMap) { + var map = inlineSourceMap( + result.sourceMap, + input, + options.sourceFilename + ); + output += '\n' + map; } - return transform(visitorList, code).code; + return output; } }; + +function getVisitors(harmony) { + if (harmony) { + return visitors.getAllVisitors(); + } else { + return visitors.transformVisitors.react; + } +} + +function inlineSourceMap(sourceMap, sourceCode, sourceFilename) { + var json = sourceMap.toJSON(); + json.sources = [sourceFilename]; + json.sourcesContent = [sourceCode]; + var base64 = Buffer(JSON.stringify(json)).toString('base64'); + return '//# sourceMappingURL=data:application/json;base64,' + + base64; +}