From d3eda7a5b5662e4bb01ea5ec5dd981eea3fbef04 Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Mon, 20 Mar 2017 09:19:25 -0700 Subject: [PATCH] feat(router): add `ParamMap.keys` to get a list of parameters --- packages/router/src/index.ts | 2 +- packages/router/src/shared.ts | 10 ++++++++++ packages/router/test/shared.spec.ts | 5 +++++ tools/public_api_guard/router/router.d.ts | 4 ++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/router/src/index.ts b/packages/router/src/index.ts index d21e6151d9..6e329cf2be 100644 --- a/packages/router/src/index.ts +++ b/packages/router/src/index.ts @@ -20,7 +20,7 @@ export {ExtraOptions, ROUTER_CONFIGURATION, ROUTER_INITIALIZER, RouterModule, pr export {RouterOutletMap} from './router_outlet_map'; export {NoPreloading, PreloadAllModules, PreloadingStrategy, RouterPreloader} from './router_preloader'; export {ActivatedRoute, ActivatedRouteSnapshot, RouterState, RouterStateSnapshot} from './router_state'; -export {PRIMARY_OUTLET, ParamMap, Params} from './shared'; +export {PRIMARY_OUTLET, ParamMap, Params, convertToParamMap} from './shared'; export {UrlHandlingStrategy} from './url_handling_strategy'; export {DefaultUrlSerializer, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree} from './url_tree'; export {VERSION} from './version'; diff --git a/packages/router/src/shared.ts b/packages/router/src/shared.ts index 7f2efba140..1ca5dfbcf6 100644 --- a/packages/router/src/shared.ts +++ b/packages/router/src/shared.ts @@ -54,6 +54,9 @@ export interface ParamMap { * If there is no such parameter, an empty array is returned. */ getAll(name: string): string[]; + + /** Name of the parameters */ + readonly keys: string[]; } class ParamsAsMap implements ParamMap { @@ -80,8 +83,15 @@ class ParamsAsMap implements ParamMap { return []; } + + get keys(): string[] { return Object.keys(this.params); } } +/** + * Convert a {@link Params} instance to a {@link ParamMap}. + * + * @stable + */ export function convertToParamMap(params: Params): ParamMap { return new ParamsAsMap(params); } diff --git a/packages/router/test/shared.spec.ts b/packages/router/test/shared.spec.ts index 3e2edfed09..605782eb72 100644 --- a/packages/router/test/shared.spec.ts +++ b/packages/router/test/shared.spec.ts @@ -16,6 +16,11 @@ describe('ParamsMap', () => { expect(map.has('not here')).toEqual(false); }); + it('should returns the name of the parameters', () => { + const map = convertToParamMap({single: 's', multiple: ['m1', 'm2']}); + expect(map.keys).toEqual(['single', 'multiple']); + }); + it('should support single valued parameters', () => { const map = convertToParamMap({single: 's', multiple: ['m1', 'm2']}); expect(map.get('single')).toEqual('s'); diff --git a/tools/public_api_guard/router/router.d.ts b/tools/public_api_guard/router/router.d.ts index 42a53a6f06..80b574e659 100644 --- a/tools/public_api_guard/router/router.d.ts +++ b/tools/public_api_guard/router/router.d.ts @@ -59,6 +59,9 @@ export interface CanLoad { canLoad(route: Route): Observable | Promise | boolean; } +/** @stable */ +export declare function convertToParamMap(params: Params): ParamMap; + /** @stable */ export declare type Data = { [name: string]: any; @@ -156,6 +159,7 @@ export declare class NoPreloading implements PreloadingStrategy { /** @stable */ export interface ParamMap { + readonly keys: string[]; get(name: string): string | null; getAll(name: string): string[]; has(name: string): boolean;