Files
2026-07-13 12:12:04 +08:00

105 lines
2.5 KiB
JavaScript

import fs from "fs";
import path from "path";
import babel from "@rollup/plugin-babel";
import resolve from "@rollup/plugin-node-resolve";
import {defineConfig} from "rollup";
import peerDepsExternal from "rollup-plugin-peer-deps-external";
import postcss from "rollup-plugin-postcss";
const packageJson = JSON.parse(fs.readFileSync("./package.json", "utf-8"));
// Custom plugin to replace version placeholder
const replaceVersion = () => ({
name: "replace-version",
transform(code, id) {
if (id.includes("version.ts") || id.includes("version.js")) {
return code.replace("__HEROUI_VERSION__", packageJson.version);
}
return null;
},
});
// Get all component directories
const componentDirs = fs.readdirSync("./src/components").filter((file) => {
const fullPath = path.join("./src/components", file);
return fs.statSync(fullPath).isDirectory() && fs.existsSync(path.join(fullPath, "index.ts"));
});
// Create individual entry points for each component
const componentEntries = componentDirs.reduce((acc, dir) => {
acc[`components/${dir}/index`] = `src/components/${dir}/index.ts`;
return acc;
}, {});
// All entry points
const input = {
index: "src/index.ts",
...componentEntries,
};
const external = [
...Object.keys(packageJson.peerDependencies || {}),
...Object.keys(packageJson.dependencies || {}),
/^react($|\/)/,
/^react-dom($|\/)/,
/^@react-aria/,
/^@react-stately/,
/^@react-types\//,
/^@internationalized\//,
/^react-aria($|\/)/,
/^react-aria-components($|\/)/,
/^tailwind-merge/,
/^tailwind-variants/,
];
const plugins = [
peerDepsExternal(),
resolve({
extensions: [".js", ".jsx", ".ts", ".tsx"],
}),
replaceVersion(),
babel({
babelHelpers: "bundled",
exclude: "node_modules/**",
extensions: [".js", ".jsx", ".ts", ".tsx"],
presets: [["@babel/preset-react", {runtime: "automatic"}], "@babel/preset-typescript"],
}),
postcss({
extract: true,
minimize: true,
modules: false,
}),
];
export default defineConfig({
external,
input,
onwarn(warning, warn) {
// Ignore "use client" directive warnings
if (warning.code === "MODULE_LEVEL_DIRECTIVE") {
return;
}
warn(warning);
},
output: {
dir: "dist",
// Disable sourcemaps
// Optimize for tree shaking
exports: "named",
format: "es",
hoistTransitiveImports: false,
preserveModules: true,
preserveModulesRoot: "src",
sourcemap: false,
},
plugins,
treeshake: {
moduleSideEffects: false,
propertyReadSideEffects: false,
},
});