test: improve symbol-extractor test by ignoring $1 suffix (#28098)

PR Close #28098
This commit is contained in:
Misko Hevery 2019-01-12 00:59:48 -08:00 committed by Andrew Kushnir
parent da2880d7c4
commit 6a9a48b0ac
19 changed files with 111 additions and 82 deletions

View File

@ -6,7 +6,7 @@
* found in the LICENSE file at https://angular.io/license
*/
import {ChangeDetectorRef, Directive, DoCheck, EmbeddedViewRef, Input, IterableChangeRecord, IterableChanges, IterableDiffer, IterableDiffers, NgIterable, TemplateRef, TrackByFunction, ViewContainerRef, forwardRef, isDevMode} from '@angular/core';
import {Directive, DoCheck, EmbeddedViewRef, Input, IterableChangeRecord, IterableChanges, IterableDiffer, IterableDiffers, NgIterable, TemplateRef, TrackByFunction, ViewContainerRef, forwardRef, isDevMode} from '@angular/core';
/**
* @publicApi
@ -151,7 +151,7 @@ export class NgForOf<T> implements DoCheck {
this._differ = this._differs.find(value).create(this.ngForTrackBy);
} catch {
throw new Error(
`Cannot find a differ supporting object '${value}' of type '${getTypeNameForDebugging(value)}'. NgFor only supports binding to Iterables such as Arrays.`);
`Cannot find a differ supporting object '${value}' of type '${getTypeName(value)}'. NgFor only supports binding to Iterables such as Arrays.`);
}
}
}
@ -218,6 +218,6 @@ class RecordViewTuple<T> {
constructor(public record: any, public view: EmbeddedViewRef<NgForOfContext<T>>) {}
}
export function getTypeNameForDebugging(type: any): string {
function getTypeName(type: any): string {
return type['name'] || typeof type;
}

View File

@ -25,7 +25,7 @@ import {PlayerHandler} from './interfaces/player';
import {RElement, Renderer3, RendererFactory3, domRendererFactory3} from './interfaces/renderer';
import {CONTEXT, FLAGS, HEADER_OFFSET, HOST, HOST_NODE, LView, LViewFlags, RootContext, RootContextFlags, TVIEW} from './interfaces/view';
import {enterView, getPreviousOrParentTNode, leaveView, resetComponentState, setCurrentDirectiveDef} from './state';
import {defaultScheduler, getRootView, readPatchedLView, stringify} from './util';
import {defaultScheduler, getRootView, readPatchedLView, renderStringify} from './util';
@ -84,7 +84,7 @@ type HostFeature = (<T>(component: T, componentDef: ComponentDef<T>) => void);
// TODO: A hack to not pull in the NullInjector from @angular/core.
export const NULL_INJECTOR: Injector = {
get: (token: any, notFoundValue?: any) => {
throw new Error('NullInjector: Not found: ' + stringify(token));
throw new Error('NullInjector: Not found: ' + renderStringify(token));
}
};

View File

@ -22,7 +22,7 @@ import {DECLARATION_VIEW, HOST_NODE, INJECTOR, LView, TData, TVIEW, TView} from
import {assertNodeOfPossibleTypes} from './node_assert';
import {unwrapOnChangesDirectiveWrapper} from './onchanges_util';
import {getLView, getPreviousOrParentTNode, setTNodeAndViewData} from './state';
import {findComponentView, getParentInjectorIndex, getParentInjectorView, hasParentInjector, isComponent, isComponentDef, stringify} from './util';
import {findComponentView, getParentInjectorIndex, getParentInjectorView, hasParentInjector, isComponent, isComponentDef, renderStringify} from './util';
@ -312,7 +312,7 @@ export function getOrCreateInjectable<T>(
try {
const value = bloomHash();
if (value == null && !(flags & InjectFlags.Optional)) {
throw new Error(`No provider for ${stringify(token)}!`);
throw new Error(`No provider for ${renderStringify(token)}!`);
} else {
return value;
}
@ -402,7 +402,7 @@ export function getOrCreateInjectable<T>(
if (flags & InjectFlags.Optional) {
return notFoundValue;
} else {
throw new Error(`NodeInjector: NOT_FOUND [${stringify(token)}]`);
throw new Error(`NodeInjector: NOT_FOUND [${renderStringify(token)}]`);
}
}
@ -500,7 +500,7 @@ export function getNodeInjectable(
if (isFactory(value)) {
const factory: NodeInjectorFactory = value;
if (factory.resolving) {
throw new Error(`Circular dep for ${stringify(tData[index])}`);
throw new Error(`Circular dep for ${renderStringify(tData[index])}`);
}
const previousIncludeViewProviders = setIncludeViewProviders(factory.canSeeViewProviders);
factory.resolving = true;

View File

@ -15,7 +15,7 @@ import {LContext} from './interfaces/context';
import {DirectiveDef} from './interfaces/definition';
import {TElementNode, TNode, TNodeProviderIndexes} from './interfaces/node';
import {CLEANUP, CONTEXT, FLAGS, HOST, LView, LViewFlags, PARENT, RootContext, TVIEW} from './interfaces/view';
import {readElementValue, readPatchedLView, stringify} from './util';
import {readElementValue, readPatchedLView, renderStringify} from './util';
@ -201,7 +201,7 @@ export function loadLContext(target: {}, throwOnNotFound: boolean = true): LCont
const context = getLContext(target);
if (!context && throwOnNotFound) {
throw new Error(
ngDevMode ? `Unable to find context associated with ${stringify(target)}` :
ngDevMode ? `Unable to find context associated with ${renderStringify(target)}` :
'Invalid ng target');
}
return context;

View File

@ -22,7 +22,7 @@ import {BINDING_INDEX, HEADER_OFFSET, HOST_NODE, LView, RENDERER, TVIEW, TView}
import {appendChild, createTextNode, removeChild} from './node_manipulation';
import {getIsParent, getLView, getPreviousOrParentTNode, setIsParent, setPreviousOrParentTNode} from './state';
import {NO_CHANGE} from './tokens';
import {addAllToArray, getNativeByIndex, getNativeByTNode, getTNode, isLContainer, stringify} from './util';
import {addAllToArray, getNativeByIndex, getNativeByTNode, getTNode, isLContainer, renderStringify} from './util';
const MARKER = `<EFBFBD>`;
const ICU_BLOCK_REGEX = /^\s*(<28>\d+:?\d*<2A>)\s*,\s*(select|plural)\s*,/;
@ -712,7 +712,7 @@ function readUpdateOpCodes(
} else if (typeof opCode == 'number') {
if (opCode < 0) {
// It's a binding index whose value is negative
value += stringify(viewData[bindingsStartIndex - opCode]);
value += renderStringify(viewData[bindingsStartIndex - opCode]);
} else {
const nodeIndex = opCode >>> I18nUpdateOpCode.SHIFT_REF;
switch (opCode & I18nUpdateOpCode.MASK_OPCODE) {

View File

@ -40,7 +40,7 @@ import {getInitialClassNameValue, initializeStaticContext as initializeStaticSty
import {BoundPlayerFactory} from './styling/player_factory';
import {createEmptyStylingContext, getStylingContext, hasClassInput, hasStyling, isAnimationProp} from './styling/util';
import {NO_CHANGE} from './tokens';
import {findComponentView, getComponentViewByIndex, getNativeByIndex, getNativeByTNode, getRootContext, getRootView, getTNode, isComponent, isComponentDef, loadInternal, readElementValue, readPatchedLView, stringify} from './util';
import {findComponentView, getComponentViewByIndex, getNativeByIndex, getNativeByTNode, getRootContext, getRootView, getTNode, isComponent, isComponentDef, loadInternal, readElementValue, readPatchedLView, renderStringify} from './util';
@ -788,7 +788,7 @@ function setUpAttributes(native: RElement, attrs: TAttributes): void {
}
export function createError(text: string, token: any) {
return new Error(`Renderer: ${text} [${stringify(token)}]`);
return new Error(`Renderer: ${text} [${renderStringify(token)}]`);
}
@ -984,7 +984,7 @@ export function elementAttribute(
ngDevMode && ngDevMode.rendererSetAttribute++;
const tNode = getTNode(index, lView);
const strValue =
sanitizer == null ? stringify(value) : sanitizer(value, tNode.tagName || '', name);
sanitizer == null ? renderStringify(value) : sanitizer(value, tNode.tagName || '', name);
isProceduralRenderer(renderer) ? renderer.setAttribute(element, name, strValue) :
element.setAttribute(name, strValue);
}
@ -1329,7 +1329,7 @@ export function elementStyleProp(
if (suffix) {
// when a suffix is applied then it will bypass
// sanitization entirely (b/c a new string is created)
valueToAdd = stringify(value) + suffix;
valueToAdd = renderStringify(value) + suffix;
} else {
// sanitization happens by dealing with a String value
// this means that the string value will be passed through
@ -1458,8 +1458,8 @@ export function textBinding<T>(index: number, value: T | NO_CHANGE): void {
ngDevMode && assertDefined(element, 'native element should exist');
ngDevMode && ngDevMode.rendererSetText++;
const renderer = lView[RENDERER];
isProceduralRenderer(renderer) ? renderer.setValue(element, stringify(value)) :
element.textContent = stringify(value);
isProceduralRenderer(renderer) ? renderer.setValue(element, renderStringify(value)) :
element.textContent = renderStringify(value);
}
}
@ -2718,7 +2718,7 @@ export function interpolationV(values: any[]): string|NO_CHANGE {
// Build the updated content
let content = values[0];
for (let i = 1; i < values.length; i += 2) {
content += stringify(values[i]) + values[i + 1];
content += renderStringify(values[i]) + values[i + 1];
}
return content;
@ -2735,7 +2735,7 @@ export function interpolation1(prefix: string, v0: any, suffix: string): string|
const lView = getLView();
const different = bindingUpdated(lView, lView[BINDING_INDEX], v0);
lView[BINDING_INDEX] += 1;
return different ? prefix + stringify(v0) + suffix : NO_CHANGE;
return different ? prefix + renderStringify(v0) + suffix : NO_CHANGE;
}
/** Creates an interpolation binding with 2 expressions. */
@ -2745,7 +2745,7 @@ export function interpolation2(
const different = bindingUpdated2(lView, lView[BINDING_INDEX], v0, v1);
lView[BINDING_INDEX] += 2;
return different ? prefix + stringify(v0) + i0 + stringify(v1) + suffix : NO_CHANGE;
return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + suffix : NO_CHANGE;
}
/** Creates an interpolation binding with 3 expressions. */
@ -2756,8 +2756,9 @@ export function interpolation3(
const different = bindingUpdated3(lView, lView[BINDING_INDEX], v0, v1, v2);
lView[BINDING_INDEX] += 3;
return different ? prefix + stringify(v0) + i0 + stringify(v1) + i1 + stringify(v2) + suffix :
NO_CHANGE;
return different ?
prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + suffix :
NO_CHANGE;
}
/** Create an interpolation binding with 4 expressions. */
@ -2769,8 +2770,8 @@ export function interpolation4(
lView[BINDING_INDEX] += 4;
return different ?
prefix + stringify(v0) + i0 + stringify(v1) + i1 + stringify(v2) + i2 + stringify(v3) +
suffix :
prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 +
renderStringify(v3) + suffix :
NO_CHANGE;
}
@ -2785,8 +2786,8 @@ export function interpolation5(
lView[BINDING_INDEX] += 5;
return different ?
prefix + stringify(v0) + i0 + stringify(v1) + i1 + stringify(v2) + i2 + stringify(v3) + i3 +
stringify(v4) + suffix :
prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 +
renderStringify(v3) + i3 + renderStringify(v4) + suffix :
NO_CHANGE;
}
@ -2801,8 +2802,8 @@ export function interpolation6(
lView[BINDING_INDEX] += 6;
return different ?
prefix + stringify(v0) + i0 + stringify(v1) + i1 + stringify(v2) + i2 + stringify(v3) + i3 +
stringify(v4) + i4 + stringify(v5) + suffix :
prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 +
renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + suffix :
NO_CHANGE;
}
@ -2818,8 +2819,9 @@ export function interpolation7(
lView[BINDING_INDEX] += 7;
return different ?
prefix + stringify(v0) + i0 + stringify(v1) + i1 + stringify(v2) + i2 + stringify(v3) + i3 +
stringify(v4) + i4 + stringify(v5) + i5 + stringify(v6) + suffix :
prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 +
renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 +
renderStringify(v6) + suffix :
NO_CHANGE;
}
@ -2835,8 +2837,9 @@ export function interpolation8(
lView[BINDING_INDEX] += 8;
return different ?
prefix + stringify(v0) + i0 + stringify(v1) + i1 + stringify(v2) + i2 + stringify(v3) + i3 +
stringify(v4) + i4 + stringify(v5) + i5 + stringify(v6) + i6 + stringify(v7) + suffix :
prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 +
renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 +
renderStringify(v6) + i6 + renderStringify(v7) + suffix :
NO_CHANGE;
}

View File

@ -15,7 +15,7 @@ import {componentNeedsResolution, maybeQueueResolutionOfComponentResources} from
import {ViewEncapsulation} from '../../metadata/view';
import {EMPTY_ARRAY, EMPTY_OBJ} from '../empty';
import {NG_COMPONENT_DEF, NG_DIRECTIVE_DEF} from '../fields';
import {stringify} from '../util';
import {renderStringify} from '../util';
import {R3DirectiveMetadataFacade, getCompilerFacade} from './compiler_facade';
import {R3ComponentMetadataFacade, R3QueryMetadataFacade} from './compiler_facade_interface';
@ -43,9 +43,9 @@ export function compileComponent(type: Type<any>, metadata: Component): void {
const compiler = getCompilerFacade();
if (ngComponentDef === null) {
if (componentNeedsResolution(metadata)) {
const error = [`Component '${stringify(type)}' is not resolved:`];
const error = [`Component '${renderStringify(type)}' is not resolved:`];
if (metadata.templateUrl) {
error.push(` - templateUrl: ${stringify(metadata.templateUrl)}`);
error.push(` - templateUrl: ${renderStringify(metadata.templateUrl)}`);
}
if (metadata.styleUrls && metadata.styleUrls.length) {
error.push(` - styleUrls: ${JSON.stringify(metadata.styleUrls)}`);
@ -69,7 +69,7 @@ export function compileComponent(type: Type<any>, metadata: Component): void {
viewProviders: metadata.viewProviders || null,
};
ngComponentDef = compiler.compileComponent(
angularCoreEnv, `ng://${stringify(type)}/template.html`, meta);
angularCoreEnv, `ng://${renderStringify(type)}/template.html`, meta);
// When NgModule decorator executed, we enqueued the module definition such that
// it would only dequeue and add itself as module scope to all of its declarations,
@ -176,7 +176,7 @@ function extractQueriesMetadata(
if (!ann.selector) {
throw new Error(
`Can't construct a query for the property "${field}" of ` +
`"${stringify(type)}" since the query selector wasn't defined.`);
`"${renderStringify(type)}" since the query selector wasn't defined.`);
}
queriesMeta.push(convertToR3QueryMetadata(field, ann));
}

View File

@ -17,7 +17,7 @@ import {getComponentDef, getDirectiveDef, getNgModuleDef, getPipeDef} from '../d
import {NG_COMPONENT_DEF, NG_DIRECTIVE_DEF, NG_MODULE_DEF, NG_PIPE_DEF} from '../fields';
import {ComponentDef} from '../interfaces/definition';
import {NgModuleType} from '../ng_module_ref';
import {stringify} from '../util';
import {renderStringify} from '../util';
import {R3InjectorMetadataFacade, getCompilerFacade} from './compiler_facade';
import {angularCoreEnv} from './environment';
@ -183,7 +183,7 @@ function verifySemanticsOfNgModuleDef(moduleType: NgModuleType): void {
const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef(type);
if (!def) {
errors.push(
`Unexpected value '${stringify(type)}' declared by the module '${stringify(moduleType)}'. Please add a @Pipe/@Directive/@Component annotation.`);
`Unexpected value '${renderStringify(type)}' declared by the module '${renderStringify(moduleType)}'. Please add a @Pipe/@Directive/@Component annotation.`);
}
}
@ -197,7 +197,7 @@ function verifySemanticsOfNgModuleDef(moduleType: NgModuleType): void {
if (combinedDeclarations.lastIndexOf(type) === -1) {
// We are exporting something which we don't explicitly declare or import.
errors.push(
`Can't export ${kind} ${stringify(type)} from ${stringify(moduleType)} as it was neither declared nor imported!`);
`Can't export ${kind} ${renderStringify(type)} from ${renderStringify(moduleType)} as it was neither declared nor imported!`);
}
}
}
@ -206,11 +206,11 @@ function verifySemanticsOfNgModuleDef(moduleType: NgModuleType): void {
type = resolveForwardRef(type);
const existingModule = ownerNgModule.get(type);
if (existingModule && existingModule !== moduleType) {
const modules = [existingModule, moduleType].map(stringify).sort();
const modules = [existingModule, moduleType].map(renderStringify).sort();
errors.push(
`Type ${stringify(type)} is part of the declarations of 2 modules: ${modules[0]} and ${modules[1]}! ` +
`Please consider moving ${stringify(type)} to a higher module that imports ${modules[0]} and ${modules[1]}. ` +
`You can also create a new NgModule that exports and includes ${stringify(type)} then import that NgModule in ${modules[0]} and ${modules[1]}.`);
`Type ${renderStringify(type)} is part of the declarations of 2 modules: ${modules[0]} and ${modules[1]}! ` +
`Please consider moving ${renderStringify(type)} to a higher module that imports ${modules[0]} and ${modules[1]}. ` +
`You can also create a new NgModule that exports and includes ${renderStringify(type)} then import that NgModule in ${modules[0]} and ${modules[1]}.`);
} else {
// Mark type as having owner.
ownerNgModule.set(type, moduleType);
@ -222,7 +222,7 @@ function verifySemanticsOfNgModuleDef(moduleType: NgModuleType): void {
const existingModule = ownerNgModule.get(type);
if (!existingModule) {
errors.push(
`Component ${stringify(type)} is not part of any NgModule or the module has not been imported into your module.`);
`Component ${renderStringify(type)} is not part of any NgModule or the module has not been imported into your module.`);
}
}

View File

@ -9,7 +9,7 @@
import {Type} from '../../interface/type';
import {Pipe} from '../../metadata/directives';
import {NG_PIPE_DEF} from '../fields';
import {stringify} from '../util';
import {renderStringify} from '../util';
import {getCompilerFacade} from './compiler_facade';
import {angularCoreEnv} from './environment';
@ -21,7 +21,7 @@ export function compilePipe(type: Type<any>, meta: Pipe): void {
get: () => {
if (ngPipeDef === null) {
ngPipeDef = getCompilerFacade().compilePipe(
angularCoreEnv, `ng://${stringify(type)}/ngPipeDef.js`, {
angularCoreEnv, `ng://${renderStringify(type)}/ngPipeDef.js`, {
type: type,
name: type.name,
deps: reflectDependencies(type),

View File

@ -14,7 +14,7 @@ import {unusedValueExportToPlacateAjd as unused3} from './interfaces/projection'
import {ProceduralRenderer3, RComment, RElement, RNode, RText, Renderer3, isProceduralRenderer, unusedValueExportToPlacateAjd as unused4} from './interfaces/renderer';
import {CLEANUP, CONTAINER_INDEX, FLAGS, HEADER_OFFSET, HOST_NODE, HookData, LView, LViewFlags, NEXT, PARENT, QUERIES, RENDERER, TVIEW, unusedValueExportToPlacateAjd as unused5} from './interfaces/view';
import {assertNodeType} from './node_assert';
import {findComponentView, getNativeByTNode, isLContainer, isRootView, readElementValue, stringify} from './util';
import {findComponentView, getNativeByTNode, isLContainer, isRootView, readElementValue, renderStringify} from './util';
const unusedValueToPlacateAjd = unused1 + unused2 + unused3 + unused4 + unused5;
@ -178,8 +178,8 @@ function executeNodeAction(
}
export function createTextNode(value: any, renderer: Renderer3): RText {
return isProceduralRenderer(renderer) ? renderer.createText(stringify(value)) :
renderer.createTextNode(stringify(value));
return isProceduralRenderer(renderer) ? renderer.createText(renderStringify(value)) :
renderer.createTextNode(renderStringify(value));
}
/**

View File

@ -31,7 +31,10 @@ export function isDifferent(a: any, b: any): boolean {
return !(a !== a && b !== b) && a !== b;
}
export function stringify(value: any): string {
/**
* Used for stringify render output in Ivy.
*/
export function renderStringify(value: any): string {
if (typeof value == 'function') return value.name || value;
if (typeof value == 'string') return value;
if (value == null) return '';

View File

@ -8,7 +8,7 @@
import {SANITIZER} from '../render3/interfaces/view';
import {getLView} from '../render3/state';
import {stringify} from '../render3/util';
import {renderStringify} from '../render3/util';
import {BypassType, allowSanitizationBypass} from './bypass';
import {_sanitizeHtml as _sanitizeHtml} from './html_sanitizer';
@ -39,7 +39,7 @@ export function sanitizeHtml(unsafeHtml: any): string {
if (allowSanitizationBypass(unsafeHtml, BypassType.Html)) {
return unsafeHtml.toString();
}
return _sanitizeHtml(document, stringify(unsafeHtml));
return _sanitizeHtml(document, renderStringify(unsafeHtml));
}
/**
@ -63,7 +63,7 @@ export function sanitizeStyle(unsafeStyle: any): string {
if (allowSanitizationBypass(unsafeStyle, BypassType.Style)) {
return unsafeStyle.toString();
}
return _sanitizeStyle(stringify(unsafeStyle));
return _sanitizeStyle(renderStringify(unsafeStyle));
}
/**
@ -88,7 +88,7 @@ export function sanitizeUrl(unsafeUrl: any): string {
if (allowSanitizationBypass(unsafeUrl, BypassType.Url)) {
return unsafeUrl.toString();
}
return _sanitizeUrl(stringify(unsafeUrl));
return _sanitizeUrl(renderStringify(unsafeUrl));
}
/**

View File

@ -401,6 +401,9 @@
{
"name": "renderEmbeddedTemplate"
},
{
"name": "renderStringify"
},
{
"name": "resetComponentState"
},
@ -434,9 +437,6 @@
{
"name": "setUpAttributes"
},
{
"name": "stringify$1"
},
{
"name": "syncViewWithBlueprint"
},

View File

@ -3,16 +3,16 @@
"name": "APP_ROOT"
},
{
"name": "CIRCULAR$1"
"name": "CIRCULAR"
},
{
"name": "EMPTY_ARRAY$2"
"name": "EMPTY_ARRAY"
},
{
"name": "EmptyErrorImpl"
},
{
"name": "INJECTOR$1"
"name": "INJECTOR"
},
{
"name": "Inject"
@ -33,7 +33,7 @@
"name": "NOT_YET"
},
{
"name": "NULL_INJECTOR$1"
"name": "NULL_INJECTOR"
},
{
"name": "NullInjector"
@ -63,7 +63,7 @@
"name": "THROW_IF_NOT_FOUND"
},
{
"name": "USE_VALUE$2"
"name": "USE_VALUE"
},
{
"name": "UnsubscriptionErrorImpl"

View File

@ -795,10 +795,10 @@
"name": "getTViewCleanup"
},
{
"name": "getTypeNameForDebugging"
"name": "getTypeName"
},
{
"name": "getTypeNameForDebugging$1"
"name": "getTypeNameForDebugging"
},
{
"name": "getValue"
@ -906,13 +906,13 @@
"name": "isFactory"
},
{
"name": "isJsObject$1"
"name": "isJsObject"
},
{
"name": "isLContainer"
},
{
"name": "isListLikeIterable$1"
"name": "isListLikeIterable"
},
{
"name": "isNodeMatchingSelector"
@ -936,7 +936,7 @@
"name": "isStylingContext"
},
{
"name": "iterateListLike$1"
"name": "iterateListLike"
},
{
"name": "leaveView"
@ -1076,6 +1076,9 @@
{
"name": "renderInitialStylingValues"
},
{
"name": "renderStringify"
},
{
"name": "renderStyling"
},
@ -1187,9 +1190,6 @@
{
"name": "stringify"
},
{
"name": "stringify$1"
},
{
"name": "syncViewWithBlueprint"
},

View File

@ -47,7 +47,7 @@ export class SymbolExtractor {
case ts.SyntaxKind.VariableDeclaration:
const varDecl = child as ts.VariableDeclaration;
if (varDecl.initializer && fnRecurseDepth !== 0) {
symbols.push({name: varDecl.name.getText()});
symbols.push({name: stripSuffix(varDecl.name.getText())});
}
if (fnRecurseDepth == 0 && isRollupExportSymbol(varDecl)) {
ts.forEachChild(child, visitor);
@ -55,7 +55,7 @@ export class SymbolExtractor {
break;
case ts.SyntaxKind.FunctionDeclaration:
const funcDecl = child as ts.FunctionDeclaration;
funcDecl.name && symbols.push({name: funcDecl.name.getText()});
funcDecl.name && symbols.push({name: stripSuffix(funcDecl.name.getText())});
break;
default:
// Left for easier debugging.
@ -109,6 +109,11 @@ export class SymbolExtractor {
}
}
function stripSuffix(text: string): string {
const index = text.lastIndexOf('$');
return index > -1 ? text.substring(0, index) : text;
}
function toSymbol(v: string | Symbol): Symbol {
return typeof v == 'string' ? {'name': v} : v as Symbol;
}

View File

@ -0,0 +1,12 @@
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
!function() {
'use strict';
var constant$1 = 1, method$2 = function() {}, clazz$3 = class {};
}();

View File

@ -0,0 +1,5 @@
[
"clazz",
"constant",
"method"
]

View File

@ -1,9 +1,10 @@
[ "EMPTY$1",
[
"EMPTY",
"NO_CHANGE",
"Symbol$1",
"__global$1",
"__self$1",
"__window$1",
"Symbol",
"__global",
"__self",
"__window",
"_renderCompCount",
"_root",
"createLNode",
@ -13,11 +14,11 @@
"invertObject",
"leaveView",
"locateHostElement",
"noop$2",
"noop",
"refreshDynamicChildren",
"renderComponentOrTemplate",
"renderEmbeddedTemplate",
"stringify$1",
"stringify",
"canInsertNativeNode",
"createTView",
"executeHooks",