From c4e203982ee928716d532d32a3731dc041b42d52 Mon Sep 17 00:00:00 2001 From: Remon Oldenbeuving Date: Mon, 11 Jan 2016 12:09:45 +0100 Subject: [PATCH 1/2] Make sure less-than and great-than characters are properly encoded. Previously the transform would translate ``` React.createElement("div", null, "\x3C"); ``` To ```
<
; ``` This PR fixes this by translating `<>` to `<>`. --- test/__tests__/create-element-to-jsx-test.js | 2 ++ test/create-element-to-jsx-gt-lt-entities.js | 3 +++ test/create-element-to-jsx-gt-lt-entities.output.js | 3 +++ transforms/create-element-to-jsx.js | 11 ++++++++++- 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 test/create-element-to-jsx-gt-lt-entities.js create mode 100644 test/create-element-to-jsx-gt-lt-entities.output.js diff --git a/test/__tests__/create-element-to-jsx-test.js b/test/__tests__/create-element-to-jsx-test.js index f609c584..624ed719 100644 --- a/test/__tests__/create-element-to-jsx-test.js +++ b/test/__tests__/create-element-to-jsx-test.js @@ -48,6 +48,8 @@ describe('create-element-to-jsx', () => { test('create-element-to-jsx', 'create-element-to-jsx-call-expression-as-prop'); test('create-element-to-jsx', 'create-element-to-jsx-allow-member-expression'); + + test('create-element-to-jsx', 'create-element-to-jsx-gt-lt-entities'); }); it('raises when it does not recognize a property type', () => { diff --git a/test/create-element-to-jsx-gt-lt-entities.js b/test/create-element-to-jsx-gt-lt-entities.js new file mode 100644 index 00000000..aec09d28 --- /dev/null +++ b/test/create-element-to-jsx-gt-lt-entities.js @@ -0,0 +1,3 @@ +var React = require('React'); + +React.createElement('div', null, '\x3C\x3E'); diff --git a/test/create-element-to-jsx-gt-lt-entities.output.js b/test/create-element-to-jsx-gt-lt-entities.output.js new file mode 100644 index 00000000..e072c558 --- /dev/null +++ b/test/create-element-to-jsx-gt-lt-entities.output.js @@ -0,0 +1,3 @@ +var React = require('React'); + +
<>
; diff --git a/transforms/create-element-to-jsx.js b/transforms/create-element-to-jsx.js index ee5e0dd7..901f69f3 100644 --- a/transforms/create-element-to-jsx.js +++ b/transforms/create-element-to-jsx.js @@ -2,6 +2,15 @@ module.exports = function(file, api, options) { const j = api.jscodeshift; const root = j(file.source); const ReactUtils = require('./utils/ReactUtils')(j); + const encodeJSXTextValue = value => + value + .replace(new RegExp('(?:<|>)', 'g'), match => { + if (match === '<') { + return '<'; + } else { + return '>'; + } + }); const convertExpressionToJSXAttributes = (expression) => { const isReactSpread = expression.type === 'CallExpression' && @@ -89,7 +98,7 @@ module.exports = function(file, api, options) { const children = node.value.arguments.slice(2).map((child, index) => { if (child.type === 'Literal' && typeof child.value === 'string') { - return j.jsxText(child.value); + return j.jsxText(encodeJSXTextValue(child.value)); } else if (child.type === 'CallExpression' && child.callee.object && child.callee.object.name === 'React' && From 1cb1027d07c46242d6790132d8d08b4eab61ddb2 Mon Sep 17 00:00:00 2001 From: Remon Oldenbeuving Date: Mon, 11 Jan 2016 18:50:30 +0100 Subject: [PATCH 2/2] Simplify replaces --- transforms/create-element-to-jsx.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/transforms/create-element-to-jsx.js b/transforms/create-element-to-jsx.js index 901f69f3..6cf99df1 100644 --- a/transforms/create-element-to-jsx.js +++ b/transforms/create-element-to-jsx.js @@ -4,13 +4,8 @@ module.exports = function(file, api, options) { const ReactUtils = require('./utils/ReactUtils')(j); const encodeJSXTextValue = value => value - .replace(new RegExp('(?:<|>)', 'g'), match => { - if (match === '<') { - return '<'; - } else { - return '>'; - } - }); + .replace(//g, '>'); const convertExpressionToJSXAttributes = (expression) => { const isReactSpread = expression.type === 'CallExpression' &&