OpenPanel/packages/cli/tsup.config.ts
Stefan Pejcic 8595a9f4e5 back
2024-05-08 19:58:53 +02:00

103 lines
2.9 KiB
TypeScript

import { defineConfig } from "tsup";
import { NodeResolvePlugin } from "@esbuild-plugins/node-resolve";
import fs from "fs";
import path from "path";
const JS_EXTENSIONS = new Set(["js", "cjs", "mjs"]);
const getRefinePackageNames = async () => {
try {
const ignored = [
"live-previews",
"cli",
"antd-audit-log",
"demo-sidebar",
"create-refine-app",
"ui-types",
"ui-tests",
];
const dirs = await fs.promises.readdir("../");
const packages = dirs.filter(
(el) =>
!el.startsWith(".") && el !== "cli" && !ignored.includes(el),
);
return packages;
} catch (error) {
return [];
}
};
export default defineConfig({
entry: ["src/index.ts", "src/cli.ts"],
splitting: false,
sourcemap: true,
dts: false,
clean: false,
platform: "node",
external: [
".bin/next",
".bin/craco",
".bin/react-scripts",
".bin/parcel",
".bin/remix-serve",
".bin/remix",
".bin/vite",
],
esbuildPlugins: [
{
name: "textReplace",
setup: (build) => {
build.onLoad({ filter: /\.ts$/ }, async (args) => {
const contents = await fs.promises.readFile(
args.path,
"utf8",
);
const extension = path.extname(args.path).replace(".", "");
const loader = JS_EXTENSIONS.has(extension)
? "jsx"
: (extension as any);
const packageListRegex =
/const REFINE_PACKAGES = \[(.|\s)*?\];/gm;
const hasPackageList = contents.match(packageListRegex);
if (!hasPackageList) {
return {
loader,
contents,
};
}
const packageList = await getRefinePackageNames();
return {
loader,
contents: contents.replace(
packageListRegex,
`const REFINE_PACKAGES = [${packageList
.map((el) => `"${el}"`)
.join(", ")}];`,
),
};
});
},
},
NodeResolvePlugin({
extensions: [".js", "ts", "tsx", "jsx"],
onResolved: (resolved) => {
if (resolved.includes("node_modules")) {
return {
external: true,
};
}
return resolved;
},
}),
],
onSuccess: "tsc --project tsconfig.declarations.json",
});