function getPluralSelector(
  operationVariables: Variables,
  fragment: ReaderFragment,
  items: Array<mixed>,
  owners?: Array<?OperationDescriptor>,
): ?Array<OwnedReaderSelector> {
  let selectors = null;
  if (__DEV__) {
    if (owners != null) {
      warning(
        items.length === owners.length,
        'RelayModernSelector: Expected number of plural values for fragment ' +
          '`%s` to match number of owners. Received %s values and %s owners.',
        fragment.name,
        items.length,
        owners.length,
      );
    }
  }

  items.forEach((item, ii) => {
    const owner = owners != null ? owners[ii] : null;
    const selector =
      item != null
        ? getSingularSelector(operationVariables, fragment, item, owner)
        : null;
    if (selector != null) {
      selectors = selectors || [];
      selectors.push(selector);
    }
  });
  return selectors;
}
function getPluralSelector(
  operationVariables: Variables,
  fragment: ReaderFragment,
  items: Array<mixed>,
  owners?: Array<?OperationDescriptor>,
): ?Array<OwnedReaderSelector> {
  let selectors = null;
  if (__DEV__) {
    if (owners != null) {
      warning(
        items.length === owners.length,
        'RelayModernSelector: Expected number of plural values for fragment ' +
          '`%s` to match number of owners. Received %s values and %s owners.',
        fragment.name,
        items.length,
        owners.length,
      );
    }
  }

  items.forEach((item, ii) => {
    const owner = owners != null ? owners[ii] : null;
    const selector =
      item != null
        ? getSingularSelector(operationVariables, fragment, item, owner)
        : null;
    if (selector != null) {
      selectors = selectors || [];
      selectors.push(selector);
    }
  });
  return selectors;
}
function getPluralSelector ( operationVariables : Variables , fragment : ReaderFragment , items : Array < mixed > , owners ? : Array < ? OperationDescriptor > , ) : ? Array < OwnedReaderSelector > { let selectors = null ; if ( __DEV__ ) { if ( owners != null ) { warning ( items . length === owners . length , 'RelayModernSelector: Expected number of plural values for fragment ' + '`%s` to match number of owners. Received %s values and %s owners.' , fragment . name , items . length , owners . length , ) ; } } items . forEach ( ( item , ii ) => { const owner = owners != null ? owners [ ii ] : null ; const selector = item != null ? getSingularSelector ( operationVariables , fragment , item , owner ) : null ; if ( selector != null ) { selectors = selectors || [ ] ; selectors . push ( selector ) ; } } ) ; return selectors ; }
@public

Given the result `items` from a parent that fetched `fragment`, creates a
selector that can be used to read the results of that fragment on those
items. This is similar to `getSingularSelector` but for "plural" fragments that
expect an array of results and therefore return an array of selectors.
@public
Returns a selector for the given items and owners.