fix(codegen): stringify using an opaque ID when toString contains parens.
Using toString results in 'function (_arg1, arg2) {' when using closure compiler for 6-to-5. Closes #7825
This commit is contained in:
parent
291928feb1
commit
90c87fa6ad
|
@ -27,12 +27,30 @@ import {getUrlScheme} from 'angular2/src/compiler/url_resolver';
|
|||
export class RuntimeMetadataResolver {
|
||||
private _directiveCache = new Map<Type, cpl.CompileDirectiveMetadata>();
|
||||
private _pipeCache = new Map<Type, cpl.CompilePipeMetadata>();
|
||||
private _anonymousTypes = new Map<Object, number>();
|
||||
private _anonymousTypeIndex = 0;
|
||||
|
||||
constructor(private _directiveResolver: DirectiveResolver, private _pipeResolver: PipeResolver,
|
||||
private _viewResolver: ViewResolver,
|
||||
@Optional() @Inject(PLATFORM_DIRECTIVES) private _platformDirectives: Type[],
|
||||
@Optional() @Inject(PLATFORM_PIPES) private _platformPipes: Type[]) {}
|
||||
|
||||
/**
|
||||
* Wrap the stringify method to avoid naming things `function (arg1...) {`
|
||||
*/
|
||||
private sanitizeName(obj: any): string {
|
||||
let result = stringify(obj);
|
||||
if (result.indexOf('(') < 0) {
|
||||
return result;
|
||||
}
|
||||
let found = this._anonymousTypes.get(obj);
|
||||
if (!found) {
|
||||
this._anonymousTypes.set(obj, this._anonymousTypeIndex++);
|
||||
found = this._anonymousTypes.get(obj);
|
||||
}
|
||||
return `anonymous_type_${found}_`;
|
||||
}
|
||||
|
||||
getDirectiveMetadata(directiveType: Type): cpl.CompileDirectiveMetadata {
|
||||
var meta = this._directiveCache.get(directiveType);
|
||||
if (isBlank(meta)) {
|
||||
|
@ -62,7 +80,7 @@ export class RuntimeMetadataResolver {
|
|||
isComponent: isPresent(templateMeta),
|
||||
dynamicLoadable: true,
|
||||
type: new cpl.CompileTypeMetadata(
|
||||
{name: stringify(directiveType), moduleUrl: moduleUrl, runtime: directiveType}),
|
||||
{name: this.sanitizeName(directiveType), moduleUrl: moduleUrl, runtime: directiveType}),
|
||||
template: templateMeta,
|
||||
changeDetection: changeDetectionStrategy,
|
||||
inputs: dirMeta.inputs,
|
||||
|
@ -82,7 +100,7 @@ export class RuntimeMetadataResolver {
|
|||
var moduleUrl = reflector.importUri(pipeType);
|
||||
meta = new cpl.CompilePipeMetadata({
|
||||
type: new cpl.CompileTypeMetadata(
|
||||
{name: stringify(pipeType), moduleUrl: moduleUrl, runtime: pipeType}),
|
||||
{name: this.sanitizeName(pipeType), moduleUrl: moduleUrl, runtime: pipeType}),
|
||||
name: pipeMeta.name,
|
||||
pure: pipeMeta.pure
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue