Skip to content

Commit 38b259e

Browse files
authored
[core] Restrict top level imports that target CJS modules (#23159)
1 parent 0aefc92 commit 38b259e

35 files changed

+139
-112
lines changed

.eslintrc.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,17 @@ module.exports = {
5252
{
5353
patterns: [
5454
'@material-ui/*/*/*',
55+
// Begin block: Packages with files instead of packages in the top level
56+
// Importing from the top level pulls in CommonJS instead of ES modules
57+
// Allowing /icons as to reduce cold-start of dev builds significantly.
58+
// There's nothing to tree-shake when importing from /icons this way:
59+
// '@material-ui/icons/*/',
60+
'@material-ui/system/*',
61+
'@material-ui/utils/*',
62+
// End block
63+
// Macros are fine since their import path is transpiled away
64+
'!@material-ui/utils/macros',
65+
'@material-ui/utils/macros/*',
5566
'!@material-ui/utils/macros/*.macro',
5667
// public API: https://next.material-ui-pickers.dev/getting-started/installation#peer-library
5768
'!@material-ui/pickers/adapter/*',

azure-pipelines.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ steps:
9898
displayName: Cache nextjs build
9999

100100
- script: |
101+
set -o pipefail
101102
mkdir -p scripts/sizeSnapshot/build
102103
yarn docs:build | tee scripts/sizeSnapshot/build/docs.next
103104
displayName: 'build docs for size snapshot'

docs/pages/_app.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import RtlContext from 'docs/src/modules/utils/RtlContext';
2424
import { ThemeProvider } from 'docs/src/modules/components/ThemeContext';
2525
import { pathnameToLanguage, getCookie } from 'docs/src/modules/utils/helpers';
2626
import { ACTION_TYPES, CODE_VARIANTS } from 'docs/src/modules/constants';
27+
import { useUserLanguage } from 'docs/src/modules/utils/i18n';
2728

2829
// Configure JSS
2930
const jss = create({
@@ -45,7 +46,7 @@ acceptLanguage.languages(['en', 'zh', 'pt', 'ru']);
4546
function LanguageNegotiation() {
4647
const dispatch = useDispatch();
4748
const router = useRouter();
48-
const userLanguage = useSelector((state) => state.options.userLanguage);
49+
const userLanguage = useUserLanguage();
4950

5051
React.useEffect(() => {
5152
const { userLanguage: userLanguageUrl, canonical } = pathnameToLanguage(router.asPath);

docs/pages/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
3-
import { useSelector } from 'react-redux';
43
import { makeStyles } from '@material-ui/core/styles';
54
import Typography from '@material-ui/core/Typography';
65
import Button from '@material-ui/core/Button';
@@ -19,6 +18,7 @@ import AppFrame from 'docs/src/modules/components/AppFrame';
1918
import Link from 'docs/src/modules/components/Link';
2019
import Head from 'docs/src/modules/components/Head';
2120
import loadScript from 'docs/src/modules/utils/loadScript';
21+
import { useTranslate } from 'docs/src/modules/utils/i18n';
2222

2323
let dependenciesLoaded = false;
2424

@@ -119,7 +119,7 @@ export default function LandingPage(props) {
119119
React.useEffect(() => {
120120
loadDependencies();
121121
}, []);
122-
const t = useSelector((state) => state.options.t);
122+
const t = useTranslate();
123123
const classes = useStyles();
124124

125125
return (

docs/src/modules/components/Ad.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import * as React from 'react';
22
import clsx from 'clsx';
33
import PropTypes from 'prop-types';
4-
import { useSelector } from 'react-redux';
54
import { withStyles } from '@material-ui/core/styles';
65
import Typography from '@material-ui/core/Typography';
76
import Paper from '@material-ui/core/Paper';
87
import AdCarbon from 'docs/src/modules/components/AdCarbon';
98
import AdReadthedocs from 'docs/src/modules/components/AdReadthedocs';
109
import AdInHouse from 'docs/src/modules/components/AdInHouse';
1110
import { AdContext, adShape } from 'docs/src/modules/components/AdManager';
11+
import { useTranslate } from 'docs/src/modules/utils/i18n';
1212

1313
const styles = (theme) => ({
1414
root: {
@@ -39,7 +39,7 @@ const styles = (theme) => ({
3939
});
4040

4141
function PleaseDisableAdblock(props) {
42-
const t = useSelector((state) => state.options.t);
42+
const t = useTranslate();
4343

4444
return (
4545
<Paper component="span" elevation={0} {...props}>

docs/src/modules/components/AppDrawer.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import * as React from 'react';
22
import clsx from 'clsx';
33
import PropTypes from 'prop-types';
4-
import { useSelector } from 'react-redux';
54
import { withStyles } from '@material-ui/core/styles';
65
import List from '@material-ui/core/List';
76
import Drawer from '@material-ui/core/Drawer';
@@ -14,6 +13,7 @@ import AppDrawerNavItem from 'docs/src/modules/components/AppDrawerNavItem';
1413
import Link from 'docs/src/modules/components/Link';
1514
import { pageToTitleI18n } from 'docs/src/modules/utils/helpers';
1615
import PageContext from 'docs/src/modules/components/PageContext';
16+
import { useUserLanguage, useTranslate } from 'docs/src/modules/utils/i18n';
1717

1818
let savedScrollTop = null;
1919
function PersistScroll(props) {
@@ -140,9 +140,9 @@ const iOS = process.browser && /iPad|iPhone|iPod/.test(navigator.userAgent);
140140
function AppDrawer(props) {
141141
const { classes, className, disablePermanent, mobileOpen, onClose, onOpen } = props;
142142
const { activePage, pages } = React.useContext(PageContext);
143-
const userLanguage = useSelector((state) => state.options.userLanguage);
143+
const userLanguage = useUserLanguage();
144144
const languagePrefix = userLanguage === 'en' ? '' : `/${userLanguage}`;
145-
const t = useSelector((state) => state.options.t);
145+
const t = useTranslate();
146146

147147
const navItems = React.useMemo(
148148
() => renderNavItems({ onClose, pages, activePage, depth: 0, t }),

docs/src/modules/components/AppFooter.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
/* eslint-disable material-ui/no-hardcoded-labels */
22
import * as React from 'react';
33
import PropTypes from 'prop-types';
4-
import { useSelector } from 'react-redux';
54
import Interpolate from '@trendmicro/react-interpolate';
65
import { withStyles } from '@material-ui/core/styles';
76
import Typography from '@material-ui/core/Typography';
87
import Grid from '@material-ui/core/Grid';
98
import Container from '@material-ui/core/Container';
109
import Divider from '@material-ui/core/Divider';
1110
import Link from 'docs/src/modules/components/Link';
11+
import { useUserLanguage, useTranslate } from 'docs/src/modules/utils/i18n';
1212

1313
const styles = (theme) => ({
1414
root: {
@@ -52,9 +52,9 @@ const styles = (theme) => ({
5252

5353
function AppFooter(props) {
5454
const { classes } = props;
55-
const userLanguage = useSelector((state) => state.options.userLanguage);
55+
const userLanguage = useUserLanguage();
5656
const languagePrefix = userLanguage === 'en' ? '' : `/${userLanguage}`;
57-
const t = useSelector((state) => state.options.t);
57+
const t = useTranslate();
5858

5959
return (
6060
<div className={classes.root}>

docs/src/modules/components/AppFrame.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import * as React from 'react';
22
import PropTypes from 'prop-types';
3-
import { useSelector } from 'react-redux';
43
import Router, { useRouter } from 'next/router';
54
import { withStyles, useTheme } from '@material-ui/core/styles';
65
import NProgress from 'nprogress';
@@ -35,6 +34,7 @@ import { pathnameToLanguage } from 'docs/src/modules/utils/helpers';
3534
import RtlContext from 'docs/src/modules/utils/RtlContext';
3635
import { useChangeTheme } from 'docs/src/modules/components/ThemeContext';
3736
import PageContext from 'docs/src/modules/components/PageContext';
37+
import { useUserLanguage, useTranslate } from 'docs/src/modules/utils/i18n';
3838

3939
const LOCALES = { zh: 'zh-CN', pt: 'pt-BR', es: 'es-ES' };
4040
const CROWDIN_ROOT_URL = 'https://translate.material-ui.com/project/material-ui-docs/';
@@ -146,8 +146,8 @@ const styles = (theme) => ({
146146
function AppFrame(props) {
147147
const { children, classes, disableDrawer = false } = props;
148148
const theme = useTheme();
149-
const t = useSelector((state) => state.options.t);
150-
const userLanguage = useSelector((state) => state.options.userLanguage);
149+
const t = useTranslate();
150+
const userLanguage = useUserLanguage();
151151
const { rtl, setRtl } = React.useContext(RtlContext);
152152

153153
const crowdInLocale = LOCALES[userLanguage] || userLanguage;

docs/src/modules/components/AppSearch.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import * as React from 'react';
22
import url from 'url';
3-
import { useSelector } from 'react-redux';
43
import useLazyCSS from 'docs/src/modules/utils/useLazyCSS';
54
import useMediaQuery from '@material-ui/core/useMediaQuery';
65
import { alpha, useTheme, makeStyles } from '@material-ui/core/styles';
@@ -9,6 +8,7 @@ import SearchIcon from '@material-ui/icons/Search';
98
import { handleEvent } from 'docs/src/modules/components/MarkdownLinks';
109
import docsearch from 'docsearch.js';
1110
import { LANGUAGES_SSR } from 'docs/src/modules/constants';
11+
import { useUserLanguage, useTranslate } from 'docs/src/modules/utils/i18n';
1212

1313
const useStyles = makeStyles(
1414
(theme) => ({
@@ -117,8 +117,8 @@ export default function AppSearch() {
117117
const classes = useStyles();
118118
const inputRef = React.useRef(null);
119119
const theme = useTheme();
120-
const userLanguage = useSelector((state) => state.options.userLanguage);
121-
const t = useSelector((state) => state.options.t);
120+
const userLanguage = useUserLanguage();
121+
const t = useTranslate();
122122

123123
useLazyCSS('https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.css', '#app-search');
124124

docs/src/modules/components/AppTableOfContents.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import * as React from 'react';
33
import PropTypes from 'prop-types';
44
import throttle from 'lodash/throttle';
55
import clsx from 'clsx';
6-
import { useSelector } from 'react-redux';
76
import { makeStyles } from '@material-ui/core/styles';
87
import Typography from '@material-ui/core/Typography';
98
import Link from 'docs/src/modules/components/Link';
109
import PageContext from 'docs/src/modules/components/PageContext';
10+
import { useTranslate } from 'docs/src/modules/utils/i18n';
1111

1212
const useStyles = makeStyles((theme) => ({
1313
root: {
@@ -100,7 +100,7 @@ function useThrottledOnScroll(callback, delay) {
100100
export default function AppTableOfContents(props) {
101101
const { items } = props;
102102
const classes = useStyles();
103-
const t = useSelector((state) => state.options.t);
103+
const t = useTranslate();
104104

105105
const itemsWithNodeRef = React.useRef([]);
106106
React.useEffect(() => {

0 commit comments

Comments
 (0)