code: function normalizeSelector (selectorNode, forceInclude) {
    const selector = csstree.generate(selectorNode)
    // some selectors can't be matched on page.
    // In these cases we test a slightly modified selector instead
    let modifiedSelector = selector.trim()
  
    if (matchesForceInclude(modifiedSelector, forceInclude)) {
      return true
    }
  
    if (modifiedSelector.indexOf(':') > -1) {
      // handle special case selectors, the ones that contain a semicolon (:)
      // many of these selectors can't be matched to anything on page via JS,
      // but that still might affect the above the fold styling
  
      // ::selection we just remove
      if (/:?:(-moz-)?selection/.test(modifiedSelector)) {
        return false
      }
  
      // for the pseudo selectors that depend on an element, test for presence
      // of the element (in the critical viewport) instead
      // (:hover, :focus, :active would be treated same
      // IF we wanted to keep them for critical path css, but we don’t)
      modifiedSelector = modifiedSelector.replace(PSUEDO_SELECTOR_REGEXP, '')
  
      // if selector is purely pseudo (f.e. ::-moz-placeholder), just keep as is.
      // we can't match it to anything on page, but it can impact above the fold styles
      if (
        modifiedSelector.replace(/:[:]?([a-zA-Z0-9\-_])*/g, '').trim().length ===
        0
      ) {
        return true
      }
  
      // handle browser specific pseudo selectors bound to elements,
      // Example, button::-moz-focus-inner, input[type=number]::-webkit-inner-spin-button
      // remove browser specific pseudo and test for element
      modifiedSelector = modifiedSelector.replace(/:?:-[a-z-]*/g, '')
    }
  
    return modifiedSelector
  }
docs: returns: true, if selector should be force kept false, if selector should be force removed otherwise the selector string to look for in the critical viewport