react / react-0.13.3 / examples / basic-commonjs / node_modules / reactify / node_modules / react-tools / main.js
81145 views'use strict';12var visitors = require('./vendor/fbtransform/visitors');3var transform = require('jstransform').transform;4var typesSyntax = require('jstransform/visitors/type-syntax');5var Buffer = require('buffer').Buffer;67module.exports = {8transform: function(input, options) {9var output = innerTransform(input, options);10var result = output.code;11if (options && options.sourceMap) {12var map = inlineSourceMap(13output.sourceMap,14input,15options.sourceFilename16);17result += '\n' + map;18}19return result;20},21transformWithDetails: function(input, options) {22var output = innerTransform(input, options);23var result = {};24result.code = output.code;25if (options && options.sourceMap) {26result.sourceMap = output.sourceMap.toJSON();27}28return result;29}30};3132function innerTransform(input, options) {33options = options || {};3435var visitorSets = ['react'];36if (options.harmony) {37visitorSets.push('harmony');38}39if (options.stripTypes) {40// Stripping types needs to happen before the other transforms41// unfortunately, due to bad interactions. For example,42// es6-rest-param-visitors conflict with stripping rest param type43// annotation44input = transform(typesSyntax.visitorList, input, options).code;45}4647var visitorList = visitors.getVisitorsBySet(visitorSets);48return transform(visitorList, input, options);49}5051function inlineSourceMap(sourceMap, sourceCode, sourceFilename) {52var json = sourceMap.toJSON();53json.sources = [sourceFilename];54json.sourcesContent = [sourceCode];55var base64 = Buffer(JSON.stringify(json)).toString('base64');56return '//# sourceMappingURL=data:application/json;base64,' +57base64;58}596061