react-element-to-jsx-string
Advanced tools
Comparing version
@@ -14,2 +14,8 @@ 'use strict'; | ||
var _collapseWhiteSpace = require('collapse-white-space'); | ||
var _collapseWhiteSpace2 = _interopRequireDefault(_collapseWhiteSpace); | ||
var _reactAddonsTestUtils = require('react-addons-test-utils'); | ||
var _stringifyObject = require('stringify-object'); | ||
@@ -19,8 +25,6 @@ | ||
var _collapseWhiteSpace = require('collapse-white-space'); | ||
var _sortobject = require('sortobject'); | ||
var _collapseWhiteSpace2 = _interopRequireDefault(_collapseWhiteSpace); | ||
var _sortobject2 = _interopRequireDefault(_sortobject); | ||
var _reactAddonsTestUtils = require('react-addons-test-utils'); | ||
function reactElementToJSXString(ReactElement) { | ||
@@ -138,3 +142,8 @@ return toJSXString({ ReactElement: ReactElement }); | ||
function stringifyObject(obj) { | ||
return (0, _collapseWhiteSpace2['default'])((0, _stringifyObject2['default'])(obj)).replace(/^{ /, '{').replace(/ }$/, '}'); | ||
// sortobject fails on some types, like regex | ||
if (Object.keys(obj).length > 0) { | ||
obj = (0, _sortobject2['default'])(obj); | ||
} | ||
return (0, _collapseWhiteSpace2['default'])((0, _stringifyObject2['default'])(obj)).replace(/{ /g, '{').replace(/ }/g, '}').replace(/\[ /g, '[').replace(/ \]/g, ']'); | ||
} | ||
@@ -141,0 +150,0 @@ |
@@ -5,3 +5,3 @@ /* eslint-env mocha */ | ||
import expect from 'expect'; | ||
import reactElementToJSXString from './'; | ||
import reactElementToJSXString from './index'; | ||
@@ -65,2 +65,8 @@ class TestComponent extends React.Component {} | ||
it(`reactElementToJSXString(<div obj={{hello: [1, 2], world: {nested: true}}}/>)`, () => { | ||
expect( | ||
reactElementToJSXString(<div obj={{hello: [1, 2], world: {nested: true}}}/>) | ||
).toEqual(`<div obj={{hello: [1, 2], world: {nested: true}}} />`); | ||
}); | ||
it(`reactElementToJSXString(<div></div>)`, () => { | ||
@@ -150,2 +156,10 @@ expect( | ||
}); | ||
it('ignores object keys order (sortobject)', () => { | ||
expect( | ||
reactElementToJSXString(<div o={{a: 1, b: 2}}/>) | ||
).toEqual( | ||
reactElementToJSXString(<div o={{b: 2, a: 1}}/>) | ||
); | ||
}); | ||
}); |
14
index.js
import React from 'react'; | ||
import stringify from 'stringify-object'; | ||
import collapse from 'collapse-white-space'; | ||
import {isElement} from 'react-addons-test-utils'; | ||
import stringify from 'stringify-object'; | ||
import sortobject from 'sortobject'; | ||
@@ -118,5 +119,12 @@ export default function reactElementToJSXString(ReactElement) { | ||
function stringifyObject(obj) { | ||
// sortobject fails on some types, like regex | ||
if (Object.keys(obj).length > 0) { | ||
obj = sortobject(obj); | ||
} | ||
return collapse(stringify(obj)) | ||
.replace(/^{ /, '{') | ||
.replace(/ }$/, '}'); | ||
.replace(/{ /g, '{') | ||
.replace(/ }/g, '}') | ||
.replace(/\[ /g, '[') | ||
.replace(/ \]/g, ']'); | ||
} | ||
@@ -123,0 +131,0 @@ |
{ | ||
"name": "react-element-to-jsx-string", | ||
"version": "1.0.0", | ||
"version": "1.1.0", | ||
"description": "Turn a ReactElement into the corresponding JSX string.", | ||
@@ -34,4 +34,5 @@ "main": "index-dist.js", | ||
"react-addons-test-utils": "^0.14.0", | ||
"sortobject": "^1.0.0", | ||
"stringify-object": "^2.3.0" | ||
} | ||
} |
@@ -22,2 +22,3 @@ # react-element-to-jsx-string | ||
- order props alphabetically | ||
- sort object keys in a deterministic order (`o={{a: 1, b:2}} === o={{b:2, a:1}}`) | ||
- React's documentation indent style for JSX | ||
@@ -53,2 +54,9 @@ | ||
## Build | ||
```sh | ||
npm run build | ||
npm run build:watch | ||
``` | ||
## Thanks | ||
@@ -55,0 +63,0 @@ |
15856
10.53%12
9.09%373
7.18%66
13.79%6
20%+ Added
+ Added
+ Added
+ Added
+ Added