Skip to content

Commit 5302015

Browse files
jeffmozpao
jeffmo
authored andcommitted
Add support for a --strip-types flag to bin/jsx
(cherry picked from commit 808730d) Conflicts: vendor/fbtransform/visitors.js
1 parent 55e216c commit 5302015

File tree

3 files changed

+65
-10
lines changed

3 files changed

+65
-10
lines changed

bin/jsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,18 @@ require('commoner').version(
1111
}).option(
1212
'--harmony',
1313
'Turns on JS transformations such as ES6 Classes etc.'
14+
).option(
15+
'--strip-types',
16+
'Strips out type annotations.'
1417
).option(
1518
'--source-map-inline',
1619
'Embed inline sourcemap in transformed source'
1720
).process(function(id, source) {
1821
// This is where JSX, ES6, etc. desugaring happens.
1922
var options = {
2023
harmony: this.options.harmony,
21-
sourceMap: this.options.sourceMapInline
24+
sourceMap: this.options.sourceMapInline,
25+
stripTypes: this.options.stripTypes
2226
};
2327
return transform(source, options);
2428
});

main.js

+9-8
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,17 @@ module.exports = {
3131

3232
function innerTransform(input, options) {
3333
options = options || {};
34-
var visitorList = getVisitors(options.harmony);
35-
return transform(visitorList, input, options);
36-
}
3734

38-
function getVisitors(harmony) {
39-
if (harmony) {
40-
return visitors.getAllVisitors();
41-
} else {
42-
return visitors.transformVisitors.react;
35+
var visitorSets = ['react'];
36+
if (options.harmony) {
37+
visitorSets.push('harmony');
38+
}
39+
if (options.stripTypes) {
40+
visitorSets.push('type-annotations');
4341
}
42+
43+
var visitorList = visitors.getVisitorsBySet(visitorSets);
44+
return transform(visitorList, input, options);
4445
}
4546

4647
function inlineSourceMap(sourceMap, sourceCode, sourceFilename) {

vendor/fbtransform/visitors.js

+51-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var es6RestParameters = require('jstransform/visitors/es6-rest-param-visitors');
88
var es6Templates = require('jstransform/visitors/es6-template-visitors');
99
var react = require('./transforms/react');
1010
var reactDisplayName = require('./transforms/reactDisplayName');
11+
var typesSyntax = require('jstransform/visitors/type-syntax');
1112

1213
/**
1314
* Map from transformName => orderedListOfVisitors.
@@ -20,13 +21,33 @@ var transformVisitors = {
2021
'es6-object-short-notation': es6ObjectShortNotation.visitorList,
2122
'es6-rest-params': es6RestParameters.visitorList,
2223
'es6-templates': es6Templates.visitorList,
23-
'react': react.visitorList.concat(reactDisplayName.visitorList)
24+
'react': react.visitorList.concat(reactDisplayName.visitorList),
25+
'types': typesSyntax.visitorList
26+
};
27+
28+
var transformSets = {
29+
'harmony': [
30+
'es6-arrow-functions',
31+
'es6-object-concise-method',
32+
'es6-object-short-notation',
33+
'es6-classes',
34+
'es6-rest-params',
35+
'es6-templates',
36+
'es6-destructuring'
37+
],
38+
'react': [
39+
'react'
40+
],
41+
'type-annotations': [
42+
'types'
43+
]
2444
};
2545

2646
/**
2747
* Specifies the order in which each transform should run.
2848
*/
2949
var transformRunOrder = [
50+
'types',
3051
'es6-arrow-functions',
3152
'es6-object-concise-method',
3253
'es6-object-short-notation',
@@ -54,5 +75,34 @@ function getAllVisitors(excludes) {
5475
return ret;
5576
}
5677

78+
/**
79+
* Given a list of visitor set names, return the ordered list of visitors to be
80+
* passed to jstransform.
81+
*
82+
* @param {array}
83+
* @return {array}
84+
*/
85+
function getVisitorsBySet(sets) {
86+
var visitorsToInclude = sets.reduce(function(visitors, set) {
87+
if (!transformSets.hasOwnProperty(set)) {
88+
throw new Error('Unknown visitor set: ' + set);
89+
}
90+
transformSets[set].forEach(function(visitor) {
91+
visitors[visitor] = true;
92+
});
93+
return visitors;
94+
}, {});
95+
96+
var visitorList = [];
97+
for (var i = 0; i < transformRunOrder.length; i++) {
98+
if (visitorsToInclude.hasOwnProperty(transformRunOrder[i])) {
99+
visitorList = visitorList.concat(transformVisitors[transformRunOrder[i]]);
100+
}
101+
}
102+
103+
return visitorList;
104+
}
105+
106+
exports.getVisitorsBySet = getVisitorsBySet;
57107
exports.getAllVisitors = getAllVisitors;
58108
exports.transformVisitors = transformVisitors;

0 commit comments

Comments
 (0)