{"version":3,"sources":["compiler.js"],"names":[],"mappings":"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","file":"angular2/src/core/compiler/compiler.js","sourcesContent":["import {Injectable} from 'angular2/di';\nimport {Type, isBlank, isPresent, BaseException, normalizeBlank, stringify} from 'angular2/src/facade/lang';\nimport {Promise, PromiseWrapper} from 'angular2/src/facade/async';\nimport {List, ListWrapper, Map, MapWrapper} from 'angular2/src/facade/collection';\n\nimport {DirectiveMetadataReader} from './directive_metadata_reader';\nimport {Component, Viewport, DynamicComponent, Decorator} from '../annotations/annotations';\nimport {AppProtoView} from './view';\nimport {DirectiveBinding} from './element_injector';\nimport {TemplateResolver} from './template_resolver';\nimport {View} from '../annotations/view';\nimport {ComponentUrlMapper} from './component_url_mapper';\nimport {ProtoViewFactory} from './proto_view_factory';\nimport {UrlResolver} from 'angular2/src/services/url_resolver';\n\nimport * as renderApi from 'angular2/src/render/api';\n\n/**\n * Cache that stores the AppProtoView of the template of a component.\n * Used to prevent duplicate work and resolve cyclic dependencies.\n */\n@Injectable()\nexport class CompilerCache {\n  _cache:Map;\n  constructor() {\n    this._cache = MapWrapper.create();\n  }\n\n  set(component:Type, protoView:AppProtoView) {\n    MapWrapper.set(this._cache, component, protoView);\n  }\n\n  get(component:Type):AppProtoView {\n    var result = MapWrapper.get(this._cache, component);\n    return normalizeBlank(result);\n  }\n\n  clear() {\n    MapWrapper.clear(this._cache);\n  }\n}\n\n/**\n * @exportedAs angular2/view\n */\n@Injectable()\nexport class Compiler {\n  _reader: DirectiveMetadataReader;\n  _compilerCache:CompilerCache;\n  _compiling:Map<Type, Promise>;\n  _templateResolver: TemplateResolver;\n  _componentUrlMapper: ComponentUrlMapper;\n  _urlResolver: UrlResolver;\n  _appUrl: string;\n  _renderer: renderApi.Renderer;\n  _protoViewFactory:ProtoViewFactory;\n\n  constructor(reader: DirectiveMetadataReader,\n              cache:CompilerCache,\n              templateResolver: TemplateResolver,\n              componentUrlMapper: ComponentUrlMapper,\n              urlResolver: UrlResolver,\n              renderer: renderApi.Renderer,\n              protoViewFactory: ProtoViewFactory) {\n    this._reader = reader;\n    this._compilerCache = cache;\n    this._compiling = MapWrapper.create();\n    this._templateResolver = templateResolver;\n    this._componentUrlMapper = componentUrlMapper;\n    this._urlResolver = urlResolver;\n    this._appUrl = urlResolver.resolve(null, './');\n    this._renderer = renderer;\n    this._protoViewFactory = protoViewFactory;\n  }\n\n  _bindDirective(directiveTypeOrBinding) {\n    if (directiveTypeOrBinding instanceof DirectiveBinding) {\n      return directiveTypeOrBinding;\n    }\n    var meta = this._reader.read(directiveTypeOrBinding);\n    return DirectiveBinding.createFromType(meta.type, meta.annotation);\n  }\n\n  // Create a hostView as if the compiler encountered <hostcmp></hostcmp>.\n  // Used for bootstrapping.\n  compileInHost(componentTypeOrBinding:any):Promise<AppProtoView> {\n    return this._renderer.createHostProtoView('host').then( (hostRenderPv) => {\n      return this._compileNestedProtoViews(null, hostRenderPv, [this._bindDirective(componentTypeOrBinding)], true);\n    });\n  }\n\n  compile(component: Type):Promise<AppProtoView> {\n    var protoView = this._compile(this._bindDirective(component));\n    return PromiseWrapper.isPromise(protoView) ? protoView : PromiseWrapper.resolve(protoView);\n  }\n\n  // TODO(vicb): union type return AppProtoView or Promise<AppProtoView>\n  _compile(componentBinding: DirectiveBinding) {\n    var component = componentBinding.key.token;\n    var protoView = this._compilerCache.get(component);\n    if (isPresent(protoView)) {\n      // The component has already been compiled into an AppProtoView,\n      // returns a plain AppProtoView, not wrapped inside of a Promise.\n      // Needed for recursive components.\n      return protoView;\n    }\n\n    var pvPromise = MapWrapper.get(this._compiling, component);\n    if (isPresent(pvPromise)) {\n      // The component is already being compiled, attach to the existing Promise\n      // instead of re-compiling the component.\n      // It happens when a template references a component multiple times.\n      return pvPromise;\n    }\n\n    var template = this._templateResolver.resolve(component);\n    if (isPresent(template.renderer)) {\n      var directives = [];\n      pvPromise = this._renderer.createImperativeComponentProtoView(template.renderer).then( (renderPv) => {\n        return this._compileNestedProtoViews(componentBinding, renderPv, directives, true);\n      });\n    } else {\n      var directives = ListWrapper.map(\n        this._flattenDirectives(template),\n        (directive) => this._bindDirective(directive)\n      );\n      var renderTemplate = this._buildRenderTemplate(component, template, directives);\n      pvPromise = this._renderer.compile(renderTemplate).then( (renderPv) => {\n        return this._compileNestedProtoViews(componentBinding, renderPv, directives, true);\n      });\n    }\n\n    MapWrapper.set(this._compiling, component, pvPromise);\n    return pvPromise;\n  }\n\n  // TODO(tbosch): union type return AppProtoView or Promise<AppProtoView>\n  _compileNestedProtoViews(componentBinding, renderPv, directives, isComponentRootView) {\n    var nestedPVPromises = [];\n    var protoView = this._protoViewFactory.createProtoView(componentBinding, renderPv, directives);\n    if (isComponentRootView && isPresent(componentBinding)) {\n      // Populate the cache before compiling the nested components,\n      // so that components can reference themselves in their template.\n      var component = componentBinding.key.token;\n      this._compilerCache.set(component, protoView);\n      MapWrapper.delete(this._compiling, component);\n    }\n\n    var binderIndex = 0;\n    ListWrapper.forEach(protoView.elementBinders, (elementBinder) => {\n      var nestedComponent = elementBinder.componentDirective;\n      var nestedRenderProtoView = renderPv.elementBinders[binderIndex].nestedProtoView;\n      var elementBinderDone = (nestedPv) => {\n        elementBinder.nestedProtoView = nestedPv;\n        // Can't set the parentProtoView for components,\n        // as their AppProtoView might be used in multiple other components.\n        nestedPv.parentProtoView = isPresent(nestedComponent) ? null : protoView;\n      };\n      var nestedCall = null;\n      if (isPresent(nestedComponent)) {\n        if (!(nestedComponent.annotation instanceof DynamicComponent)) {\n          nestedCall = this._compile(nestedComponent);\n        }\n      } else if (isPresent(nestedRenderProtoView)) {\n        nestedCall = this._compileNestedProtoViews(componentBinding, nestedRenderProtoView, directives, false);\n      }\n      if (PromiseWrapper.isPromise(nestedCall)) {\n        ListWrapper.push(nestedPVPromises, nestedCall.then(elementBinderDone));\n      } else if (isPresent(nestedCall)) {\n        elementBinderDone(nestedCall);\n      }\n      binderIndex++;\n    });\n\n    var protoViewDone = (_) => {\n      var childComponentRenderPvRefs = [];\n      ListWrapper.forEach(protoView.elementBinders, (eb) => {\n        if (isPresent(eb.componentDirective)) {\n          var componentPv = eb.nestedProtoView;\n          ListWrapper.push(childComponentRenderPvRefs, isPresent(componentPv) ? componentPv.render : null);\n        }\n      });\n      this._renderer.mergeChildComponentProtoViews(protoView.render, childComponentRenderPvRefs);\n      return protoView;\n    };\n    if (nestedPVPromises.length > 0) {\n      return PromiseWrapper.all(nestedPVPromises).then(protoViewDone);\n    } else {\n      return protoViewDone(null);\n    }\n  }\n\n  _buildRenderTemplate(component, view, directives) {\n    var componentUrl = this._urlResolver.resolve(\n        this._appUrl, this._componentUrlMapper.getUrl(component)\n    );\n    var templateAbsUrl = null;\n    if (isPresent(view.templateUrl)) {\n      templateAbsUrl = this._urlResolver.resolve(componentUrl, view.templateUrl);\n    } else {\n      // Note: If we have an inline template, we also need to send\n      // the url for the component to the renderer so that it\n      // is able to resolve urls in stylesheets.\n      templateAbsUrl = componentUrl;\n    }\n    return new renderApi.ViewDefinition({\n      componentId: stringify(component),\n      absUrl: templateAbsUrl,\n      template: view.template,\n      directives: ListWrapper.map(directives, Compiler.buildRenderDirective)\n    });\n  }\n\n  static buildRenderDirective(directiveBinding) {\n    var ann = directiveBinding.annotation;\n    var renderType;\n    var compileChildren = true;\n    if ((ann instanceof Component) || (ann instanceof DynamicComponent)) {\n      renderType = renderApi.DirectiveMetadata.COMPONENT_TYPE;\n    } else if (ann instanceof Viewport) {\n      renderType = renderApi.DirectiveMetadata.VIEWPORT_TYPE;\n    } else if (ann instanceof Decorator) {\n      renderType = renderApi.DirectiveMetadata.DECORATOR_TYPE;\n      compileChildren = ann.compileChildren;\n    }\n    var setters = [];\n    var readAttributes = [];\n    ListWrapper.forEach(directiveBinding.dependencies, (dep) => {\n      if (isPresent(dep.propSetterName)) {\n        ListWrapper.push(setters, dep.propSetterName);\n      }\n      if (isPresent(dep.attributeName)) {\n        ListWrapper.push(readAttributes, dep.attributeName);\n      }\n    });\n    return new renderApi.DirectiveMetadata({\n      id: stringify(directiveBinding.key.token),\n      type: renderType,\n      selector: ann.selector,\n      compileChildren: compileChildren,\n      hostListeners: isPresent(ann.hostListeners) ? MapWrapper.createFromStringMap(ann.hostListeners) : null,\n      properties: isPresent(ann.properties) ? MapWrapper.createFromStringMap(ann.properties) : null,\n      setters: setters,\n      readAttributes: readAttributes\n    });\n  }\n\n  _flattenDirectives(template: View):List<Type> {\n    if (isBlank(template.directives)) return [];\n\n    var directives = [];\n    this._flattenList(template.directives, directives);\n\n    return directives;\n  }\n\n  _flattenList(tree:List<any>, out:List<Type>) {\n    for (var i = 0; i < tree.length; i++) {\n      var item = tree[i];\n      if (ListWrapper.isList(item)) {\n        this._flattenList(item, out);\n      } else {\n        ListWrapper.push(out, item);\n      }\n    }\n  }\n\n}\n"]}