UNPKG

4.02 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/utils.js"],"names":["REACT_METHODS","copyRefs","TargetComponent","SourceComponent","prototype","Object","getOwnPropertyNames","filter","prop","includes","React","Component","startsWith","forEach","args","apply","getWrappedInstance","defineProperty","get","set","value"],"mappings":";;;;;AAEA;;;;AAEA,IAAMA,aAAa,GAAG,CACpB,UADoB,EAEpB,mBAFoB,EAGpB,mBAHoB,EAIpB,oBAJoB,EAKpB,oBALoB,EAMpB,2BANoB,EAOpB,sBAPoB,EAQpB,qBARoB,EASpB,cAToB,EAUpB,aAVoB,EAWpB,iBAXoB,EAYpB,iBAZoB,EAapB,YAboB,EAcpB,iBAdoB,EAepB,QAfoB,EAgBpB,WAhBoB,EAiBpB,QAjBoB,EAkBpB,cAlBoB,EAmBpB,UAnBoB,EAoBpB,uBApBoB,EAqBpB,SArBoB,EAsBpB,iBAtBoB,CAAtB;;AAyBO,SAASC,QAAT,CACLC,eADK,EAELC,eAFK,EAGuB;AAC5B;AACA,MAAI,CAACA,eAAe,CAACC,SAArB,EAAgC;AAC9B,WAAOF,eAAP;AACD,GAJ2B,CAM5B;;;AACAG,EAAAA,MAAM,CAACC,mBAAP,CAA2BH,eAAe,CAACC,SAA3C,EACGG,MADH,CAEI,UAAAC,IAAI;AAAA,WACF,EACER,aAAa,CAACS,QAAd,CAAuBD,IAAvB,KAAgC;AAChCA,IAAAA,IAAI,IAAIE,KAAK,CAACC,SAAN,CAAgBP,SADxB,IACqC;AACrC;AACAI,IAAAA,IAAI,IAAIN,eAAe,CAACE,SAHxB,IAGqC;AACrC;AACAI,IAAAA,IAAI,CAACI,UAAL,CAAgB,GAAhB,CANF,CADE;AAAA,GAFR,EAYGC,OAZH,CAYW,UAAAL,IAAI,EAAI;AACf;AACA,QAAI,OAAOL,eAAe,CAACC,SAAhB,CAA0BI,IAA1B,CAAP,KAA2C,UAA/C,EAA2D;AACzD;AACA;AACAN,MAAAA,eAAe,CAACE,SAAhB,CAA0BI,IAA1B,IAAkC,YAAkB;AAAA,0CAANM,IAAM;AAANA,UAAAA,IAAM;AAAA;;AAClD;AACA;AACA,eAAOX,eAAe,CAACC,SAAhB,CAA0BI,IAA1B,EAAgCO,KAAhC,CACL,KAAKC,kBAAL,EADK,EAELF,IAFK,CAAP;AAID,OAPD;AAQD,KAXD,MAWO;AACL;AACA;AACA;AACAT,MAAAA,MAAM,CAACY,cAAP,CAAsBf,eAAe,CAACE,SAAtC,EAAiDI,IAAjD,EAAuD;AACrDU,QAAAA,GADqD,iBAC/C;AACJ,iBAAO,KAAKF,kBAAL,GAA0BR,IAA1B,CAAP;AACD,SAHoD;AAIrDW,QAAAA,GAJqD,eAIjDC,KAJiD,EAI1C;AACT,eAAKJ,kBAAL,GAA0BR,IAA1B,IAAkCY,KAAlC;AACD;AANoD,OAAvD;AAQD;AACF,GAtCH;AAwCA,SAAOlB,eAAP;AACD","sourcesContent":["/* @flow */\n\nimport * as React from 'react';\n\nconst REACT_METHODS = [\n 'autobind',\n 'childContextTypes',\n 'componentDidMount',\n 'componentDidUpdate',\n 'componentWillMount',\n 'componentWillReceiveProps',\n 'componentWillUnmount',\n 'componentWillUpdate',\n 'contextTypes',\n 'displayName',\n 'getChildContext',\n 'getDefaultProps',\n 'getDOMNode',\n 'getInitialState',\n 'mixins',\n 'propTypes',\n 'render',\n 'replaceProps',\n 'setProps',\n 'shouldComponentUpdate',\n 'statics',\n 'updateComponent',\n];\n\nexport function copyRefs<Props>(\n TargetComponent: React.ComponentType<Props>,\n SourceComponent: React.ComponentType<Props>\n): React.ComponentType<Props> {\n // $FlowFixMe\n if (!SourceComponent.prototype) {\n return TargetComponent;\n }\n\n // $FlowFixMe\n Object.getOwnPropertyNames(SourceComponent.prototype)\n .filter(\n prop =>\n !(\n REACT_METHODS.includes(prop) || // React specific methods and properties\n prop in React.Component.prototype || // Properties from React's prototype such as `setState`\n // $FlowFixMe\n prop in TargetComponent.prototype || // Properties from enhanced component's prototype\n // Private methods\n prop.startsWith('_')\n )\n )\n .forEach(prop => {\n // $FlowFixMe\n if (typeof SourceComponent.prototype[prop] === 'function') {\n /* eslint-disable func-names, no-param-reassign */\n // $FlowFixMe\n TargetComponent.prototype[prop] = function(...args) {\n // Make sure the function is called with correct context\n // $FlowFixMe\n return SourceComponent.prototype[prop].apply(\n this.getWrappedInstance(),\n args\n );\n };\n } else {\n // Copy properties as getters and setters\n // This make sure dynamic properties always stay up-to-date\n // $FlowFixMe\n Object.defineProperty(TargetComponent.prototype, prop, {\n get() {\n return this.getWrappedInstance()[prop];\n },\n set(value) {\n this.getWrappedInstance()[prop] = value;\n },\n });\n }\n });\n\n return TargetComponent;\n}\n"],"file":"utils.js"}
\No newline at end of file