| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | // @flowimport format from './format';import { modifierPhases } from '../enums';const INVALID_MODIFIER_ERROR =  'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s';const MISSING_DEPENDENCY_ERROR =  'Popper: modifier "%s" requires "%s", but "%s" modifier is not available';const VALID_PROPERTIES = [  'name',  'enabled',  'phase',  'fn',  'effect',  'requires',  'options',];export default function validateModifiers(modifiers: Array<any>): void {  modifiers.forEach((modifier) => {    [...Object.keys(modifier), ...VALID_PROPERTIES]      // IE11-compatible replacement for `new Set(iterable)`      .filter((value, index, self) => self.indexOf(value) === index)      .forEach((key) => {        switch (key) {          case 'name':            if (typeof modifier.name !== 'string') {              console.error(                format(                  INVALID_MODIFIER_ERROR,                  String(modifier.name),                  '"name"',                  '"string"',                  `"${String(modifier.name)}"`                )              );            }            break;          case 'enabled':            if (typeof modifier.enabled !== 'boolean') {              console.error(                format(                  INVALID_MODIFIER_ERROR,                  modifier.name,                  '"enabled"',                  '"boolean"',                  `"${String(modifier.enabled)}"`                )              );            }            break;          case 'phase':            if (modifierPhases.indexOf(modifier.phase) < 0) {              console.error(                format(                  INVALID_MODIFIER_ERROR,                  modifier.name,                  '"phase"',                  `either ${modifierPhases.join(', ')}`,                  `"${String(modifier.phase)}"`                )              );            }            break;          case 'fn':            if (typeof modifier.fn !== 'function') {              console.error(                format(                  INVALID_MODIFIER_ERROR,                  modifier.name,                  '"fn"',                  '"function"',                  `"${String(modifier.fn)}"`                )              );            }            break;          case 'effect':            if (              modifier.effect != null &&              typeof modifier.effect !== 'function'            ) {              console.error(                format(                  INVALID_MODIFIER_ERROR,                  modifier.name,                  '"effect"',                  '"function"',                  `"${String(modifier.fn)}"`                )              );            }            break;          case 'requires':            if (              modifier.requires != null &&              !Array.isArray(modifier.requires)            ) {              console.error(                format(                  INVALID_MODIFIER_ERROR,                  modifier.name,                  '"requires"',                  '"array"',                  `"${String(modifier.requires)}"`                )              );            }            break;          case 'requiresIfExists':            if (!Array.isArray(modifier.requiresIfExists)) {              console.error(                format(                  INVALID_MODIFIER_ERROR,                  modifier.name,                  '"requiresIfExists"',                  '"array"',                  `"${String(modifier.requiresIfExists)}"`                )              );            }            break;          case 'options':          case 'data':            break;          default:            console.error(              `PopperJS: an invalid property has been provided to the "${                modifier.name              }" modifier, valid properties are ${VALID_PROPERTIES.map(                (s) => `"${s}"`              ).join(', ')}; but "${key}" was provided.`            );        }        modifier.requires &&          modifier.requires.forEach((requirement) => {            if (modifiers.find((mod) => mod.name === requirement) == null) {              console.error(                format(                  MISSING_DEPENDENCY_ERROR,                  String(modifier.name),                  requirement,                  requirement                )              );            }          });      });  });}
 |