{"version":3,"sources":["../src/elementType.js"],"names":["getTypeName","Type","type","validateElementType","props","propName","componentName","TypeError","elementTypeValidator","element","elementType","rest","isRequired","typeName","validatorName"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;;;;;AAEA,SAASA,WAAT,CAAqBC,IAArB,EAA2B;AACzB,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,WAAOA,IAAP;AACD;;AACD,MAAMC,IAAI,GAAG,kCAAiBD,IAAjB,CAAb;AAEA;AAA2B;;AAC3B,SAAOC,IAAI,IAAI,qBAAf;AACD;;AAED,SAASC,mBAAT,CAA6BF,IAA7B,EAAmCG,KAAnC,EAA0CC,QAA1C,EAAoDC,aAApD,EAAmE;AAAA,MACzDJ,IADyD,GAChDE,KAAK,CAACC,QAAD,CAD2C,CACzDH,IADyD;;AAGjE,MAAIA,IAAI,KAAKD,IAAb,EAAmB;AACjB,WAAO,IAAP;AACD;;AAED,SAAO,IAAIM,SAAJ,WAAiBD,aAAjB,cAAkCD,QAAlC,8CAA8EL,WAAW,CAACC,IAAD,CAAzF,EAAP;AACD;;AAEc,SAASO,oBAAT,CAA8BP,IAA9B,EAAoC;AACjD,MAAIA,IAAI,KAAK,GAAb,EAAkB;AAChB,WAAO,+BAAcQ,kBAAd,EAAuB,gBAAvB,EAAyCR,IAAzC,CAAP;AACD;;AAED,MAAI,CAAC,iCAAmBA,IAAnB,CAAL,EAA+B;AAC7B,UAAM,IAAIM,SAAJ,8FAAiGN,IAAjG,GAAN;AACD;;AAED,WAASS,WAAT,CAAqBN,KAArB,EAA4BC,QAA5B,EAAsCC,aAAtC,EAA8D;AAC5D,QAAIF,KAAK,CAACC,QAAD,CAAL,IAAmB,IAAvB,EAA6B;AAC3B,aAAO,IAAP;AACD;;AAH2D,sCAANM,IAAM;AAANA,MAAAA,IAAM;AAAA;;AAI5D,WAAOR,mBAAmB,MAAnB,UAAoBF,IAApB,EAA0BG,KAA1B,EAAiCC,QAAjC,EAA2CC,aAA3C,SAA6DK,IAA7D,EAAP;AACD;;AACDD,EAAAA,WAAW,CAACE,UAAZ,GAAyBF,WAAzB,CAfiD,CAeX;;AAEtC,MAAMG,QAAQ,GAAGb,WAAW,CAACC,IAAD,CAA5B;AACA,MAAMa,aAAa,yBAAkBD,QAAlB,MAAnB;AACA,SAAO,+BAAc,qBAAI,CAACJ,kBAAD,EAAUC,WAAV,CAAJ,EAA4BI,aAA5B,CAAd,EAA0DA,aAA1D,EAAyEb,IAAzE,CAAP;AACD","sourcesContent":["import { element } from 'prop-types';\nimport { isValidElementType } from 'react-is';\n\nimport and from './and';\nimport getComponentName from './helpers/getComponentName';\nimport wrapValidator from './helpers/wrapValidator';\n\nfunction getTypeName(Type) {\n if (typeof Type === 'string') {\n return Type;\n }\n const type = getComponentName(Type);\n\n /* istanbul ignore next */ // in environments where functions do not have names\n return type || 'Anonymous Component';\n}\n\nfunction validateElementType(Type, props, propName, componentName) {\n const { type } = props[propName];\n\n if (type === Type) {\n return null;\n }\n\n return new TypeError(`${componentName}.${propName} must be a React element of type ${getTypeName(Type)}`);\n}\n\nexport default function elementTypeValidator(Type) {\n if (Type === '*') {\n return wrapValidator(element, 'elementType(*)', Type);\n }\n\n if (!isValidElementType(Type)) {\n throw new TypeError(`Type must be a React Component, an HTML element tag name, or \"*\". Got an ${typeof Type}`);\n }\n\n function elementType(props, propName, componentName, ...rest) {\n if (props[propName] == null) {\n return null;\n }\n return validateElementType(Type, props, propName, componentName, ...rest);\n }\n elementType.isRequired = elementType; // covered by and + element\n\n const typeName = getTypeName(Type);\n const validatorName = `elementType(${typeName})`;\n return wrapValidator(and([element, elementType], validatorName), validatorName, Type);\n}\n"],"file":"elementType.js"}