Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

88 строки
2.9 KiB

  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
  6. exports.default = getProp;
  7. var _propName = require('./propName');
  8. var _propName2 = _interopRequireDefault(_propName);
  9. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  10. var DEFAULT_OPTIONS = {
  11. ignoreCase: true
  12. };
  13. /**
  14. * Returns the JSXAttribute itself or undefined, indicating the prop
  15. * is not present on the JSXOpeningElement.
  16. *
  17. */
  18. function getProp() {
  19. var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  20. var prop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
  21. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_OPTIONS;
  22. function getName(name) {
  23. return options.ignoreCase ? name.toUpperCase() : name;
  24. }
  25. var propToFind = getName(prop);
  26. function isPropToFind(property) {
  27. return property.type === 'Property' && property.key.type === 'Identifier' && propToFind === getName(property.key.name);
  28. }
  29. var foundAttribute = props.find(function (attribute) {
  30. // If the props contain a spread prop, try to find the property in the object expression.
  31. if (attribute.type === 'JSXSpreadAttribute') {
  32. return attribute.argument.type === 'ObjectExpression' && propToFind !== getName('key') // https://github.com/reactjs/rfcs/pull/107
  33. && attribute.argument.properties.some(isPropToFind);
  34. }
  35. return propToFind === getName((0, _propName2.default)(attribute));
  36. });
  37. if (foundAttribute && foundAttribute.type === 'JSXSpreadAttribute') {
  38. return propertyToJSXAttribute(foundAttribute.argument.properties.find(isPropToFind));
  39. }
  40. return foundAttribute;
  41. }
  42. function propertyToJSXAttribute(node) {
  43. var key = node.key,
  44. value = node.value;
  45. return _extends({
  46. type: 'JSXAttribute',
  47. name: _extends({ type: 'JSXIdentifier', name: key.name }, getBaseProps(key)),
  48. value: value.type === 'Literal' ? value : _extends({ type: 'JSXExpressionContainer', expression: value }, getBaseProps(value))
  49. }, getBaseProps(node));
  50. }
  51. function getBaseProps(_ref) {
  52. var start = _ref.start,
  53. end = _ref.end,
  54. loc = _ref.loc,
  55. range = _ref.range;
  56. return _extends({
  57. loc: getBaseLocation(loc)
  58. }, start !== undefined ? { start: start } : {}, end !== undefined ? { end: end } : {}, range !== undefined ? { range: range } : {});
  59. }
  60. function getBaseLocation(_ref2) {
  61. var start = _ref2.start,
  62. end = _ref2.end,
  63. source = _ref2.source,
  64. filename = _ref2.filename;
  65. return _extends({
  66. start: start,
  67. end: end
  68. }, source !== undefined ? { source: source } : {}, filename !== undefined ? { filename: filename } : {});
  69. }