@atlaskit/forge-react-types 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE.md +13 -0
  3. package/README.md +31 -0
  4. package/dist/cjs/components/__generated__/BadgeProps.js +5 -0
  5. package/dist/cjs/components/__generated__/BleedProps.js +5 -0
  6. package/dist/cjs/components/__generated__/BoxProps.js +126 -0
  7. package/dist/cjs/components/__generated__/ButtonGroupProps.js +5 -0
  8. package/dist/cjs/components/__generated__/ButtonProps.js +5 -0
  9. package/dist/cjs/components/__generated__/CheckboxProps.js +5 -0
  10. package/dist/cjs/components/__generated__/CodeBlockProps.js +5 -0
  11. package/dist/cjs/components/__generated__/CodeProps.js +5 -0
  12. package/dist/cjs/components/__generated__/DatePickerProps.js +5 -0
  13. package/dist/cjs/components/__generated__/DynamicTableProps.js +5 -0
  14. package/dist/cjs/components/__generated__/ErrorMessageProps.js +5 -0
  15. package/dist/cjs/components/__generated__/FlexProps.js +5 -0
  16. package/dist/cjs/components/__generated__/FormFooterProps.js +5 -0
  17. package/dist/cjs/components/__generated__/FormHeaderProps.js +5 -0
  18. package/dist/cjs/components/__generated__/FormProps.js +5 -0
  19. package/dist/cjs/components/__generated__/FormSectionProps.js +5 -0
  20. package/dist/cjs/components/__generated__/GridProps.js +5 -0
  21. package/dist/cjs/components/__generated__/HeadingProps.js +5 -0
  22. package/dist/cjs/components/__generated__/HelperMessageProps.js +5 -0
  23. package/dist/cjs/components/__generated__/IconProps.js +5 -0
  24. package/dist/cjs/components/__generated__/InlineProps.js +5 -0
  25. package/dist/cjs/components/__generated__/LabelProps.js +5 -0
  26. package/dist/cjs/components/__generated__/LinkButtonProps.js +5 -0
  27. package/dist/cjs/components/__generated__/LoadingButtonProps.js +5 -0
  28. package/dist/cjs/components/__generated__/LozengeProps.js +5 -0
  29. package/dist/cjs/components/__generated__/ModalBodyProps.js +5 -0
  30. package/dist/cjs/components/__generated__/ModalFooterProps.js +5 -0
  31. package/dist/cjs/components/__generated__/ModalHeaderProps.js +5 -0
  32. package/dist/cjs/components/__generated__/ModalProps.js +5 -0
  33. package/dist/cjs/components/__generated__/ModalTitleProps.js +5 -0
  34. package/dist/cjs/components/__generated__/ModalTransitionProps.js +5 -0
  35. package/dist/cjs/components/__generated__/ProgressBarProps.js +5 -0
  36. package/dist/cjs/components/__generated__/ProgressTrackerProps.js +5 -0
  37. package/dist/cjs/components/__generated__/RadioGroupProps.js +5 -0
  38. package/dist/cjs/components/__generated__/RadioProps.js +5 -0
  39. package/dist/cjs/components/__generated__/RangeProps.js +5 -0
  40. package/dist/cjs/components/__generated__/SectionMessageActionProps.js +5 -0
  41. package/dist/cjs/components/__generated__/SectionMessageProps.js +5 -0
  42. package/dist/cjs/components/__generated__/SelectProps.js +5 -0
  43. package/dist/cjs/components/__generated__/SpinnerProps.js +5 -0
  44. package/dist/cjs/components/__generated__/StackProps.js +5 -0
  45. package/dist/cjs/components/__generated__/TabListProps.js +5 -0
  46. package/dist/cjs/components/__generated__/TabPanelProps.js +5 -0
  47. package/dist/cjs/components/__generated__/TabProps.js +5 -0
  48. package/dist/cjs/components/__generated__/TabsProps.js +5 -0
  49. package/dist/cjs/components/__generated__/TagGroupProps.js +5 -0
  50. package/dist/cjs/components/__generated__/TagProps.js +5 -0
  51. package/dist/cjs/components/__generated__/TextAreaProps.js +5 -0
  52. package/dist/cjs/components/__generated__/TextfieldProps.js +5 -0
  53. package/dist/cjs/components/__generated__/ToggleProps.js +5 -0
  54. package/dist/cjs/components/__generated__/TooltipProps.js +5 -0
  55. package/dist/cjs/components/__generated__/ValidMessageProps.js +5 -0
  56. package/dist/cjs/components/__generated__/index.js +5 -0
  57. package/dist/cjs/index.js +5 -0
  58. package/dist/es2019/components/__generated__/BadgeProps.js +1 -0
  59. package/dist/es2019/components/__generated__/BleedProps.js +1 -0
  60. package/dist/es2019/components/__generated__/BoxProps.js +122 -0
  61. package/dist/es2019/components/__generated__/ButtonGroupProps.js +1 -0
  62. package/dist/es2019/components/__generated__/ButtonProps.js +1 -0
  63. package/dist/es2019/components/__generated__/CheckboxProps.js +1 -0
  64. package/dist/es2019/components/__generated__/CodeBlockProps.js +1 -0
  65. package/dist/es2019/components/__generated__/CodeProps.js +1 -0
  66. package/dist/es2019/components/__generated__/DatePickerProps.js +1 -0
  67. package/dist/es2019/components/__generated__/DynamicTableProps.js +1 -0
  68. package/dist/es2019/components/__generated__/ErrorMessageProps.js +1 -0
  69. package/dist/es2019/components/__generated__/FlexProps.js +1 -0
  70. package/dist/es2019/components/__generated__/FormFooterProps.js +1 -0
  71. package/dist/es2019/components/__generated__/FormHeaderProps.js +1 -0
  72. package/dist/es2019/components/__generated__/FormProps.js +1 -0
  73. package/dist/es2019/components/__generated__/FormSectionProps.js +1 -0
  74. package/dist/es2019/components/__generated__/GridProps.js +1 -0
  75. package/dist/es2019/components/__generated__/HeadingProps.js +1 -0
  76. package/dist/es2019/components/__generated__/HelperMessageProps.js +1 -0
  77. package/dist/es2019/components/__generated__/IconProps.js +1 -0
  78. package/dist/es2019/components/__generated__/InlineProps.js +1 -0
  79. package/dist/es2019/components/__generated__/LabelProps.js +1 -0
  80. package/dist/es2019/components/__generated__/LinkButtonProps.js +1 -0
  81. package/dist/es2019/components/__generated__/LoadingButtonProps.js +1 -0
  82. package/dist/es2019/components/__generated__/LozengeProps.js +1 -0
  83. package/dist/es2019/components/__generated__/ModalBodyProps.js +1 -0
  84. package/dist/es2019/components/__generated__/ModalFooterProps.js +1 -0
  85. package/dist/es2019/components/__generated__/ModalHeaderProps.js +1 -0
  86. package/dist/es2019/components/__generated__/ModalProps.js +1 -0
  87. package/dist/es2019/components/__generated__/ModalTitleProps.js +1 -0
  88. package/dist/es2019/components/__generated__/ModalTransitionProps.js +1 -0
  89. package/dist/es2019/components/__generated__/ProgressBarProps.js +1 -0
  90. package/dist/es2019/components/__generated__/ProgressTrackerProps.js +1 -0
  91. package/dist/es2019/components/__generated__/RadioGroupProps.js +1 -0
  92. package/dist/es2019/components/__generated__/RadioProps.js +1 -0
  93. package/dist/es2019/components/__generated__/RangeProps.js +1 -0
  94. package/dist/es2019/components/__generated__/SectionMessageActionProps.js +1 -0
  95. package/dist/es2019/components/__generated__/SectionMessageProps.js +1 -0
  96. package/dist/es2019/components/__generated__/SelectProps.js +1 -0
  97. package/dist/es2019/components/__generated__/SpinnerProps.js +1 -0
  98. package/dist/es2019/components/__generated__/StackProps.js +1 -0
  99. package/dist/es2019/components/__generated__/TabListProps.js +1 -0
  100. package/dist/es2019/components/__generated__/TabPanelProps.js +1 -0
  101. package/dist/es2019/components/__generated__/TabProps.js +1 -0
  102. package/dist/es2019/components/__generated__/TabsProps.js +1 -0
  103. package/dist/es2019/components/__generated__/TagGroupProps.js +1 -0
  104. package/dist/es2019/components/__generated__/TagProps.js +1 -0
  105. package/dist/es2019/components/__generated__/TextAreaProps.js +1 -0
  106. package/dist/es2019/components/__generated__/TextfieldProps.js +1 -0
  107. package/dist/es2019/components/__generated__/ToggleProps.js +1 -0
  108. package/dist/es2019/components/__generated__/TooltipProps.js +1 -0
  109. package/dist/es2019/components/__generated__/ValidMessageProps.js +1 -0
  110. package/dist/es2019/components/__generated__/index.js +1 -0
  111. package/dist/es2019/index.js +1 -0
  112. package/dist/esm/components/__generated__/BadgeProps.js +1 -0
  113. package/dist/esm/components/__generated__/BleedProps.js +1 -0
  114. package/dist/esm/components/__generated__/BoxProps.js +122 -0
  115. package/dist/esm/components/__generated__/ButtonGroupProps.js +1 -0
  116. package/dist/esm/components/__generated__/ButtonProps.js +1 -0
  117. package/dist/esm/components/__generated__/CheckboxProps.js +1 -0
  118. package/dist/esm/components/__generated__/CodeBlockProps.js +1 -0
  119. package/dist/esm/components/__generated__/CodeProps.js +1 -0
  120. package/dist/esm/components/__generated__/DatePickerProps.js +1 -0
  121. package/dist/esm/components/__generated__/DynamicTableProps.js +1 -0
  122. package/dist/esm/components/__generated__/ErrorMessageProps.js +1 -0
  123. package/dist/esm/components/__generated__/FlexProps.js +1 -0
  124. package/dist/esm/components/__generated__/FormFooterProps.js +1 -0
  125. package/dist/esm/components/__generated__/FormHeaderProps.js +1 -0
  126. package/dist/esm/components/__generated__/FormProps.js +1 -0
  127. package/dist/esm/components/__generated__/FormSectionProps.js +1 -0
  128. package/dist/esm/components/__generated__/GridProps.js +1 -0
  129. package/dist/esm/components/__generated__/HeadingProps.js +1 -0
  130. package/dist/esm/components/__generated__/HelperMessageProps.js +1 -0
  131. package/dist/esm/components/__generated__/IconProps.js +1 -0
  132. package/dist/esm/components/__generated__/InlineProps.js +1 -0
  133. package/dist/esm/components/__generated__/LabelProps.js +1 -0
  134. package/dist/esm/components/__generated__/LinkButtonProps.js +1 -0
  135. package/dist/esm/components/__generated__/LoadingButtonProps.js +1 -0
  136. package/dist/esm/components/__generated__/LozengeProps.js +1 -0
  137. package/dist/esm/components/__generated__/ModalBodyProps.js +1 -0
  138. package/dist/esm/components/__generated__/ModalFooterProps.js +1 -0
  139. package/dist/esm/components/__generated__/ModalHeaderProps.js +1 -0
  140. package/dist/esm/components/__generated__/ModalProps.js +1 -0
  141. package/dist/esm/components/__generated__/ModalTitleProps.js +1 -0
  142. package/dist/esm/components/__generated__/ModalTransitionProps.js +1 -0
  143. package/dist/esm/components/__generated__/ProgressBarProps.js +1 -0
  144. package/dist/esm/components/__generated__/ProgressTrackerProps.js +1 -0
  145. package/dist/esm/components/__generated__/RadioGroupProps.js +1 -0
  146. package/dist/esm/components/__generated__/RadioProps.js +1 -0
  147. package/dist/esm/components/__generated__/RangeProps.js +1 -0
  148. package/dist/esm/components/__generated__/SectionMessageActionProps.js +1 -0
  149. package/dist/esm/components/__generated__/SectionMessageProps.js +1 -0
  150. package/dist/esm/components/__generated__/SelectProps.js +1 -0
  151. package/dist/esm/components/__generated__/SpinnerProps.js +1 -0
  152. package/dist/esm/components/__generated__/StackProps.js +1 -0
  153. package/dist/esm/components/__generated__/TabListProps.js +1 -0
  154. package/dist/esm/components/__generated__/TabPanelProps.js +1 -0
  155. package/dist/esm/components/__generated__/TabProps.js +1 -0
  156. package/dist/esm/components/__generated__/TabsProps.js +1 -0
  157. package/dist/esm/components/__generated__/TagGroupProps.js +1 -0
  158. package/dist/esm/components/__generated__/TagProps.js +1 -0
  159. package/dist/esm/components/__generated__/TextAreaProps.js +1 -0
  160. package/dist/esm/components/__generated__/TextfieldProps.js +1 -0
  161. package/dist/esm/components/__generated__/ToggleProps.js +1 -0
  162. package/dist/esm/components/__generated__/TooltipProps.js +1 -0
  163. package/dist/esm/components/__generated__/ValidMessageProps.js +1 -0
  164. package/dist/esm/components/__generated__/index.js +1 -0
  165. package/dist/esm/index.js +1 -0
  166. package/dist/types/components/__generated__/BadgeProps.d.ts +14 -0
  167. package/dist/types/components/__generated__/BleedProps.d.ts +14 -0
  168. package/dist/types/components/__generated__/BoxProps.d.ts +93 -0
  169. package/dist/types/components/__generated__/ButtonGroupProps.d.ts +14 -0
  170. package/dist/types/components/__generated__/ButtonProps.d.ts +14 -0
  171. package/dist/types/components/__generated__/CheckboxProps.d.ts +14 -0
  172. package/dist/types/components/__generated__/CodeBlockProps.d.ts +14 -0
  173. package/dist/types/components/__generated__/CodeProps.d.ts +14 -0
  174. package/dist/types/components/__generated__/DatePickerProps.d.ts +47 -0
  175. package/dist/types/components/__generated__/DynamicTableProps.d.ts +16 -0
  176. package/dist/types/components/__generated__/ErrorMessageProps.d.ts +14 -0
  177. package/dist/types/components/__generated__/FlexProps.d.ts +14 -0
  178. package/dist/types/components/__generated__/FormFooterProps.d.ts +14 -0
  179. package/dist/types/components/__generated__/FormHeaderProps.d.ts +14 -0
  180. package/dist/types/components/__generated__/FormProps.d.ts +14 -0
  181. package/dist/types/components/__generated__/FormSectionProps.d.ts +14 -0
  182. package/dist/types/components/__generated__/GridProps.d.ts +14 -0
  183. package/dist/types/components/__generated__/HeadingProps.d.ts +15 -0
  184. package/dist/types/components/__generated__/HelperMessageProps.d.ts +14 -0
  185. package/dist/types/components/__generated__/IconProps.d.ts +17 -0
  186. package/dist/types/components/__generated__/InlineProps.d.ts +14 -0
  187. package/dist/types/components/__generated__/LabelProps.d.ts +13 -0
  188. package/dist/types/components/__generated__/LinkButtonProps.d.ts +15 -0
  189. package/dist/types/components/__generated__/LoadingButtonProps.d.ts +14 -0
  190. package/dist/types/components/__generated__/LozengeProps.d.ts +14 -0
  191. package/dist/types/components/__generated__/ModalBodyProps.d.ts +14 -0
  192. package/dist/types/components/__generated__/ModalFooterProps.d.ts +14 -0
  193. package/dist/types/components/__generated__/ModalHeaderProps.d.ts +14 -0
  194. package/dist/types/components/__generated__/ModalProps.d.ts +14 -0
  195. package/dist/types/components/__generated__/ModalTitleProps.d.ts +14 -0
  196. package/dist/types/components/__generated__/ModalTransitionProps.d.ts +14 -0
  197. package/dist/types/components/__generated__/ProgressBarProps.d.ts +14 -0
  198. package/dist/types/components/__generated__/ProgressTrackerProps.d.ts +15 -0
  199. package/dist/types/components/__generated__/RadioGroupProps.d.ts +14 -0
  200. package/dist/types/components/__generated__/RadioProps.d.ts +14 -0
  201. package/dist/types/components/__generated__/RangeProps.d.ts +14 -0
  202. package/dist/types/components/__generated__/SectionMessageActionProps.d.ts +14 -0
  203. package/dist/types/components/__generated__/SectionMessageProps.d.ts +14 -0
  204. package/dist/types/components/__generated__/SelectProps.d.ts +13 -0
  205. package/dist/types/components/__generated__/SpinnerProps.d.ts +14 -0
  206. package/dist/types/components/__generated__/StackProps.d.ts +14 -0
  207. package/dist/types/components/__generated__/TabListProps.d.ts +14 -0
  208. package/dist/types/components/__generated__/TabPanelProps.d.ts +14 -0
  209. package/dist/types/components/__generated__/TabProps.d.ts +14 -0
  210. package/dist/types/components/__generated__/TabsProps.d.ts +14 -0
  211. package/dist/types/components/__generated__/TagGroupProps.d.ts +14 -0
  212. package/dist/types/components/__generated__/TagProps.d.ts +14 -0
  213. package/dist/types/components/__generated__/TextAreaProps.d.ts +14 -0
  214. package/dist/types/components/__generated__/TextfieldProps.d.ts +14 -0
  215. package/dist/types/components/__generated__/ToggleProps.d.ts +14 -0
  216. package/dist/types/components/__generated__/TooltipProps.d.ts +14 -0
  217. package/dist/types/components/__generated__/ValidMessageProps.d.ts +14 -0
  218. package/dist/types/components/__generated__/index.d.ts +112 -0
  219. package/dist/types/index.d.ts +1 -0
  220. package/dist/types-ts4.5/components/__generated__/BadgeProps.d.ts +14 -0
  221. package/dist/types-ts4.5/components/__generated__/BleedProps.d.ts +14 -0
  222. package/dist/types-ts4.5/components/__generated__/BoxProps.d.ts +93 -0
  223. package/dist/types-ts4.5/components/__generated__/ButtonGroupProps.d.ts +14 -0
  224. package/dist/types-ts4.5/components/__generated__/ButtonProps.d.ts +14 -0
  225. package/dist/types-ts4.5/components/__generated__/CheckboxProps.d.ts +14 -0
  226. package/dist/types-ts4.5/components/__generated__/CodeBlockProps.d.ts +14 -0
  227. package/dist/types-ts4.5/components/__generated__/CodeProps.d.ts +14 -0
  228. package/dist/types-ts4.5/components/__generated__/DatePickerProps.d.ts +47 -0
  229. package/dist/types-ts4.5/components/__generated__/DynamicTableProps.d.ts +16 -0
  230. package/dist/types-ts4.5/components/__generated__/ErrorMessageProps.d.ts +14 -0
  231. package/dist/types-ts4.5/components/__generated__/FlexProps.d.ts +14 -0
  232. package/dist/types-ts4.5/components/__generated__/FormFooterProps.d.ts +14 -0
  233. package/dist/types-ts4.5/components/__generated__/FormHeaderProps.d.ts +14 -0
  234. package/dist/types-ts4.5/components/__generated__/FormProps.d.ts +14 -0
  235. package/dist/types-ts4.5/components/__generated__/FormSectionProps.d.ts +14 -0
  236. package/dist/types-ts4.5/components/__generated__/GridProps.d.ts +14 -0
  237. package/dist/types-ts4.5/components/__generated__/HeadingProps.d.ts +15 -0
  238. package/dist/types-ts4.5/components/__generated__/HelperMessageProps.d.ts +14 -0
  239. package/dist/types-ts4.5/components/__generated__/IconProps.d.ts +17 -0
  240. package/dist/types-ts4.5/components/__generated__/InlineProps.d.ts +14 -0
  241. package/dist/types-ts4.5/components/__generated__/LabelProps.d.ts +13 -0
  242. package/dist/types-ts4.5/components/__generated__/LinkButtonProps.d.ts +15 -0
  243. package/dist/types-ts4.5/components/__generated__/LoadingButtonProps.d.ts +14 -0
  244. package/dist/types-ts4.5/components/__generated__/LozengeProps.d.ts +14 -0
  245. package/dist/types-ts4.5/components/__generated__/ModalBodyProps.d.ts +14 -0
  246. package/dist/types-ts4.5/components/__generated__/ModalFooterProps.d.ts +14 -0
  247. package/dist/types-ts4.5/components/__generated__/ModalHeaderProps.d.ts +14 -0
  248. package/dist/types-ts4.5/components/__generated__/ModalProps.d.ts +14 -0
  249. package/dist/types-ts4.5/components/__generated__/ModalTitleProps.d.ts +14 -0
  250. package/dist/types-ts4.5/components/__generated__/ModalTransitionProps.d.ts +14 -0
  251. package/dist/types-ts4.5/components/__generated__/ProgressBarProps.d.ts +14 -0
  252. package/dist/types-ts4.5/components/__generated__/ProgressTrackerProps.d.ts +15 -0
  253. package/dist/types-ts4.5/components/__generated__/RadioGroupProps.d.ts +14 -0
  254. package/dist/types-ts4.5/components/__generated__/RadioProps.d.ts +14 -0
  255. package/dist/types-ts4.5/components/__generated__/RangeProps.d.ts +14 -0
  256. package/dist/types-ts4.5/components/__generated__/SectionMessageActionProps.d.ts +14 -0
  257. package/dist/types-ts4.5/components/__generated__/SectionMessageProps.d.ts +14 -0
  258. package/dist/types-ts4.5/components/__generated__/SelectProps.d.ts +13 -0
  259. package/dist/types-ts4.5/components/__generated__/SpinnerProps.d.ts +14 -0
  260. package/dist/types-ts4.5/components/__generated__/StackProps.d.ts +14 -0
  261. package/dist/types-ts4.5/components/__generated__/TabListProps.d.ts +14 -0
  262. package/dist/types-ts4.5/components/__generated__/TabPanelProps.d.ts +14 -0
  263. package/dist/types-ts4.5/components/__generated__/TabProps.d.ts +14 -0
  264. package/dist/types-ts4.5/components/__generated__/TabsProps.d.ts +14 -0
  265. package/dist/types-ts4.5/components/__generated__/TagGroupProps.d.ts +14 -0
  266. package/dist/types-ts4.5/components/__generated__/TagProps.d.ts +14 -0
  267. package/dist/types-ts4.5/components/__generated__/TextAreaProps.d.ts +14 -0
  268. package/dist/types-ts4.5/components/__generated__/TextfieldProps.d.ts +14 -0
  269. package/dist/types-ts4.5/components/__generated__/ToggleProps.d.ts +14 -0
  270. package/dist/types-ts4.5/components/__generated__/TooltipProps.d.ts +14 -0
  271. package/dist/types-ts4.5/components/__generated__/ValidMessageProps.d.ts +14 -0
  272. package/dist/types-ts4.5/components/__generated__/index.d.ts +112 -0
  273. package/dist/types-ts4.5/index.d.ts +1 -0
  274. package/package.json +69 -0
  275. package/scripts/codegen/codeGenerator.ts +431 -0
  276. package/scripts/codegen/componentPropTypes.ts +273 -0
  277. package/scripts/codegen/index.tsx +1 -0
  278. package/scripts/codegen-runner.ts +9 -0
  279. package/src/components/__generated__/BadgeProps.tsx +18 -0
  280. package/src/components/__generated__/BleedProps.tsx +18 -0
  281. package/src/components/__generated__/BoxProps.tsx +188 -0
  282. package/src/components/__generated__/ButtonGroupProps.tsx +18 -0
  283. package/src/components/__generated__/ButtonProps.tsx +18 -0
  284. package/src/components/__generated__/CheckboxProps.tsx +19 -0
  285. package/src/components/__generated__/CodeBlockProps.tsx +18 -0
  286. package/src/components/__generated__/CodeProps.tsx +18 -0
  287. package/src/components/__generated__/DatePickerProps.tsx +48 -0
  288. package/src/components/__generated__/DynamicTableProps.tsx +20 -0
  289. package/src/components/__generated__/ErrorMessageProps.tsx +18 -0
  290. package/src/components/__generated__/FlexProps.tsx +18 -0
  291. package/src/components/__generated__/FormFooterProps.tsx +18 -0
  292. package/src/components/__generated__/FormHeaderProps.tsx +18 -0
  293. package/src/components/__generated__/FormProps.tsx +15 -0
  294. package/src/components/__generated__/FormSectionProps.tsx +18 -0
  295. package/src/components/__generated__/GridProps.tsx +18 -0
  296. package/src/components/__generated__/HeadingProps.tsx +17 -0
  297. package/src/components/__generated__/HelperMessageProps.tsx +18 -0
  298. package/src/components/__generated__/IconProps.tsx +374 -0
  299. package/src/components/__generated__/InlineProps.tsx +18 -0
  300. package/src/components/__generated__/LabelProps.tsx +12 -0
  301. package/src/components/__generated__/LinkButtonProps.tsx +16 -0
  302. package/src/components/__generated__/LoadingButtonProps.tsx +18 -0
  303. package/src/components/__generated__/LozengeProps.tsx +18 -0
  304. package/src/components/__generated__/ModalBodyProps.tsx +18 -0
  305. package/src/components/__generated__/ModalFooterProps.tsx +18 -0
  306. package/src/components/__generated__/ModalHeaderProps.tsx +18 -0
  307. package/src/components/__generated__/ModalProps.tsx +18 -0
  308. package/src/components/__generated__/ModalTitleProps.tsx +18 -0
  309. package/src/components/__generated__/ModalTransitionProps.tsx +18 -0
  310. package/src/components/__generated__/ProgressBarProps.tsx +18 -0
  311. package/src/components/__generated__/ProgressTrackerProps.tsx +19 -0
  312. package/src/components/__generated__/RadioGroupProps.tsx +19 -0
  313. package/src/components/__generated__/RadioProps.tsx +19 -0
  314. package/src/components/__generated__/RangeProps.tsx +19 -0
  315. package/src/components/__generated__/SectionMessageActionProps.tsx +18 -0
  316. package/src/components/__generated__/SectionMessageProps.tsx +18 -0
  317. package/src/components/__generated__/SelectProps.tsx +16 -0
  318. package/src/components/__generated__/SpinnerProps.tsx +18 -0
  319. package/src/components/__generated__/StackProps.tsx +18 -0
  320. package/src/components/__generated__/TabListProps.tsx +18 -0
  321. package/src/components/__generated__/TabPanelProps.tsx +18 -0
  322. package/src/components/__generated__/TabProps.tsx +18 -0
  323. package/src/components/__generated__/TabsProps.tsx +18 -0
  324. package/src/components/__generated__/TagGroupProps.tsx +18 -0
  325. package/src/components/__generated__/TagProps.tsx +18 -0
  326. package/src/components/__generated__/TextAreaProps.tsx +19 -0
  327. package/src/components/__generated__/TextfieldProps.tsx +19 -0
  328. package/src/components/__generated__/ToggleProps.tsx +19 -0
  329. package/src/components/__generated__/TooltipProps.tsx +18 -0
  330. package/src/components/__generated__/ValidMessageProps.tsx +18 -0
  331. package/src/components/__generated__/index.ts +112 -0
  332. package/src/index.ts +54 -0
@@ -0,0 +1,431 @@
1
+ // eslint-disable-next-line import/no-extraneous-dependencies
2
+ import {
3
+ Symbol,
4
+ SourceFile,
5
+ TypeAliasDeclaration,
6
+ ImportDeclaration,
7
+ } from 'ts-morph';
8
+
9
+ const getNames = (symbol: Symbol) => {
10
+ const name = symbol.getName();
11
+ return [name, symbol.getAliasedSymbol()?.getName() ?? name];
12
+ };
13
+
14
+ const getDeclaration = (symbol: Symbol) => {
15
+ const declaration = symbol.getDeclarations()[0];
16
+ if (!declaration) {
17
+ throw new Error(
18
+ 'Could not find declaration for symbol: ' + symbol.getName(),
19
+ );
20
+ }
21
+ return declaration;
22
+ };
23
+
24
+ /**
25
+ * @param {Symbol} componentSymbol is the component symbol declared in
26
+ * the component index file. e.g.
27
+ * export type { SimpleTagProps as TagProps } from './tag/__generated__/index.partial';
28
+ * @param {SourceFile} sourceFile is the source file of the component prop symbol
29
+ * that was extracted from the component index file.
30
+ * @return {Symbol} the base component symbol that is defined in the source file.
31
+ */
32
+ const getBaseComponentSymbol = (
33
+ componentSymbol: Symbol,
34
+ sourceFile: SourceFile,
35
+ ) => {
36
+ const symbol = sourceFile.getExportSymbols().find((symbol) => {
37
+ // The base component symbol can be aliased, so we need to check both the
38
+ // symbol name and the aliased symbol name.
39
+ return getNames(componentSymbol).includes(symbol.getName());
40
+ });
41
+ if (!symbol) {
42
+ throw new Error(
43
+ 'Could not find base component symbol for component: ' +
44
+ componentSymbol.getName(),
45
+ );
46
+ }
47
+ return symbol;
48
+ };
49
+
50
+ /**
51
+ * from the base component prop symbol, extract other relevant type declarations.
52
+ * For example, the base component prop symbol declaration might look like:
53
+ *
54
+ * export type ButtonProps = Pick<
55
+ * PlatformButtonProps,
56
+ * 'onFocus' | 'spacing' | 'testId' | 'shouldFitContainer' | 'appearance' | 'type'>
57
+ *
58
+ * This function will extract the PlatformButtonProps type declaration.
59
+ */
60
+ const getDependentTypeDeclarations = (
61
+ baseComponentPropSymbol: Symbol,
62
+ sourceFile: SourceFile,
63
+ ) => {
64
+ return sourceFile.getTypeAliases().reduce((declarations, typeAlias) => {
65
+ const typeAliasName = typeAlias.getName();
66
+ if (
67
+ typeAliasName !== baseComponentPropSymbol.getName() &&
68
+ getDeclaration(baseComponentPropSymbol).getText().includes(typeAliasName)
69
+ ) {
70
+ declarations.push(typeAlias);
71
+ }
72
+ return declarations;
73
+ }, [] as Array<TypeAliasDeclaration>);
74
+ };
75
+
76
+ /**
77
+ * if the import is:
78
+ * import DefaultBox, { Box as PlatformBox } from '@atlaskit/primitives';
79
+ * extract:
80
+ * {
81
+ * default: 'DefaultBox',
82
+ * named: ['PlatformBox']
83
+ * }
84
+ */
85
+ const getImportedNames = (importDeclaration: ImportDeclaration) => {
86
+ return {
87
+ default: importDeclaration.getDefaultImport()?.getText() ?? null,
88
+ named: importDeclaration
89
+ .getNamedImports()
90
+ .map((specifier) => {
91
+ return specifier.getAliasNode()?.getText() ?? specifier.getName();
92
+ })
93
+ .filter((name) => !!name) as string[],
94
+ };
95
+ };
96
+
97
+ const isTokenUsed = (token: string, codes: string[]) => {
98
+ const check = new RegExp(`\\b${token}\\b`);
99
+ return codes.some((code) => check.test(code));
100
+ };
101
+
102
+ /**
103
+ * implement a custom ImportDeclaration object that allows remove named import
104
+ * and re-generate the modified import statement.
105
+ * This is for solving the edge case raised from DynamicTableProps.
106
+ */
107
+ class ImportDeclarationProxy {
108
+ private readonly base: ImportDeclaration;
109
+
110
+ private removedNamedImports = new Set<string>();
111
+
112
+ constructor(base: ImportDeclaration) {
113
+ this.base = base;
114
+ }
115
+
116
+ public removeNamedImport(namedImport: string) {
117
+ const target = this.base
118
+ .getNamedImports()
119
+ .find((tar) =>
120
+ [tar.getName(), tar.getAliasNode()?.getText()].includes(namedImport),
121
+ );
122
+ if (target) {
123
+ this.removedNamedImports.add(namedImport);
124
+ }
125
+ }
126
+
127
+ public getText() {
128
+ if (this.removedNamedImports.size > 0) {
129
+ const code = this.base.getText();
130
+ const matches = code.match(
131
+ /^(import |import type ){(.+)} from \'(.+)\';$/,
132
+ )!;
133
+ const importedNames = matches[2]!
134
+ .split(',')
135
+ .map((text) => text.trim())
136
+ .filter((text) => !this.removedNamedImports.has(text));
137
+
138
+ return `${matches[1]}{ ${importedNames.join(', ')} } from '${
139
+ matches[3]
140
+ }';`;
141
+ }
142
+ return this.base.getText();
143
+ }
144
+ }
145
+
146
+ const extractImportDeclarations = (
147
+ sourceFile: SourceFile,
148
+ componentPropSymbol: Symbol,
149
+ dependentTypeDeclarations: TypeAliasDeclaration[],
150
+ ) => {
151
+ const componentDeclarationCode =
152
+ getDeclaration(componentPropSymbol).getText();
153
+
154
+ const targetCodes = [
155
+ componentDeclarationCode,
156
+ ...dependentTypeDeclarations
157
+ .map((typeAlias) => typeAlias.getText())
158
+ .filter((code) => !!code),
159
+ ];
160
+ return sourceFile
161
+ .getImportDeclarations()
162
+ .filter((declaration) => {
163
+ const moduleSpecifier = declaration.getModuleSpecifierValue();
164
+ // only keep dependencies from @atlaskit and react
165
+ return (
166
+ moduleSpecifier.startsWith('@atlaskit/') || moduleSpecifier === 'react'
167
+ );
168
+ })
169
+ .reduce<ImportDeclarationProxy[]>((declarations, declaration) => {
170
+ // further filter out the the imports that are not used in the component specified.
171
+ const importedNames = getImportedNames(declaration);
172
+ const declarationProxy = new ImportDeclarationProxy(declaration);
173
+ let used = false;
174
+ if (
175
+ importedNames.default &&
176
+ isTokenUsed(importedNames.default, targetCodes)
177
+ ) {
178
+ used = true;
179
+ }
180
+ importedNames.named.forEach((namedImport) => {
181
+ if (isTokenUsed(namedImport, targetCodes)) {
182
+ used = true;
183
+ } else {
184
+ declarationProxy.removeNamedImport(namedImport);
185
+ }
186
+ });
187
+ if (used) {
188
+ declarations.push(declarationProxy);
189
+ }
190
+ return declarations;
191
+ }, []);
192
+ };
193
+
194
+ const getTypeDeclarationCodeFromImport = (
195
+ sourceFile: SourceFile,
196
+ packageName: string,
197
+ typeName: string,
198
+ ) => {
199
+ const importDeclaration = sourceFile.getImportDeclarationOrThrow(packageName);
200
+ const importSpecifier = importDeclaration
201
+ .getNamedImports()
202
+ .find(
203
+ (specifier) =>
204
+ specifier.getName() === typeName ||
205
+ specifier.getAliasNode()?.getText() === typeName,
206
+ );
207
+ const importTypeSymbol = importSpecifier?.getSymbol()?.getAliasedSymbol();
208
+ if (!importTypeSymbol) {
209
+ throw new Error(`Could not find type for ${typeName} in ${packageName}`);
210
+ }
211
+ const importSourcePath = importTypeSymbol
212
+ .getDeclarations()[0]
213
+ .getType()
214
+ .getText()
215
+ .match(/import\("(.+)"\)/)?.[1];
216
+ if (!importSourcePath) {
217
+ throw new Error(
218
+ `Could not find import source for ${typeName} in ${packageName}`,
219
+ );
220
+ }
221
+
222
+ const importSource = sourceFile
223
+ .getProject()
224
+ .addSourceFileAtPath(importSourcePath + '.ts');
225
+ try {
226
+ const typeDeclarationCode = importSource
227
+ .getExportSymbols()
228
+ .find(
229
+ (symbol) =>
230
+ symbol.getName() === typeName ||
231
+ symbol.getName() === importTypeSymbol.getName(),
232
+ )
233
+ ?.getDeclarations()[0]
234
+ ?.getText();
235
+ if (!typeDeclarationCode) {
236
+ return null;
237
+ }
238
+ if (importTypeSymbol.getName() !== typeName) {
239
+ return `${typeDeclarationCode}
240
+ type ${typeName} = ${importTypeSymbol.getName()};
241
+ `;
242
+ }
243
+ return typeDeclarationCode;
244
+ } finally {
245
+ sourceFile.getProject().removeSourceFile(importSource);
246
+ }
247
+ };
248
+
249
+ /**
250
+ * resolve types that are not part of the ADS components, and generate them
251
+ * locally. As we want to make sure that the package only depends on ADS
252
+ * types and not on any other package types.
253
+ */
254
+ const resolveExternalTypesCode = (
255
+ sourceFile: SourceFile,
256
+ componentPropSymbol: Symbol,
257
+ dependentTypeDeclarations: TypeAliasDeclaration[],
258
+ ) => {
259
+ // resolve types from @atlassian/forge-ui-types
260
+ const forgeUITypesImports = sourceFile
261
+ .getImportDeclarations()
262
+ .filter((declaration) => {
263
+ const moduleSpecifier = declaration.getModuleSpecifierValue();
264
+ return moduleSpecifier === '@atlassian/forge-ui-types';
265
+ });
266
+ if (forgeUITypesImports.length === 0) {
267
+ return null;
268
+ }
269
+
270
+ // only the type name that are used in the component prop type should be
271
+ // resolved
272
+ const targetImportedTypeNames = forgeUITypesImports.reduce<string[]>(
273
+ (importedTypeNames, imports) => {
274
+ const names = getImportedNames(imports);
275
+ const targetCodes = [
276
+ getDeclaration(componentPropSymbol).getText(),
277
+ ...dependentTypeDeclarations.map((typeAlias) => typeAlias.getText()),
278
+ ];
279
+ [names.default, ...names.named].forEach((importName) => {
280
+ if (
281
+ importName &&
282
+ !importedTypeNames.includes(importName) &&
283
+ isTokenUsed(importName, targetCodes)
284
+ ) {
285
+ importedTypeNames.push(importName);
286
+ }
287
+ });
288
+ return importedTypeNames;
289
+ },
290
+ [],
291
+ );
292
+ const declarationCode = targetImportedTypeNames
293
+ .map((typeName) => {
294
+ return getTypeDeclarationCodeFromImport(
295
+ sourceFile,
296
+ '@atlassian/forge-ui-types',
297
+ typeName,
298
+ );
299
+ })
300
+ .filter((code) => !!code)
301
+ .join('\n');
302
+
303
+ return !!declarationCode ? declarationCode : null;
304
+ };
305
+
306
+ type CodeConsolidator = (context: {
307
+ sourceFile: SourceFile;
308
+ importCode?: string | null;
309
+ externalTypesCode?: string | null;
310
+ dependentTypeCode?: string | null;
311
+ componentPropCode?: string | null;
312
+ }) => string;
313
+
314
+ const consolidateCodeSections: CodeConsolidator = ({
315
+ importCode,
316
+ externalTypesCode,
317
+ dependentTypeCode,
318
+ componentPropCode,
319
+ }) => {
320
+ return [importCode, externalTypesCode, dependentTypeCode, componentPropCode]
321
+ .filter((code) => !!code)
322
+ .join('\n\n');
323
+ };
324
+
325
+ const baseGenerateComponentPropTypeSourceCode = (
326
+ componentPropSymbol: Symbol,
327
+ sourceFile: SourceFile,
328
+ customConsolidator?: CodeConsolidator,
329
+ ) => {
330
+ // 1) extract the prop types from the source file
331
+ const baseComponentPropSymbol = getBaseComponentSymbol(
332
+ componentPropSymbol,
333
+ sourceFile,
334
+ );
335
+
336
+ // 2) from the prop type code further extract other relevant types in the source file
337
+ const dependentTypeDeclarations = getDependentTypeDeclarations(
338
+ baseComponentPropSymbol,
339
+ sourceFile,
340
+ );
341
+
342
+ // 3) extract the import statement
343
+ const importDeclarations = extractImportDeclarations(
344
+ sourceFile,
345
+ baseComponentPropSymbol,
346
+ dependentTypeDeclarations,
347
+ );
348
+
349
+ // 4) resolve other types definition (not part of the ADS components)
350
+ const externalTypesCode = resolveExternalTypesCode(
351
+ sourceFile,
352
+ baseComponentPropSymbol,
353
+ dependentTypeDeclarations,
354
+ );
355
+
356
+ // 5) generate the source file
357
+ const importCode = importDeclarations
358
+ .map((declaration) => declaration.getText())
359
+ .join('\n');
360
+ const dependentTypeCode = dependentTypeDeclarations
361
+ .map((typeAlias) => typeAlias.getText())
362
+ .join('\n');
363
+ const componentPropCode = getDeclaration(baseComponentPropSymbol).getText();
364
+
365
+ return (customConsolidator ?? consolidateCodeSections)({
366
+ sourceFile,
367
+ importCode,
368
+ externalTypesCode,
369
+ dependentTypeCode,
370
+ componentPropCode,
371
+ });
372
+ };
373
+
374
+ const boxPropsCodeConsolidator: CodeConsolidator = ({
375
+ sourceFile,
376
+ importCode,
377
+ externalTypesCode,
378
+ dependentTypeCode,
379
+ componentPropCode,
380
+ }) => {
381
+ const xcssValidator = sourceFile
382
+ .getVariableDeclarationOrThrow('xcssValidator')
383
+ .getText();
384
+
385
+ const utilsFile = sourceFile
386
+ .getProject()
387
+ .addSourceFileAtPath(
388
+ require.resolve(
389
+ '@atlassian/forge-ui/src/components/utils/xcssValidate.ts',
390
+ ),
391
+ );
392
+ try {
393
+ const xcssValidatorDeclarationCode = utilsFile.getEmitOutput({
394
+ emitOnlyDtsFiles: true,
395
+ }).compilerObject.outputFiles[0].text;
396
+ const xcssValidatorVariableDeclarationCode = [
397
+ xcssValidatorDeclarationCode,
398
+ `const ${xcssValidator};`,
399
+ ].join('\n');
400
+
401
+ return [
402
+ '/* eslint-disable @atlaskit/design-system/ensure-design-token-usage/preview */',
403
+ importCode,
404
+ xcssValidatorVariableDeclarationCode,
405
+ externalTypesCode,
406
+ dependentTypeCode,
407
+ componentPropCode,
408
+ ]
409
+ .filter((code) => !!code)
410
+ .join('\n\n');
411
+ } finally {
412
+ sourceFile.getProject().removeSourceFile(utilsFile);
413
+ }
414
+ };
415
+
416
+ const codeConsolidators: Record<string, CodeConsolidator> = {
417
+ BoxProps: boxPropsCodeConsolidator,
418
+ };
419
+
420
+ const generateComponentPropTypeSourceCode = (
421
+ componentPropSymbol: Symbol,
422
+ sourceFile: SourceFile,
423
+ ) => {
424
+ return baseGenerateComponentPropTypeSourceCode(
425
+ componentPropSymbol,
426
+ sourceFile,
427
+ codeConsolidators[componentPropSymbol.getName()],
428
+ );
429
+ };
430
+
431
+ export { generateComponentPropTypeSourceCode };
@@ -0,0 +1,273 @@
1
+ /* eslint-disable import/no-extraneous-dependencies */
2
+ import { createSignedArtifact } from '@atlassian/codegen';
3
+ import { Project } from 'ts-morph';
4
+ import type { Symbol, SourceFile, ExportSpecifier, Node } from 'ts-morph';
5
+ import { resolve } from 'path';
6
+ import fs from 'fs';
7
+ import { generateComponentPropTypeSourceCode } from './codeGenerator';
8
+
9
+ const forgeUIProject = new Project({
10
+ tsConfigFilePath: require.resolve('@atlassian/forge-ui/tsconfig.json'),
11
+ skipAddingFilesFromTsConfig: true,
12
+ });
13
+
14
+ const isExportSpecifier = (node: Node): node is ExportSpecifier =>
15
+ 'getExportDeclaration' in node;
16
+
17
+ const isSourceFile = (node: Node): node is SourceFile => 'getFilePath' in node;
18
+
19
+ /**
20
+ * This function tries to resolve the source file of a component symbol on
21
+ * the component index file. e.g.
22
+ * export { Badge } from './badge/__generated__/index.partial';
23
+ * in the index file will resolve to:
24
+ * platform/packages/forge/forge-ui/src/components/UIKit2-codegen/badge/__generated__/index.partial.tsx
25
+ */
26
+ const loadComponentSourceFile = (
27
+ componentSymbol: Symbol,
28
+ project: Project,
29
+ ): SourceFile | null => {
30
+ const declaration = componentSymbol.getDeclarations()[0];
31
+ if (!declaration || !isExportSpecifier(declaration)) {
32
+ return null;
33
+ }
34
+ const importSrcDeclaration = declaration
35
+ .getExportDeclaration()
36
+ .getModuleSpecifier()
37
+ ?.getSymbol()
38
+ ?.getValueDeclaration();
39
+ if (!importSrcDeclaration || !isSourceFile(importSrcDeclaration)) {
40
+ return null;
41
+ }
42
+ const importSrc = importSrcDeclaration.getFilePath();
43
+ const sourceFile = project.addSourceFileAtPath(importSrc);
44
+ const baseComponentSymbol = findBaseSymbolFromSourceFile(
45
+ sourceFile,
46
+ componentSymbol,
47
+ );
48
+ if (!baseComponentSymbol) {
49
+ return sourceFile;
50
+ }
51
+ // recursively resolve the source file of the base component symbol, it is
52
+ // needed for TagProps
53
+ let nestedSourceFile = loadComponentSourceFile(baseComponentSymbol!, project);
54
+ try {
55
+ return nestedSourceFile ?? sourceFile;
56
+ } finally {
57
+ if (nestedSourceFile) {
58
+ // unload the parent source file if nested source file is found
59
+ project.removeSourceFile(sourceFile);
60
+ }
61
+ }
62
+ };
63
+
64
+ const findBaseSymbolFromSourceFile = (
65
+ sourceFile: SourceFile,
66
+ symbol: Symbol,
67
+ ) => {
68
+ return sourceFile.getExportSymbols().find((exportSymbol) => {
69
+ return (
70
+ exportSymbol.getName() === symbol.getName() ||
71
+ exportSymbol.getName() === symbol.getAliasedSymbol()!.getName()
72
+ );
73
+ });
74
+ };
75
+
76
+ const makeComponentPropTypeSourceCode = (
77
+ componentSymbol: Symbol,
78
+ componentSourceFile: SourceFile,
79
+ ) => {
80
+ const baseComponentSymbol = findBaseSymbolFromSourceFile(
81
+ componentSourceFile,
82
+ componentSymbol,
83
+ );
84
+ if (!baseComponentSymbol) {
85
+ throw new Error(
86
+ 'Could not find base component symbol for component: ' +
87
+ componentSymbol.getName(),
88
+ );
89
+ }
90
+
91
+ return generateComponentPropTypeSourceCode(
92
+ componentSymbol,
93
+ componentSourceFile,
94
+ );
95
+ };
96
+
97
+ const generateComponentPropTypeSourceFiles = (
98
+ componentOutputDir: string,
99
+ componentPropTypeSymbols: Symbol[],
100
+ ) => {
101
+ // eslint-disable-next-line no-console
102
+ console.log('Generating component prop type source files');
103
+
104
+ // iterate component prop declarations in the index file
105
+ componentPropTypeSymbols.forEach((componentSymbol) => {
106
+ const componentSourceFile = loadComponentSourceFile(
107
+ componentSymbol,
108
+ forgeUIProject,
109
+ );
110
+ if (componentSourceFile) {
111
+ try {
112
+ const sourceCode = makeComponentPropTypeSourceCode(
113
+ componentSymbol,
114
+ componentSourceFile,
115
+ );
116
+ const sourceFilePath = resolve(
117
+ componentOutputDir,
118
+ `${componentSymbol.getName()}.tsx`,
119
+ );
120
+
121
+ const signedSourceCode = createSignedArtifact(
122
+ sourceCode,
123
+ 'yarn workspace @atlaskit/forge-react-types codegen',
124
+ {
125
+ description: `Extract component prop types from UIKit 2 components - ${componentSymbol.getName()}`,
126
+ dependencies: [componentSourceFile.getFilePath()],
127
+ outputFolder: componentOutputDir,
128
+ },
129
+ );
130
+ fs.writeFileSync(sourceFilePath, signedSourceCode);
131
+
132
+ // eslint-disable-next-line no-console
133
+ console.log(
134
+ `Generated component prop type file: ${componentSymbol.getName()}`,
135
+ );
136
+ } finally {
137
+ forgeUIProject.removeSourceFile(componentSourceFile);
138
+ }
139
+ } else {
140
+ // eslint-disable-next-line no-console
141
+ console.error(
142
+ `Could not find source file for component: ${componentSymbol.getName()}`,
143
+ );
144
+ }
145
+ });
146
+ };
147
+
148
+ const generateComponentIndexSourceFile = (
149
+ componentOutputDir: string,
150
+ componentPropTypeSymbols: Symbol[],
151
+ ) => {
152
+ // eslint-disable-next-line no-console
153
+ console.log('Generating index file for component prop types');
154
+
155
+ const indexFileContent = componentPropTypeSymbols
156
+ .map((symbol) => {
157
+ const componentName = symbol.getName();
158
+ const componentAliasedName = symbol.getAliasedSymbol()?.getName();
159
+ if (componentName !== componentAliasedName) {
160
+ return `export type { ${componentAliasedName} as ${componentName} } from './${componentName}';`;
161
+ } else {
162
+ return `export type { ${componentName} } from './${componentName}';`;
163
+ }
164
+ })
165
+ .join('\n');
166
+
167
+ const indexFilePath = resolve(componentOutputDir, 'index.ts');
168
+ const signedIndexFileContent = createSignedArtifact(
169
+ indexFileContent,
170
+ 'yarn workspace @atlaskit/forge-react-types codegen',
171
+ {
172
+ description: 'Index file for component prop types',
173
+ dependencies: componentPropTypeSymbols.map(
174
+ (symbol) => `${componentOutputDir}/${symbol.getName()}.tsx`,
175
+ ),
176
+ outputFolder: componentOutputDir,
177
+ },
178
+ );
179
+ fs.writeFileSync(indexFilePath, signedIndexFileContent);
180
+ };
181
+
182
+ const updatePackageJsonWithADSComponentDependencies = (
183
+ componentOutputDir: string,
184
+ ) => {
185
+ // collect all @atlaskit dependencies from the generated code in the component output dir
186
+ const componentOutputProject = new Project({
187
+ tsConfigFilePath: require.resolve('../../tsconfig.json'),
188
+ });
189
+ const utilizedPackages = componentOutputProject
190
+ .getSourceFiles(`${componentOutputDir}/*.tsx`)
191
+ .reduce((packages, source) => {
192
+ source.getImportDeclarations().forEach((importDeclaration) => {
193
+ const importPath = importDeclaration.getModuleSpecifierValue();
194
+ // clean up import path so it contains only @atlaskit/package-name (without @atlaskit/package-name/further)
195
+ const packageMatch = importPath.match(/(@atlaskit\/[^/]+)/);
196
+ if (packageMatch) {
197
+ packages.add(packageMatch[1]);
198
+ }
199
+ });
200
+ return packages;
201
+ }, new Set<string>());
202
+
203
+ // eslint-disable-next-line no-console
204
+ console.log('Updating package.json with ADS component dependencies');
205
+
206
+ const forgeUIPackageJson = JSON.parse(
207
+ fs
208
+ .readFileSync(require.resolve('@atlassian/forge-ui/package.json'))
209
+ .toString(),
210
+ );
211
+ const packageJsonPath = resolve(__dirname, '..', '..', 'package.json');
212
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
213
+
214
+ // remove all existing @atlaskit dependencies from packageJson
215
+ const updatedDependencies = Object.entries<string>(packageJson.dependencies)
216
+ .filter(([key]) => !key.startsWith('@atlaskit/'))
217
+ .concat(
218
+ Object.entries<string>(forgeUIPackageJson.dependencies).filter(([key]) =>
219
+ utilizedPackages.has(key),
220
+ ),
221
+ )
222
+ .sort(([a], [b]) => a.localeCompare(b))
223
+ .reduce<Record<string, string>>((acc, [key, value]) => {
224
+ acc[key] = value;
225
+ return acc;
226
+ }, {});
227
+
228
+ packageJson.dependencies = updatedDependencies;
229
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
230
+ };
231
+
232
+ const generateComponentPropTypes = (componentPropTypeFilter?: string) => {
233
+ const componentOutputDir = resolve(
234
+ __dirname,
235
+ '..',
236
+ '..',
237
+ 'src',
238
+ 'components',
239
+ '__generated__',
240
+ );
241
+ const componentIndexSourceFile = forgeUIProject.addSourceFileAtPath(
242
+ require.resolve('@atlassian/forge-ui/src/components/UIKit2-codegen'),
243
+ );
244
+ try {
245
+ const componentPropTypeSymbols = componentIndexSourceFile
246
+ .getExportSymbols()
247
+ .filter((symbol) =>
248
+ symbol.getName().endsWith(componentPropTypeFilter ?? 'Props'),
249
+ )
250
+ .sort((a, b) => a.getName().localeCompare(b.getName()));
251
+
252
+ generateComponentPropTypeSourceFiles(
253
+ componentOutputDir,
254
+ componentPropTypeSymbols,
255
+ );
256
+
257
+ // only generate index file if componentPropTypeFilter is not provided
258
+ // this is to avoid overwriting the index file when generating a single
259
+ // component.
260
+ if (!componentPropTypeFilter) {
261
+ generateComponentIndexSourceFile(
262
+ componentOutputDir,
263
+ componentPropTypeSymbols,
264
+ );
265
+ }
266
+
267
+ updatePackageJsonWithADSComponentDependencies(componentOutputDir);
268
+ } finally {
269
+ forgeUIProject.removeSourceFile(componentIndexSourceFile);
270
+ }
271
+ };
272
+
273
+ export { generateComponentPropTypes };
@@ -0,0 +1 @@
1
+ export { generateComponentPropTypes } from './componentPropTypes';
@@ -0,0 +1,9 @@
1
+ import { generateComponentPropTypes } from './codegen';
2
+
3
+ if (process.argv.length < 3) {
4
+ generateComponentPropTypes();
5
+ } else {
6
+ // e.g yarn workspace @atlaskit/forge-react-types codegen ButtonProp
7
+ const componentPropTypeFilter = process.argv[2];
8
+ generateComponentPropTypes(componentPropTypeFilter);
9
+ }