diff --git a/gulpfile.js b/gulpfile.js index 2058ea219b..ba1762b5d4 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -463,7 +463,7 @@ function runKarma(configFile, done) { gulp.task('test.js', function(done) { runSequence('test.unit.tools/ci', 'test.transpiler.unittest', 'test.unit.js/ci', - 'test.unit.cjs/ci', 'test.typings', sequenceComplete(done)); + 'test.unit.cjs/ci', 'test.typings', 'check-public-api', sequenceComplete(done)); }); gulp.task('test.dart', function(done) { @@ -866,6 +866,8 @@ gulp.task('test.unit.cjs/ci', function(done) { runJasmineTests(['dist/js/cjs/{angular2,benchpress}/test/**/*_spec.js'], done); }); +gulp.task('check-public-api', + function(done) { runJasmineTests(['dist/tools/public_api_guard/**/*_spec.js'], done); }); gulp.task('test.unit.cjs', ['build/clean.js', 'build.tools'], function(neverDone) { var watch = require('./tools/build/watch'); diff --git a/npm-shrinkwrap.clean.json b/npm-shrinkwrap.clean.json index 3735d7aab4..f5733be9f4 100644 --- a/npm-shrinkwrap.clean.json +++ b/npm-shrinkwrap.clean.json @@ -5336,6 +5336,9 @@ "trim-newlines": { "version": "1.0.0" }, + "ts-api-guardian": { + "version": "0.0.2" + }, "ts2dart": { "version": "0.7.19", "dependencies": { diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index f59d259ae8..eecc16afc2 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -7667,7 +7667,7 @@ }, "rxjs": { "version": "5.0.0-beta.0", - "from": "rxjs@5.0.0-beta.0", + "from": "https://registry.npmjs.org/rxjs/-/rxjs-5.0.0-beta.0.tgz", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.0.0-beta.0.tgz" }, "sass-graph": { @@ -8503,6 +8503,10 @@ "from": "trim-newlines@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" }, + "ts-api-guardian": { + "version": "0.0.2", + "from": "ts-api-guardian@0.0.2" + }, "ts2dart": { "version": "0.7.19", "from": "ts2dart@>=0.7.18 <0.8.0", diff --git a/package.json b/package.json index f65b80919f..cad8dcb097 100644 --- a/package.json +++ b/package.json @@ -112,6 +112,7 @@ "systemjs-builder": "^0.10.3", "through2": "^0.6.5", "ts2dart": "^0.7.19", + "ts-api-guardian": "0.0.2", "tsd": "^0.6.5-beta", "tslint": "^3.2.1", "typescript": "^1.7.3", diff --git a/tools/public_api_guard/public_api_spec.ts b/tools/public_api_guard/public_api_spec.ts new file mode 100644 index 0000000000..f1e8d7b66d --- /dev/null +++ b/tools/public_api_guard/public_api_spec.ts @@ -0,0 +1,1087 @@ +import {publicApi} from 'ts-api-guardian'; + +// ================================================================================================= +// ================================================================================================= +// =========== S T O P - S T O P - S T O P - S T O P - S T O P - S T O P =========== +// ================================================================================================= +// ================================================================================================= +// +// DO NOT EDIT THIS LIST OF PUBLIC APIS UNLESS YOU GET IT CLEARED BY: mhevery, vsavkin, or tbosch! +// +// ================================================================================================= +// ================================================================================================= + +const CORE = [ + 'AbstractProviderError', + 'AbstractProviderError.addKey(injector:Injector, key:Key):void', + 'AbstractProviderError.constructResolvingMessage:Function', + 'AbstractProviderError.constructor(injector:Injector, key:Key, constructResolvingMessage:Function)', + 'AbstractProviderError.context:any', + 'AbstractProviderError.injectors:Injector[]', + 'AbstractProviderError.keys:Key[]', + 'AbstractProviderError.message:string', + 'AfterContentChecked', + 'AfterContentChecked.ngAfterContentChecked():any', + 'AfterContentInit', + 'AfterContentInit.ngAfterContentInit():any', + 'AfterViewChecked', + 'AfterViewChecked.ngAfterViewChecked():any', + 'AfterViewInit', + 'AfterViewInit.ngAfterViewInit():any', + 'AppViewManager', + 'AppViewManager.attachViewInContainer(viewContainerLocation:ElementRef, index:number, viewRef:EmbeddedViewRef):EmbeddedViewRef', + 'AppViewManager.createEmbeddedViewInContainer(viewContainerLocation:ElementRef, index:number, templateRef:TemplateRef):EmbeddedViewRef', + 'AppViewManager.createHostViewInContainer(viewContainerLocation:ElementRef, index:number, hostViewFactoryRef:HostViewFactoryRef, dynamicallyCreatedProviders:ResolvedProvider[], projectableNodes:any[][]):HostViewRef', + 'AppViewManager.createRootHostView(hostViewFactoryRef:HostViewFactoryRef, overrideSelector:string, injector:Injector, projectableNodes:any[][]):HostViewRef', + 'AppViewManager.destroyRootHostView(hostViewRef:HostViewRef):any', + 'AppViewManager.destroyViewInContainer(viewContainerLocation:ElementRef, index:number):any', + 'AppViewManager.detachViewInContainer(viewContainerLocation:ElementRef, index:number):EmbeddedViewRef', + 'AppViewManager.getComponent(hostLocation:ElementRef):any', + 'AppViewManager.getHostElement(hostViewRef:HostViewRef):ElementRef', + 'AppViewManager.getNamedElementInComponentView(hostLocation:ElementRef, variableName:string):ElementRef', + 'AppViewManager.getViewContainer(location:ElementRef):ViewContainerRef', + 'ApplicationRef', + 'ApplicationRef.bootstrap(componentType:Type, providers:Array):Promise', + 'ApplicationRef.componentTypes:Type[]', + 'ApplicationRef.dispose():void', + 'ApplicationRef.injector:Injector', + 'ApplicationRef.registerBootstrapListener(listener:(ref: ComponentRef) => void):void', + 'ApplicationRef.registerDisposeListener(dispose:() => void):void', + 'ApplicationRef.tick():void', + 'ApplicationRef.zone:NgZone', + 'AttributeFactory', + 'AttributeMetadata', + 'AttributeMetadata.constructor(attributeName:string)', + 'AttributeMetadata.toString():string', + 'AttributeMetadata.token:AttributeMetadata', + 'Binding', + 'Binding.constructor(token:any, {toClass,toValue,toAlias,toFactory,deps,multi}:{toClass?:Type, toValue?:any, toAlias?:any, toFactory:Function, deps?:Object[], multi?:boolean})', + 'Binding.toAlias:any', + 'Binding.toClass:any', + 'Binding.toFactory:any', + 'Binding.toValue:any', + 'ChangeDetectionError', + 'ChangeDetectionError.constructor(exp:string, originalException:any, originalStack:any, context:any)', + 'ChangeDetectionError.location:string', + 'ChangeDetectionStrategy', + 'ChangeDetectionStrategy.CheckAlways', + 'ChangeDetectionStrategy.CheckOnce', + 'ChangeDetectionStrategy.Checked', + 'ChangeDetectionStrategy.Default', + 'ChangeDetectionStrategy.Detached', + 'ChangeDetectionStrategy.OnPush', + 'ChangeDetectionStrategy.OnPushObserve', + 'ChangeDetectorRef', + 'ChangeDetectorRef.checkNoChanges():void', + 'ChangeDetectorRef.detach():void', + 'ChangeDetectorRef.detectChanges():void', + 'ChangeDetectorRef.markForCheck():void', + 'ChangeDetectorRef.reattach():void', + 'Class(clsDef:ClassDefinition):ConcreteType', + 'ClassDefinition', + 'ClassDefinition.constructor:Function|any[]', + 'ClassDefinition.extends:Type', + 'Compiler', + 'Compiler.clearCache():any', + 'Compiler.compileInHost(componentType:Type):Promise', + 'ComponentDecorator', + 'ComponentDecorator.View(obj:{templateUrl?:string, template?:string, directives?:Array, pipes?:Array, renderer?:string, styles?:string[], styleUrls?:string[]}):ViewDecorator', + 'ComponentFactory', + 'ComponentMetadata', + 'ComponentMetadata.changeDetection:ChangeDetectionStrategy', + 'ComponentMetadata.constructor({selector,inputs,outputs,properties,events,host,exportAs,moduleId,bindings,providers,viewBindings,viewProviders,changeDetection=ChangeDetectionStrategy.Default,queries,templateUrl,template,styleUrls,styles,directives,pipes,encapsulation}:{selector?:string, inputs?:string[], outputs?:string[], properties?:string[], events?:string[], host?:{[key:string]:string}, bindings?:any[], providers?:any[], exportAs?:string, moduleId?:string, viewBindings?:any[], viewProviders?:any[], queries?:{[key:string]:any}, changeDetection?:ChangeDetectionStrategy, templateUrl?:string, template?:string, styleUrls?:string[], styles?:string[], directives?:Array, pipes?:Array, encapsulation?:ViewEncapsulation})', + 'ComponentMetadata.directives:Array', + 'ComponentMetadata.encapsulation:ViewEncapsulation', + 'ComponentMetadata.moduleId:string', + 'ComponentMetadata.pipes:Array', + 'ComponentMetadata.styleUrls:string[]', + 'ComponentMetadata.styles:string[]', + 'ComponentMetadata.template:string', + 'ComponentMetadata.templateUrl:string', + 'ComponentMetadata.viewBindings:any[]', + 'ComponentMetadata.viewProviders:any[]', + 'ComponentRef', + 'ComponentRef.componentType:Type', + 'ComponentRef.dispose():any', + 'ComponentRef.hostComponent:any', + 'ComponentRef.hostView:HostViewRef', + 'ComponentRef.injector:Injector', + 'ComponentRef.instance:any', + 'ComponentRef.location:ElementRef', + 'ConcreteType', + 'ContentChildFactory', + 'ContentChildMetadata', + 'ContentChildMetadata.constructor(_selector:Type|string)', + 'ContentChildrenFactory', + 'ContentChildrenMetadata', + 'ContentChildrenMetadata.constructor(_selector:Type|string, {descendants=false}:{descendants?:boolean})', + 'CyclicDependencyError', + 'CyclicDependencyError.constructor(injector:Injector, key:Key)', + 'DebugElement', + 'DebugElement.children:DebugElement[]', + 'DebugElement.componentInstance:any', + 'DebugElement.componentViewChildren:DebugElement[]', + 'DebugElement.elementRef:ElementRef', + 'DebugElement.getDirectiveInstance(directiveIndex:number):any', + 'DebugElement.getLocal(name:string):any', + 'DebugElement.hasDirective(type:Type):boolean', + 'DebugElement.inject(type:Type):any', + 'DebugElement.nativeElement:any', + 'DebugElement.query(predicate:Predicate, scope:Function):DebugElement', + 'DebugElement.queryAll(predicate:Predicate, scope:Function):DebugElement[]', + 'DebugElement.triggerEventHandler(eventName:string, eventObj:Event):void', + 'Dependency', + 'Dependency.constructor(key:Key, optional:boolean, lowerBoundVisibility:any, upperBoundVisibility:any, properties:any[])', + 'Dependency.fromKey(key:Key):Dependency', + 'DependencyMetadata', + 'DependencyMetadata.token:any', + 'DirectiveDecorator', + 'DirectiveFactory', + 'DirectiveMetadata', + 'DirectiveMetadata.bindings:any[]', + 'DirectiveMetadata.constructor({selector,inputs,outputs,properties,events,host,bindings,providers,exportAs,queries}:{selector?:string, inputs?:string[], outputs?:string[], properties?:string[], events?:string[], host?:{[key:string]:string}, providers?:any[], bindings?:any[], exportAs?:string, queries?:{[key:string]:any}})', + 'DirectiveMetadata.events:string[]', + 'DirectiveMetadata.exportAs:string', + 'DirectiveMetadata.host:{[key:string]:string}', + 'DirectiveMetadata.inputs:string[]', + 'DirectiveMetadata.outputs:string[]', + 'DirectiveMetadata.properties:string[]', + 'DirectiveMetadata.providers:any[]', + 'DirectiveMetadata.queries:{[key:string]:any}', + 'DirectiveMetadata.selector:string', + 'DirectiveResolver', + 'DirectiveResolver.resolve(type:Type):DirectiveMetadata', + 'DoCheck', + 'DoCheck.ngDoCheck():any', + 'DynamicComponentLoader', + 'DynamicComponentLoader.loadAsRoot(type:Type, overrideSelector:string, injector:Injector, onDispose:() => void, projectableNodes:any[][]):Promise', + 'DynamicComponentLoader.loadIntoLocation(type:Type, hostLocation:ElementRef, anchorName:string, providers:ResolvedProvider[], projectableNodes:any[][]):Promise', + 'DynamicComponentLoader.loadNextToLocation(type:Type, location:ElementRef, providers:ResolvedProvider[], projectableNodes:any[][]):Promise', + 'ElementRef', + 'ElementRef.nativeElement:any', + 'EmbeddedViewRef', + 'EmbeddedViewRef.hasLocal(variableName:string):boolean', + 'EmbeddedViewRef.rootNodes:any[]', + 'EmbeddedViewRef.setLocal(variableName:string, value:any):void', + 'ErrorHandlingFn', + 'EventEmitter.constructor(isAsync:boolean)', + 'EventEmitter.emit(value:T):any', + 'EventEmitter.next(value:any):any', + 'EventEmitter.subscribe(generatorOrNext:any, error:any, complete:any):any', + 'EventEmitter', + 'ExceptionHandler', + 'ExceptionHandler.call(exception:any, stackTrace:any, reason:string):void', + 'ExceptionHandler.constructor(_logger:any, _rethrowException:boolean)', + 'ExceptionHandler.exceptionToString(exception:any, stackTrace:any, reason:string):string', + 'ExpressionChangedAfterItHasBeenCheckedException', + 'ExpressionChangedAfterItHasBeenCheckedException.constructor(exp:string, oldValue:any, currValue:any, context:any)', + 'ForwardRefFn', + 'GetTestability', + 'GetTestability.addToWindow(registry:TestabilityRegistry):void', + 'GetTestability.findTestabilityInTree(registry:TestabilityRegistry, elem:any, findInAncestors:boolean):Testability', + 'HostBindingFactory', + 'HostBindingMetadata', + 'HostBindingMetadata.constructor(hostPropertyName:string)', + 'HostFactory', + 'HostListenerFactory', + 'HostListenerMetadata', + 'HostListenerMetadata.constructor(eventName:string, args:string[])', + 'HostMetadata', + 'HostMetadata.toString():string', + 'HostViewFactoryRef', + 'HostViewRef', + 'HostViewRef.rootNodes:any[]', + 'InjectFactory', + 'InjectMetadata', + 'InjectMetadata.constructor(token:any)', + 'InjectMetadata.toString():string', + 'InjectableFactory', + 'InjectableMetadata', + 'InjectableMetadata.constructor()', + 'Injector', + 'Injector.constructor(_proto:any, _parent:Injector, _isHostBoundary:boolean, _depProvider:any, _debugContext:Function)', + 'Injector.createChildFromResolved(providers:ResolvedProvider[]):Injector', + 'Injector.debugContext():any', + 'Injector.displayName:string', + 'Injector.fromResolvedBindings(providers:ResolvedProvider[]):Injector', + 'Injector.fromResolvedProviders(providers:ResolvedProvider[]):Injector', + 'Injector.get(token:any):any', + 'Injector.getAt(index:number):any', + 'Injector.getOptional(token:any):any', + 'Injector.hostBoundary:any', + 'Injector.instantiateResolved(provider:ResolvedProvider):any', + 'Injector.internalStrategy:any', + 'Injector.parent:Injector', + 'Injector.resolve(providers:Array):ResolvedProvider[]', + 'Injector.resolveAndCreate(providers:Array):Injector', + 'Injector.resolveAndCreateChild(providers:Array):Injector', + 'Injector.resolveAndInstantiate(provider:Type|Provider):any', + 'Injector.toString():string', + 'InputFactory', + 'InputMetadata', + 'InputMetadata.constructor(bindingPropertyName:string)', + 'InstantiationError', + 'InstantiationError.addKey(injector:Injector, key:Key):void', + 'InstantiationError.causeKey:Key', + 'InstantiationError.constructor(injector:Injector, originalException:any, originalStack:any, key:Key)', + 'InstantiationError.context:any', + 'InstantiationError.injectors:Injector[]', + 'InstantiationError.keys:Key[]', + 'InstantiationError.wrapperMessage:string', + 'InvalidProviderError', + 'InvalidProviderError.constructor(provider:any)', + 'IterableDiffer', + 'IterableDiffer.diff(object:any):any', + 'IterableDiffer.onDestroy():any', + 'IterableDifferFactory', + 'IterableDifferFactory.create(cdRef:ChangeDetectorRef):IterableDiffer', + 'IterableDifferFactory.supports(objects:any):boolean', + 'IterableDiffers', + 'IterableDiffers.constructor(factories:IterableDifferFactory[])', + 'IterableDiffers.create(factories:IterableDifferFactory[], parent:IterableDiffers):IterableDiffers', + 'IterableDiffers.extend(factories:IterableDifferFactory[]):Provider', + 'IterableDiffers.find(iterable:any):IterableDifferFactory', + 'Key', + 'Key.constructor(token:Object, id:number)', + 'Key.displayName:string', + 'Key.get(token:Object):Key', + 'Key.numberOfKeys:number', + 'KeyValueDiffer', + 'KeyValueDiffer.diff(object:any):any', + 'KeyValueDiffer.onDestroy():any', + 'KeyValueDifferFactory', + 'KeyValueDifferFactory.create(cdRef:ChangeDetectorRef):KeyValueDiffer', + 'KeyValueDifferFactory.supports(objects:any):boolean', + 'KeyValueDiffers', + 'KeyValueDiffers.constructor(factories:KeyValueDifferFactory[])', + 'KeyValueDiffers.create(factories:KeyValueDifferFactory[], parent:KeyValueDiffers):KeyValueDiffers', + 'KeyValueDiffers.extend(factories:KeyValueDifferFactory[]):Provider', + 'KeyValueDiffers.find(kv:Object):KeyValueDifferFactory', + 'NgZone', + 'NgZone.constructor({enableLongStackTrace}:any)', + 'NgZone.hasPendingAsyncTasks:boolean', + 'NgZone.hasPendingMicrotasks:boolean', + 'NgZone.hasPendingTimers:boolean', + 'NgZone.onError:any', + 'NgZone.onEventDone:any', + 'NgZone.onTurnDone:any', + 'NgZone.onTurnStart:any', + 'NgZone.overrideOnErrorHandler(errorHandler:ErrorHandlingFn):any', + 'NgZone.overrideOnEventDone(onEventDoneFn:ZeroArgFunction, opt_waitForAsync:boolean):void', + 'NgZone.overrideOnTurnDone(onTurnDoneHook:ZeroArgFunction):void', + 'NgZone.overrideOnTurnStart(onTurnStartHook:ZeroArgFunction):void', + 'NgZone.run(fn:() => any):any', + 'NgZone.runOutsideAngular(fn:() => any):any', + 'NgZoneError', + 'NgZoneError.constructor(error:any, stackTrace:any)', + 'NoAnnotationError', + 'NoAnnotationError.constructor(typeOrFunc:any, params:any[][])', + 'NoProviderError', + 'NoProviderError.constructor(injector:Injector, key:Key)', + 'OnChanges', + 'OnChanges.ngOnChanges(changes:{[key:string]:SimpleChange}):any', + 'OnDestroy', + 'OnDestroy.ngOnDestroy():any', + 'OnInit', + 'OnInit.ngOnInit():any', + 'OpaqueToken', + 'OpaqueToken.constructor(_desc:string)', + 'OpaqueToken.toString():string', + 'OptionalFactory', + 'OptionalMetadata', + 'OptionalMetadata.toString():string', + 'OutOfBoundsError', + 'OutOfBoundsError.constructor(index:any)', + 'OutputFactory', + 'OutputMetadata', + 'OutputMetadata.constructor(bindingPropertyName:string)', + 'PipeFactory', + 'PipeMetadata', + 'PipeMetadata.constructor({name,pure}:{name:string, pure?:boolean})', + 'PipeMetadata.name:string', + 'PipeMetadata.pure:boolean', + 'PipeTransform', + 'PipeTransform.transform(value:any, args:any[]):any', + 'PlatformRef', + 'PlatformRef.application(providers:Array):ApplicationRef', + 'PlatformRef.asyncApplication(bindingFn:(zone: NgZone) => Promise>, providers:Array):Promise', + 'PlatformRef.dispose():void', + 'PlatformRef.injector:Injector', + 'PlatformRef.registerDisposeListener(dispose:() => void):void', + 'Provider', + 'Provider.constructor(token:any, {useClass,useValue,useExisting,useFactory,deps,multi}:{useClass?:Type, useValue?:any, useExisting?:any, useFactory?:Function, deps?:Object[], multi?:boolean})', + 'Provider.dependencies:Object[]', + 'Provider.multi:boolean', + 'Provider.token:any', + 'Provider.useClass:Type', + 'Provider.useExisting:any', + 'Provider.useFactory:Function', + 'Provider.useValue:any', + 'ProviderBuilder', + 'ProviderBuilder.constructor(token:any)', + 'ProviderBuilder.toAlias(aliasToken:any):Provider', + 'ProviderBuilder.toClass(type:Type):Provider', + 'ProviderBuilder.toFactory(factory:Function, dependencies:any[]):Provider', + 'ProviderBuilder.toValue(value:any):Provider', + 'QueryFactory', + 'QueryList.changes:Observable', + 'QueryList.filter(fn:(item: T) => boolean):T[]', + 'QueryList.first:T', + 'QueryList.last:T', + 'QueryList.length:number', + 'QueryList.map(fn:(item: T) => U):U[]', + 'QueryList.notifyOnChanges():void', + 'QueryList.reduce(fn:(acc: U, item: T) => U, init:U):U', + 'QueryList.reset(res:T[]):void', + 'QueryList.toArray():T[]', + 'QueryList.toString():string', + 'QueryList', + 'QueryMetadata', + 'QueryMetadata.constructor(_selector:Type|string, {descendants=false,first=false}:{descendants?:boolean, first?:boolean})', + 'QueryMetadata.descendants:boolean', + 'QueryMetadata.first:boolean', + 'QueryMetadata.isVarBindingQuery:boolean', + 'QueryMetadata.isViewQuery:boolean', + 'QueryMetadata.selector:any', + 'QueryMetadata.toString():string', + 'QueryMetadata.varBindings:string[]', + 'ReflectionInfo', + 'ReflectionInfo.constructor(annotations:any[], parameters:any[][], factory:Function, interfaces:any[], propMetadata:{[key:string]:any[]})', + 'Reflector', + 'Reflector.annotations(typeOrFunc:any):any[]', + 'Reflector.constructor(reflectionCapabilities:PlatformReflectionCapabilities)', + 'Reflector.factory(type:Type):Function', + 'Reflector.getter(name:string):GetterFn', + 'Reflector.importUri(type:Type):string', + 'Reflector.interfaces(type:Type):any[]', + 'Reflector.isReflectionEnabled():boolean', + 'Reflector.listUnusedKeys():any[]', + 'Reflector.method(name:string):MethodFn', + 'Reflector.parameters(typeOrFunc:any):any[]', + 'Reflector.propMetadata(typeOrFunc:any):{[key:string]:any[]}', + 'Reflector.reflectionCapabilities:PlatformReflectionCapabilities', + 'Reflector.registerFunction(func:Function, funcInfo:ReflectionInfo):void', + 'Reflector.registerGetters(getters:{[key:string]:GetterFn}):void', + 'Reflector.registerMethods(methods:{[key:string]:MethodFn}):void', + 'Reflector.registerSetters(setters:{[key:string]:SetterFn}):void', + 'Reflector.registerType(type:Type, typeInfo:ReflectionInfo):void', + 'Reflector.setter(name:string):SetterFn', + 'Reflector.trackUsage():void', + 'RenderComponentType', + 'RenderComponentType.constructor(id:string, encapsulation:ViewEncapsulation, styles:Array)', + 'Renderer', + 'Renderer.attachViewAfter(node:any, viewRootNodes:any[]):any', + 'Renderer.createElement(parentElement:any, name:string):any', + 'Renderer.createTemplateAnchor(parentElement:any):any', + 'Renderer.createText(parentElement:any, value:string):any', + 'Renderer.createViewRoot(hostElement:any):any', + 'Renderer.destroyView(hostElement:any, viewAllNodes:any[]):any', + 'Renderer.detachView(viewRootNodes:any[]):any', + 'Renderer.invokeElementMethod(renderElement:any, methodName:string, args:any[]):any', + 'Renderer.listen(renderElement:any, name:string, callback:Function):Function', + 'Renderer.listenGlobal(target:string, name:string, callback:Function):Function', + 'Renderer.projectNodes(parentElement:any, nodes:any[]):any', + 'Renderer.renderComponent(componentType:RenderComponentType):Renderer', + 'Renderer.selectRootElement(selector:string):any', + 'Renderer.setBindingDebugInfo(renderElement:any, propertyName:string, propertyValue:string):any', + 'Renderer.setElementAttribute(renderElement:any, attributeName:string, attributeValue:string):any', + 'Renderer.setElementClass(renderElement:any, className:string, isAdd:boolean):any', + 'Renderer.setElementProperty(renderElement:any, propertyName:string, propertyValue:any):any', + 'Renderer.setElementStyle(renderElement:any, styleName:string, styleValue:string):any', + 'Renderer.setText(renderNode:any, text:string):any', + 'ResolvedBinding', + 'ResolvedFactory', + 'ResolvedFactory.constructor(factory:Function, dependencies:Dependency[])', + 'ResolvedProvider', + 'ResolvedProvider.key:Key', + 'ResolvedProvider.multiProvider:boolean', + 'ResolvedProvider.resolvedFactories:ResolvedFactory[]', + 'RootRenderer', + 'RootRenderer.renderComponent(componentType:RenderComponentType):Renderer', + 'Scope', + 'Scope.all(debugElement:DebugElement):DebugElement[]', + 'Scope.light(debugElement:DebugElement):DebugElement[]', + 'Scope.view(debugElement:DebugElement):DebugElement[]', + 'SelfFactory', + 'SelfMetadata', + 'SelfMetadata.toString():string', + 'SimpleChange', + 'SimpleChange.constructor(previousValue:any, currentValue:any)', + 'SimpleChange.isFirstChange():boolean', + 'SkipSelfFactory', + 'SkipSelfMetadata', + 'SkipSelfMetadata.toString():string', + 'TemplateRef', + 'TemplateRef.elementRef:ElementRef', + 'Testability', + 'Testability.constructor(_ngZone:NgZone)', + 'Testability.decreasePendingRequestCount():number', + 'Testability.findBindings(using:any, provider:string, exactMatch:boolean):any[]', + 'Testability.findProviders(using:any, provider:string, exactMatch:boolean):any[]', + 'Testability.getPendingRequestCount():number', + 'Testability.increasePendingRequestCount():number', + 'Testability.isAngularEventPending():boolean', + 'Testability.isStable():boolean', + 'Testability.whenStable(callback:Function):void', + 'TestabilityRegistry', + 'TestabilityRegistry.constructor()', + 'TestabilityRegistry.findTestabilityInTree(elem:Node, findInAncestors:boolean):Testability', + 'TestabilityRegistry.getAllTestabilities():Testability[]', + 'TestabilityRegistry.getTestability(elem:any):Testability', + 'TestabilityRegistry.registerApplication(token:any, testability:Testability):any', + 'TypeDecorator', + 'TypeDecorator.Class(obj:ClassDefinition):ConcreteType', + 'TypeDecorator.annotations:any[]', + 'TypeLiteral', + 'TypeLiteral.type:any', + 'ViewChildFactory', + 'ViewChildMetadata', + 'ViewChildMetadata.constructor(_selector:Type|string)', + 'ViewChildrenFactory', + 'ViewChildrenMetadata', + 'ViewChildrenMetadata.constructor(_selector:Type|string)', + 'ViewContainerRef', + 'ViewContainerRef.clear():void', + 'ViewContainerRef.createEmbeddedView(templateRef:TemplateRef, index:number):EmbeddedViewRef', + 'ViewContainerRef.createHostView(hostViewFactoryRef:HostViewFactoryRef, index:number, dynamicallyCreatedProviders:ResolvedProvider[], projectableNodes:any[][]):HostViewRef', + 'ViewContainerRef.detach(index:number):EmbeddedViewRef', + 'ViewContainerRef.element:ElementRef', + 'ViewContainerRef.get(index:number):ViewRef', + 'ViewContainerRef.indexOf(viewRef:ViewRef):number', + 'ViewContainerRef.insert(viewRef:EmbeddedViewRef, index:number):EmbeddedViewRef', + 'ViewContainerRef.length:number', + 'ViewContainerRef.remove(index:number):void', + 'ViewDecorator', + 'ViewDecorator.View(obj:{templateUrl?:string, template?:string, directives?:Array, pipes?:Array, renderer?:string, styles?:string[], styleUrls?:string[]}):ViewDecorator', + 'ViewEncapsulation', + 'ViewEncapsulation.Emulated', + 'ViewEncapsulation.Native', + 'ViewEncapsulation.None', + 'ViewFactory', + 'ViewMetadata', + 'ViewMetadata.constructor({templateUrl,template,directives,pipes,encapsulation,styles,styleUrls}:{templateUrl?:string, template?:string, directives?:Array, pipes?:Array, encapsulation?:ViewEncapsulation, styles?:string[], styleUrls?:string[]})', + 'ViewMetadata.directives:Array', + 'ViewMetadata.encapsulation:ViewEncapsulation', + 'ViewMetadata.pipes:Array', + 'ViewMetadata.styleUrls:string[]', + 'ViewMetadata.styles:string[]', + 'ViewMetadata.template:string', + 'ViewMetadata.templateUrl:string', + 'ViewQueryMetadata', + 'ViewQueryMetadata.constructor(_selector:Type|string, {descendants=false,first=false}:{descendants?:boolean, first?:boolean})', + 'ViewQueryMetadata.isViewQuery:any', + 'ViewQueryMetadata.toString():string', + 'ViewRef', + 'ViewRef.changeDetectorRef:ChangeDetectorRef', + 'ViewRef.destroyed:boolean', + 'ViewResolver', + 'ViewResolver.resolve(component:Type):ViewMetadata', + 'WrappedException', + 'WrappedException.constructor(_wrapperMessage:string, _originalException:any, _originalStack:any, _context:any)', + 'WrappedException.context:any', + 'WrappedException.message:string', + 'WrappedException.originalException:any', + 'WrappedException.originalStack:any', + 'WrappedException.toString():string', + 'WrappedException.wrapperMessage:string', + 'WrappedException.wrapperStack:any', + 'WrappedValue', + 'WrappedValue.constructor(wrapped:any)', + 'WrappedValue.wrap(value:any):WrappedValue', + 'ZeroArgFunction', + 'asNativeElements(arr:DebugElement[]):any[]', + 'bind(token:any):ProviderBuilder', + 'const APPLICATION_COMMON_PROVIDERS:Array', + 'const APP_COMPONENT:OpaqueToken', + 'const APP_ID:OpaqueToken', + 'const APP_INITIALIZER:OpaqueToken', + 'const PACKAGE_ROOT_URL:OpaqueToken', + 'const PLATFORM_COMMON_PROVIDERS:Array', + 'const PLATFORM_DIRECTIVES:OpaqueToken', + 'const PLATFORM_INITIALIZER:OpaqueToken', + 'const PLATFORM_PIPES:OpaqueToken', + 'createNgZone():NgZone', + 'enableProdMode():any', + 'forwardRef(forwardRefFn:ForwardRefFn):Type', + 'inspectElement(elementRef:ElementRef):DebugElement', + 'platform(providers:Array):PlatformRef', + 'provide(token:any, {useClass,useValue,useExisting,useFactory,deps,multi}:{useClass?:Type, useValue?:any, useExisting?:any, useFactory?:Function, deps?:Object[], multi?:boolean}):Provider', + 'resolveForwardRef(type:any):any', + 'setTestabilityGetter(getter:GetTestability):void', + 'var Attribute:AttributeFactory', + 'var Component:ComponentFactory', + 'var ContentChild:ContentChildFactory', + 'var ContentChildren:ContentChildrenFactory', + 'var Directive:DirectiveFactory', + 'var Host:HostFactory', + 'var HostBinding:HostBindingFactory', + 'var HostListener:HostListenerFactory', + 'var Inject:InjectFactory', + 'var Injectable:InjectableFactory', + 'var Input:InputFactory', + 'var Optional:OptionalFactory', + 'var Output:OutputFactory', + 'var Pipe:PipeFactory', + 'var Query:QueryFactory', + 'var Self:SelfFactory', + 'var SkipSelf:SkipSelfFactory', + 'var Type:any', + 'var View:ViewFactory', + 'var ViewChild:ViewChildFactory', + 'var ViewChildren:ViewChildrenFactory', + 'var ViewQuery:QueryFactory', + 'var reflector:any' +]; + +const COMMON = [ + 'AbstractControl', + 'AbstractControl.constructor(validator:Function, asyncValidator:Function)', + 'AbstractControl.dirty:boolean', + 'AbstractControl.errors:{[key:string]:any}', + 'AbstractControl.find(path:Array|string):AbstractControl', + 'AbstractControl.getError(errorCode:string, path:string[]):any', + 'AbstractControl.hasError(errorCode:string, path:string[]):boolean', + 'AbstractControl.markAsDirty({onlySelf}:{onlySelf?:boolean}):void', + 'AbstractControl.markAsPending({onlySelf}:{onlySelf?:boolean}):void', + 'AbstractControl.markAsTouched():void', + 'AbstractControl.pending:boolean', + 'AbstractControl.pristine:boolean', + 'AbstractControl.setErrors(errors:{[key:string]:any}, {emitEvent}:{emitEvent?:boolean}):void', + 'AbstractControl.setParent(parent:ControlGroup|ControlArray):void', + 'AbstractControl.status:string', + 'AbstractControl.statusChanges:Observable', + 'AbstractControl.touched:boolean', + 'AbstractControl.untouched:boolean', + 'AbstractControl.updateValueAndValidity({onlySelf,emitEvent}:{onlySelf?:boolean, emitEvent?:boolean}):void', + 'AbstractControl.valid:boolean', + 'AbstractControl.value:any', + 'AbstractControl.valueChanges:Observable', + 'AbstractControlDirective', + 'AbstractControlDirective.control:AbstractControl', + 'AbstractControlDirective.dirty:boolean', + 'AbstractControlDirective.errors:{[key:string]:any}', + 'AbstractControlDirective.path:string[]', + 'AbstractControlDirective.pristine:boolean', + 'AbstractControlDirective.touched:boolean', + 'AbstractControlDirective.untouched:boolean', + 'AbstractControlDirective.valid:boolean', + 'AbstractControlDirective.value:any', + 'AsyncPipe', + 'AsyncPipe.constructor(_ref:ChangeDetectorRef)', + 'AsyncPipe.ngOnDestroy():void', + 'AsyncPipe.transform(obj:Observable|Promise|EventEmitter, args:any[]):any', + 'CheckboxControlValueAccessor', + 'CheckboxControlValueAccessor.constructor(_renderer:Renderer, _elementRef:ElementRef)', + 'CheckboxControlValueAccessor.onChange:any', + 'CheckboxControlValueAccessor.onTouched:any', + 'CheckboxControlValueAccessor.registerOnChange(fn:(_: any) => {}):void', + 'CheckboxControlValueAccessor.registerOnTouched(fn:() => {}):void', + 'CheckboxControlValueAccessor.writeValue(value:any):void', + 'Control', + 'Control.constructor(value:any, validator:Function, asyncValidator:Function)', + 'Control.registerOnChange(fn:Function):void', + 'Control.updateValue(value:any, {onlySelf,emitEvent,emitModelToViewChange}:{onlySelf?:boolean, emitEvent?:boolean, emitModelToViewChange?:boolean}):void', + 'ControlArray', + 'ControlArray.at(index:number):AbstractControl', + 'ControlArray.constructor(controls:AbstractControl[], validator:Function, asyncValidator:Function)', + 'ControlArray.insert(index:number, control:AbstractControl):void', + 'ControlArray.length:number', + 'ControlArray.push(control:AbstractControl):void', + 'ControlArray.removeAt(index:number):void', + 'ControlContainer', + 'ControlContainer.formDirective:Form', + 'ControlContainer.name:string', + 'ControlContainer.path:string[]', + 'ControlGroup', + 'ControlGroup.addControl(name:string, control:AbstractControl):void', + 'ControlGroup.constructor(controls:{[key:string]:AbstractControl}, optionals:{[key:string]:boolean}, validator:Function, asyncValidator:Function)', + 'ControlGroup.contains(controlName:string):boolean', + 'ControlGroup.exclude(controlName:string):void', + 'ControlGroup.include(controlName:string):void', + 'ControlGroup.removeControl(name:string):void', + 'ControlValueAccessor', + 'ControlValueAccessor.registerOnChange(fn:any):void', + 'ControlValueAccessor.registerOnTouched(fn:any):void', + 'ControlValueAccessor.writeValue(obj:any):void', + 'CurrencyPipe', + 'CurrencyPipe.transform(value:any, args:any[]):string', + 'DatePipe', + 'DatePipe.supports(obj:any):boolean', + 'DatePipe.transform(value:any, args:any[]):string', + 'DecimalPipe', + 'DecimalPipe.transform(value:any, args:any[]):string', + 'DefaultValueAccessor', + 'DefaultValueAccessor.constructor(_renderer:Renderer, _elementRef:ElementRef)', + 'DefaultValueAccessor.onChange:any', + 'DefaultValueAccessor.onTouched:any', + 'DefaultValueAccessor.registerOnChange(fn:(_: any) => void):void', + 'DefaultValueAccessor.registerOnTouched(fn:() => void):void', + 'DefaultValueAccessor.writeValue(value:any):void', + 'Form', + 'Form.addControl(dir:NgControl):void', + 'Form.addControlGroup(dir:NgControlGroup):void', + 'Form.getControl(dir:NgControl):Control', + 'Form.getControlGroup(dir:NgControlGroup):ControlGroup', + 'Form.removeControl(dir:NgControl):void', + 'Form.removeControlGroup(dir:NgControlGroup):void', + 'Form.updateModel(dir:NgControl, value:any):void', + 'FormBuilder', + 'FormBuilder.array(controlsConfig:any[], validator:Function, asyncValidator:Function):ControlArray', + 'FormBuilder.control(value:Object, validator:Function, asyncValidator:Function):Control', + 'FormBuilder.group(controlsConfig:{[key:string]:any}, extra:{[key:string]:any}):ControlGroup', + 'JsonPipe', + 'JsonPipe.transform(value:any, args:any[]):string', + 'LowerCasePipe', + 'LowerCasePipe.transform(value:string, args:any[]):string', + 'MaxLengthValidator', + 'MaxLengthValidator.constructor(maxLength:string)', + 'MaxLengthValidator.validate(c:Control):{[key:string]:any}', + 'MinLengthValidator', + 'MinLengthValidator.constructor(minLength:string)', + 'MinLengthValidator.validate(c:Control):{[key:string]:any}', + 'NgClass', + 'NgClass.constructor(_iterableDiffers:IterableDiffers, _keyValueDiffers:KeyValueDiffers, _ngEl:ElementRef, _renderer:Renderer)', + 'NgClass.initialClasses=(v:any)', + 'NgClass.ngDoCheck():void', + 'NgClass.ngOnDestroy():void', + 'NgClass.rawClass=(v:any)', + 'NgControl', + 'NgControl.asyncValidator:Function', + 'NgControl.name:string', + 'NgControl.validator:Function', + 'NgControl.valueAccessor:ControlValueAccessor', + 'NgControl.viewToModelUpdate(newValue:any):void', + 'NgControlGroup', + 'NgControlGroup.asyncValidator:Function', + 'NgControlGroup.constructor(parent:ControlContainer, _validators:any[], _asyncValidators:any[])', + 'NgControlGroup.control:ControlGroup', + 'NgControlGroup.formDirective:Form', + 'NgControlGroup.ngOnDestroy():void', + 'NgControlGroup.ngOnInit():void', + 'NgControlGroup.path:string[]', + 'NgControlGroup.validator:Function', + 'NgControlName', + 'NgControlName.asyncValidator:Function', + 'NgControlName.constructor(_parent:ControlContainer, _validators:any[], _asyncValidators:any[], valueAccessors:ControlValueAccessor[])', + 'NgControlName.control:Control', + 'NgControlName.formDirective:any', + 'NgControlName.model:any', + 'NgControlName.ngOnChanges(changes:{[key:string]:SimpleChange}):any', + 'NgControlName.ngOnDestroy():void', + 'NgControlName.path:string[]', + 'NgControlName.update:any', + 'NgControlName.validator:Function', + 'NgControlName.viewModel:any', + 'NgControlName.viewToModelUpdate(newValue:any):void', + 'NgControlStatus', + 'NgControlStatus.constructor(cd:NgControl)', + 'NgControlStatus.ngClassDirty:boolean', + 'NgControlStatus.ngClassInvalid:boolean', + 'NgControlStatus.ngClassPristine:boolean', + 'NgControlStatus.ngClassTouched:boolean', + 'NgControlStatus.ngClassUntouched:boolean', + 'NgControlStatus.ngClassValid:boolean', + 'NgFor', + 'NgFor.constructor(_viewContainer:ViewContainerRef, _templateRef:TemplateRef, _iterableDiffers:IterableDiffers, _cdr:ChangeDetectorRef)', + 'NgFor.ngDoCheck():any', + 'NgFor.ngForOf=(value:any)', + 'NgFor.ngForTemplate=(value:TemplateRef)', + 'NgForm', + 'NgForm.addControl(dir:NgControl):void', + 'NgForm.addControlGroup(dir:NgControlGroup):void', + 'NgForm.constructor(validators:any[], asyncValidators:any[])', + 'NgForm.control:ControlGroup', + 'NgForm.controls:{[key:string]:AbstractControl}', + 'NgForm.form:ControlGroup', + 'NgForm.formDirective:Form', + 'NgForm.getControl(dir:NgControl):Control', + 'NgForm.getControlGroup(dir:NgControlGroup):ControlGroup', + 'NgForm.ngSubmit:any', + 'NgForm.onSubmit():boolean', + 'NgForm.path:string[]', + 'NgForm.removeControl(dir:NgControl):void', + 'NgForm.removeControlGroup(dir:NgControlGroup):void', + 'NgForm.updateModel(dir:NgControl, value:any):void', + 'NgFormControl', + 'NgFormControl.asyncValidator:Function', + 'NgFormControl.constructor(_validators:any[], _asyncValidators:any[], valueAccessors:ControlValueAccessor[])', + 'NgFormControl.control:Control', + 'NgFormControl.form:Control', + 'NgFormControl.model:any', + 'NgFormControl.ngOnChanges(changes:{[key:string]:SimpleChange}):void', + 'NgFormControl.path:string[]', + 'NgFormControl.update:any', + 'NgFormControl.validator:Function', + 'NgFormControl.viewModel:any', + 'NgFormControl.viewToModelUpdate(newValue:any):void', + 'NgFormModel', + 'NgFormModel.addControl(dir:NgControl):void', + 'NgFormModel.addControlGroup(dir:NgControlGroup):any', + 'NgFormModel.constructor(_validators:any[], _asyncValidators:any[])', + 'NgFormModel.control:ControlGroup', + 'NgFormModel.directives:NgControl[]', + 'NgFormModel.form:ControlGroup', + 'NgFormModel.formDirective:Form', + 'NgFormModel.getControl(dir:NgControl):Control', + 'NgFormModel.getControlGroup(dir:NgControlGroup):ControlGroup', + 'NgFormModel.ngOnChanges(changes:{[key:string]:SimpleChange}):void', + 'NgFormModel.ngSubmit:any', + 'NgFormModel.onSubmit():boolean', + 'NgFormModel.path:string[]', + 'NgFormModel.removeControl(dir:NgControl):void', + 'NgFormModel.removeControlGroup(dir:NgControlGroup):any', + 'NgFormModel.updateModel(dir:NgControl, value:any):void', + 'NgIf', + 'NgIf.constructor(_viewContainer:ViewContainerRef, _templateRef:TemplateRef)', + 'NgIf.ngIf=(newCondition:any)', + 'NgModel', + 'NgModel.asyncValidator:Function', + 'NgModel.constructor(_validators:any[], _asyncValidators:any[], valueAccessors:ControlValueAccessor[])', + 'NgModel.control:Control', + 'NgModel.model:any', + 'NgModel.ngOnChanges(changes:{[key:string]:SimpleChange}):any', + 'NgModel.path:string[]', + 'NgModel.update:any', + 'NgModel.validator:Function', + 'NgModel.viewModel:any', + 'NgModel.viewToModelUpdate(newValue:any):void', + 'NgSelectOption', + 'NgStyle', + 'NgStyle.constructor(_differs:KeyValueDiffers, _ngEl:ElementRef, _renderer:Renderer)', + 'NgStyle.ngDoCheck():any', + 'NgStyle.rawStyle=(v:any)', + 'NgSwitch', + 'NgSwitch.ngSwitch=(value:any)', + 'NgSwitchDefault', + 'NgSwitchDefault.constructor(viewContainer:ViewContainerRef, templateRef:TemplateRef, sswitch:NgSwitch)', + 'NgSwitchWhen', + 'NgSwitchWhen.constructor(viewContainer:ViewContainerRef, templateRef:TemplateRef, ngSwitch:NgSwitch)', + 'NgSwitchWhen.ngSwitchWhen=(value:any)', + 'NumberPipe', + 'PercentPipe', + 'PercentPipe.transform(value:any, args:any[]):string', + 'RequiredValidator', + 'SelectControlValueAccessor', + 'SelectControlValueAccessor.constructor(_renderer:Renderer, _elementRef:ElementRef, query:QueryList)', + 'SelectControlValueAccessor.onChange:any', + 'SelectControlValueAccessor.onTouched:any', + 'SelectControlValueAccessor.registerOnChange(fn:() => any):void', + 'SelectControlValueAccessor.registerOnTouched(fn:() => any):void', + 'SelectControlValueAccessor.value:string', + 'SelectControlValueAccessor.writeValue(value:any):void', + 'SlicePipe', + 'SlicePipe.transform(value:any, args:any[]):any', + 'UpperCasePipe', + 'UpperCasePipe.transform(value:string, args:any[]):string', + 'Validator', + 'Validator.validate(c:Control):{[key:string]:any}', + 'Validators', + 'Validators.compose(validators:Function[]):Function', + 'Validators.composeAsync(validators:Function[]):Function', + 'Validators.maxLength(maxLength:number):Function', + 'Validators.minLength(minLength:number):Function', + 'Validators.nullValidator(c:any):{[key:string]:boolean}', + 'Validators.required(control:Control):{[key:string]:boolean}', + 'const COMMON_DIRECTIVES:Type[][]', + 'const COMMON_PIPES:any', + 'const CORE_DIRECTIVES:Type[]', + 'const FORM_BINDINGS:any', + 'const FORM_DIRECTIVES:Type[]', + 'const FORM_PROVIDERS:Type[]', + 'const NG_ASYNC_VALIDATORS:OpaqueToken', + 'const NG_VALIDATORS:OpaqueToken', + 'const NG_VALUE_ACCESSOR:OpaqueToken', + 'var workaround_empty_observable_list_diff:any' +]; + +const COMPILER = [ + 'AttrAst', + 'AttrAst.constructor(name:string, value:string, sourceSpan:ParseSourceSpan)', + 'AttrAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'BoundDirectivePropertyAst', + 'BoundDirectivePropertyAst.constructor(directiveName:string, templateName:string, value:AST, sourceSpan:ParseSourceSpan)', + 'BoundDirectivePropertyAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'BoundElementPropertyAst', + 'BoundElementPropertyAst.constructor(name:string, type:PropertyBindingType, value:AST, unit:string, sourceSpan:ParseSourceSpan)', + 'BoundElementPropertyAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'BoundEventAst', + 'BoundEventAst.constructor(name:string, target:string, handler:AST, sourceSpan:ParseSourceSpan)', + 'BoundEventAst.fullName:any', + 'BoundEventAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'BoundTextAst', + 'BoundTextAst.constructor(value:AST, ngContentIndex:number, sourceSpan:ParseSourceSpan)', + 'BoundTextAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'CompileDirectiveMetadata', + 'CompileDirectiveMetadata.changeDetection:ChangeDetectionStrategy', + 'CompileDirectiveMetadata.constructor({type,isComponent,dynamicLoadable,selector,exportAs,changeDetection,inputs,outputs,hostListeners,hostProperties,hostAttributes,lifecycleHooks,template}:{type?:CompileTypeMetadata, isComponent?:boolean, dynamicLoadable?:boolean, selector?:string, exportAs?:string, changeDetection?:ChangeDetectionStrategy, inputs?:{[key:string]:string}, outputs?:{[key:string]:string}, hostListeners?:{[key:string]:string}, hostProperties?:{[key:string]:string}, hostAttributes?:{[key:string]:string}, lifecycleHooks?:LifecycleHooks[], template?:CompileTemplateMetadata})', + 'CompileDirectiveMetadata.create({type,isComponent,dynamicLoadable,selector,exportAs,changeDetection,inputs,outputs,host,lifecycleHooks,template}:{type?:CompileTypeMetadata, isComponent?:boolean, dynamicLoadable?:boolean, selector?:string, exportAs?:string, changeDetection?:ChangeDetectionStrategy, inputs?:string[], outputs?:string[], host?:{[key:string]:string}, lifecycleHooks?:LifecycleHooks[], template?:CompileTemplateMetadata}):CompileDirectiveMetadata', + 'CompileDirectiveMetadata.dynamicLoadable:boolean', + 'CompileDirectiveMetadata.exportAs:string', + 'CompileDirectiveMetadata.fromJson(data:{[key:string]:any}):CompileDirectiveMetadata', + 'CompileDirectiveMetadata.hostAttributes:{[key:string]:string}', + 'CompileDirectiveMetadata.hostListeners:{[key:string]:string}', + 'CompileDirectiveMetadata.hostProperties:{[key:string]:string}', + 'CompileDirectiveMetadata.inputs:{[key:string]:string}', + 'CompileDirectiveMetadata.isComponent:boolean', + 'CompileDirectiveMetadata.lifecycleHooks:LifecycleHooks[]', + 'CompileDirectiveMetadata.outputs:{[key:string]:string}', + 'CompileDirectiveMetadata.selector:string', + 'CompileDirectiveMetadata.template:CompileTemplateMetadata', + 'CompileDirectiveMetadata.toJson():{[key:string]:any}', + 'CompileDirectiveMetadata.type:CompileTypeMetadata', + 'CompileTemplateMetadata', + 'CompileTemplateMetadata.constructor({encapsulation,template,templateUrl,styles,styleUrls,ngContentSelectors}:{encapsulation?:ViewEncapsulation, template?:string, templateUrl?:string, styles?:string[], styleUrls?:string[], ngContentSelectors?:string[]})', + 'CompileTemplateMetadata.encapsulation:ViewEncapsulation', + 'CompileTemplateMetadata.fromJson(data:{[key:string]:any}):CompileTemplateMetadata', + 'CompileTemplateMetadata.ngContentSelectors:string[]', + 'CompileTemplateMetadata.styleUrls:string[]', + 'CompileTemplateMetadata.styles:string[]', + 'CompileTemplateMetadata.template:string', + 'CompileTemplateMetadata.templateUrl:string', + 'CompileTemplateMetadata.toJson():{[key:string]:any}', + 'CompileTypeMetadata', + 'CompileTypeMetadata.constructor({runtime,name,moduleUrl,isHost}:{runtime?:Type, name?:string, moduleUrl?:string, isHost?:boolean})', + 'CompileTypeMetadata.fromJson(data:{[key:string]:any}):CompileTypeMetadata', + 'CompileTypeMetadata.isHost:boolean', + 'CompileTypeMetadata.moduleUrl:string', + 'CompileTypeMetadata.name:string', + 'CompileTypeMetadata.runtime:Type', + 'CompileTypeMetadata.toJson():{[key:string]:any}', + 'DirectiveAst', + 'DirectiveAst.constructor(directive:CompileDirectiveMetadata, inputs:BoundDirectivePropertyAst[], hostProperties:BoundElementPropertyAst[], hostEvents:BoundEventAst[], exportAsVars:VariableAst[], sourceSpan:ParseSourceSpan)', + 'DirectiveAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'ElementAst', + 'ElementAst.constructor(name:string, attrs:AttrAst[], inputs:BoundElementPropertyAst[], outputs:BoundEventAst[], exportAsVars:VariableAst[], directives:DirectiveAst[], children:TemplateAst[], ngContentIndex:number, sourceSpan:ParseSourceSpan)', + 'ElementAst.getComponent():CompileDirectiveMetadata', + 'ElementAst.isBound():boolean', + 'ElementAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'EmbeddedTemplateAst', + 'EmbeddedTemplateAst.constructor(attrs:AttrAst[], outputs:BoundEventAst[], vars:VariableAst[], directives:DirectiveAst[], children:TemplateAst[], ngContentIndex:number, sourceSpan:ParseSourceSpan)', + 'EmbeddedTemplateAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'NgContentAst', + 'NgContentAst.constructor(index:number, ngContentIndex:number, sourceSpan:ParseSourceSpan)', + 'NgContentAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'PropertyBindingType', + 'PropertyBindingType.Attribute', + 'PropertyBindingType.Class', + 'PropertyBindingType.Property', + 'PropertyBindingType.Style', + 'SourceModule', + 'SourceModule.constructor(moduleUrl:string, sourceWithModuleRefs:string)', + 'SourceModule.getSourceWithImports():SourceWithImports', + 'SourceModule.getSourceWithoutImports(sourceWithModuleRefs:string):string', + 'SourceWithImports', + 'SourceWithImports.constructor(source:string, imports:string[][])', + 'TemplateAst', + 'TemplateAst.sourceSpan:ParseSourceSpan', + 'TemplateAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'TemplateAstVisitor', + 'TemplateAstVisitor.visitAttr(ast:AttrAst, context:any):any', + 'TemplateAstVisitor.visitBoundText(ast:BoundTextAst, context:any):any', + 'TemplateAstVisitor.visitDirective(ast:DirectiveAst, context:any):any', + 'TemplateAstVisitor.visitDirectiveProperty(ast:BoundDirectivePropertyAst, context:any):any', + 'TemplateAstVisitor.visitElement(ast:ElementAst, context:any):any', + 'TemplateAstVisitor.visitElementProperty(ast:BoundElementPropertyAst, context:any):any', + 'TemplateAstVisitor.visitEmbeddedTemplate(ast:EmbeddedTemplateAst, context:any):any', + 'TemplateAstVisitor.visitEvent(ast:BoundEventAst, context:any):any', + 'TemplateAstVisitor.visitNgContent(ast:NgContentAst, context:any):any', + 'TemplateAstVisitor.visitText(ast:TextAst, context:any):any', + 'TemplateAstVisitor.visitVariable(ast:VariableAst, context:any):any', + 'TemplateCompiler', + 'TemplateCompiler.clearCache():any', + 'TemplateCompiler.compileHostComponentRuntime(type:Type):Promise', + 'TemplateCompiler.compileStylesheetCodeGen(stylesheetUrl:string, cssText:string):SourceModule[]', + 'TemplateCompiler.compileTemplatesCodeGen(components:NormalizedComponentWithViewDirectives[]):SourceModule', + 'TemplateCompiler.constructor(_runtimeMetadataResolver:RuntimeMetadataResolver, _templateNormalizer:TemplateNormalizer, _templateParser:TemplateParser, _styleCompiler:StyleCompiler, _cdCompiler:ChangeDetectionCompiler, _protoViewCompiler:ProtoViewCompiler, _viewCompiler:ViewCompiler, _resolvedMetadataCache:ResolvedMetadataCache, _genConfig:ChangeDetectorGenConfig)', + 'TemplateCompiler.normalizeDirectiveMetadata(directive:CompileDirectiveMetadata):Promise', + 'TextAst', + 'TextAst.constructor(value:string, ngContentIndex:number, sourceSpan:ParseSourceSpan)', + 'TextAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'UrlResolver', + 'UrlResolver.constructor(packagePrefix:string)', + 'UrlResolver.resolve(baseUrl:string, url:string):string', + 'VariableAst', + 'VariableAst.constructor(name:string, value:string, sourceSpan:ParseSourceSpan)', + 'VariableAst.visit(visitor:TemplateAstVisitor, context:any):any', + 'XHR', + 'XHR.get(url:string):Promise', + 'const COMPILER_PROVIDERS:Array', + 'const PLATFORM_DIRECTIVES:OpaqueToken', + 'const PLATFORM_PIPES:OpaqueToken', + 'const TEMPLATE_TRANSFORMS:any', + 'createWithoutPackagePrefix():UrlResolver', + 'getUrlScheme(url:string):string', + 'templateVisitAll(visitor:TemplateAstVisitor, asts:TemplateAst[], context:any):any[]', + 'var DEFAULT_PACKAGE_URL_PROVIDER:any' +]; + +const INSTRUMENTATION = [ + 'WtfScopeFn', + 'var wtfCreateScope:(signature: string, flags?: any) => impl.WtfScopeFn', + 'var wtfEndTimeRange:(range: any) => void', + 'var wtfLeave:(scope: any, returnValue?: T) => T', + 'var wtfStartTimeRange:(rangeType: string, action: string) => any' +]; + +const UPGRADE = [ + 'UpgradeAdapter', + 'UpgradeAdapter.addProvider(provider:Type|Provider|any[]):void', + 'UpgradeAdapter.bootstrap(element:Element, modules:any[], config:IAngularBootstrapConfig):UpgradeAdapterRef', + 'UpgradeAdapter.downgradeNg2Component(type:Type):Function', + 'UpgradeAdapter.downgradeNg2Provider(token:any):Function', + 'UpgradeAdapter.upgradeNg1Component(name:string):Type', + 'UpgradeAdapter.upgradeNg1Provider(name:string, options:{asToken:any}):any', + 'UpgradeAdapterRef', + 'UpgradeAdapterRef.dispose():any', + 'UpgradeAdapterRef.ng1Injector:IInjectorService', + 'UpgradeAdapterRef.ng1RootScope:IRootScopeService', + 'UpgradeAdapterRef.ng2ApplicationRef:ApplicationRef', + 'UpgradeAdapterRef.ng2Injector:Injector', + 'UpgradeAdapterRef.ready(fn:(upgradeAdapterRef?: UpgradeAdapterRef) => void):any' +]; + +const BROWSER = [ + 'AngularEntrypoint', + 'AngularEntrypoint.constructor(name:String)', + 'BrowserDomAdapter', + 'BrowserDomAdapter.addClass(element:any, className:string):any', + 'BrowserDomAdapter.adoptNode(node:Node):any', + 'BrowserDomAdapter.appendChild(el:any, node:any):any', + 'BrowserDomAdapter.attrToPropMap:any', + 'BrowserDomAdapter.attributeMap(element:any):Map', + 'BrowserDomAdapter.cancelAnimationFrame(id:number):any', + 'BrowserDomAdapter.childNodes(el:any):Node[]', + 'BrowserDomAdapter.childNodesAsList(el:any):any[]', + 'BrowserDomAdapter.classList(element:any):any[]', + 'BrowserDomAdapter.clearNodes(el:any):any', + 'BrowserDomAdapter.clone(node:Node):Node', + 'BrowserDomAdapter.content(node:Node):Node', + 'BrowserDomAdapter.createComment(text:string):Comment', + 'BrowserDomAdapter.createElement(tagName:any, doc:any):HTMLElement', + 'BrowserDomAdapter.createElementNS(ns:any, tagName:any, doc:any):Element', + 'BrowserDomAdapter.createEvent(eventType:any):Event', + 'BrowserDomAdapter.createHtmlDocument():HTMLDocument', + 'BrowserDomAdapter.createMouseEvent(eventType:string):MouseEvent', + 'BrowserDomAdapter.createScriptTag(attrName:string, attrValue:string, doc:any):HTMLScriptElement', + 'BrowserDomAdapter.createShadowRoot(el:HTMLElement):DocumentFragment', + 'BrowserDomAdapter.createStyleElement(css:string, doc:any):HTMLStyleElement', + 'BrowserDomAdapter.createTemplate(html:any):HTMLElement', + 'BrowserDomAdapter.createTextNode(text:string, doc:any):Text', + 'BrowserDomAdapter.defaultDoc():HTMLDocument', + 'BrowserDomAdapter.dispatchEvent(el:any, evt:any):any', + 'BrowserDomAdapter.elementMatches(n:any, selector:string):boolean', + 'BrowserDomAdapter.firstChild(el:any):Node', + 'BrowserDomAdapter.getAttribute(element:any, attribute:string):string', + 'BrowserDomAdapter.getBaseHref():string', + 'BrowserDomAdapter.getBoundingClientRect(el:any):any', + 'BrowserDomAdapter.getChecked(el:any):boolean', + 'BrowserDomAdapter.getComputedStyle(element:any):any', + 'BrowserDomAdapter.getData(element:any, name:string):string', + 'BrowserDomAdapter.getElementsByClassName(element:any, name:string):HTMLElement[]', + 'BrowserDomAdapter.getElementsByTagName(element:any, name:string):HTMLElement[]', + 'BrowserDomAdapter.getEventKey(event:any):string', + 'BrowserDomAdapter.getGlobalEventTarget(target:string):EventTarget', + 'BrowserDomAdapter.getHistory():History', + 'BrowserDomAdapter.getHost(el:HTMLElement):HTMLElement', + 'BrowserDomAdapter.getHref(el:Element):string', + 'BrowserDomAdapter.getInnerHTML(el:any):string', + 'BrowserDomAdapter.getLocation():Location', + 'BrowserDomAdapter.getOuterHTML(el:any):string', + 'BrowserDomAdapter.getProperty(el:any, name:string):any', + 'BrowserDomAdapter.getShadowRoot(el:HTMLElement):DocumentFragment', + 'BrowserDomAdapter.getStyle(element:any, stylename:string):string', + 'BrowserDomAdapter.getText(el:any):string', + 'BrowserDomAdapter.getTitle():string', + 'BrowserDomAdapter.getUserAgent():string', + 'BrowserDomAdapter.getValue(el:any):string', + 'BrowserDomAdapter.hasAttribute(element:any, attribute:string):boolean', + 'BrowserDomAdapter.hasClass(element:any, className:string):boolean', + 'BrowserDomAdapter.hasProperty(element:any, name:string):boolean', + 'BrowserDomAdapter.hasShadowRoot(node:any):boolean', + 'BrowserDomAdapter.hasStyle(element:any, styleName:string, styleValue:string):boolean', + 'BrowserDomAdapter.importIntoDoc(node:Node):any', + 'BrowserDomAdapter.insertAfter(el:any, node:any):any', + 'BrowserDomAdapter.insertAllBefore(el:any, nodes:any):any', + 'BrowserDomAdapter.insertBefore(el:any, node:any):any', + 'BrowserDomAdapter.invoke(el:any, methodName:string, args:any[]):any', + 'BrowserDomAdapter.isCommentNode(node:Node):boolean', + 'BrowserDomAdapter.isElementNode(node:Node):boolean', + 'BrowserDomAdapter.isPrevented(evt:Event):boolean', + 'BrowserDomAdapter.isShadowRoot(node:any):boolean', + 'BrowserDomAdapter.isTemplateElement(el:any):boolean', + 'BrowserDomAdapter.isTextNode(node:Node):boolean', + 'BrowserDomAdapter.log(error:any):any', + 'BrowserDomAdapter.logError(error:any):any', + 'BrowserDomAdapter.logGroup(error:any):any', + 'BrowserDomAdapter.logGroupEnd():any', + 'BrowserDomAdapter.makeCurrent():any', + 'BrowserDomAdapter.nextSibling(el:any):Node', + 'BrowserDomAdapter.nodeName(node:Node):string', + 'BrowserDomAdapter.nodeValue(node:Node):string', + 'BrowserDomAdapter.on(el:any, evt:any, listener:any):any', + 'BrowserDomAdapter.onAndCancel(el:any, evt:any, listener:any):Function', + 'BrowserDomAdapter.parentElement(el:any):Node', + 'BrowserDomAdapter.parse(templateHtml:string):any', + 'BrowserDomAdapter.performanceNow():number', + 'BrowserDomAdapter.preventDefault(evt:Event):any', + 'BrowserDomAdapter.query(selector:string):any', + 'BrowserDomAdapter.querySelector(el:any, selector:string):HTMLElement', + 'BrowserDomAdapter.querySelectorAll(el:any, selector:string):any[]', + 'BrowserDomAdapter.remove(node:any):Node', + 'BrowserDomAdapter.removeAttribute(element:any, attribute:string):any', + 'BrowserDomAdapter.removeChild(el:any, node:any):any', + 'BrowserDomAdapter.removeClass(element:any, className:string):any', + 'BrowserDomAdapter.removeStyle(element:any, stylename:string):any', + 'BrowserDomAdapter.replaceChild(el:Node, newChild:any, oldChild:any):any', + 'BrowserDomAdapter.requestAnimationFrame(callback:any):number', + 'BrowserDomAdapter.resetBaseElement():void', + 'BrowserDomAdapter.setAttribute(element:any, name:string, value:string):any', + 'BrowserDomAdapter.setAttributeNS(element:any, ns:string, name:string, value:string):any', + 'BrowserDomAdapter.setChecked(el:any, value:boolean):any', + 'BrowserDomAdapter.setData(element:any, name:string, value:string):any', + 'BrowserDomAdapter.setGlobalVar(path:string, value:any):any', + 'BrowserDomAdapter.setInnerHTML(el:any, value:any):any', + 'BrowserDomAdapter.setProperty(el:any, name:string, value:any):any', + 'BrowserDomAdapter.setStyle(element:any, styleName:string, styleValue:string):any', + 'BrowserDomAdapter.setText(el:any, value:string):any', + 'BrowserDomAdapter.setTitle(newTitle:string):any', + 'BrowserDomAdapter.setValue(el:any, value:string):any', + 'BrowserDomAdapter.tagName(element:any):string', + 'BrowserDomAdapter.templateAwareRoot(el:any):any', + 'BrowserDomAdapter.type(node:HTMLInputElement):string', + 'By', + 'By.all():Predicate', + 'By.css(selector:string):Predicate', + 'By.directive(type:Type):Predicate', + 'Title', + 'Title.getTitle():string', + 'Title.setTitle(newTitle:string):any', + 'bootstrapStatic(appComponentType:Type, customProviders:Array, initReflector:Function):Promise', + 'const BROWSER_APP_PROVIDERS:Array', + 'const BROWSER_PROVIDERS:Array', + 'const ELEMENT_PROBE_BINDINGS:any', + 'const ELEMENT_PROBE_PROVIDERS:any[]', + 'disableDebugTools():void', + 'enableDebugTools(ref:ComponentRef):void', + 'inspectNativeElement(element:any):DebugElement' +]; + +describe('public API', () => { + it("should check core.ts", () => { checkPublicApi("modules/angular2/core.ts", CORE); }); + it("should check common.ts", () => { checkPublicApi("modules/angular2/common.ts", COMMON); }); + it("should check compiler.ts", + () => { checkPublicApi("modules/angular2/compiler.ts", COMPILER); }); + it("should check instrumentation.ts", + () => { checkPublicApi("modules/angular2/instrumentation.ts", INSTRUMENTATION); }); + it("should check upgrade.ts", () => { checkPublicApi("modules/angular2/upgrade.ts", UPGRADE); }); + it("should check browser.ts", + () => { checkPublicApi("modules/angular2/platform/browser_static.ts", BROWSER); }); +}); + +function checkPublicApi(file: string, expected: string[]) { + const sortedActual = publicApi(file).sort(); + const sortedExpected = expected.sort(); + const missing = sortedActual.filter((i) => sortedExpected.indexOf(i) < 0).map(s => `+${s}`); + const extra = sortedExpected.filter((i) => sortedActual.indexOf(i) < 0).map(s => `-${s}`); + expect(missing.concat(extra)).toEqual([]); +}