Adds the filename to JSXTransform error message, making it easier to debug JSX syntax errors.
Fabio M. Costa committed
Dec 27, 2013 at 16:42 UTC
b1a949ed455dbecc1d7c868d723c76576ae713f9
1 file changed
+16
-3
vendor/browser-transforms.js
+16
-3
@@ -41,7 +41,20 @@ var transformCode = function(code, source) {
41
var jsx = docblock.parseAsObject(docblock.extract(code)).jsx;
42
43
if (jsx) {
44
- var transformed = transformReact(code);
44
+ try {
45
+ var transformed = transformReact(code);
46
+ } catch(e) {
47
+ if (source) {
48
+ if ('fileName' in e) {
49
+ // We set `fileName` if it's supported by this error object and
50
+ // a `source` was provided.
51
+ // The error will correctly point to `source` in Firefox.
52
+ e.fileName = source;
53
+ }
54
+ e.message += '\n at ' + source + ':' + e.lineNumber + ':' + e.column;
55
+ }
56
+ throw e;
57
+ }
58
59
var map = transformed.sourceMap.toJSON();
60
if (source == null) {
@@ -98,7 +111,7 @@ var load = exports.load = function(url, callback) {
111
112
runScripts = function() {
113
var scripts = document.getElementsByTagName('script');
101
-
114
+
115
// Array.prototype.slice cannot be used on NodeList on IE8
116
var jsxScripts = [];
117
for (var i = 0; i < scripts.length; i++) {
@@ -106,7 +119,7 @@ runScripts = function() {
119
jsxScripts.push(scripts.item(i));
120
}
121
}
109
-
122
+
123
console.warn("You are using the in-browser JSX transformer. Be sure to precompile your JSX for production - http://facebook.github.io/react/docs/tooling-integration.html#jsx");
124
125
jsxScripts.forEach(function(script) {