{"version":3,"sources":["../src/index.js"],"names":["forbidExtraProps","zeroWidthSpace","specialProperty","semaphore","Symbol","brand","fn","isBranded","value","propTypes","TypeError","forbidUnknownProps","props","_","componentName","unknownProps","Object","keys","filter","prop","length","join"],"mappings":";;;qBAgBwBA,gB;;;;;;AAhBxB;;;;AAEA;;;;;;;;AAEA,IAAMC,iBAAiB,QAAvB;AACA,IAAMC,yCAAuCD,cAA7C;AACA,IAAME,YAAY,OAAOC,MAAP,KAAkB,UAAlB,IAAgC,OAAOA,OAAO,KAAP,CAAP,KAAyB,UAAzD,GAAsEA,OAAO,KAAP,EAAcF,eAAd,CAAtE,GAAuG,0BAA2BA,eAApJ;;AAEA,SAASG,KAAT,CAAeC,EAAf,EAAmB;AACjB,SAAO,yBAAcA,EAAd,sBAAqBJ,eAArB,EAAuCC,SAAvC,EAAP;AACD;;AAED,SAASI,SAAT,CAAmBC,KAAnB,EAA0B;AACxB,SAAOA,SAASA,MAAMN,eAAN,MAA2BC,SAA3C;AACD;;AAEc,SAASH,gBAAT,CAA0BS,SAA1B,EAAqC;AAClD,MAAI,CAAC,gCAAcA,SAAd,CAAL,EAA+B;AAC7B,UAAM,IAAIC,SAAJ,CAAc,mCAAd,CAAN;AACD;AACD,MAAI,sBAAID,SAAJ,EAAeP,eAAf,KAAmC,CAACK,UAAUE,UAAUP,eAAV,CAAV,CAAxC,EAA+E;AAC7E,UAAM,IAAIQ,SAAJ,CAAc,iKAAd,CAAN;AACD;;AAED,sCACKD,SADL,sBAGGP,eAHH,EAGqBG;AAAM,aAASM,kBAAT,CAA4BC,KAA5B,EAAmCC,CAAnC,EAAsCC,aAAtC,EAAqD;AAC5E,UAAMC,eAAeC,OAAOC,IAAP,CAAYL,KAAZ,EAAmBM,MAAnB,CAA0B;AAAA,eAAQ,CAAC,sBAAIT,SAAJ,EAAeU,IAAf,CAAT;AAAA,OAA1B,CAArB;AACA,UAAIJ,aAAaK,MAAb,GAAsB,CAA1B,EAA6B;AAC3B,eAAO,IAAIV,SAAJ,QAAiBI,aAAjB,uCAAwDC,aAAaM,IAAb,CAAkB,IAAlB,CAAxD,EAAP;AACD;AACD,aAAO,IAAP;AACD;;AANkB,WAAeV,kBAAf;AAAA,MAHrB;AAWD","file":"index.js","sourcesContent":["import has from 'has';\n\nimport isPlainObject from './helpers/isPlainObject';\n\nconst zeroWidthSpace = '\\u200b';\nconst specialProperty = `prop-types-exact: ${zeroWidthSpace}`;\nconst semaphore = typeof Symbol === 'function' && typeof Symbol['for'] === 'function' ? Symbol['for'](specialProperty) : /* istanbul ignore next */ specialProperty;\n\nfunction brand(fn) {\n return Object.assign(fn, { [specialProperty]: semaphore });\n}\n\nfunction isBranded(value) {\n return value && value[specialProperty] === semaphore;\n}\n\nexport default function forbidExtraProps(propTypes) {\n if (!isPlainObject(propTypes)) {\n throw new TypeError('given propTypes must be an object');\n }\n if (has(propTypes, specialProperty) && !isBranded(propTypes[specialProperty])) {\n throw new TypeError('Against all odds, you created a propType for a prop that uses both the zero-width space and our custom string - which, sadly, conflicts with `prop-types-exact`');\n }\n\n return {\n ...propTypes,\n // eslint-disable-next-line prefer-arrow-callback\n [specialProperty]: brand(function forbidUnknownProps(props, _, componentName) {\n const unknownProps = Object.keys(props).filter(prop => !has(propTypes, prop));\n if (unknownProps.length > 0) {\n return new TypeError(`${componentName}: unknown props found: ${unknownProps.join(', ')}`);\n }\n return null;\n }),\n };\n}\n"]}