Skip to content

Commit f48142e

Browse files
vsavkinvikerman
authored andcommitted
feat(core): make ngprobe tokens pluggable
1 parent 947f9c3 commit f48142e

File tree

4 files changed

+53
-11
lines changed

4 files changed

+53
-11
lines changed

modules/@angular/platform-browser/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export * from './src/web_workers/shared/message_bus';
2525
export {WORKER_APP_LOCATION_PROVIDERS} from './src/web_workers/worker/location_providers';
2626
export {WORKER_UI_LOCATION_PROVIDERS} from './src/web_workers/ui/location_providers';
2727

28+
export {NgProbeToken} from './src/dom/debug/ng_probe';
2829
export * from './src/worker_render';
2930
export * from './src/worker_app';
30-
31-
export * from './private_export';
31+
export * from './private_export';

modules/@angular/platform-browser/src/dom/debug/ng_probe.ts

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {ApplicationRef, DebugNode, NgZone, RootRenderer, getDebugNode, isDevMode} from '@angular/core';
9+
import {ApplicationRef, DebugNode, NgZone, Optional, RootRenderer, getDebugNode, isDevMode} from '@angular/core';
1010

1111
import {DebugDomRootRenderer} from '../../../core_private';
12+
import {StringMapWrapper} from '../../facade/collection';
1213
import {getDOM} from '../dom_adapter';
1314
import {DomRootRenderer} from '../dom_renderer';
1415

@@ -30,24 +31,44 @@ export function inspectNativeElement(element: any /** TODO #9100 */): DebugNode
3031
return getDebugNode(element);
3132
}
3233

33-
export function _createConditionalRootRenderer(rootRenderer: any /** TODO #9100 */) {
34+
/**
35+
* @experimental
36+
*/
37+
export class NgProbeToken {
38+
constructor(private name: string, private token: any) {}
39+
}
40+
41+
export function _createConditionalRootRenderer(
42+
rootRenderer: any /** TODO #9100 */, extraTokens: NgProbeToken[]) {
3443
if (isDevMode()) {
35-
return _createRootRenderer(rootRenderer);
44+
return _createRootRenderer(rootRenderer, extraTokens);
3645
}
3746
return rootRenderer;
3847
}
3948

40-
function _createRootRenderer(rootRenderer: any /** TODO #9100 */) {
49+
function _createRootRenderer(rootRenderer: any /** TODO #9100 */, extraTokens: NgProbeToken[]) {
4150
getDOM().setGlobalVar(INSPECT_GLOBAL_NAME, inspectNativeElement);
42-
getDOM().setGlobalVar(CORE_TOKENS_GLOBAL_NAME, CORE_TOKENS);
51+
getDOM().setGlobalVar(
52+
CORE_TOKENS_GLOBAL_NAME,
53+
StringMapWrapper.merge(CORE_TOKENS, _ngProbeTokensToMap(extraTokens || [])));
4354
return new DebugDomRootRenderer(rootRenderer);
4455
}
4556

57+
function _ngProbeTokensToMap(tokens: NgProbeToken[]): {[name: string]: any} {
58+
return tokens.reduce((prev: any, t: any) => (prev[t.name] = t.token, prev), {});
59+
}
60+
4661
/**
4762
* Providers which support debugging Angular applications (e.g. via `ng.probe`).
4863
*/
49-
export const ELEMENT_PROBE_PROVIDERS: any[] =
50-
[{provide: RootRenderer, useFactory: _createConditionalRootRenderer, deps: [DomRootRenderer]}];
64+
export const ELEMENT_PROBE_PROVIDERS: any[] = [{
65+
provide: RootRenderer,
66+
useFactory: _createConditionalRootRenderer,
67+
deps: [DomRootRenderer, [NgProbeToken, new Optional()]]
68+
}];
5169

52-
export const ELEMENT_PROBE_PROVIDERS_PROD_MODE: any[] =
53-
[{provide: RootRenderer, useFactory: _createRootRenderer, deps: [DomRootRenderer]}];
70+
export const ELEMENT_PROBE_PROVIDERS_PROD_MODE: any[] = [{
71+
provide: RootRenderer,
72+
useFactory: _createRootRenderer,
73+
deps: [DomRootRenderer, [NgProbeToken, new Optional()]]
74+
}];
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* @license
3+
* Copyright Google Inc. All Rights Reserved.
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.io/license
7+
*/
8+
9+
import {NgProbeToken} from '@angular/platform-browser';
10+
import {Router} from './src/router';
11+
12+
export const ROUTER_NG_PROBE_PROVIDER = {
13+
provide: NgProbeToken,
14+
multi: true,
15+
useValue: new NgProbeToken('router', Router)
16+
};

tools/public_api_guard/platform-browser/index.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ export interface MessageBusSource {
126126
initChannel(channel: string, runInZone: boolean): void;
127127
}
128128

129+
/** @experimental */
130+
export declare class NgProbeToken {
131+
constructor(name: string, token: any);
132+
}
133+
129134
/** @experimental */
130135
export declare const platformBrowser: (extraProviders?: any[]) => PlatformRef;
131136

0 commit comments

Comments
 (0)