Skip to content

Commit a5b394f

Browse files
chore: updating interface for type (#621)
## **Description** This PR fixes several TypeScript-related issues: 1. Converts interfaces to type aliases throughout the codebase to comply with our ESLint config that disallows interface types(which for some reason isn't working at the moment [issue here](#629)) 2. Updates type exports to use the explicit `export type { X }` syntax ``` // Fixes error TS1205: Re-exporting a type when 'isolatedModules' is enabled requires using 'export type'. ``` 3. Adds `isolatedModules: true` to tsconfig.packages.json ``` // Fixes ts-jest[ts-compiler] (WARN) Using hybrid module kind (Node16/18/Next) is only supported in "isolatedModules: true". Please set "isolatedModules: true" in your tsconfig.json. ``` ## **Related issues** Fixes: N/A ## **Manual testing steps** 1. Run the test suite to verify the ts-jest warning is resolved 2. Build the packages to ensure TypeScript compilation succeeds 3. Verify that the component exports work correctly in consuming applications ## **Screenshots/Recordings** N/A - Code changes only ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR
1 parent fe45cfd commit a5b394f

File tree

11 files changed

+54
-53
lines changed

11 files changed

+54
-53
lines changed

packages/design-system-react-native/jest.config.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ module.exports = merge(baseConfig, {
3232
'!**/*.assets.{js,ts}', // Exclude .assets files
3333
'!**/*.types.{js,ts}', // Exclude .types files
3434
],
35+
// Add coverage ignore patterns
36+
coveragePathIgnorePatterns: [
37+
'index.ts', // Ignore all index.ts files
38+
'./src/index.ts', // Also keep the original pattern
39+
'\\.stories\\.(ts|tsx)$',
40+
],
3541
preset: 'react-native',
3642
transform: {
3743
'^.+\\.(js|jsx|ts|tsx)$': 'babel-jest',
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export {
22
BadgeWrapperPosition,
3-
BadgeWrapperCustomPosition,
43
BadgeWrapperPositionAnchorShape,
54
} from '../../types';
5+
export type { BadgeWrapperCustomPosition } from '../../types';
66
export { default } from './BadgeWrapper';
77
export type { BadgeWrapperProps } from './BadgeWrapper.types';
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
export { default } from './ButtonAnimated';
2-
export { ButtonAnimatedProps } from './ButtonAnimated.types';
2+
export type { ButtonAnimatedProps } from './ButtonAnimated.types';

packages/design-system-react-native/src/components/temp-components/ImageOrSvg/ImageOrSvg.types.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { SvgProps } from 'react-native-svg';
1111
/**
1212
* Base props common to all variations.
1313
*/
14-
interface ImageOrSvgBaseProps {
14+
export type ImageOrSvgBaseProps = {
1515
/**
1616
* Optional prop to set the width of the image/SVG.
1717
* Accepts numbers (pixels) or string values (like percentages).
@@ -50,7 +50,7 @@ interface ImageOrSvgBaseProps {
5050
* the 'uri' prop (which is handled separately).
5151
*/
5252
svgProps?: Omit<SvgProps, 'uri'>;
53-
}
53+
};
5454

5555
/**
5656
* Defines the source type for an image or SVG.
@@ -65,11 +65,11 @@ export type ImageOrSvgSrc =
6565
| React.ComponentType<SvgProps> // For local imported svg
6666
| { uri?: string }; // For remote image or SVG (with a uri property)
6767

68-
export interface ImageOrSvgProps extends ImageOrSvgBaseProps {
68+
export type ImageOrSvgProps = ImageOrSvgBaseProps & {
6969
/**
7070
* Required prop for the source of the image or SVG.
7171
* This prop determines whether a local image, a local SVG component,
7272
* or a remote image/SVG (via URI) is rendered.
7373
*/
7474
src: ImageOrSvgSrc;
75-
}
75+
};
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
export { default } from './ImageOrSvg';
2-
export { ImageOrSvgProps, ImageOrSvgSrc } from './ImageOrSvg.types';
2+
export type { ImageOrSvgProps, ImageOrSvgSrc } from './ImageOrSvg.types';

packages/design-system-react-native/src/index.ts

Lines changed: 34 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,104 +3,98 @@ import { withThemeProvider } from '@metamask/design-system-twrnc-preset';
33
import AvatarAccountComponent from './components/AvatarAccount';
44
export const AvatarAccount = withThemeProvider(AvatarAccountComponent);
55
export {
6-
AvatarAccountProps,
76
AvatarAccountVariant,
87
AvatarAccountSize,
98
} from './components/AvatarAccount';
9+
export type { AvatarAccountProps } from './components/AvatarAccount';
1010

1111
import AvatarBaseComponent from './components/AvatarBase';
1212
export const AvatarBase = withThemeProvider(AvatarBaseComponent);
13-
export { AvatarBaseProps, AvatarBaseSize } from './components/AvatarBase';
13+
export { AvatarBaseSize } from './components/AvatarBase';
14+
export type { AvatarBaseProps } from './components/AvatarBase';
1415

1516
import AvatarFaviconComponent from './components/AvatarFavicon';
1617
export const AvatarFavicon = withThemeProvider(AvatarFaviconComponent);
17-
export {
18-
AvatarFaviconProps,
19-
AvatarFaviconSize,
20-
} from './components/AvatarFavicon';
18+
export { AvatarFaviconSize } from './components/AvatarFavicon';
19+
export type { AvatarFaviconProps } from './components/AvatarFavicon';
2120

2221
import AvatarGroupComponent from './components/AvatarGroup';
2322
export const AvatarGroup = withThemeProvider(AvatarGroupComponent);
24-
export {
25-
AvatarGroupProps,
26-
AvatarGroupSize,
27-
AvatarGroupVariant,
28-
} from './components/AvatarGroup';
23+
export { AvatarGroupSize, AvatarGroupVariant } from './components/AvatarGroup';
24+
export type { AvatarGroupProps } from './components/AvatarGroup';
2925

3026
import AvatarIconComponent from './components/AvatarIcon';
3127
export const AvatarIcon = withThemeProvider(AvatarIconComponent);
32-
export {
33-
AvatarIconProps,
34-
AvatarIconSeverity,
35-
AvatarIconSize,
36-
} from './components/AvatarIcon';
28+
export { AvatarIconSeverity, AvatarIconSize } from './components/AvatarIcon';
29+
export type { AvatarIconProps } from './components/AvatarIcon';
3730

3831
import AvatarNetworkComponent from './components/AvatarNetwork';
3932
export const AvatarNetwork = withThemeProvider(AvatarNetworkComponent);
40-
export {
41-
AvatarNetworkProps,
42-
AvatarNetworkSize,
43-
} from './components/AvatarNetwork';
33+
export { AvatarNetworkSize } from './components/AvatarNetwork';
34+
export type { AvatarNetworkProps } from './components/AvatarNetwork';
4435

4536
import AvatarTokenComponent from './components/AvatarToken';
4637
export const AvatarToken = withThemeProvider(AvatarTokenComponent);
47-
export { AvatarTokenProps, AvatarTokenSize } from './components/AvatarToken';
38+
export { AvatarTokenSize } from './components/AvatarToken';
39+
export type { AvatarTokenProps } from './components/AvatarToken';
4840

4941
import BadgeCountComponent from './components/BadgeCount';
5042
export const BadgeCount = withThemeProvider(BadgeCountComponent);
51-
export { BadgeCountProps, BadgeCountSize } from './components/BadgeCount';
43+
export { BadgeCountSize } from './components/BadgeCount';
44+
export type { BadgeCountProps } from './components/BadgeCount';
5245

5346
import BadgeIconComponent from './components/BadgeIcon';
5447
export const BadgeIcon = withThemeProvider(BadgeIconComponent);
55-
export { BadgeIconProps } from './components/BadgeIcon';
48+
export type { BadgeIconProps } from './components/BadgeIcon';
5649

5750
import BadgeNetworkComponent from './components/BadgeNetwork';
5851
export const BadgeNetwork = withThemeProvider(BadgeNetworkComponent);
59-
export { BadgeNetworkProps } from './components/BadgeNetwork';
52+
export type { BadgeNetworkProps } from './components/BadgeNetwork';
6053

6154
import BadgeStatusComponent from './components/BadgeStatus';
6255
export const BadgeStatus = withThemeProvider(BadgeStatusComponent);
63-
export {
64-
BadgeStatusProps,
65-
BadgeStatusStatus,
66-
BadgeStatusSize,
67-
} from './components/BadgeStatus';
56+
export { BadgeStatusStatus, BadgeStatusSize } from './components/BadgeStatus';
57+
export type { BadgeStatusProps } from './components/BadgeStatus';
6858

6959
import BlockiesComponent from './components/temp-components/Blockies';
7060
export const Blockies = BlockiesComponent;
71-
export { BlockiesProps } from './components/temp-components/Blockies';
61+
export type { BlockiesProps } from './components/temp-components/Blockies';
7262

7363
import ButtonAnimatedComponent from './components/temp-components/ButtonAnimated';
7464
export const ButtonAnimated = withThemeProvider(ButtonAnimatedComponent);
75-
export { ButtonAnimatedProps } from './components/temp-components/ButtonAnimated';
65+
export type { ButtonAnimatedProps } from './components/temp-components/ButtonAnimated';
7666

7767
import ButtonBaseComponent from './components/ButtonBase';
7868
export const ButtonBase = withThemeProvider(ButtonBaseComponent);
79-
export { ButtonBaseProps, ButtonBaseSize } from './components/ButtonBase';
69+
export { ButtonBaseSize } from './components/ButtonBase';
70+
export type { ButtonBaseProps } from './components/ButtonBase';
8071

8172
import ButtonComponent from './components/Button';
8273
export const Button = withThemeProvider(ButtonComponent);
83-
export { ButtonProps, ButtonSize, ButtonVariant } from './components/Button';
74+
export { ButtonSize, ButtonVariant } from './components/Button';
75+
export type { ButtonProps } from './components/Button';
8476

8577
import ButtonIconComponent from './components/ButtonIcon';
8678
export const ButtonIcon = withThemeProvider(ButtonIconComponent);
87-
export { ButtonIconProps, ButtonIconSize } from './components/ButtonIcon';
79+
export { ButtonIconSize } from './components/ButtonIcon';
80+
export type { ButtonIconProps } from './components/ButtonIcon';
8881

8982
import IconComponent from './components/Icon';
9083
export const Icon = withThemeProvider(IconComponent);
91-
export { IconColor, IconName, IconProps, IconSize } from './components/Icon';
84+
export { IconColor, IconName, IconSize } from './components/Icon';
85+
export type { IconProps } from './components/Icon';
9286

9387
import JazziconComponent from './components/temp-components/Jazzicon';
9488
export const Jazzicon = JazziconComponent;
95-
export { JazziconProps } from './components/temp-components/Jazzicon';
89+
export type { JazziconProps } from './components/temp-components/Jazzicon';
9690

9791
import MaskiconComponent from './components/temp-components/Maskicon';
9892
export const Maskicon = MaskiconComponent;
99-
export { MaskiconProps } from './components/temp-components/Maskicon';
93+
export type { MaskiconProps } from './components/temp-components/Maskicon';
10094

10195
import TextButtonComponent from './components/TextButton';
10296
export const TextButton = withThemeProvider(TextButtonComponent);
103-
export { TextButtonProps } from './components/TextButton';
97+
export type { TextButtonProps } from './components/TextButton';
10498

10599
import TextComponent from './components/Text';
106100
export const Text = withThemeProvider(TextComponent);
@@ -109,10 +103,10 @@ export {
109103
FontFamily,
110104
FontStyle,
111105
TextColor,
112-
TextProps,
113106
TextVariant,
114107
} from './components/Text';
108+
export type { TextProps } from './components/Text';
115109

116110
import TextOrChildrenComponent from './components/temp-components/TextOrChildren';
117111
export const TextOrChildren = withThemeProvider(TextOrChildrenComponent);
118-
export { TextOrChildrenProps } from './components/temp-components/TextOrChildren';
112+
export type { TextOrChildrenProps } from './components/temp-components/TextOrChildren';

packages/design-system-react-native/src/types/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,12 @@ export enum BadgeWrapperPosition {
135135
/**
136136
* BadgeWrapper - customPosition
137137
*/
138-
export interface BadgeWrapperCustomPosition {
138+
export type BadgeWrapperCustomPosition = {
139139
top?: number | string | undefined;
140140
right?: number | string | undefined;
141141
bottom?: number | string | undefined;
142142
left?: number | string | undefined;
143-
}
143+
};
144144

145145
/**
146146
* ButtonBase - size
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export {
22
BadgeWrapperPosition,
3-
BadgeWrapperCustomPosition,
43
BadgeWrapperPositionAnchorShape,
54
} from '../../types';
5+
export type { BadgeWrapperCustomPosition } from '../../types';
66
export { BadgeWrapper } from './BadgeWrapper';
77
export type { BadgeWrapperProps } from './BadgeWrapper.types';

packages/design-system-react/src/components/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ export { BadgeWrapper } from './BadgeWrapper';
4545
export type { BadgeWrapperProps } from './BadgeWrapper';
4646
export {
4747
BadgeWrapperPosition,
48-
BadgeWrapperCustomPosition,
4948
BadgeWrapperPositionAnchorShape,
5049
} from './BadgeWrapper';
50+
export type { BadgeWrapperCustomPosition } from './BadgeWrapper';
5151

5252
export { Blockies } from './temp-components/Blockies';
5353
export type { BlockiesProps } from './temp-components/Blockies';

packages/design-system-react/src/types/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,12 @@ export enum BadgeWrapperPosition {
135135
/**
136136
* BadgeWrapper - customPosition
137137
*/
138-
export interface BadgeWrapperCustomPosition {
138+
export type BadgeWrapperCustomPosition = {
139139
top?: number | string | undefined;
140140
right?: number | string | undefined;
141141
bottom?: number | string | undefined;
142142
left?: number | string | undefined;
143-
}
143+
};
144144

145145
/**
146146
* ButtonBase - size

tsconfig.packages.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"esModuleInterop": true,
55
"lib": ["ES2020"],
66
"module": "Node16",
7+
"isolatedModules": true,
78
"moduleResolution": "Node16",
89
"baseUrl": ".",
910
/**

0 commit comments

Comments
 (0)