From c80473329ebafd36d239ff38585a94709099cf79 Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Fri, 13 Aug 2021 21:22:58 -0400 Subject: [PATCH] More changes --- extension/package.json | 1 + extension/src/app/api/importState.ts | 35 ++++++++++++++----- extension/src/app/api/index.ts | 10 ++++-- .../browser/extension/inject/pageScript.ts | 8 ++--- .../package.json | 2 +- .../redux-devtools-serialize/package.json | 2 +- yarn.lock | 13 +++---- 7 files changed, 47 insertions(+), 24 deletions(-) diff --git a/extension/package.json b/extension/package.json index be107b76..926e0281 100644 --- a/extension/package.json +++ b/extension/package.json @@ -37,6 +37,7 @@ "@redux-devtools/serialize": "^0.3.0", "@redux-devtools/slider-monitor": "^2.0.0-8", "@redux-devtools/utils": "^1.0.0-6", + "@types/jsan": "^3.1.2", "jsan": "^3.1.13", "lodash": "^4.17.21", "react": "^16.14.0", diff --git a/extension/src/app/api/importState.ts b/extension/src/app/api/importState.ts index bacd30b9..ba2bc7d5 100644 --- a/extension/src/app/api/importState.ts +++ b/extension/src/app/api/importState.ts @@ -6,6 +6,8 @@ import { SerializeWithImmutable, } from '../../browser/extension/inject/pageScript'; import Immutable from 'immutable'; +import { LiftedState } from '@redux-devtools/instrument'; +import { Action } from 'redux'; function deprecate(param: string) { // eslint-disable-next-line no-console @@ -34,7 +36,12 @@ function isSerializeWithReviver( return !!(serialize as SerializeWithImmutable).immutable; } -export default function importState( +interface ParsedSerializedLiftedState { + readonly payload: string; + readonly preloadedState?: string; +} + +export default function importState>( state: string | undefined, { deserializeState, deserializeAction, serialize }: Config ) { @@ -57,14 +64,24 @@ export default function importState( } } - let preloadedState; - let nextLiftedState = parse(state); - if (nextLiftedState.payload) { - if (nextLiftedState.preloadedState) { - preloadedState = parse(nextLiftedState.preloadedState); - } - nextLiftedState = parse(nextLiftedState.payload); - } + const parsedSerializedLiftedState: + | ParsedSerializedLiftedState + | LiftedState = parse(state) as + | ParsedSerializedLiftedState + | LiftedState; + let preloadedState = + 'payload' in parsedSerializedLiftedState && + parsedSerializedLiftedState.preloadedState + ? (parse(parsedSerializedLiftedState.preloadedState) as S) + : undefined; + const nextLiftedState = + 'payload' in parsedSerializedLiftedState + ? (parse(parsedSerializedLiftedState.payload) as LiftedState< + S, + A, + unknown + >) + : parsedSerializedLiftedState; if (deserializeState) { deprecate('deserializeState'); if (typeof nextLiftedState.computedStates !== 'undefined') { diff --git a/extension/src/app/api/index.ts b/extension/src/app/api/index.ts index cee9ea49..db8ee46b 100644 --- a/extension/src/app/api/index.ts +++ b/extension/src/app/api/index.ts @@ -275,7 +275,11 @@ function getStackTrace( } function amendActionType>( - action: A | StructuralPerformAction | string, + action: + | A + | StructuralPerformAction + | StructuralPerformAction[] + | string, config: Config, toExcludeFromTrace: Function | undefined ): StructuralPerformAction { @@ -494,7 +498,7 @@ const liftListener = type: 'DISPATCH', payload: { type: 'IMPORT_STATE', - ...importState(message.state, config), + ...importState(message.state, config)!, }, }); } else { @@ -614,7 +618,7 @@ export function connect(preConfig: Config) { ) => { const message: InitMessage = { type: 'INIT', - payload: stringify(state, config.serialize), + payload: stringify(state, config.serialize as Serialize | undefined), instanceId: id, source, }; diff --git a/extension/src/browser/extension/inject/pageScript.ts b/extension/src/browser/extension/inject/pageScript.ts index 6b1fff7d..88e6b2f5 100644 --- a/extension/src/browser/extension/inject/pageScript.ts +++ b/extension/src/browser/extension/inject/pageScript.ts @@ -120,7 +120,7 @@ export interface ConfigWithExpandedMaxAge { readonly features?: Features; readonly type?: string; readonly getActionType?: >(action: A) => A; - readonly actionCreators: { + readonly actionCreators?: { readonly [key: string]: ActionCreator>; }; } @@ -362,10 +362,10 @@ function __REDUX_DEVTOOLS_EXTENSION__>( } } - function importPayloadFrom(state) { - if (config.features && !config.features.import) return; + function importPayloadFrom(state: string | undefined) { + if (config!.features && !config!.features.import) return; try { - const nextLiftedState = importState(state, config); + const nextLiftedState = importState(state, config!); if (!nextLiftedState) return; store.liftedStore.dispatch({ type: 'IMPORT_STATE', ...nextLiftedState }); } catch (e) { diff --git a/packages/redux-devtools-inspector-monitor-test-tab/package.json b/packages/redux-devtools-inspector-monitor-test-tab/package.json index 4de697fe..6d529f82 100644 --- a/packages/redux-devtools-inspector-monitor-test-tab/package.json +++ b/packages/redux-devtools-inspector-monitor-test-tab/package.json @@ -59,7 +59,7 @@ "@redux-devtools/inspector-monitor": "^1.0.0", "@types/es6template": "^1.0.0", "@types/history": "^4.7.8", - "@types/jsan": "^3.1.0", + "@types/jsan": "^3.1.2", "@types/lodash.shuffle": "^4.2.6", "@types/object-path": "^0.11.0", "@types/react": "^16.14.8", diff --git a/packages/redux-devtools-serialize/package.json b/packages/redux-devtools-serialize/package.json index ebca64f5..84d9120b 100644 --- a/packages/redux-devtools-serialize/package.json +++ b/packages/redux-devtools-serialize/package.json @@ -35,7 +35,7 @@ "jsan": "^3.1.13" }, "devDependencies": { - "@types/jsan": "^3.1.0", + "@types/jsan": "^3.1.2", "immutable": "^4.0.0-rc.12" }, "peerDependencies": { diff --git a/yarn.lock b/yarn.lock index d0eef9f9..83bb3385 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3520,7 +3520,7 @@ __metadata: "@redux-devtools/inspector-monitor": ^1.0.0 "@types/es6template": ^1.0.0 "@types/history": ^4.7.8 - "@types/jsan": ^3.1.0 + "@types/jsan": ^3.1.2 "@types/lodash.shuffle": ^4.2.6 "@types/object-path": ^0.11.0 "@types/prop-types": ^15.7.3 @@ -3682,7 +3682,7 @@ __metadata: version: 0.0.0-use.local resolution: "@redux-devtools/serialize@workspace:packages/redux-devtools-serialize" dependencies: - "@types/jsan": ^3.1.0 + "@types/jsan": ^3.1.2 immutable: ^4.0.0-rc.12 jsan: ^3.1.13 peerDependencies: @@ -5246,10 +5246,10 @@ __metadata: languageName: node linkType: hard -"@types/jsan@npm:^3.1.0": - version: 3.1.0 - resolution: "@types/jsan@npm:3.1.0" - checksum: a0670d90e4bee7110504be73eefff9196b46235faf490062865136b1cbad4d3bac2adb9303e308c523f07716c026bb8e72a12ae7d47a948424d4ca4d7883587d +"@types/jsan@npm:^3.1.2": + version: 3.1.2 + resolution: "@types/jsan@npm:3.1.2" + checksum: 2ff652807d6067bbc650aaefcda4e3c07b54ddfd7d72283d7c1f1892ad1e18e907b1bbdbee7d0a163efa9e8aed9af5fa9f4ed8e2f27243c46383d31e1181fc11 languageName: node linkType: hard @@ -23231,6 +23231,7 @@ fsevents@^1.2.7: "@redux-devtools/serialize": ^0.3.0 "@redux-devtools/slider-monitor": ^2.0.0-8 "@redux-devtools/utils": ^1.0.0-6 + "@types/jsan": ^3.1.2 bestzip: ^2.2.0 chromedriver: ^91.0.1 electron: ^13.1.2