Skip to content

Commit 987cfee

Browse files
feat(router-store) warn about DefaultRouterStateSerializer for runtime checks enabled (ngrx#2940)
Closes ngrx#2686
1 parent 0bb4940 commit 987cfee

File tree

5 files changed

+37
-10
lines changed

5 files changed

+37
-10
lines changed

modules/router-store/src/router_store_module.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
ModuleWithProviders,
55
NgModule,
66
ErrorHandler,
7+
isDevMode,
78
} from '@angular/core';
89
import {
910
NavigationCancel,
@@ -15,7 +16,14 @@ import {
1516
Event,
1617
RouterEvent,
1718
} from '@angular/router';
18-
import { select, Selector, Store } from '@ngrx/store';
19+
import {
20+
isNgrxMockEnvironment,
21+
RuntimeChecks,
22+
select,
23+
Selector,
24+
Store,
25+
ACTIVE_RUNTIME_CHECKS,
26+
} from '@ngrx/store';
1927
import { withLatestFrom } from 'rxjs/operators';
2028

2129
import {
@@ -188,10 +196,28 @@ export class StoreRouterConnectingModule {
188196
private router: Router,
189197
private serializer: RouterStateSerializer<SerializedRouterStateSnapshot>,
190198
private errorHandler: ErrorHandler,
191-
@Inject(ROUTER_CONFIG) private config: StoreRouterConfig
199+
@Inject(ROUTER_CONFIG) private config: StoreRouterConfig,
200+
@Inject(ACTIVE_RUNTIME_CHECKS) private activeRuntimeChecks: RuntimeChecks
192201
) {
193202
this.stateKey = this.config.stateKey as StateKeyOrSelector;
194203

204+
if (
205+
!isNgrxMockEnvironment() &&
206+
isDevMode() &&
207+
(activeRuntimeChecks?.strictActionSerializability ||
208+
activeRuntimeChecks?.strictStateSerializability) &&
209+
this.serializer instanceof DefaultRouterStateSerializer
210+
) {
211+
console.warn(
212+
'@ngrx/router-store: The serializability runtime checks cannot be enabled ' +
213+
'with the DefaultRouterStateSerializer. The default serializer ' +
214+
'has an unserializable router state and actions that are not serializable. ' +
215+
'To use the serializability runtime checks either use ' +
216+
'the MinimalRouterStateSerializer or implement a custom router state serializer. ' +
217+
'This also applies to Ivy with immutability runtime checks.'
218+
);
219+
}
220+
195221
this.setUpStoreStateListener();
196222
this.setUpRouterEventsListener();
197223
}

modules/store/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export {
4848
FEATURE_REDUCERS,
4949
USER_PROVIDED_META_REDUCERS,
5050
USER_RUNTIME_CHECKS,
51+
ACTIVE_RUNTIME_CHECKS,
5152
} from './tokens';
5253
export {
5354
StoreModule,

modules/store/src/runtime_checks.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
import { RuntimeChecks, MetaReducer, Action } from './models';
88
import {
99
_USER_RUNTIME_CHECKS,
10-
_ACTIVE_RUNTIME_CHECKS,
10+
ACTIVE_RUNTIME_CHECKS,
1111
META_REDUCERS,
1212
USER_RUNTIME_CHECKS,
1313
_ACTION_TYPE_UNIQUENESS_CHECK,
@@ -98,26 +98,26 @@ export function provideRuntimeChecks(
9898
deps: [_USER_RUNTIME_CHECKS],
9999
},
100100
{
101-
provide: _ACTIVE_RUNTIME_CHECKS,
101+
provide: ACTIVE_RUNTIME_CHECKS,
102102
deps: [USER_RUNTIME_CHECKS],
103103
useFactory: createActiveRuntimeChecks,
104104
},
105105
{
106106
provide: META_REDUCERS,
107107
multi: true,
108-
deps: [_ACTIVE_RUNTIME_CHECKS],
108+
deps: [ACTIVE_RUNTIME_CHECKS],
109109
useFactory: createImmutabilityCheckMetaReducer,
110110
},
111111
{
112112
provide: META_REDUCERS,
113113
multi: true,
114-
deps: [_ACTIVE_RUNTIME_CHECKS],
114+
deps: [ACTIVE_RUNTIME_CHECKS],
115115
useFactory: createSerializationCheckMetaReducer,
116116
},
117117
{
118118
provide: META_REDUCERS,
119119
multi: true,
120-
deps: [_ACTIVE_RUNTIME_CHECKS],
120+
deps: [ACTIVE_RUNTIME_CHECKS],
121121
useFactory: createInNgZoneCheckMetaReducer,
122122
},
123123
];
@@ -128,7 +128,7 @@ export function checkForActionTypeUniqueness(): Provider[] {
128128
{
129129
provide: _ACTION_TYPE_UNIQUENESS_CHECK,
130130
multi: true,
131-
deps: [_ACTIVE_RUNTIME_CHECKS],
131+
deps: [ACTIVE_RUNTIME_CHECKS],
132132
useFactory: _actionTypeUniquenessCheck,
133133
},
134134
];

modules/store/src/store_module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import {
3737
USER_PROVIDED_META_REDUCERS,
3838
_RESOLVED_META_REDUCERS,
3939
_ROOT_STORE_GUARD,
40-
_ACTIVE_RUNTIME_CHECKS,
40+
ACTIVE_RUNTIME_CHECKS,
4141
_ACTION_TYPE_UNIQUENESS_CHECK,
4242
} from './tokens';
4343
import { ACTIONS_SUBJECT_PROVIDERS, ActionsSubject } from './actions_subject';

modules/store/src/tokens.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export const _USER_RUNTIME_CHECKS = new InjectionToken<RuntimeChecks>(
8383
/**
8484
* Runtime checks currently in use
8585
*/
86-
export const _ACTIVE_RUNTIME_CHECKS = new InjectionToken<RuntimeChecks>(
86+
export const ACTIVE_RUNTIME_CHECKS = new InjectionToken<RuntimeChecks>(
8787
'@ngrx/store Internal Runtime Checks'
8888
);
8989

0 commit comments

Comments
 (0)