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 | ((value: string) => string)} true/false, when unconditionally true/false, or a template function to determine the value at runtime