@samitouri / QOS-React-2 / commits / f7f3df3acc

Revert "Remove fbtransform/syntax.js"

Paul O’Shannessy committed Nov 25, 2014 at 16:42 UTC f7f3df3acc7ecd5c200920e8a015442ba9e22662
1 file changed +94
vendor/fbtransform/syntax.js new
+94
@@ -0,0 +1,94 @@
1 +/*global process:false*/
2 +/*global module:true*/
3 +/*global exports:true*/
4 +"use strict";
5 +
6 +var transform = require('jstransform').transform;
7 +var typesSyntax = require('jstransform/visitors/type-syntax');
8 +var visitors = require('./visitors');
9 +
10 +/**
11 + * @typechecks
12 + * @param {string} source
13 + * @param {object?} options
14 + * @param {array?} excludes
15 + * @return {string}
16 + */
17 +function transformAll(source, options, excludes) {
18 + excludes = excludes || [];
19 +
20 + // Stripping types needs to happen before the other transforms
21 + // unfortunately, due to bad interactions. For example,
22 + // es6-rest-param-visitors conflict with stripping rest param type
23 + // annotation
24 + source = transform(typesSyntax.visitorList, source, options).code;
25 +
26 + // The typechecker transform must run in a second pass in order to operate on
27 + // the entire source code -- so exclude it from the first pass
28 + var visitorsList = visitors.getAllVisitors(excludes.concat('typechecker'));
29 + source = transform(visitorsList, source, options);
30 + if (excludes.indexOf('typechecks') == -1 && /@typechecks/.test(source.code)) {
31 + source = transform(
32 + visitors.transformVisitors.typechecker,
33 + source.code,
34 + options
35 + );
36 + }
37 + return source;
38 +}
39 +
40 +function runCli(argv) {
41 + var options = {};
42 + for (var optName in argv) {
43 + if (optName === '_' || optName === '$0') {
44 + continue;
45 + }
46 + options[optName] = optimist.argv[optName];
47 + }
48 +
49 + if (options.help) {
50 + optimist.showHelp();
51 + process.exit(0);
52 + }
53 +
54 + var excludes = options.excludes;
55 + delete options.excludes;
56 +
57 + var source = '';
58 + process.stdin.resume();
59 + process.stdin.setEncoding('utf8');
60 + process.stdin.on('data', function (chunk) {
61 + source += chunk;
62 + });
63 + process.stdin.on('end', function () {
64 + try {
65 + source = transformAll(source, options, excludes);
66 + } catch (e) {
67 + console.error(e.stack);
68 + process.exit(1);
69 + }
70 + process.stdout.write(source.code);
71 + });
72 +}
73 +
74 +if (require.main === module) {
75 + var optimist = require('optimist');
76 +
77 + optimist = optimist
78 + .usage('Usage: $0 [options]')
79 + .default('exclude', [])
80 + .boolean('help').alias('h', 'help')
81 + .boolean('minify')
82 + .describe(
83 + 'minify',
84 + 'Best-effort minification of the output source (when possible)'
85 + )
86 + .describe(
87 + 'exclude',
88 + 'A list of transformNames to exclude'
89 + );
90 +
91 + runCli(optimist.argv);
92 +} else {
93 + exports.transformAll = transformAll;
94 +}