docs: function defineComponent(componentDefinition) {
      var type = componentDefinition.type;
      var pipeTypes = componentDefinition.pipes;
      var directiveTypes = componentDefinition.directives;
      var declaredInputs = {};
      var def = {
          type: type,
          diPublic: null,
          factory: componentDefinition.factory,
          template: componentDefinition.template || null,
          hostBindings: componentDefinition.hostBindings || null,
          contentQueries: componentDefinition.contentQueries || null,
          contentQueriesRefresh: componentDefinition.contentQueriesRefresh || null,
          attributes: componentDefinition.attributes || null,
          inputs: invertObject(componentDefinition.inputs, declaredInputs),
          declaredInputs: declaredInputs,
          outputs: invertObject(componentDefinition.outputs),
          rendererType: resolveRendererType2(componentDefinition.rendererType) || null,
          exportAs: componentDefinition.exportAs || null,
          onInit: type.prototype.ngOnInit || null,
          doCheck: type.prototype.ngDoCheck || null,
          afterContentInit: type.prototype.ngAfterContentInit || null,
          afterContentChecked: type.prototype.ngAfterContentChecked || null,
          afterViewInit: type.prototype.ngAfterViewInit || null,
          afterViewChecked: type.prototype.ngAfterViewChecked || null,
          onDestroy: type.prototype.ngOnDestroy || null,
          onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,
          directiveDefs: directiveTypes ?
              function () { return (typeof directiveTypes === 'function' ? directiveTypes() : directiveTypes)
                  .map(extractDirectiveDef); } :
              null,
          pipeDefs: pipeTypes ?
              function () { return (typeof pipeTypes === 'function' ? pipeTypes() : pipeTypes).map(extractPipeDef); } :
              null,
          selectors: componentDefinition.selectors,
          viewQuery: componentDefinition.viewQuery || null,
          features: componentDefinition.features || null,
      };
      var feature = componentDefinition.features;
      feature && feature.forEach(function (fn) { return fn(def); });
      return def;
  }