compileBooleanMatcher = (map) => {
  const positiveItems = Object.keys(map).filter((i) => map[i]);
  const negativeItems = Object.keys(map).filter((i) => !map[i]);

  if (positiveItems.length === 0) {
    return false;
  }

  if (negativeItems.length === 0) {
    return true;
  }

  return compileBooleanMatcherFromLists(positiveItems, negativeItems);
}
@param {Record<string|number, boolean>} map value map
@returns {boolean|(function(string): string)} true/false, when unconditionally true/false, or a template function to determine the value at runtime