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

Sync out transforms from fb internal

JeffMo committed Feb 15, 2014 at 12:13 UTC adcbf0806ccee3cfa5de65bc45833223df5a6ec5
5 files changed +44 -43
package.json
+2 -2
@@ -33,8 +33,8 @@
33 },
34 "dependencies": {
35 "commoner": "~0.9.0",
36 - "esprima-fb": "~2001.1001.0-dev-harmony-fb",
37 - "jstransform": "~2.0.2"
36 + "esprima-fb": "~3001.1.0-dev-harmony-fb",
37 + "jstransform": "~3.0.0"
38 },
39 "devDependencies": {
40 "benchmark": "~1.0.0",
vendor/fbtransform/transforms/react.js
+26 -24
@@ -41,40 +41,40 @@ var quoteAttrName = require('./xjs').quoteAttrName;
41
42 var JSX_ATTRIBUTE_TRANSFORMS = {
43 cxName: function(attr) {
44 - if (attr.value.type !== Syntax.Literal) {
45 - throw new Error("cx only accepts a string literal");
46 - } else {
47 - var classNames = attr.value.value.split(/\s+/g);
48 - return 'cx(' + classNames.map(JSON.stringify).join(',') + ')';
49 - }
44 + throw new Error(
45 + "cxName is no longer supported, use className={cx(...)} instead"
46 + );
47 }
48 };
49
50 function visitReactTag(traverse, object, path, state) {
51 var jsxObjIdent = utils.getDocblock(state).jsx;
52 + var openingElement = object.openingElement;
53 + var nameObject = openingElement.name;
54 + var attributesObject = openingElement.attributes;
55
56 - utils.catchup(object.openingElement.range[0], state);
56 + utils.catchup(openingElement.range[0], state);
57
58 - if (object.name.namespace) {
58 + if (nameObject.namespace) {
59 throw new Error(
60 'Namespace tags are not supported. ReactJSX is not XML.');
61 }
62
63 - var isFallbackTag = FALLBACK_TAGS[object.name.name];
63 + var isFallbackTag = FALLBACK_TAGS[nameObject.name];
64 utils.append(
65 - (isFallbackTag ? jsxObjIdent + '.' : '') + (object.name.name) + '(',
65 + (isFallbackTag ? jsxObjIdent + '.' : '') + (nameObject.name) + '(',
66 state
67 );
68
69 - utils.move(object.name.range[1], state);
69 + utils.move(nameObject.range[1], state);
70
71 // if we don't have any attributes, pass in null
72 - if (object.attributes.length === 0) {
72 + if (attributesObject.length === 0) {
73 utils.append('null', state);
74 }
75
76 // write attributes
77 - object.attributes.forEach(function(attr, index) {
77 + attributesObject.forEach(function(attr, index) {
78 utils.catchup(attr.range[0], state);
79 if (attr.name.namespace) {
80 throw new Error(
@@ -82,7 +82,7 @@ function visitReactTag(traverse, object, path, state) {
82 }
83 var name = attr.name.name;
84 var isFirst = index === 0;
85 - var isLast = index === object.attributes.length - 1;
85 + var isLast = index === attributesObject.length - 1;
86
87 if (isFirst) {
88 utils.append('{', state);
@@ -121,17 +121,17 @@ function visitReactTag(traverse, object, path, state) {
121 utils.catchup(attr.range[1], state);
122 });
123
124 - if (!object.selfClosing) {
125 - utils.catchup(object.openingElement.range[1] - 1, state);
126 - utils.move(object.openingElement.range[1], state);
124 + if (!openingElement.selfClosing) {
125 + utils.catchup(openingElement.range[1] - 1, state);
126 + utils.move(openingElement.range[1], state);
127 }
128
129 // filter out whitespace
130 var childrenToRender = object.children.filter(function(child) {
131 - return !(child.type === Syntax.Literal &&
132 - child.value.match(/^[ \t]*[\r\n][ \t\r\n]*$/));
131 + return !(child.type === Syntax.Literal
132 + && typeof child.value === 'string'
133 + && child.value.match(/^[ \t]*[\r\n][ \t\r\n]*$/));
134 });
134 -
135 if (childrenToRender.length > 0) {
136 utils.append(', ', state);
137
@@ -156,10 +156,10 @@ function visitReactTag(traverse, object, path, state) {
156 });
157 }
158
159 - if (object.selfClosing) {
159 + if (openingElement.selfClosing) {
160 // everything up to />
161 - utils.catchup(object.openingElement.range[1] - 2, state);
162 - utils.move(object.openingElement.range[1], state);
161 + utils.catchup(openingElement.range[1] - 2, state);
162 + utils.move(openingElement.range[1], state);
163 } else {
164 // everything up to </ sdflksjfd>
165 utils.catchup(object.closingElement.range[0], state);
@@ -176,4 +176,6 @@ visitReactTag.test = function(object, path, state) {
176 return object.type === Syntax.XJSElement && jsx && jsx.length;
177 };
178
179 -exports.visitReactTag = visitReactTag;
179 +exports.visitorList = [
180 + visitReactTag
181 +];
vendor/fbtransform/transforms/reactDisplayName.js
+3 -1
@@ -102,4 +102,6 @@ visitReactDisplayName.test = function(object, path, state) {
102 }
103 };
104
105 -exports.visitReactDisplayName = visitReactDisplayName;
105 +exports.visitorList = [
106 + visitReactDisplayName
107 +];
vendor/fbtransform/transforms/xjs.js
+12 -12
@@ -151,27 +151,27 @@ var knownTags = {
151
152 function renderXJSLiteral(object, isLast, state, start, end) {
153 var lines = object.value.split(/\r\n|\n|\r/);
154 -
154 +
155 if (start) {
156 utils.append(start, state);
157 }
158 -
158 +
159 var lastNonEmptyLine = 0;
160 -
160 +
161 lines.forEach(function (line, index) {
162 if (line.match(/[^ \t]/)) {
163 lastNonEmptyLine = index;
164 }
165 });
166 -
166 +
167 lines.forEach(function (line, index) {
168 var isFirstLine = index === 0;
169 var isLastLine = index === lines.length - 1;
170 var isLastNonEmptyLine = index === lastNonEmptyLine;
171 -
171 +
172 // replace rendered whitespace tabs with spaces
173 var trimmedLine = line.replace(/\t/g, ' ');
174 -
174 +
175 // trim whitespace touching a newline
176 if (!isFirstLine) {
177 trimmedLine = trimmedLine.replace(/^[ ]+/, '');
@@ -179,15 +179,15 @@ function renderXJSLiteral(object, isLast, state, start, end) {
179 if (!isLastLine) {
180 trimmedLine = trimmedLine.replace(/[ ]+$/, '');
181 }
182 -
182 +
183 utils.append(line.match(/^[ \t]*/)[0], state);
184 -
184 +
185 if (trimmedLine || isLastNonEmptyLine) {
186 utils.append(
187 JSON.stringify(trimmedLine) +
188 (!isLastNonEmptyLine ? "+' '+" : ''),
189 state);
190 -
190 +
191 if (isLastNonEmptyLine) {
192 if (end) {
193 utils.append(end, state);
@@ -196,18 +196,18 @@ function renderXJSLiteral(object, isLast, state, start, end) {
196 utils.append(',', state);
197 }
198 }
199 -
199 +
200 // only restore tail whitespace if line had literals
201 if (trimmedLine) {
202 utils.append(line.match(/[ \t]*$/)[0], state);
203 }
204 }
205 -
205 +
206 if (!isLastLine) {
207 utils.append('\n', state);
208 }
209 });
210 -
210 +
211 utils.move(object.range[1], state);
212 }
213
vendor/fbtransform/visitors.js
+1 -4
@@ -16,10 +16,7 @@ var transformVisitors = {
16 'es6-object-short-notation': es6ObjectShortNotation.visitorList,
17 'es6-rest-params': es6RestParameters.visitorList,
18 'es6-templates': es6Templates.visitorList,
19 - 'react': [
20 - react.visitReactTag,
21 - reactDisplayName.visitReactDisplayName
22 - ]
19 + 'react': react.visitorList.concat(reactDisplayName.visitorList)
20 };
21
22 /**