@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.
- package/CHANGELOG.md +11 -0
- package/LICENSE.md +13 -0
- package/README.md +31 -0
- package/dist/cjs/components/__generated__/BadgeProps.js +5 -0
- package/dist/cjs/components/__generated__/BleedProps.js +5 -0
- package/dist/cjs/components/__generated__/BoxProps.js +126 -0
- package/dist/cjs/components/__generated__/ButtonGroupProps.js +5 -0
- package/dist/cjs/components/__generated__/ButtonProps.js +5 -0
- package/dist/cjs/components/__generated__/CheckboxProps.js +5 -0
- package/dist/cjs/components/__generated__/CodeBlockProps.js +5 -0
- package/dist/cjs/components/__generated__/CodeProps.js +5 -0
- package/dist/cjs/components/__generated__/DatePickerProps.js +5 -0
- package/dist/cjs/components/__generated__/DynamicTableProps.js +5 -0
- package/dist/cjs/components/__generated__/ErrorMessageProps.js +5 -0
- package/dist/cjs/components/__generated__/FlexProps.js +5 -0
- package/dist/cjs/components/__generated__/FormFooterProps.js +5 -0
- package/dist/cjs/components/__generated__/FormHeaderProps.js +5 -0
- package/dist/cjs/components/__generated__/FormProps.js +5 -0
- package/dist/cjs/components/__generated__/FormSectionProps.js +5 -0
- package/dist/cjs/components/__generated__/GridProps.js +5 -0
- package/dist/cjs/components/__generated__/HeadingProps.js +5 -0
- package/dist/cjs/components/__generated__/HelperMessageProps.js +5 -0
- package/dist/cjs/components/__generated__/IconProps.js +5 -0
- package/dist/cjs/components/__generated__/InlineProps.js +5 -0
- package/dist/cjs/components/__generated__/LabelProps.js +5 -0
- package/dist/cjs/components/__generated__/LinkButtonProps.js +5 -0
- package/dist/cjs/components/__generated__/LoadingButtonProps.js +5 -0
- package/dist/cjs/components/__generated__/LozengeProps.js +5 -0
- package/dist/cjs/components/__generated__/ModalBodyProps.js +5 -0
- package/dist/cjs/components/__generated__/ModalFooterProps.js +5 -0
- package/dist/cjs/components/__generated__/ModalHeaderProps.js +5 -0
- package/dist/cjs/components/__generated__/ModalProps.js +5 -0
- package/dist/cjs/components/__generated__/ModalTitleProps.js +5 -0
- package/dist/cjs/components/__generated__/ModalTransitionProps.js +5 -0
- package/dist/cjs/components/__generated__/ProgressBarProps.js +5 -0
- package/dist/cjs/components/__generated__/ProgressTrackerProps.js +5 -0
- package/dist/cjs/components/__generated__/RadioGroupProps.js +5 -0
- package/dist/cjs/components/__generated__/RadioProps.js +5 -0
- package/dist/cjs/components/__generated__/RangeProps.js +5 -0
- package/dist/cjs/components/__generated__/SectionMessageActionProps.js +5 -0
- package/dist/cjs/components/__generated__/SectionMessageProps.js +5 -0
- package/dist/cjs/components/__generated__/SelectProps.js +5 -0
- package/dist/cjs/components/__generated__/SpinnerProps.js +5 -0
- package/dist/cjs/components/__generated__/StackProps.js +5 -0
- package/dist/cjs/components/__generated__/TabListProps.js +5 -0
- package/dist/cjs/components/__generated__/TabPanelProps.js +5 -0
- package/dist/cjs/components/__generated__/TabProps.js +5 -0
- package/dist/cjs/components/__generated__/TabsProps.js +5 -0
- package/dist/cjs/components/__generated__/TagGroupProps.js +5 -0
- package/dist/cjs/components/__generated__/TagProps.js +5 -0
- package/dist/cjs/components/__generated__/TextAreaProps.js +5 -0
- package/dist/cjs/components/__generated__/TextfieldProps.js +5 -0
- package/dist/cjs/components/__generated__/ToggleProps.js +5 -0
- package/dist/cjs/components/__generated__/TooltipProps.js +5 -0
- package/dist/cjs/components/__generated__/ValidMessageProps.js +5 -0
- package/dist/cjs/components/__generated__/index.js +5 -0
- package/dist/cjs/index.js +5 -0
- package/dist/es2019/components/__generated__/BadgeProps.js +1 -0
- package/dist/es2019/components/__generated__/BleedProps.js +1 -0
- package/dist/es2019/components/__generated__/BoxProps.js +122 -0
- package/dist/es2019/components/__generated__/ButtonGroupProps.js +1 -0
- package/dist/es2019/components/__generated__/ButtonProps.js +1 -0
- package/dist/es2019/components/__generated__/CheckboxProps.js +1 -0
- package/dist/es2019/components/__generated__/CodeBlockProps.js +1 -0
- package/dist/es2019/components/__generated__/CodeProps.js +1 -0
- package/dist/es2019/components/__generated__/DatePickerProps.js +1 -0
- package/dist/es2019/components/__generated__/DynamicTableProps.js +1 -0
- package/dist/es2019/components/__generated__/ErrorMessageProps.js +1 -0
- package/dist/es2019/components/__generated__/FlexProps.js +1 -0
- package/dist/es2019/components/__generated__/FormFooterProps.js +1 -0
- package/dist/es2019/components/__generated__/FormHeaderProps.js +1 -0
- package/dist/es2019/components/__generated__/FormProps.js +1 -0
- package/dist/es2019/components/__generated__/FormSectionProps.js +1 -0
- package/dist/es2019/components/__generated__/GridProps.js +1 -0
- package/dist/es2019/components/__generated__/HeadingProps.js +1 -0
- package/dist/es2019/components/__generated__/HelperMessageProps.js +1 -0
- package/dist/es2019/components/__generated__/IconProps.js +1 -0
- package/dist/es2019/components/__generated__/InlineProps.js +1 -0
- package/dist/es2019/components/__generated__/LabelProps.js +1 -0
- package/dist/es2019/components/__generated__/LinkButtonProps.js +1 -0
- package/dist/es2019/components/__generated__/LoadingButtonProps.js +1 -0
- package/dist/es2019/components/__generated__/LozengeProps.js +1 -0
- package/dist/es2019/components/__generated__/ModalBodyProps.js +1 -0
- package/dist/es2019/components/__generated__/ModalFooterProps.js +1 -0
- package/dist/es2019/components/__generated__/ModalHeaderProps.js +1 -0
- package/dist/es2019/components/__generated__/ModalProps.js +1 -0
- package/dist/es2019/components/__generated__/ModalTitleProps.js +1 -0
- package/dist/es2019/components/__generated__/ModalTransitionProps.js +1 -0
- package/dist/es2019/components/__generated__/ProgressBarProps.js +1 -0
- package/dist/es2019/components/__generated__/ProgressTrackerProps.js +1 -0
- package/dist/es2019/components/__generated__/RadioGroupProps.js +1 -0
- package/dist/es2019/components/__generated__/RadioProps.js +1 -0
- package/dist/es2019/components/__generated__/RangeProps.js +1 -0
- package/dist/es2019/components/__generated__/SectionMessageActionProps.js +1 -0
- package/dist/es2019/components/__generated__/SectionMessageProps.js +1 -0
- package/dist/es2019/components/__generated__/SelectProps.js +1 -0
- package/dist/es2019/components/__generated__/SpinnerProps.js +1 -0
- package/dist/es2019/components/__generated__/StackProps.js +1 -0
- package/dist/es2019/components/__generated__/TabListProps.js +1 -0
- package/dist/es2019/components/__generated__/TabPanelProps.js +1 -0
- package/dist/es2019/components/__generated__/TabProps.js +1 -0
- package/dist/es2019/components/__generated__/TabsProps.js +1 -0
- package/dist/es2019/components/__generated__/TagGroupProps.js +1 -0
- package/dist/es2019/components/__generated__/TagProps.js +1 -0
- package/dist/es2019/components/__generated__/TextAreaProps.js +1 -0
- package/dist/es2019/components/__generated__/TextfieldProps.js +1 -0
- package/dist/es2019/components/__generated__/ToggleProps.js +1 -0
- package/dist/es2019/components/__generated__/TooltipProps.js +1 -0
- package/dist/es2019/components/__generated__/ValidMessageProps.js +1 -0
- package/dist/es2019/components/__generated__/index.js +1 -0
- package/dist/es2019/index.js +1 -0
- package/dist/esm/components/__generated__/BadgeProps.js +1 -0
- package/dist/esm/components/__generated__/BleedProps.js +1 -0
- package/dist/esm/components/__generated__/BoxProps.js +122 -0
- package/dist/esm/components/__generated__/ButtonGroupProps.js +1 -0
- package/dist/esm/components/__generated__/ButtonProps.js +1 -0
- package/dist/esm/components/__generated__/CheckboxProps.js +1 -0
- package/dist/esm/components/__generated__/CodeBlockProps.js +1 -0
- package/dist/esm/components/__generated__/CodeProps.js +1 -0
- package/dist/esm/components/__generated__/DatePickerProps.js +1 -0
- package/dist/esm/components/__generated__/DynamicTableProps.js +1 -0
- package/dist/esm/components/__generated__/ErrorMessageProps.js +1 -0
- package/dist/esm/components/__generated__/FlexProps.js +1 -0
- package/dist/esm/components/__generated__/FormFooterProps.js +1 -0
- package/dist/esm/components/__generated__/FormHeaderProps.js +1 -0
- package/dist/esm/components/__generated__/FormProps.js +1 -0
- package/dist/esm/components/__generated__/FormSectionProps.js +1 -0
- package/dist/esm/components/__generated__/GridProps.js +1 -0
- package/dist/esm/components/__generated__/HeadingProps.js +1 -0
- package/dist/esm/components/__generated__/HelperMessageProps.js +1 -0
- package/dist/esm/components/__generated__/IconProps.js +1 -0
- package/dist/esm/components/__generated__/InlineProps.js +1 -0
- package/dist/esm/components/__generated__/LabelProps.js +1 -0
- package/dist/esm/components/__generated__/LinkButtonProps.js +1 -0
- package/dist/esm/components/__generated__/LoadingButtonProps.js +1 -0
- package/dist/esm/components/__generated__/LozengeProps.js +1 -0
- package/dist/esm/components/__generated__/ModalBodyProps.js +1 -0
- package/dist/esm/components/__generated__/ModalFooterProps.js +1 -0
- package/dist/esm/components/__generated__/ModalHeaderProps.js +1 -0
- package/dist/esm/components/__generated__/ModalProps.js +1 -0
- package/dist/esm/components/__generated__/ModalTitleProps.js +1 -0
- package/dist/esm/components/__generated__/ModalTransitionProps.js +1 -0
- package/dist/esm/components/__generated__/ProgressBarProps.js +1 -0
- package/dist/esm/components/__generated__/ProgressTrackerProps.js +1 -0
- package/dist/esm/components/__generated__/RadioGroupProps.js +1 -0
- package/dist/esm/components/__generated__/RadioProps.js +1 -0
- package/dist/esm/components/__generated__/RangeProps.js +1 -0
- package/dist/esm/components/__generated__/SectionMessageActionProps.js +1 -0
- package/dist/esm/components/__generated__/SectionMessageProps.js +1 -0
- package/dist/esm/components/__generated__/SelectProps.js +1 -0
- package/dist/esm/components/__generated__/SpinnerProps.js +1 -0
- package/dist/esm/components/__generated__/StackProps.js +1 -0
- package/dist/esm/components/__generated__/TabListProps.js +1 -0
- package/dist/esm/components/__generated__/TabPanelProps.js +1 -0
- package/dist/esm/components/__generated__/TabProps.js +1 -0
- package/dist/esm/components/__generated__/TabsProps.js +1 -0
- package/dist/esm/components/__generated__/TagGroupProps.js +1 -0
- package/dist/esm/components/__generated__/TagProps.js +1 -0
- package/dist/esm/components/__generated__/TextAreaProps.js +1 -0
- package/dist/esm/components/__generated__/TextfieldProps.js +1 -0
- package/dist/esm/components/__generated__/ToggleProps.js +1 -0
- package/dist/esm/components/__generated__/TooltipProps.js +1 -0
- package/dist/esm/components/__generated__/ValidMessageProps.js +1 -0
- package/dist/esm/components/__generated__/index.js +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/types/components/__generated__/BadgeProps.d.ts +14 -0
- package/dist/types/components/__generated__/BleedProps.d.ts +14 -0
- package/dist/types/components/__generated__/BoxProps.d.ts +93 -0
- package/dist/types/components/__generated__/ButtonGroupProps.d.ts +14 -0
- package/dist/types/components/__generated__/ButtonProps.d.ts +14 -0
- package/dist/types/components/__generated__/CheckboxProps.d.ts +14 -0
- package/dist/types/components/__generated__/CodeBlockProps.d.ts +14 -0
- package/dist/types/components/__generated__/CodeProps.d.ts +14 -0
- package/dist/types/components/__generated__/DatePickerProps.d.ts +47 -0
- package/dist/types/components/__generated__/DynamicTableProps.d.ts +16 -0
- package/dist/types/components/__generated__/ErrorMessageProps.d.ts +14 -0
- package/dist/types/components/__generated__/FlexProps.d.ts +14 -0
- package/dist/types/components/__generated__/FormFooterProps.d.ts +14 -0
- package/dist/types/components/__generated__/FormHeaderProps.d.ts +14 -0
- package/dist/types/components/__generated__/FormProps.d.ts +14 -0
- package/dist/types/components/__generated__/FormSectionProps.d.ts +14 -0
- package/dist/types/components/__generated__/GridProps.d.ts +14 -0
- package/dist/types/components/__generated__/HeadingProps.d.ts +15 -0
- package/dist/types/components/__generated__/HelperMessageProps.d.ts +14 -0
- package/dist/types/components/__generated__/IconProps.d.ts +17 -0
- package/dist/types/components/__generated__/InlineProps.d.ts +14 -0
- package/dist/types/components/__generated__/LabelProps.d.ts +13 -0
- package/dist/types/components/__generated__/LinkButtonProps.d.ts +15 -0
- package/dist/types/components/__generated__/LoadingButtonProps.d.ts +14 -0
- package/dist/types/components/__generated__/LozengeProps.d.ts +14 -0
- package/dist/types/components/__generated__/ModalBodyProps.d.ts +14 -0
- package/dist/types/components/__generated__/ModalFooterProps.d.ts +14 -0
- package/dist/types/components/__generated__/ModalHeaderProps.d.ts +14 -0
- package/dist/types/components/__generated__/ModalProps.d.ts +14 -0
- package/dist/types/components/__generated__/ModalTitleProps.d.ts +14 -0
- package/dist/types/components/__generated__/ModalTransitionProps.d.ts +14 -0
- package/dist/types/components/__generated__/ProgressBarProps.d.ts +14 -0
- package/dist/types/components/__generated__/ProgressTrackerProps.d.ts +15 -0
- package/dist/types/components/__generated__/RadioGroupProps.d.ts +14 -0
- package/dist/types/components/__generated__/RadioProps.d.ts +14 -0
- package/dist/types/components/__generated__/RangeProps.d.ts +14 -0
- package/dist/types/components/__generated__/SectionMessageActionProps.d.ts +14 -0
- package/dist/types/components/__generated__/SectionMessageProps.d.ts +14 -0
- package/dist/types/components/__generated__/SelectProps.d.ts +13 -0
- package/dist/types/components/__generated__/SpinnerProps.d.ts +14 -0
- package/dist/types/components/__generated__/StackProps.d.ts +14 -0
- package/dist/types/components/__generated__/TabListProps.d.ts +14 -0
- package/dist/types/components/__generated__/TabPanelProps.d.ts +14 -0
- package/dist/types/components/__generated__/TabProps.d.ts +14 -0
- package/dist/types/components/__generated__/TabsProps.d.ts +14 -0
- package/dist/types/components/__generated__/TagGroupProps.d.ts +14 -0
- package/dist/types/components/__generated__/TagProps.d.ts +14 -0
- package/dist/types/components/__generated__/TextAreaProps.d.ts +14 -0
- package/dist/types/components/__generated__/TextfieldProps.d.ts +14 -0
- package/dist/types/components/__generated__/ToggleProps.d.ts +14 -0
- package/dist/types/components/__generated__/TooltipProps.d.ts +14 -0
- package/dist/types/components/__generated__/ValidMessageProps.d.ts +14 -0
- package/dist/types/components/__generated__/index.d.ts +112 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types-ts4.5/components/__generated__/BadgeProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/BleedProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/BoxProps.d.ts +93 -0
- package/dist/types-ts4.5/components/__generated__/ButtonGroupProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/ButtonProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/CheckboxProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/CodeBlockProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/CodeProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/DatePickerProps.d.ts +47 -0
- package/dist/types-ts4.5/components/__generated__/DynamicTableProps.d.ts +16 -0
- package/dist/types-ts4.5/components/__generated__/ErrorMessageProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/FlexProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/FormFooterProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/FormHeaderProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/FormProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/FormSectionProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/GridProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/HeadingProps.d.ts +15 -0
- package/dist/types-ts4.5/components/__generated__/HelperMessageProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/IconProps.d.ts +17 -0
- package/dist/types-ts4.5/components/__generated__/InlineProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/LabelProps.d.ts +13 -0
- package/dist/types-ts4.5/components/__generated__/LinkButtonProps.d.ts +15 -0
- package/dist/types-ts4.5/components/__generated__/LoadingButtonProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/LozengeProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/ModalBodyProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/ModalFooterProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/ModalHeaderProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/ModalProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/ModalTitleProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/ModalTransitionProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/ProgressBarProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/ProgressTrackerProps.d.ts +15 -0
- package/dist/types-ts4.5/components/__generated__/RadioGroupProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/RadioProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/RangeProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/SectionMessageActionProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/SectionMessageProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/SelectProps.d.ts +13 -0
- package/dist/types-ts4.5/components/__generated__/SpinnerProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/StackProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/TabListProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/TabPanelProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/TabProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/TabsProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/TagGroupProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/TagProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/TextAreaProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/TextfieldProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/ToggleProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/TooltipProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/ValidMessageProps.d.ts +14 -0
- package/dist/types-ts4.5/components/__generated__/index.d.ts +112 -0
- package/dist/types-ts4.5/index.d.ts +1 -0
- package/package.json +69 -0
- package/scripts/codegen/codeGenerator.ts +431 -0
- package/scripts/codegen/componentPropTypes.ts +273 -0
- package/scripts/codegen/index.tsx +1 -0
- package/scripts/codegen-runner.ts +9 -0
- package/src/components/__generated__/BadgeProps.tsx +18 -0
- package/src/components/__generated__/BleedProps.tsx +18 -0
- package/src/components/__generated__/BoxProps.tsx +188 -0
- package/src/components/__generated__/ButtonGroupProps.tsx +18 -0
- package/src/components/__generated__/ButtonProps.tsx +18 -0
- package/src/components/__generated__/CheckboxProps.tsx +19 -0
- package/src/components/__generated__/CodeBlockProps.tsx +18 -0
- package/src/components/__generated__/CodeProps.tsx +18 -0
- package/src/components/__generated__/DatePickerProps.tsx +48 -0
- package/src/components/__generated__/DynamicTableProps.tsx +20 -0
- package/src/components/__generated__/ErrorMessageProps.tsx +18 -0
- package/src/components/__generated__/FlexProps.tsx +18 -0
- package/src/components/__generated__/FormFooterProps.tsx +18 -0
- package/src/components/__generated__/FormHeaderProps.tsx +18 -0
- package/src/components/__generated__/FormProps.tsx +15 -0
- package/src/components/__generated__/FormSectionProps.tsx +18 -0
- package/src/components/__generated__/GridProps.tsx +18 -0
- package/src/components/__generated__/HeadingProps.tsx +17 -0
- package/src/components/__generated__/HelperMessageProps.tsx +18 -0
- package/src/components/__generated__/IconProps.tsx +374 -0
- package/src/components/__generated__/InlineProps.tsx +18 -0
- package/src/components/__generated__/LabelProps.tsx +12 -0
- package/src/components/__generated__/LinkButtonProps.tsx +16 -0
- package/src/components/__generated__/LoadingButtonProps.tsx +18 -0
- package/src/components/__generated__/LozengeProps.tsx +18 -0
- package/src/components/__generated__/ModalBodyProps.tsx +18 -0
- package/src/components/__generated__/ModalFooterProps.tsx +18 -0
- package/src/components/__generated__/ModalHeaderProps.tsx +18 -0
- package/src/components/__generated__/ModalProps.tsx +18 -0
- package/src/components/__generated__/ModalTitleProps.tsx +18 -0
- package/src/components/__generated__/ModalTransitionProps.tsx +18 -0
- package/src/components/__generated__/ProgressBarProps.tsx +18 -0
- package/src/components/__generated__/ProgressTrackerProps.tsx +19 -0
- package/src/components/__generated__/RadioGroupProps.tsx +19 -0
- package/src/components/__generated__/RadioProps.tsx +19 -0
- package/src/components/__generated__/RangeProps.tsx +19 -0
- package/src/components/__generated__/SectionMessageActionProps.tsx +18 -0
- package/src/components/__generated__/SectionMessageProps.tsx +18 -0
- package/src/components/__generated__/SelectProps.tsx +16 -0
- package/src/components/__generated__/SpinnerProps.tsx +18 -0
- package/src/components/__generated__/StackProps.tsx +18 -0
- package/src/components/__generated__/TabListProps.tsx +18 -0
- package/src/components/__generated__/TabPanelProps.tsx +18 -0
- package/src/components/__generated__/TabProps.tsx +18 -0
- package/src/components/__generated__/TabsProps.tsx +18 -0
- package/src/components/__generated__/TagGroupProps.tsx +18 -0
- package/src/components/__generated__/TagProps.tsx +18 -0
- package/src/components/__generated__/TextAreaProps.tsx +19 -0
- package/src/components/__generated__/TextfieldProps.tsx +19 -0
- package/src/components/__generated__/ToggleProps.tsx +19 -0
- package/src/components/__generated__/TooltipProps.tsx +18 -0
- package/src/components/__generated__/ValidMessageProps.tsx +18 -0
- package/src/components/__generated__/index.ts +112 -0
- 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
|
+
}
|