@@ -18,6 +18,7 @@ import {
1818 DefaultRouterStateSerializer ,
1919 RouterStateSerializer ,
2020 SerializedRouterStateSnapshot ,
21+ RouterState ,
2122} from './serializer' ;
2223
2324/**
@@ -146,14 +147,6 @@ export type RouterAction<
146147 | RouterErrorAction < T , V >
147148 | RouterNavigatedAction ;
148149
149- /**
150- * Simple router state.
151- * All custom router states should have at least this property.
152- */
153- export type RouterState = {
154- url : string ;
155- } ;
156-
157150export type RouterReducerState <
158151 T extends RouterState = SerializedRouterStateSnapshot
159152> = {
@@ -182,6 +175,7 @@ export function routerReducer<
182175
183176export interface StoreRouterConfig {
184177 stateKey ?: string ;
178+ serializer ?: new ( ) => RouterStateSerializer ;
185179}
186180
187181export const _ROUTER_CONFIG = new InjectionToken (
@@ -192,7 +186,7 @@ export const ROUTER_CONFIG = new InjectionToken(
192186) ;
193187export const DEFAULT_ROUTER_FEATURENAME = 'router' ;
194188
195- export function _createDefaultRouterConfig (
189+ export function _createRouterConfig (
196190 config : StoreRouterConfig | StoreRouterConfigFunction
197191) : StoreRouterConfig {
198192 let _config : StoreRouterConfig ;
@@ -205,10 +199,19 @@ export function _createDefaultRouterConfig(
205199
206200 return {
207201 stateKey : DEFAULT_ROUTER_FEATURENAME ,
202+ serializer : DefaultRouterStateSerializer ,
208203 ..._config ,
209204 } ;
210205}
211206
207+ export function _createSerializer (
208+ config : StoreRouterConfig
209+ ) : RouterStateSerializer {
210+ // This function gets handed a complete config-object from _createRouterConfig,
211+ // so we know the serializer property exists
212+ return new config . serializer ! ( ) ;
213+ }
214+
212215export type StoreRouterConfigFunction = ( ) => StoreRouterConfig ;
213216
214217enum RouterTrigger {
@@ -261,16 +264,23 @@ enum RouterTrigger {
261264 */
262265@NgModule ( {
263266 providers : [
264- { provide : RouterStateSerializer , useClass : DefaultRouterStateSerializer } ,
265267 {
266268 provide : _ROUTER_CONFIG ,
267- useValue : { stateKey : DEFAULT_ROUTER_FEATURENAME } ,
269+ useValue : {
270+ stateKey : DEFAULT_ROUTER_FEATURENAME ,
271+ serializer : DefaultRouterStateSerializer ,
272+ } ,
268273 } ,
269274 {
270275 provide : ROUTER_CONFIG ,
271- useFactory : _createDefaultRouterConfig ,
276+ useFactory : _createRouterConfig ,
272277 deps : [ _ROUTER_CONFIG ] ,
273278 } ,
279+ {
280+ provide : RouterStateSerializer ,
281+ deps : [ ROUTER_CONFIG ] ,
282+ useFactory : _createSerializer ,
283+ } ,
274284 ] ,
275285} )
276286export class StoreRouterConnectingModule {
@@ -282,14 +292,7 @@ export class StoreRouterConnectingModule {
282292 ) : ModuleWithProviders {
283293 return {
284294 ngModule : StoreRouterConnectingModule ,
285- providers : [
286- { provide : _ROUTER_CONFIG , useValue : config } ,
287- {
288- provide : ROUTER_CONFIG ,
289- useFactory : _createDefaultRouterConfig ,
290- deps : [ _ROUTER_CONFIG ] ,
291- } ,
292- ] ,
295+ providers : [ { provide : _ROUTER_CONFIG , useValue : config } ] ,
293296 } ;
294297 }
295298
0 commit comments