//Import this script to inject the reflective propTypes in react //We need to ensure that we are using the same react module as the component we are using //For this to happen our script can't depend on react, and we must import react from the target node_modules folder var React = require("../../node_modules/react"); var originalPropTypes = React.PropTypes; var newPropTypes = {} for(var propType in originalPropTypes){ // Create a new reflective property each time the getter is called Object.defineProperty(newPropTypes, propType, { get: reflectiveGetter(propType) } ); } React.PropTypes = newPropTypes //Enforce different scope for each property function reflectiveGetter(propType){ return function(){ return createReflectivePropType(propType); } } function createReflectivePropType(type){ var fakePropType = null; //Used for propTypes with arguments fakePropType = function fakePropType(propTypes){ createInnerPropertyTypes(fakePropType, propTypes) return fakePropType; } fakePropType.type = type; fakePropType.isRequired = function(){} fakePropType.isRequired.type = type; fakePropType.isRequired.required = true; return fakePropType; } function createInnerPropertyTypes(outer, propTypes){ outer.inner = propTypes; outer.isRequired.inner = propTypes }