Skip to content

Commit 39cf733

Browse files
committed
Better serialization
1 parent 1277947 commit 39cf733

File tree

5 files changed

+19
-14
lines changed

5 files changed

+19
-14
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
},
7171
"dependencies": {
7272
"codemirror": "^5.16.0",
73-
"jsan": "^3.1.3",
73+
"jsan": "^3.1.5",
7474
"lodash": "^4.17.2",
7575
"react": "^15.2.1",
7676
"react-dom": "^15.2.1",

src/app/api/index.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,24 @@ import jsan from 'jsan';
33
const listeners = {};
44
export const source = '@devtools-page';
55

6+
function tryCatchStringify(obj) {
7+
try {
8+
return JSON.stringify(obj);
9+
} catch (err) {
10+
/* eslint-disable no-console */
11+
if (process.env.NODE_ENV !== 'production') console.log('Failed to stringify', err);
12+
/* eslint-enable no-console */
13+
return jsan.stringify(obj, null, null, { circular: '[CIRCULAR]' });
14+
}
15+
}
16+
617
function stringify(obj, serialize) {
718
if (typeof serialize === 'undefined') {
8-
return jsan.stringify(obj);
19+
return tryCatchStringify(obj);
920
}
1021
if (serialize === true) {
1122
return jsan.stringify(obj, function(key, value) {
1223
if (value && typeof value.toJS === 'function') return value.toJS();
13-
if (typeof value === 'symbol') return String(value);
1424
return value;
1525
}, null, true);
1626
}
@@ -25,7 +35,7 @@ function post(message) {
2535
window.postMessage(message, '*');
2636
}
2737

28-
export function toContentScript(message, serializeState, serializeAction, shouldSerialize) {
38+
export function toContentScript(message, serializeState, serializeAction) {
2939
if (message.type === 'ACTION') {
3040
message.action = stringify(message.action, serializeAction);
3141
message.payload = stringify(message.payload, serializeState);
@@ -41,7 +51,6 @@ export function toContentScript(message, serializeState, serializeAction, should
4151
message.committedState = stringify(message.committedState, serializeState);
4252
}
4353
}
44-
message.serialize = shouldSerialize;
4554
post(message);
4655
}
4756

src/browser/extension/inject/pageScript.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ const devToolsExtension = function(reducer, preloadedState, config) {
3535
let errorOccurred = false;
3636
let maxAge;
3737
let actionCreators;
38-
let shouldSerialize;
3938
let serializeState;
4039
let serializeAction;
4140
let sendingActionId = 1;
@@ -58,12 +57,10 @@ const devToolsExtension = function(reducer, preloadedState, config) {
5857
if (typeof config.serializeState !== 'undefined') {
5958
serializeState = config.serializeState;
6059
if (typeof serializeState === 'function') serializeState = { replacer: serializeState };
61-
else shouldSerialize = true;
6260
}
6361
if (typeof config.serializeAction !== 'undefined') {
6462
serializeAction = config.serializeAction;
6563
if (typeof serializeAction === 'function') serializeAction = { replacer: serializeAction };
66-
else shouldSerialize = true;
6764
}
6865

6966
const monitor = new Monitor(relayState);
@@ -79,7 +76,7 @@ const devToolsExtension = function(reducer, preloadedState, config) {
7976
});
8077
toContentScript({
8178
type: 'EXPORT', payload, committedState: liftedState.committedState, source, instanceId
82-
}, serializeState, serializeAction, shouldSerialize);
79+
}, true, true);
8380
}
8481

8582
function relay(type, state, action, nextActionId, shouldInit) {
@@ -101,7 +98,7 @@ const devToolsExtension = function(reducer, preloadedState, config) {
10198
message.name = config.name || document.title;
10299
}
103100

104-
toContentScript(message, serializeState, serializeAction, shouldSerialize);
101+
toContentScript(message, serializeState, serializeAction);
105102
}
106103

107104
const relayState = throttle((liftedState, actions, shouldInit) => {
@@ -149,7 +146,7 @@ const devToolsExtension = function(reducer, preloadedState, config) {
149146
source,
150147
instanceId,
151148
maxAge
152-
}, serializeState, serializeAction, shouldSerialize);
149+
}, serializeState, serializeAction);
153150
}, latency);
154151

155152
function dispatchRemotely(action) {

test/app/inject/api.spec.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ describe('API', () => {
7070
expect(message).toEqual({
7171
type: 'STATE',
7272
payload: { counter: 1 },
73-
serialize: undefined,
7473
actionsById: undefined,
7574
computedStates: undefined,
7675
committedState: false,

test/app/inject/enhancer.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ describe('Redux enhancer', () => {
101101
let message = await listenMessage(() => {
102102
window.postMessage({
103103
type: 'DISPATCH',
104-
payload: {type: 'JUMP_TO_STATE', index: 2},
104+
payload: {type: 'JUMP_TO_STATE', index: 2, actionId: 2},
105105
source: '@devtools-extension'
106106
}, '*');
107107
});
@@ -111,7 +111,7 @@ describe('Redux enhancer', () => {
111111
message = await listenMessage(() => {
112112
window.postMessage({
113113
type: 'DISPATCH',
114-
payload: {type: 'JUMP_TO_STATE', index: 3},
114+
payload: {type: 'JUMP_TO_STATE', index: 3, actionId: 3},
115115
source: '@devtools-extension'
116116
}, '*');
117117
});

0 commit comments

Comments
 (0)