tree.js.flow 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* @flow */
  2. /* eslint-disable no-use-before-define */
  3. import type { Key } from 'react';
  4. type PropsType = { [key: string]: any };
  5. type DefaultPropsType = { [key: string]: any };
  6. export type StringTreeNode = {|
  7. type: 'string',
  8. value: string,
  9. |};
  10. export type NumberTreeNode = {|
  11. type: 'number',
  12. value: number,
  13. |};
  14. export type ReactElementTreeNode = {|
  15. type: 'ReactElement',
  16. displayName: string,
  17. props: PropsType,
  18. defaultProps: DefaultPropsType,
  19. childrens: TreeNode[],
  20. |};
  21. export type ReactFragmentTreeNode = {|
  22. type: 'ReactFragment',
  23. key: ?Key,
  24. childrens: TreeNode[],
  25. |};
  26. export type TreeNode =
  27. | StringTreeNode
  28. | NumberTreeNode
  29. | ReactElementTreeNode
  30. | ReactFragmentTreeNode;
  31. export const createStringTreeNode = (value: string): StringTreeNode => ({
  32. type: 'string',
  33. value,
  34. });
  35. export const createNumberTreeNode = (value: number): NumberTreeNode => ({
  36. type: 'number',
  37. value,
  38. });
  39. export const createReactElementTreeNode = (
  40. displayName: string,
  41. props: PropsType,
  42. defaultProps: DefaultPropsType,
  43. childrens: TreeNode[]
  44. ): ReactElementTreeNode => ({
  45. type: 'ReactElement',
  46. displayName,
  47. props,
  48. defaultProps,
  49. childrens,
  50. });
  51. export const createReactFragmentTreeNode = (
  52. key: ?Key,
  53. childrens: TreeNode[]
  54. ): ReactFragmentTreeNode => ({
  55. type: 'ReactFragment',
  56. key,
  57. childrens,
  58. });