diff --git a/.circleci/config.yml b/.circleci/config.yml
index 3a8c114ef..e38b27842 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -385,8 +385,8 @@ jobs:
name: Build packages
command: pnpm release:build
- run:
- name: Are the types wrong?
- command: pnpm -r test:package-types
+ name: Verify built packages
+ command: pnpm -r test:package
workflows:
version: 2
diff --git a/.eslintignore b/.eslintignore
index 33a8784be..a4241d9fb 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -2,6 +2,7 @@
.nyc_output
/coverage
/docs/.next
+/docs/data/**/*.js
/docs/export
/docs/src/app/playground/
/packages/react/**/*.min.*
diff --git a/.eslintrc.js b/.eslintrc.js
index f655e5267..aa15c8c38 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,5 +1,4 @@
const baseline = require('@mui/monorepo/.eslintrc');
-const path = require('path');
const OneLevelImportMessage = [
'Prefer one level nested imports to avoid bundling everything in dev mode or breaking CJS/ESM split.',
@@ -17,8 +16,8 @@ module.exports = {
...baseline,
settings: {
'import/resolver': {
- webpack: {
- config: path.join(__dirname, './webpackBaseConfig.js'),
+ typescript: {
+ project: ['docs/tsconfig.json', 'packages/*/tsconfig.test.json'],
},
},
},
diff --git a/babel.config.js b/babel.config.js
index f274e49e9..b40a57e41 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -12,7 +12,6 @@ module.exports = function getBabelConfig(api) {
const useESModules = !api.env(['node']);
const defaultAlias = {
- '@base-ui-components/react': resolveAliasPath('./packages/react/src'),
docs: resolveAliasPath('./docs'),
test: resolveAliasPath('./test'),
'@mui-internal/api-docs-builder': resolveAliasPath(
diff --git a/docs/data/api/no-ssr.json b/docs/data/api/no-ssr.json
index 34117978a..fb1512cca 100644
--- a/docs/data/api/no-ssr.json
+++ b/docs/data/api/no-ssr.json
@@ -5,12 +5,12 @@
"fallback": { "type": { "name": "node" }, "default": "null" }
},
"name": "NoSsr",
- "imports": ["import { NoSsr } from '@base-ui-components/react/no-ssr';"],
+ "imports": ["import { NoSsr } from '@base-ui-components/react/unstable-no-ssr';"],
"classes": [],
"spread": false,
"themeDefaultProps": null,
"muiName": "NoSsr",
- "filename": "/packages/react/src/no-ssr/NoSsr.tsx",
+ "filename": "/packages/react/src/unstable-no-ssr/NoSsr.tsx",
"inheritance": null,
"demos": "
",
"cssComponent": false
diff --git a/docs/data/components/no-ssr/FrameDeferring.js b/docs/data/components/no-ssr/FrameDeferring.js
index b998824fd..1bc0ef959 100644
--- a/docs/data/components/no-ssr/FrameDeferring.js
+++ b/docs/data/components/no-ssr/FrameDeferring.js
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
-import { NoSsr } from '@base-ui-components/react/no-ssr';
+import { NoSsr } from '@base-ui-components/react/unstable-no-ssr';
import { Box } from '@mui/system';
function LargeTree() {
diff --git a/docs/data/components/no-ssr/FrameDeferring.tsx b/docs/data/components/no-ssr/FrameDeferring.tsx
index 344d28bc4..069758808 100644
--- a/docs/data/components/no-ssr/FrameDeferring.tsx
+++ b/docs/data/components/no-ssr/FrameDeferring.tsx
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
-import { NoSsr } from '@base-ui-components/react/no-ssr';
+import { NoSsr } from '@base-ui-components/react/unstable-no-ssr';
import { Box } from '@mui/system';
function LargeTree(): any {
diff --git a/docs/data/components/no-ssr/SimpleNoSsr.js b/docs/data/components/no-ssr/SimpleNoSsr.js
index b5b6fe611..253b29771 100644
--- a/docs/data/components/no-ssr/SimpleNoSsr.js
+++ b/docs/data/components/no-ssr/SimpleNoSsr.js
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
-import { NoSsr } from '@base-ui-components/react/no-ssr';
+import { NoSsr } from '@base-ui-components/react/unstable-no-ssr';
import { Box } from '@mui/system';
export default function SimpleNoSsr() {
diff --git a/docs/data/components/no-ssr/SimpleNoSsr.tsx b/docs/data/components/no-ssr/SimpleNoSsr.tsx
index b5b6fe611..253b29771 100644
--- a/docs/data/components/no-ssr/SimpleNoSsr.tsx
+++ b/docs/data/components/no-ssr/SimpleNoSsr.tsx
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
-import { NoSsr } from '@base-ui-components/react/no-ssr';
+import { NoSsr } from '@base-ui-components/react/unstable-no-ssr';
import { Box } from '@mui/system';
export default function SimpleNoSsr() {
diff --git a/docs/src/app/experiments/slider-marks.tsx b/docs/src/app/experiments/slider-marks.tsx
deleted file mode 100644
index 889602b76..000000000
--- a/docs/src/app/experiments/slider-marks.tsx
+++ /dev/null
@@ -1,263 +0,0 @@
-'use client';
-import * as React from 'react';
-import { Slider } from '@base-ui-components/react/slider';
-import { useSliderRootContext } from '../../../../packages/react/src/slider/root/SliderRootContext';
-
-const STOPS = [
- {
- value: 0,
- label: '0°C',
- },
- {
- value: 25,
- label: '25°C',
- },
- {
- value: 50,
- label: '50°C',
- },
- {
- value: 75,
- label: '75°C',
- },
- {
- value: 100,
- label: '100°C',
- },
-];
-
-function getSliderThumbAriaValueText(value: number) {
- return `${value}°C`;
-}
-
-// for "inverted track", the track/rail can be styled with CSS but a prop is needed to flip the "mark active" state
-function MarkWithLabel(props: {
- index: number;
- value: number;
- label: string;
- inverted?: boolean;
-}) {
- const { index, value, label, inverted = false } = props;
- const { direction, values } = useSliderRootContext();
- const isRtl = direction === 'rtl';
- const isFilled = inverted ? value >= values[0] : values[0] >= value;
- return (
-
-
-
- {label}
-
-
- );
-}
-
-export default function App() {
- return (
-
-
- LTR
-
-
-
- {STOPS.map((mark, index) => (
-
- ))}
-
-
-
-
-
-
-
- RTL
-
-
-
- {STOPS.map((mark, index) => (
-
- ))}
-
-
-
-
-
-
-
- );
-}
-
-function BrandingStyles() {
- return (
-
- );
-}
diff --git a/docs/src/app/experiments/slider-tooltip.tsx b/docs/src/app/experiments/slider-tooltip.tsx
deleted file mode 100644
index 3da111496..000000000
--- a/docs/src/app/experiments/slider-tooltip.tsx
+++ /dev/null
@@ -1,239 +0,0 @@
-'use client';
-import * as React from 'react';
-import { useTheme } from '@mui/system';
-import { Slider } from '@base-ui-components/react/slider';
-import { Tooltip } from '@base-ui-components/react/tooltip';
-import { useSliderRootContext } from '../../../../packages/react/src/slider/root/SliderRootContext';
-
-function useIsDarkMode() {
- const theme = useTheme();
- return theme.palette.mode === 'dark';
-}
-
-// making a Material/Joy style slider with Slider + Tooltip
-export default function App() {
- const [valueLabelOpen, setValueLabelOpen] = React.useState(false);
-
- const handleGlobalPointerUp = () => {
- if (valueLabelOpen) {
- setValueLabelOpen(false);
- }
- };
-
- return (
-
-
-
-
-
- {Array.from(Array(10), (_, x) => x).map((v) => {
- return ;
- })}
-
- {
- if (!valueLabelOpen) {
- setValueLabelOpen(true);
- }
- }}
- onBlur={() => {
- if (valueLabelOpen) {
- setValueLabelOpen(false);
- }
- }}
- onPointerOver={() => {
- if (!valueLabelOpen) {
- setValueLabelOpen(true);
- }
- }}
- onPointerLeave={(event) => {
- if (event.buttons !== 1) {
- setValueLabelOpen(false);
- } else {
- document.addEventListener('pointerup', handleGlobalPointerUp, {
- once: true,
- });
- }
- }}
- >
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-const SliderMark = React.forwardRef(function SliderMark(
- props: any,
- ref: React.ForwardedRef,
-) {
- const { index, style, ...otherProps } = props;
- const { percentageValues } = useSliderRootContext();
- const isFilled = percentageValues[0] >= index * 10;
- return (
-
- );
-});
-
-function Styles() {
- // Replace this with your app logic for determining dark mode
- const isDarkMode = useIsDarkMode();
- return (
-
- );
-}
diff --git a/docs/src/blocks/GoogleAnalytics.tsx b/docs/src/blocks/GoogleAnalytics.tsx
index f9b2e9c9e..5b777822e 100644
--- a/docs/src/blocks/GoogleAnalytics.tsx
+++ b/docs/src/blocks/GoogleAnalytics.tsx
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
-import { useMediaQuery } from '@base-ui-components/react/use-media-query';
+import { useMediaQuery } from '@base-ui-components/react/unstable-use-media-query';
import { useEnhancedEffect } from '@base-ui-components/react/utils';
let boundDataGaListener = false;
diff --git a/docs/src/components/SideNav.tsx b/docs/src/components/SideNav.tsx
index 0f948a2bf..80f1afb35 100644
--- a/docs/src/components/SideNav.tsx
+++ b/docs/src/components/SideNav.tsx
@@ -3,10 +3,8 @@ import * as React from 'react';
import clsx from 'clsx';
import NextLink from 'next/link';
import { usePathname } from 'next/navigation';
-import { ScrollArea } from '@base-ui-components/react/scroll-area';
+import { ScrollArea, SCROLL_TIMEOUT } from '@base-ui-components/react/scroll-area';
import scrollIntoView from 'scroll-into-view-if-needed';
-// eslint-disable-next-line no-restricted-imports
-import { SCROLL_TIMEOUT } from '@base-ui-components/react/scroll-area/constants';
interface SideNavContextValue {
/**
diff --git a/docs/src/components/reference/ReferenceTablePopover.tsx b/docs/src/components/reference/ReferenceTablePopover.tsx
index 8ef7db362..8a8000536 100644
--- a/docs/src/components/reference/ReferenceTablePopover.tsx
+++ b/docs/src/components/reference/ReferenceTablePopover.tsx
@@ -1,7 +1,7 @@
'use client';
import { Popover } from '@base-ui-components/react/popover';
import * as React from 'react';
-import { useMediaQuery } from '@base-ui-components/react/use-media-query';
+import { useMediaQuery } from '@base-ui-components/react/unstable-use-media-query';
import { GhostButton } from '../GhostButton';
import { Popup } from '../Popup';
diff --git a/package.json b/package.json
index b96b7f45c..ce868d824 100644
--- a/package.json
+++ b/package.json
@@ -50,7 +50,7 @@
"test:karma": "cross-env NODE_ENV=test karma start test/karma.conf.js",
"test:karma:profile": "cross-env NODE_ENV=test karma start test/karma.conf.profile.js",
"test:regressions": "cross-env NODE_ENV=production pnpm test:regressions:build && concurrently --success first --kill-others \"pnpm test:regressions:run\" \"pnpm test:regressions:server\"",
- "test:regressions:build": "webpack --config test/regressions/webpack.config.js",
+ "test:regressions:build": "pnpm release:build && webpack --config test/regressions/webpack.config.js",
"test:regressions:dev": "concurrently \"pnpm test:regressions:build --watch\" \"pnpm test:regressions:server\"",
"test:regressions:run": "mocha --config test/regressions/.mocharc.js --delay 'test/regressions/**/*.test.js'",
"test:regressions:server": "serve test/regressions -p 5001",
@@ -116,7 +116,7 @@
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-airbnb-typescript": "^18.0.0",
"eslint-config-prettier": "^9.1.0",
- "eslint-import-resolver-webpack": "^0.13.9",
+ "eslint-import-resolver-typescript": "^3.6.3",
"eslint-plugin-babel": "^5.3.1",
"eslint-plugin-filenames": "^1.3.2",
"eslint-plugin-import": "^2.31.0",
diff --git a/packages/react/package.json b/packages/react/package.json
index 739c1e45e..f0e2e8815 100644
--- a/packages/react/package.json
+++ b/packages/react/package.json
@@ -26,27 +26,47 @@
"url": "https://opencollective.com/mui-org"
},
"exports": {
- ".": {
- "import": "./src/index.ts"
- },
- "./utils": {
- "import": "./src/utils/index.ts"
- },
- "./*": {
- "import": "./src/*/index.ts"
- }
+ ".": "./src/index.ts",
+ "./accordion": "./src/accordion/index.ts",
+ "./alert-dialog": "./src/alert-dialog/index.ts",
+ "./checkbox": "./src/checkbox/index.ts",
+ "./checkbox-group": "./src/checkbox-group/index.ts",
+ "./collapsible": "./src/collapsible/index.ts",
+ "./dialog": "./src/dialog/index.ts",
+ "./field": "./src/field/index.ts",
+ "./fieldset": "./src/fieldset/index.ts",
+ "./form": "./src/form/index.ts",
+ "./menu": "./src/menu/index.ts",
+ "./number-field": "./src/number-field/index.ts",
+ "./popover": "./src/popover/index.ts",
+ "./preview-card": "./src/preview-card/index.ts",
+ "./progress": "./src/progress/index.ts",
+ "./radio": "./src/radio/index.ts",
+ "./radio-group": "./src/radio-group/index.ts",
+ "./scroll-area": "./src/scroll-area/index.ts",
+ "./select": "./src/select/index.ts",
+ "./separator": "./src/separator/index.ts",
+ "./slider": "./src/slider/index.ts",
+ "./switch": "./src/switch/index.ts",
+ "./tabs": "./src/tabs/index.ts",
+ "./text-input": "./src/text-input/index.ts",
+ "./tooltip": "./src/tooltip/index.ts",
+ "./unstable-no-ssr": "./src/unstable-no-ssr/index.ts",
+ "./unstable-use-media-query": "./src/unstable-use-media-query/index.ts",
+ "./utils": "./src/utils/index.ts"
},
"imports": {
"#test-utils": "./test/index.ts"
},
"type": "commonjs",
"scripts": {
- "build": "pnpm build:node && pnpm build:stable && pnpm build:types && pnpm build:copy-files",
+ "build": "pnpm build:node && pnpm build:stable && pnpm build:types && pnpm build:copy-files && pnpm build:manifest",
"build:node": "node ../../scripts/build.mjs node",
"build:stable": "node ../../scripts/build.mjs stable",
"build:copy-files": "node ../../scripts/copyFiles.mjs",
"build:types": "tsx ../../scripts/buildTypes.mjs --project tsconfig.build.json --copy build/cjs",
- "test:package-types": "attw --pack ./build --include-entrypoints ./accordion ./menu ./tooltip",
+ "build:manifest": "tsx ./scripts/createPackageManifest.mts",
+ "test:package": "publint ./build && attw --pack ./build",
"prebuild": "rimraf --glob build build-tests \"*.tsbuildinfo\"",
"release": "pnpm build && pnpm publish",
"test": "cd ../../ && cross-env NODE_ENV=test mocha 'packages/react/**/*.test.{js,ts,tsx}'",
@@ -74,7 +94,9 @@
"@types/sinon": "^17.0.3",
"@types/use-sync-external-store": "^0.0.6",
"chai": "^4.5.0",
+ "fs-extra": "^11.2.0",
"lodash": "^4.17.21",
+ "publint": "^0.2.12",
"react": "19.0.0-rc-fb9a90fa48-20240614",
"react-dom": "19.0.0-rc-fb9a90fa48-20240614",
"sinon": "^19.0.2",
diff --git a/packages/react/scripts/createPackageManifest.mts b/packages/react/scripts/createPackageManifest.mts
new file mode 100644
index 000000000..4125cefac
--- /dev/null
+++ b/packages/react/scripts/createPackageManifest.mts
@@ -0,0 +1,64 @@
+/* eslint-disable no-console */
+import path from 'node:path';
+import fse from 'fs-extra';
+import { fileURLToPath } from 'node:url';
+
+const CURRENT_DIR = path.dirname(fileURLToPath(import.meta.url));
+const PROJECT_ROOT = path.resolve(CURRENT_DIR, '..');
+const PROJECT_BUILD_DIR = path.join(PROJECT_ROOT, './build');
+
+type TransformedExports = Record<
+ string,
+ Record<'require' | 'import', Record<'types' | 'default', string>>
+>;
+
+export async function createPackageManifest() {
+ const packageData = await fse.readFile(path.resolve(PROJECT_ROOT, './package.json'), 'utf8');
+ const { imports, exports, nyc, scripts, devDependencies, workspaces, ...otherPackageData } =
+ JSON.parse(packageData);
+
+ const newPackageData = {
+ ...otherPackageData,
+ private: false,
+ main: './cjs/index.js',
+ module: './esm/index.js',
+ // The following `types` and `typesVersions` fields ensure compatibility with TypeScript's `node` moduleResolution strategy.
+ // https://github.com/andrewbranch/example-subpath-exports-ts-compat/tree/main/examples/node_modules/types-versions-wildcards
+ types: 'index',
+ typesVersions: {
+ '*': {
+ index: ['./cjs/index.d.ts'],
+ '*': ['./cjs/*/index.d.ts'],
+ },
+ },
+ exports: retargetExports(exports),
+ };
+
+ const targetPath = path.resolve(PROJECT_BUILD_DIR, './package.json');
+
+ await fse.writeFile(targetPath, JSON.stringify(newPackageData, null, 2), 'utf8');
+ console.log(`Created package.json in ${targetPath}`);
+}
+
+function retargetExports(originalExports: Record) {
+ const subpaths = Object.keys(originalExports);
+ const transformed: TransformedExports = {};
+
+ for (const subpath of subpaths) {
+ const originalPath = originalExports[subpath];
+ transformed[subpath] = {
+ require: {
+ types: originalPath.replace('/src/', '/cjs/').replace(/\.tsx?$/, '.d.ts'),
+ default: originalPath.replace('/src/', '/cjs/').replace(/\.tsx?$/, '.js'),
+ },
+ import: {
+ types: originalPath.replace('/src/', '/esm/').replace(/\.tsx?$/, '.d.ts'),
+ default: originalPath.replace('/src/', '/esm/').replace(/\.tsx?$/, '.js'),
+ },
+ };
+ }
+
+ return transformed;
+}
+
+await createPackageManifest();
diff --git a/packages/react/src/scroll-area/index.ts b/packages/react/src/scroll-area/index.ts
index 0b92c3a71..f14fa70e9 100644
--- a/packages/react/src/scroll-area/index.ts
+++ b/packages/react/src/scroll-area/index.ts
@@ -1 +1,2 @@
export * as ScrollArea from './index.parts';
+export * from './constants';
diff --git a/packages/react/src/no-ssr/NoSsr.test.tsx b/packages/react/src/unstable-no-ssr/NoSsr.test.tsx
similarity index 95%
rename from packages/react/src/no-ssr/NoSsr.test.tsx
rename to packages/react/src/unstable-no-ssr/NoSsr.test.tsx
index a36c45fc9..da1fdc353 100644
--- a/packages/react/src/no-ssr/NoSsr.test.tsx
+++ b/packages/react/src/unstable-no-ssr/NoSsr.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { expect } from 'chai';
import { createRenderer } from '@mui/internal-test-utils';
-import { NoSsr } from '@base-ui-components/react/no-ssr';
+import { NoSsr } from '.';
describe('', () => {
const { render, renderToString } = createRenderer();
diff --git a/packages/react/src/no-ssr/NoSsr.tsx b/packages/react/src/unstable-no-ssr/NoSsr.tsx
similarity index 100%
rename from packages/react/src/no-ssr/NoSsr.tsx
rename to packages/react/src/unstable-no-ssr/NoSsr.tsx
diff --git a/packages/react/src/no-ssr/NoSsr.types.ts b/packages/react/src/unstable-no-ssr/NoSsr.types.ts
similarity index 100%
rename from packages/react/src/no-ssr/NoSsr.types.ts
rename to packages/react/src/unstable-no-ssr/NoSsr.types.ts
diff --git a/packages/react/src/no-ssr/index.ts b/packages/react/src/unstable-no-ssr/index.ts
similarity index 100%
rename from packages/react/src/no-ssr/index.ts
rename to packages/react/src/unstable-no-ssr/index.ts
diff --git a/packages/react/src/use-media-query/index.ts b/packages/react/src/unstable-use-media-query/index.ts
similarity index 100%
rename from packages/react/src/use-media-query/index.ts
rename to packages/react/src/unstable-use-media-query/index.ts
diff --git a/packages/react/src/use-button/useButton.test.tsx b/packages/react/src/use-button/useButton.test.tsx
index 726212033..17d06f961 100644
--- a/packages/react/src/use-button/useButton.test.tsx
+++ b/packages/react/src/use-button/useButton.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { createRenderer } from '@mui/internal-test-utils';
import { expect } from 'chai';
-import { useButton } from '@base-ui-components/react/use-button';
+import { useButton } from '.';
describe('useButton', () => {
const { render } = createRenderer();
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7ea588fc6..94701a01e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -166,19 +166,19 @@ importers:
version: 8.57.1
eslint-config-airbnb:
specifier: ^19.0.4
- version: 19.0.4(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.2(eslint@8.57.1))(eslint@8.57.1)
+ version: 19.0.4(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.2(eslint@8.57.1))(eslint@8.57.1)
eslint-config-airbnb-base:
specifier: ^15.0.0
- version: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1)
+ version: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1)
eslint-config-airbnb-typescript:
specifier: ^18.0.0
- version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1)
+ version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1)
eslint-config-prettier:
specifier: ^9.1.0
version: 9.1.0(eslint@8.57.1)
- eslint-import-resolver-webpack:
- specifier: ^0.13.9
- version: 0.13.9(eslint-plugin-import@2.31.0)(webpack@5.94.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)))
+ eslint-import-resolver-typescript:
+ specifier: ^3.6.3
+ version: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1)
eslint-plugin-babel:
specifier: ^5.3.1
version: 5.3.1(eslint@8.57.1)
@@ -187,7 +187,7 @@ importers:
version: 1.3.2(eslint@8.57.1)
eslint-plugin-import:
specifier: ^2.31.0
- version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1)
+ version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-jsx-a11y:
specifier: ^6.10.2
version: 6.10.2(eslint@8.57.1)
@@ -673,9 +673,15 @@ importers:
chai:
specifier: ^4.5.0
version: 4.5.0
+ fs-extra:
+ specifier: ^11.2.0
+ version: 11.2.0
lodash:
specifier: ^4.17.21
version: 4.17.21
+ publint:
+ specifier: ^0.2.12
+ version: 0.2.12
react:
specifier: 19.0.0-rc-fb9a90fa48-20240614
version: 19.0.0-rc-fb9a90fa48-20240614
@@ -2398,6 +2404,10 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@nolyfill/is-core-module@1.0.39':
+ resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
+ engines: {node: '>=12.4.0'}
+
'@npmcli/agent@2.2.2':
resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==}
engines: {node: ^16.14.0 || >=18.0.0}
@@ -4711,10 +4721,6 @@ packages:
resolution: {integrity: sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==}
engines: {node: '>=10.2.0'}
- enhanced-resolve@0.9.1:
- resolution: {integrity: sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==}
- engines: {node: '>=0.6'}
-
enhanced-resolve@5.17.1:
resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
engines: {node: '>=10.13.0'}
@@ -4866,12 +4872,18 @@ packages:
eslint-import-resolver-node@0.3.9:
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
- eslint-import-resolver-webpack@0.13.9:
- resolution: {integrity: sha512-yGngeefNiHXau2yzKKs2BNON4HLpxBabY40BGL/vUSKZtqzjlVsTTZm57jhHULhm+mJEwKsEIIN3NXup5AiiBQ==}
- engines: {node: '>= 6'}
+ eslint-import-resolver-typescript@3.6.3:
+ resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
- eslint-plugin-import: '>=1.4.0'
- webpack: '>=1.11.0'
+ eslint: '*'
+ eslint-plugin-import: '*'
+ eslint-plugin-import-x: '*'
+ peerDependenciesMeta:
+ eslint-plugin-import:
+ optional: true
+ eslint-plugin-import-x:
+ optional: true
eslint-module-utils@2.12.0:
resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==}
@@ -5410,8 +5422,8 @@ packages:
resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
engines: {node: '>= 0.4'}
- get-tsconfig@4.7.3:
- resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==}
+ get-tsconfig@4.8.1:
+ resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
git-config-path@1.0.1:
resolution: {integrity: sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==}
@@ -5766,6 +5778,10 @@ packages:
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+ ignore-walk@5.0.1:
+ resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
ignore-walk@6.0.4:
resolution: {integrity: sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -5819,10 +5835,6 @@ packages:
resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
engines: {node: '>= 0.4'}
- interpret@1.4.0:
- resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==}
- engines: {node: '>= 0.10'}
-
interpret@3.1.1:
resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
engines: {node: '>=10.13.0'}
@@ -5870,6 +5882,9 @@ packages:
resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
engines: {node: '>= 0.4'}
+ is-bun-module@1.2.1:
+ resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==}
+
is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
@@ -6752,9 +6767,6 @@ packages:
memfs-or-file-map-to-github-branch@1.2.1:
resolution: {integrity: sha512-I/hQzJ2a/pCGR8fkSQ9l5Yx+FQ4e7X6blNHyWBm2ojeFLT3GVzGkTj7xnyWpdclrr7Nq4dmx3xrvu70m3ypzAQ==}
- memory-fs@0.2.0:
- resolution: {integrity: sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==}
-
meow@13.2.0:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
engines: {node: '>=18'}
@@ -7190,6 +7202,10 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
+ npm-bundled@2.0.1:
+ resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
npm-bundled@3.0.0:
resolution: {integrity: sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -7198,6 +7214,10 @@ packages:
resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ npm-normalize-package-bin@2.0.0:
+ resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
npm-normalize-package-bin@3.0.1:
resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -7206,6 +7226,11 @@ packages:
resolution: {integrity: sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==}
engines: {node: ^16.14.0 || >=18.0.0}
+ npm-packlist@5.1.3:
+ resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ hasBin: true
+
npm-packlist@8.0.2:
resolution: {integrity: sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -7599,8 +7624,8 @@ packages:
pause-stream@0.0.11:
resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
- picocolors@1.1.0:
- resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
@@ -7920,6 +7945,11 @@ packages:
psl@1.9.0:
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
+ publint@0.2.12:
+ resolution: {integrity: sha512-YNeUtCVeM4j9nDiTT2OPczmlyzOkIXNtdDZnSuajAxS/nZ6j3t7Vs9SUB4euQNddiltIwu7Tdd3s+hr08fAsMw==}
+ engines: {node: '>=16'}
+ hasBin: true
+
punycode.js@2.3.1:
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
engines: {node: '>=6'}
@@ -7933,6 +7963,7 @@ packages:
engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
deprecated: |-
You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.
+
(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)
qjobs@1.2.0:
@@ -8318,6 +8349,10 @@ packages:
rxjs@7.8.1:
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+ sade@1.8.1:
+ resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
+ engines: {node: '>=6'}
+
safe-array-concat@1.1.2:
resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
engines: {node: '>=0.4'}
@@ -8792,10 +8827,6 @@ packages:
tailwindcss@4.0.0-beta.2:
resolution: {integrity: sha512-uZ+vgVsy6i18Glc3XYMkTq7dl4GsU4m8X8qRTVlU4+g8Uit7g+wttwfDCl3p+ZOq5KCB09th9XgVDx1zFLCeHA==}
- tapable@0.1.10:
- resolution: {integrity: sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==}
- engines: {node: '>=0.6'}
-
tapable@2.2.1:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
@@ -9710,7 +9741,7 @@ snapshots:
dependencies:
'@babel/helper-validator-identifier': 7.25.9
js-tokens: 4.0.0
- picocolors: 1.1.0
+ picocolors: 1.1.1
'@babel/compat-data@7.26.2': {}
@@ -11448,6 +11479,8 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1
+ '@nolyfill/is-core-module@1.0.39': {}
+
'@npmcli/agent@2.2.2':
dependencies:
agent-base: 7.1.1
@@ -14119,12 +14152,6 @@ snapshots:
- supports-color
- utf-8-validate
- enhanced-resolve@0.9.1:
- dependencies:
- graceful-fs: 4.2.11
- memory-fs: 0.2.0
- tapable: 0.1.10
-
enhanced-resolve@5.17.1:
dependencies:
graceful-fs: 4.2.11
@@ -14333,29 +14360,29 @@ snapshots:
escape-string-regexp@5.0.0: {}
- eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1):
+ eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1):
dependencies:
confusing-browser-globals: 1.0.11
eslint: 8.57.1
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
object.assign: 4.1.5
object.entries: 1.1.8
semver: 6.3.1
- eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1):
+ eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1):
dependencies:
'@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.2)
eslint: 8.57.1
- eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1)
+ eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1)
transitivePeerDependencies:
- eslint-plugin-import
- eslint-config-airbnb@19.0.4(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.2(eslint@8.57.1))(eslint@8.57.1):
+ eslint-config-airbnb@19.0.4(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.2(eslint@8.57.1))(eslint@8.57.1):
dependencies:
eslint: 8.57.1
- eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1)
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1)
+ eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1)
eslint-plugin-react: 7.37.2(eslint@8.57.1)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1)
@@ -14374,31 +14401,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.31.0)(webpack@5.94.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))):
+ eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1):
dependencies:
- debug: 3.2.7
- enhanced-resolve: 0.9.1
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1)
- find-root: 1.1.0
- hasown: 2.0.2
- interpret: 1.4.0
- is-core-module: 2.15.1
- is-regex: 1.1.4
- lodash: 4.17.21
- resolve: 2.0.0-next.5
- semver: 5.7.2
- webpack: 5.94.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))
+ '@nolyfill/is-core-module': 1.0.39
+ debug: 4.3.7(supports-color@8.1.1)
+ enhanced-resolve: 5.17.1
+ eslint: 8.57.1
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1)
+ fast-glob: 3.3.2
+ get-tsconfig: 4.8.1
+ is-bun-module: 1.2.1
+ is-glob: 4.0.3
+ optionalDependencies:
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
transitivePeerDependencies:
+ - '@typescript-eslint/parser'
+ - eslint-import-resolver-node
+ - eslint-import-resolver-webpack
- supports-color
- eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.31.0)(webpack@5.94.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))))(eslint@8.57.1):
+ eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.2)
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-webpack: 0.13.9(eslint-plugin-import@2.31.0)(webpack@5.94.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)))
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1)
transitivePeerDependencies:
- supports-color
@@ -14415,7 +14444,7 @@ snapshots:
lodash.snakecase: 4.1.1
lodash.upperfirst: 4.3.1
- eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1):
+ eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -14426,7 +14455,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.31.0)(webpack@5.94.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))))(eslint@8.57.1)
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1)
hasown: 2.0.2
is-core-module: 2.15.1
is-glob: 4.0.3
@@ -15115,7 +15144,7 @@ snapshots:
es-errors: 1.3.0
get-intrinsic: 1.2.4
- get-tsconfig@4.7.3:
+ get-tsconfig@4.8.1:
dependencies:
resolve-pkg-maps: 1.0.0
@@ -15603,6 +15632,10 @@ snapshots:
ieee754@1.2.1: {}
+ ignore-walk@5.0.1:
+ dependencies:
+ minimatch: 5.1.6
+
ignore-walk@6.0.4:
dependencies:
minimatch: 9.0.4
@@ -15672,8 +15705,6 @@ snapshots:
hasown: 2.0.2
side-channel: 1.0.6
- interpret@1.4.0: {}
-
interpret@3.1.1: {}
ip-address@9.0.5:
@@ -15721,6 +15752,10 @@ snapshots:
call-bind: 1.0.7
has-tostringtag: 1.0.2
+ is-bun-module@1.2.1:
+ dependencies:
+ semver: 7.6.3
+
is-callable@1.2.7: {}
is-ci@3.0.1:
@@ -16835,8 +16870,6 @@ snapshots:
transitivePeerDependencies:
- encoding
- memory-fs@0.2.0: {}
-
meow@13.2.0: {}
meow@8.1.2:
@@ -17468,6 +17501,10 @@ snapshots:
normalize-path@3.0.0: {}
+ npm-bundled@2.0.1:
+ dependencies:
+ npm-normalize-package-bin: 2.0.0
+
npm-bundled@3.0.0:
dependencies:
npm-normalize-package-bin: 3.0.1
@@ -17476,6 +17513,8 @@ snapshots:
dependencies:
semver: 7.6.3
+ npm-normalize-package-bin@2.0.0: {}
+
npm-normalize-package-bin@3.0.1: {}
npm-package-arg@11.0.2:
@@ -17485,6 +17524,13 @@ snapshots:
semver: 7.6.3
validate-npm-package-name: 5.0.1
+ npm-packlist@5.1.3:
+ dependencies:
+ glob: 8.1.0
+ ignore-walk: 5.0.1
+ npm-bundled: 2.0.1
+ npm-normalize-package-bin: 2.0.0
+
npm-packlist@8.0.2:
dependencies:
ignore-walk: 6.0.4
@@ -17981,7 +18027,7 @@ snapshots:
dependencies:
through: 2.3.8
- picocolors@1.1.0: {}
+ picocolors@1.1.1: {}
picomatch@2.3.1: {}
@@ -18103,19 +18149,19 @@ snapshots:
postcss@8.4.31:
dependencies:
nanoid: 3.3.7
- picocolors: 1.1.0
+ picocolors: 1.1.1
source-map-js: 1.2.1
postcss@8.4.38:
dependencies:
nanoid: 3.3.7
- picocolors: 1.1.0
+ picocolors: 1.1.1
source-map-js: 1.2.1
postcss@8.4.47:
dependencies:
nanoid: 3.3.7
- picocolors: 1.1.0
+ picocolors: 1.1.1
source-map-js: 1.2.1
prelude-ls@1.2.1: {}
@@ -18153,7 +18199,7 @@ snapshots:
find-up: 5.0.0
ignore: 5.3.2
mri: 1.2.0
- picocolors: 1.1.0
+ picocolors: 1.1.1
picomatch: 3.0.1
prettier: 3.3.3
tslib: 2.6.2
@@ -18217,6 +18263,12 @@ snapshots:
psl@1.9.0: {}
+ publint@0.2.12:
+ dependencies:
+ npm-packlist: 5.1.3
+ picocolors: 1.1.1
+ sade: 1.8.1
+
punycode.js@2.3.1: {}
punycode@2.3.1: {}
@@ -18722,6 +18774,10 @@ snapshots:
dependencies:
tslib: 2.6.2
+ sade@1.8.1:
+ dependencies:
+ mri: 1.2.0
+
safe-array-concat@1.1.2:
dependencies:
call-bind: 1.0.7
@@ -19286,7 +19342,7 @@ snapshots:
meow: 13.2.0
micromatch: 4.0.8
normalize-path: 3.0.0
- picocolors: 1.1.0
+ picocolors: 1.1.1
postcss: 8.4.47
postcss-resolve-nested-selector: 0.1.1
postcss-safe-parser: 7.0.0(postcss@8.4.47)
@@ -19364,8 +19420,6 @@ snapshots:
tailwindcss@4.0.0-beta.2: {}
- tapable@0.1.10: {}
-
tapable@2.2.1: {}
tar-stream@2.2.0:
@@ -19545,7 +19599,7 @@ snapshots:
tsx@4.8.2:
dependencies:
esbuild: 0.20.2
- get-tsconfig: 4.7.3
+ get-tsconfig: 4.8.1
optionalDependencies:
fsevents: 2.3.3
@@ -19751,7 +19805,7 @@ snapshots:
dependencies:
browserslist: 4.24.0
escalade: 3.2.0
- picocolors: 1.1.0
+ picocolors: 1.1.1
update-check@1.5.4:
dependencies:
@@ -19938,7 +19992,7 @@ snapshots:
gzip-size: 6.0.0
html-escaper: 2.0.2
opener: 1.5.2
- picocolors: 1.1.0
+ picocolors: 1.1.1
sirv: 2.0.4
ws: 7.5.9
transitivePeerDependencies:
diff --git a/scripts/copyFiles.mjs b/scripts/copyFiles.mjs
index a59613526..8e5577d07 100644
--- a/scripts/copyFiles.mjs
+++ b/scripts/copyFiles.mjs
@@ -1,11 +1,7 @@
/* eslint-disable no-console */
import path from 'path';
-import {
- createPackageFile,
- includeFileInBuild,
- prepend,
- typescriptCopy,
-} from './copyFilesUtils.mjs';
+import fse from 'fs-extra';
+import { includeFileInBuild, prepend, typescriptCopy } from './copyFilesUtils.mjs';
const packagePath = process.cwd();
const buildPath = path.join(packagePath, './build');
@@ -21,7 +17,7 @@ async function addLicense(packageData) {
*/
`;
await Promise.all(
- ['./index.js', './node/index.js'].map(async (file) => {
+ ['./cjs/index.js', './esm/index.js'].map(async (file) => {
try {
await prepend(path.resolve(buildPath, file), license);
} catch (err) {
@@ -41,8 +37,6 @@ async function run() {
// TypeScript
await typescriptCopy({ from: srcPath, to: buildPath });
- const packageData = await createPackageFile();
-
await Promise.all(
['./README.md', '../../CHANGELOG.md', '../../LICENSE', ...extraFiles].map(async (file) => {
const [sourcePath, targetPath] = file.split(':');
@@ -50,6 +44,8 @@ async function run() {
}),
);
+ const packageFile = await fse.readFile(path.resolve(packagePath, './package.json'), 'utf8');
+ const packageData = JSON.parse(packageFile);
await addLicense(packageData);
} catch (err) {
console.error(err);
diff --git a/scripts/copyFilesUtils.mjs b/scripts/copyFilesUtils.mjs
index eedf1a06d..f5181dfb4 100644
--- a/scripts/copyFilesUtils.mjs
+++ b/scripts/copyFilesUtils.mjs
@@ -1,5 +1,5 @@
/* eslint-disable no-console */
-import path from 'path';
+import path from 'node:path';
import fse from 'fs-extra';
import glob from 'fast-glob';
@@ -21,65 +21,6 @@ export async function includeFileInBuild(file, target = path.basename(file)) {
console.log(`Copied ${sourcePath} to ${targetPath}`);
}
-/**
- * Puts a package.json into every immediate child directory of rootDir.
- * That package.json contains information about esm for bundlers so that imports
- * like import Typography from '@mui/material/Typography' are tree-shakeable.
- *
- * It also tests that an this import can be used in TypeScript by checking
- * if an index.d.ts is present at that path.
- * @param {object} param0
- * @param {string} param0.from
- * @param {string} param0.to
- */
-export async function createModulePackages({ from, to }) {
- const directoryPackages = glob.sync('*/index.{js,ts,tsx}', { cwd: from }).map(path.dirname);
-
- await Promise.all(
- directoryPackages.map(async (directoryPackage) => {
- const packageJsonPath = path.join(to, directoryPackage, 'package.json');
- const topLevelPathImportsAreCommonJSModules = await fse.pathExists(
- path.resolve(path.dirname(packageJsonPath), '../esm'),
- );
-
- const packageJson = {
- sideEffects: false,
- module: topLevelPathImportsAreCommonJSModules
- ? path.posix.join('../esm', directoryPackage, 'index.js')
- : './index.js',
- main: topLevelPathImportsAreCommonJSModules
- ? './index.js'
- : path.posix.join('../node', directoryPackage, 'index.js'),
- types: './index.d.ts',
- };
-
- const [typingsEntryExist, moduleEntryExists, mainEntryExists] = await Promise.all([
- fse.pathExists(path.resolve(path.dirname(packageJsonPath), packageJson.types)),
- fse.pathExists(path.resolve(path.dirname(packageJsonPath), packageJson.module)),
- fse.pathExists(path.resolve(path.dirname(packageJsonPath), packageJson.main)),
- fse.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2)),
- ]);
-
- const manifestErrorMessages = [];
- if (!typingsEntryExist) {
- manifestErrorMessages.push(`'types' entry '${packageJson.types}' does not exist`);
- }
- if (!moduleEntryExists) {
- manifestErrorMessages.push(`'module' entry '${packageJson.module}' does not exist`);
- }
- if (!mainEntryExists) {
- manifestErrorMessages.push(`'main' entry '${packageJson.main}' does not exist`);
- }
- if (manifestErrorMessages.length > 0) {
- // TODO: AggregateError
- throw new Error(`${packageJsonPath}:\n${manifestErrorMessages.join('\n')}`);
- }
-
- return packageJsonPath;
- }),
- );
-}
-
export async function typescriptCopy({ from, to }) {
if (!(await fse.pathExists(to))) {
console.warn(`path ${to} does not exists`);
@@ -91,70 +32,6 @@ export async function typescriptCopy({ from, to }) {
return Promise.all(cmds);
}
-export async function createPackageFile() {
- const packageData = await fse.readFile(path.resolve(packagePath, './package.json'), 'utf8');
- const { imports, exports, nyc, scripts, devDependencies, workspaces, ...packageDataOther } =
- JSON.parse(packageData);
-
- const newPackageData = {
- ...packageDataOther,
- private: false,
- main: './cjs/index.js',
- module: './esm/index.js',
- types: 'index',
- typesVersions: {
- '*': {
- index: ['./cjs/index.d.ts'],
- '*': ['./cjs/*/index.d.ts'],
- },
- },
- exports: {
- '.': {
- require: {
- types: './cjs/index.d.ts',
- default: './cjs/index.js',
- },
- import: {
- types: './esm/index.d.ts',
- default: './esm/index.js',
- },
- },
- './utils': {
- require: {
- types: './cjs/utils/index.d.ts',
- default: './cjs/utils/index.js',
- },
- import: {
- types: './esm/utils/index.d.ts',
- default: './esm/utils/index.js',
- },
- },
- './*': {
- require: {
- types: './cjs/*/index.d.ts',
- default: './cjs/*/index.js',
- },
- import: {
- types: './esm/*/index.d.ts',
- default: './esm/*/index.js',
- },
- },
- },
- };
-
- const typeDefinitionsFilePath = path.resolve(buildPath, './index.d.ts');
- if (await fse.pathExists(typeDefinitionsFilePath)) {
- newPackageData.types = './index.d.ts';
- }
-
- const targetPath = path.resolve(buildPath, './package.json');
-
- await fse.writeFile(targetPath, JSON.stringify(newPackageData, null, 2), 'utf8');
- console.log(`Created package.json in ${targetPath}`);
-
- return newPackageData;
-}
-
export async function prepend(file, string) {
const data = await fse.readFile(file, 'utf8');
await fse.writeFile(file, string + data, 'utf8');
diff --git a/test/e2e/webpack.config.js b/test/e2e/webpack.config.js
index dd10685c6..e93871619 100644
--- a/test/e2e/webpack.config.js
+++ b/test/e2e/webpack.config.js
@@ -1,9 +1,7 @@
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
-const webpackBaseConfig = require('../../webpackBaseConfig');
module.exports = {
- ...webpackBaseConfig,
entry: path.resolve(__dirname, 'index.js'),
mode: process.env.NODE_ENV || 'development',
optimization: {
@@ -22,7 +20,6 @@ module.exports = {
}),
],
module: {
- ...webpackBaseConfig.module,
rules: [
{
test: /\.(js|ts|tsx)$/,
diff --git a/test/regressions/webpack.config.js b/test/regressions/webpack.config.js
index 301dab27e..b95743617 100644
--- a/test/regressions/webpack.config.js
+++ b/test/regressions/webpack.config.js
@@ -1,10 +1,8 @@
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
-const webpackBaseConfig = require('../../webpackBaseConfig');
module.exports = {
- ...webpackBaseConfig,
entry: path.resolve(__dirname, 'index.js'),
mode: process.env.NODE_ENV || 'development',
optimization: {
@@ -79,7 +77,6 @@ module.exports = {
],
},
resolve: {
- ...webpackBaseConfig.resolve,
fallback: {
// Exclude polyfill and treat 'fs' as an empty module since it is not required. next -> gzip-size relies on it.
fs: false,
diff --git a/webpackBaseConfig.js b/webpackBaseConfig.js
deleted file mode 100644
index 8c2b2217e..000000000
--- a/webpackBaseConfig.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const path = require('path');
-
-// WARNING: Use this module only as an inspiration.
-// Cherry-pick the parts you need and inline them in the webpack.config you need.
-// This module isn't used to build the documentation. We use Next.js for that.
-// This module is used by the visual regression tests to run the demos and by eslint-plugin-import.
-module.exports = {
- context: path.resolve(__dirname),
- resolve: {
- modules: [__dirname, 'node_modules'],
- alias: {
- '@base-ui-components/react': path.resolve(__dirname, './packages/react/src'),
- '@mui-internal/api-docs-builder': path.resolve(
- __dirname,
- './node_modules/@mui/monorepo/packages/api-docs-builder',
- ),
- docs: path.resolve(__dirname, './docs'),
- },
- extensions: ['.js', '.ts', '.tsx', '.d.ts'],
- },
-};