code: function projectionDef(selectors, textSelectors) {
      var componentNode = findComponentHost(viewData);
      if (!componentNode.tNode.projection) {
          var noOfNodeBuckets = selectors ? selectors.length + 1 : 1;
          var pData = componentNode.tNode.projection =
              new Array(noOfNodeBuckets).fill(null);
          var tails = pData.slice();
          var componentChild = componentNode.tNode.child;
          while (componentChild !== null) {
              var bucketIndex = selectors ? matchingSelectorIndex(componentChild, selectors, textSelectors) : 0;
              var nextNode = componentChild.next;
              if (tails[bucketIndex]) {
                  tails[bucketIndex].next = componentChild;
              }
              else {
                  pData[bucketIndex] = componentChild;
                  componentChild.next = null;
              }
              tails[bucketIndex] = componentChild;
              componentChild = nextNode;
          }
      }
  }
docs: Instruction to distribute projectable nodes among <ng-content> occurrences in a given template.
  It takes all the selectors from the entire component's template and decides where
  each projected node belongs (it re-distributes nodes among "buckets" where each "bucket" is
  backed by a selector).
  
  This function requires CSS selectors to be provided in 2 forms: parsed (by a compiler) and text,
  un-parsed form.
  
  The parsed form is needed for efficient matching of a node against a given CSS selector.
  The un-parsed, textual form is needed for support of the ngProjectAs attribute.
  
  Having a CSS selector in 2 different formats is not ideal, but alternatives have even more
  drawbacks:
  - having only a textual form would require runtime parsing of CSS selectors;
  - we can't have only a parsed as we can't re-construct textual form from it (as entered by a
  template author).
  
  @param selectors A collection of parsed CSS selectors
  @param rawSelectors A collection of CSS selectors in the raw, un-parsed form