Guest User

Untitled

a guest
May 24th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. module.exports = function(content) {
  2. return content + `
  3. (function(ReactPropTypes) {
  4. function unwrapValueItem(value) {
  5. if (value) {
  6. if (typeof value.getTypeDefinition === 'function') {
  7. return value.getTypeDefinition();
  8. }
  9. if (typeof value === 'function') {
  10. return { name: 'custom' };
  11. }
  12. }
  13.  
  14. return { name: 'unknown' };
  15. }
  16.  
  17. function wrapFunction(fn, name, value, getTypeDefinition) {
  18. fn.getTypeDefinition = getTypeDefinition.bind(null, name, false, value);
  19. if (fn.isRequired) {
  20. fn.isRequired.getTypeDefinition = getTypeDefinition.bind(null, name, true, value);
  21. }
  22. return fn;
  23. }
  24.  
  25. function wrapMethod(dict, name, getTypeDefinition) {
  26. var orig = dict[name];
  27. dict[name] = function(value) {
  28. return wrapFunction(orig.apply(this, arguments), name, value, getTypeDefinition);
  29. };
  30. }
  31.  
  32. for (var method in ReactPropTypes) {
  33. switch (method) {
  34. case 'any':
  35. case 'array':
  36. case 'bool':
  37. case 'func':
  38. case 'number':
  39. case 'object':
  40. case 'string':
  41. case 'symbol':
  42. case 'node':
  43. case 'element':
  44. wrapFunction(ReactPropTypes[method], method, null, function(name, required) {
  45. return {
  46. type: { name: name },
  47. required: required
  48. };
  49. });
  50. break;
  51.  
  52. case 'instanceOf':
  53. case 'oneOf':
  54. wrapMethod(ReactPropTypes, method, function(name, required, value) {
  55. return {
  56. type: {
  57. name: name,
  58. value: value
  59. },
  60. required: required
  61. };
  62. });
  63. break;
  64.  
  65. case 'oneOfType':
  66. wrapMethod(ReactPropTypes, method, function(name, required, value) {
  67. return {
  68. type: {
  69. name: name,
  70. value: Array.isArray(value) ? value.map(unwrapValueItem) : []
  71. },
  72. required: required
  73. };
  74. });
  75. break;
  76.  
  77. case 'arrayOf':
  78. case 'objectOf':
  79. wrapMethod(ReactPropTypes, method, function(name, required, value) {
  80. return {
  81. type: {
  82. name: name,
  83. value: unwrapValueItem(value)
  84. },
  85. required: required
  86. };
  87. });
  88. break;
  89.  
  90. case 'shape':
  91. wrapMethod(ReactPropTypes, method, function(name, required, value) {
  92. var unwrapped = {};
  93.  
  94. for (var key in value) {
  95. if (Object.prototype.hasOwnProperty.call(value, key)) {
  96. unwrapped[key] = unwrapValueItem(value[key]);
  97. }
  98. }
  99.  
  100. return {
  101. type: {
  102. name: name,
  103. value: unwrapped
  104. },
  105. required: required
  106. };
  107. });
  108. break;
  109. }
  110. }
  111. })(module.exports);`;
  112. };
Add Comment
Please, Sign In to add comment