react / react-0.13.3 / examples / basic-commonjs / node_modules / reactify / node_modules / react-tools / vendor / fbtransform / syntax.js
81153 views/*global process:false*/1/*global module:true*/2/*global exports:true*/3"use strict";45var transform = require('jstransform').transform;6var typesSyntax = require('jstransform/visitors/type-syntax');7var visitors = require('./visitors');89/**10* @typechecks11* @param {string} source12* @param {object?} options13* @param {array?} excludes14* @return {string}15*/16function transformAll(source, options, excludes) {17excludes = excludes || [];1819// Stripping types needs to happen before the other transforms20// unfortunately, due to bad interactions. For example,21// es6-rest-param-visitors conflict with stripping rest param type22// annotation23source = transform(typesSyntax.visitorList, source, options).code;2425// The typechecker transform must run in a second pass in order to operate on26// the entire source code -- so exclude it from the first pass27var visitorsList = visitors.getAllVisitors(excludes.concat('typechecker'));28source = transform(visitorsList, source, options);29if (excludes.indexOf('typechecks') == -1 && /@typechecks/.test(source.code)) {30source = transform(31visitors.transformVisitors.typechecker,32source.code,33options34);35}36return source;37}3839function runCli(argv) {40var options = {};41for (var optName in argv) {42if (optName === '_' || optName === '$0') {43continue;44}45options[optName] = optimist.argv[optName];46}4748if (options.help) {49optimist.showHelp();50process.exit(0);51}5253var excludes = options.excludes;54delete options.excludes;5556var source = '';57process.stdin.resume();58process.stdin.setEncoding('utf8');59process.stdin.on('data', function (chunk) {60source += chunk;61});62process.stdin.on('end', function () {63try {64source = transformAll(source, options, excludes);65} catch (e) {66console.error(e.stack);67process.exit(1);68}69process.stdout.write(source.code);70});71}7273if (require.main === module) {74var optimist = require('optimist');7576optimist = optimist77.usage('Usage: $0 [options]')78.default('exclude', [])79.boolean('help').alias('h', 'help')80.boolean('minify')81.describe(82'minify',83'Best-effort minification of the output source (when possible)'84)85.describe(86'exclude',87'A list of transformNames to exclude'88);8990runCli(optimist.argv);91} else {92exports.transformAll = transformAll;93}949596