mirror of
				https://github.com/reduxjs/redux-devtools.git
				synced 2025-10-31 16:07:45 +03:00 
			
		
		
		
	fix(redux-devtools-core): don't mutate source object during stringification (#627)
* Add failing test case for stringifyJSON * Mutate clone of value in stringifyJSON instead of original Co-authored-by: Nathan Bierema <nbierema@gmail.com>
This commit is contained in:
		
							parent
							
								
									9be6641d68
								
							
						
					
					
						commit
						5259dee601
					
				|  | @ -4,9 +4,10 @@ import { DATA_TYPE_KEY, DATA_REF_KEY } from '../constants/dataTypes'; | |||
| function replacer(key, value) { | ||||
|   if (typeof value === 'object' && value !== null && DATA_TYPE_KEY in value) { | ||||
|     const __serializedType__ = value[DATA_TYPE_KEY]; | ||||
|     delete value[DATA_TYPE_KEY]; // eslint-disable-line no-param-reassign
 | ||||
|     const r = { data: value, __serializedType__ }; | ||||
|     if (DATA_REF_KEY in value) r.__serializedRef__ = value[DATA_REF_KEY]; | ||||
|     const clone = { ...value }; | ||||
|     delete clone[DATA_TYPE_KEY]; // eslint-disable-line no-param-reassign
 | ||||
|     const r = { data: clone, __serializedType__ }; | ||||
|     if (DATA_REF_KEY in value) r.__serializedRef__ = clone[DATA_REF_KEY]; | ||||
|     return r; | ||||
|   } | ||||
|   return value; | ||||
|  |  | |||
|  | @ -7,6 +7,8 @@ import App from '../src/app/containers/App'; | |||
| import api from '../src/app/middlewares/api'; | ||||
| import exportState from '../src/app/middlewares/exportState'; | ||||
| import rootReducer from '../src/app/reducers'; | ||||
| import { DATA_TYPE_KEY } from '../src/app/constants/dataTypes'; | ||||
| import stringifyJSON from '../src/app/utils/stringifyJSON'; | ||||
| 
 | ||||
| let wrapper; | ||||
| 
 | ||||
|  | @ -43,3 +45,25 @@ describe('App container', () => { | |||
|     ).toMatch(/<div class="actionListRows-\d-\d-\d+"><\/div>/); | ||||
|   }); | ||||
| }); | ||||
| 
 | ||||
| describe('stringifyJSON', () => { | ||||
|   it('should not mutate the source object', () => { | ||||
|     const src = { | ||||
|       isTest: true, | ||||
|       [DATA_TYPE_KEY]: 'Test', | ||||
|     }; | ||||
| 
 | ||||
|     const result = { | ||||
|       data: { | ||||
|         isTest: true, | ||||
|       }, | ||||
|       __serializedType__: 'Test', | ||||
|     }; | ||||
| 
 | ||||
|     expect(stringifyJSON(src, true)).toEqual(JSON.stringify(result)); | ||||
|     expect(src).toEqual({ | ||||
|       isTest: true, | ||||
|       [DATA_TYPE_KEY]: 'Test', | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user