From bd3c0dd4fb3d496c29c9d8c1dd86685e4248ae13 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Fri, 19 Apr 2024 23:52:15 +0200 Subject: [PATCH 1/2] [core] Restrict import path with ESLint --- .eslintrc.js | 26 ++++++------------- .../src/Slider/ZeroSlider.tsx | 2 +- .../onepirate/modules/components/Snackbar.tsx | 2 +- 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index a75d1e007728ff..55b755bff0b8ae 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -65,7 +65,14 @@ module.exports = { 'no-restricted-imports': [ 'error', { - patterns: ['@mui/*/*/*'], + patterns: [ + '@mui/*/*/*', + '@pigment-css/*/*/*', + '@base_ui/*/*/*', + // Allow any import depth with any internal packages + '!@mui/internal-*/**', + '!@mui/docs/**', + ], }, ], 'no-continue': 'off', @@ -331,23 +338,6 @@ module.exports = { 'import/export': 'off', // Not sure why it doesn't work }, }, - { - files: ['*.tsx'], - excludedFiles: '*.spec.tsx', - rules: { - // WARNING: If updated, make sure these rules are merged with `no-restricted-imports` (#ts-source-files) - 'no-restricted-imports': [ - 'error', - { - patterns: [ - // Allow deeper imports for TypeScript types. TODO remove - '@mui/*/*/*/*', - ], - }, - ], - }, - }, - // Files used for generating TypeScript declaration files (#ts-source-files) { files: ['packages/*/src/**/*.tsx'], excludedFiles: '*.spec.tsx', diff --git a/apps/pigment-css-vite-app/src/Slider/ZeroSlider.tsx b/apps/pigment-css-vite-app/src/Slider/ZeroSlider.tsx index 81de28da9f9b23..9d05cf3a262d24 100644 --- a/apps/pigment-css-vite-app/src/Slider/ZeroSlider.tsx +++ b/apps/pigment-css-vite-app/src/Slider/ZeroSlider.tsx @@ -10,7 +10,7 @@ import { import { isHostComponent, useSlotProps } from '@mui/base/utils'; import { styled } from '@pigment-css/react'; import { capitalize } from '@mui/material/utils'; -import SliderValueLabel from '@mui/material/Slider/SliderValueLabel'; +import { SliderValueLabel } from '@mui/material/Slider'; import { useSlider, valueToPercent } from '@mui/base/useSlider'; import { alpha, lighten, darken } from '@mui/system/colorManipulator'; import type { Theme } from '@mui/material/styles'; diff --git a/docs/src/pages/premium-themes/onepirate/modules/components/Snackbar.tsx b/docs/src/pages/premium-themes/onepirate/modules/components/Snackbar.tsx index e27855541ec2ec..bb4231a7725f94 100644 --- a/docs/src/pages/premium-themes/onepirate/modules/components/Snackbar.tsx +++ b/docs/src/pages/premium-themes/onepirate/modules/components/Snackbar.tsx @@ -6,7 +6,7 @@ import Slide from '@mui/material/Slide'; import CloseIcon from '@mui/icons-material/Close'; import InfoIcon from '@mui/icons-material/Info'; import IconButton from '@mui/material/IconButton'; -import { TransitionProps } from '@mui/material/transitions/transition'; +import { TransitionProps } from '@mui/material/transitions'; const styles = ({ theme }: { theme: Theme }) => ({ From 7a8175dd5952518f4783bef0f4e8c76203941cd3 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sat, 20 Apr 2024 00:12:37 +0200 Subject: [PATCH 2/2] even better --- .eslintrc.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 55b755bff0b8ae..7f2b9b58f5c08a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,8 +1,8 @@ const path = require('path'); const { rules: baseStyleRules } = require('eslint-config-airbnb-base/rules/style'); -const forbidTopLevelMessage = [ - 'Prefer one level nested imports to avoid bundling everything in dev mode', +const OneLevelImportMessage = [ + 'Prefer one level nested imports to avoid bundling everything in dev mode or breaking CJS/ESM split.', 'See https://github.com/mui/material-ui/pull/24147 for the kind of win it can unlock.', ].join('\n'); // This only applies to packages published from this monorepo. @@ -66,12 +66,18 @@ module.exports = { 'error', { patterns: [ - '@mui/*/*/*', - '@pigment-css/*/*/*', - '@base_ui/*/*/*', - // Allow any import depth with any internal packages - '!@mui/internal-*/**', - '!@mui/docs/**', + { + group: [ + '@mui/*/*/*', + '@pigment-css/*/*/*', + '@base_ui/*/*/*', + // Allow any import depth with any internal packages + '!@mui/internal-*/**', + // TODO delete, @mui/docs should be @mui/internal-docs + '!@mui/docs/**', + ], + message: OneLevelImportMessage, + }, ], }, ], @@ -419,11 +425,11 @@ module.exports = { paths: [ { name: '@mui/material', - message: forbidTopLevelMessage, + message: OneLevelImportMessage, }, { name: '@mui/lab', - message: forbidTopLevelMessage, + message: OneLevelImportMessage, }, ], },