From 6c2b91b5b339d6ef5deb9c4db26f41a21e63e8fe Mon Sep 17 00:00:00 2001 From: Ben Alpert Date: Wed, 5 Mar 2014 23:59:51 -0800 Subject: [PATCH] Add es3ify to JSX transform This would make #1223 easier to deal with in older browsers. With this change,
compiles into React.DOM.div( {"class":"orange"} ); and `this.props.class` turns into `this.props["class"]`. --- package.json | 2 +- vendor/fbtransform/transforms/xjs.js | 5 +++-- vendor/fbtransform/visitors.js | 7 ++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 0860f2f5877d8..f2403eea76236 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ }, "dependencies": { "commoner": "~0.9.1", + "es3ify": "~0.1.3", "esprima-fb": "~3001.1.0-dev-harmony-fb", "jstransform": "~3.0.0" }, @@ -42,7 +43,6 @@ "browserify": "~3.20.0", "coverify": "~1.0.4", "envify": "~1.2.0", - "es3ify": "~0.1.2", "es5-shim": "~2.3.0", "grunt": "~0.4.2", "grunt-cli": "~0.1.9", diff --git a/vendor/fbtransform/transforms/xjs.js b/vendor/fbtransform/transforms/xjs.js index 27a8020f5ce5e..34894150f9373 100644 --- a/vendor/fbtransform/transforms/xjs.js +++ b/vendor/fbtransform/transforms/xjs.js @@ -15,6 +15,7 @@ */ /*global exports:true*/ "use strict"; +var es3ify = require('es3ify'); var Syntax = require('esprima-fb').Syntax; var utils = require('jstransform/src/utils'); @@ -229,8 +230,8 @@ function renderXJSExpressionContainer(traverse, object, isLast, path, state) { function quoteAttrName(attr) { // Quote invalid JS identifiers. - if (!/^[a-z_$][a-z\d_$]*$/i.test(attr)) { - return "'" + attr + "'"; + if (!/^[a-z_$][a-z\d_$]*$/i.test(attr) || es3ify.isReserved(attr)) { + return JSON.stringify(attr); } return attr; } diff --git a/vendor/fbtransform/visitors.js b/vendor/fbtransform/visitors.js index ef27f58656c65..028e3dd084cdb 100644 --- a/vendor/fbtransform/visitors.js +++ b/vendor/fbtransform/visitors.js @@ -1,4 +1,5 @@ /*global exports:true*/ +var es3ify = require('es3ify'); var es6ArrowFunctions = require('jstransform/visitors/es6-arrow-function-visitors'); var es6Classes = require('jstransform/visitors/es6-class-visitors'); var es6ObjectShortNotation = require('jstransform/visitors/es6-object-short-notation-visitors'); @@ -16,7 +17,11 @@ var transformVisitors = { 'es6-object-short-notation': es6ObjectShortNotation.visitorList, 'es6-rest-params': es6RestParameters.visitorList, 'es6-templates': es6Templates.visitorList, - 'react': react.visitorList.concat(reactDisplayName.visitorList) + 'react': [].concat( + es3ify.visitorList, + react.visitorList, + reactDisplayName.visitorList + ) }; /**