diff --git a/package.json b/package.json index e92b56cf0..e04d4d908 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "react-element-to-jsx-string", - "version": "15.0.0", + "name": "@7rulnik/react-element-to-jsx-string", + "version": "15.0.1", "description": "Turn a ReactElement into the corresponding JSX string.", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", @@ -29,12 +29,9 @@ "git add" ] }, - "author": { - "name": "Algolia, Inc.", - "url": "https://github.com/algolia" - }, + "author": "Valentin 7rulnik Semirulnik ", "license": "MIT", - "repository": "algolia/react-element-to-jsx-string", + "repository": "7rulnik/react-element-to-jsx-string", "devDependencies": { "@babel/cli": "7.17.6", "@babel/core": "7.17.9", diff --git a/src/formatter/sortObject.js b/src/formatter/sortObject.js index c070ef612..5e6b8a46a 100644 --- a/src/formatter/sortObject.js +++ b/src/formatter/sortObject.js @@ -7,15 +7,18 @@ function safeSortObject(value: any, seen: WeakSet): any { return value; } - // return date, regexp and react element values as is - if ( - value instanceof Date || - value instanceof RegExp || - React.isValidElement(value) - ) { + // return date and regexp values as is + if (value instanceof Date || value instanceof RegExp) { return value; } + // return react element as is but remove _owner key because it can lead to recursion + if (React.isValidElement(value)) { + const copyObj = { ...value }; + delete copyObj._owner; + return copyObj; + } + seen.add(value); // make a copy of array with each item passed through the sorting algorithm @@ -27,9 +30,6 @@ function safeSortObject(value: any, seen: WeakSet): any { return Object.keys(value) .sort() .reduce((result, key) => { - if (key === '_owner') { - return result; - } if (key === 'current' || seen.has(value[key])) { // eslint-disable-next-line no-param-reassign result[key] = '[Circular]'; diff --git a/src/formatter/sortObject.spec.js b/src/formatter/sortObject.spec.js index 1b6ab3d45..0b609dc8a 100644 --- a/src/formatter/sortObject.spec.js +++ b/src/formatter/sortObject.spec.js @@ -1,5 +1,6 @@ /* @flow */ +import React from 'react'; import sortObject from './sortObject'; describe('sortObject', () => { @@ -42,4 +43,24 @@ describe('sortObject', () => { c: date, }); }); + + it('should remove _owner key from react elements', () => { + const fixture = { + _owner: "_owner that doesn't belong to react element", + component:
, + }; + + expect(JSON.stringify(sortObject(fixture))).toEqual( + JSON.stringify({ + _owner: "_owner that doesn't belong to react element", + component: { + $$typeof: Symbol('react.transitional.element'), + type: 'div', + key: null, + props: {}, + _store: {}, + }, + }) + ); + }); });