1
0

rollup.config.mjs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import pluginTypeScript from "@rollup/plugin-typescript";
  2. import pluginNodeResolve from "@rollup/plugin-node-resolve";
  3. import pluginJson from "@rollup/plugin-json";
  4. import pluginCss from "rollup-plugin-import-css";
  5. import pluginExecute from "rollup-plugin-execute";
  6. import typescript from "typescript";
  7. import k from "kleur";
  8. import "dotenv/config";
  9. import requireJson from "./assets/require.json" with { type: "json" };
  10. const globalPkgs = requireJson.reduce((acc, pkg) => {
  11. acc[pkg.pkgName] = pkg.global;
  12. return acc;
  13. }, {});
  14. const externalPkgs = requireJson.map(pkg => pkg.pkgName);
  15. const outputDir = "dist";
  16. const outputFile = getOutputFileName();
  17. /** @param {string} [suffix] */
  18. function getOutputFileName(suffix) {
  19. return `BetterYTM${suffix ?? ""}.user.js`;
  20. }
  21. export default (/**@type {import("./src/types.js").RollupArgs}*/ args) => (async () => {
  22. const passCliArgs = {
  23. mode: args["config-mode"] ?? (process.env.NODE_ENV === "production" ? "production" : "development"),
  24. branch: args["config-branch"] ?? "develop",
  25. host: args["config-host"] ?? "github",
  26. assetSource: args["config-assetSource"] ?? "jsdelivr",
  27. suffix: args["config-suffix"] ?? "",
  28. meta: args["config-gen-meta"] ?? "false",
  29. };
  30. const passCliArgsStr = Object.entries(passCliArgs).map(([key, value]) => `--${key}=${value}`).join(" ");
  31. const { mode, suffix } = passCliArgs;
  32. const linkedPkgs = requireJson.filter((pkg) => typeof pkg.link === "string");
  33. /** @type {import("rollup").RollupOptions} */
  34. const config = {
  35. input: "src/index.ts",
  36. plugins: [
  37. pluginNodeResolve({
  38. extensions: [".ts", ".mts", ".json"],
  39. }),
  40. pluginTypeScript({
  41. typescript,
  42. sourceMap: mode === "development",
  43. }),
  44. pluginJson(),
  45. pluginCss({
  46. output: "BetterYTM.css",
  47. }),
  48. pluginExecute([
  49. `pnpm run --silent post-build ${passCliArgsStr}`,
  50. ...(mode === "development" ? ["pnpm run --silent invisible \"pnpm run tr-progress\""] : []),
  51. ]),
  52. ],
  53. output: {
  54. file: `${outputDir}/${getOutputFileName(suffix)}`,
  55. format: "iife",
  56. sourcemap: mode === "development",
  57. compact: mode === "development",
  58. globals: linkedPkgs.length > 0 ? Object.fromEntries(Object.entries(globalPkgs)) : globalPkgs,
  59. },
  60. onwarn(warning) {
  61. // ignore circular dependency warnings
  62. if(warning.code !== "CIRCULAR_DEPENDENCY") {
  63. const { message, ...rest } = warning;
  64. console.error(`${k.yellow("(!)")} ${message}\n`, rest);
  65. }
  66. },
  67. external: externalPkgs,
  68. };
  69. return config;
  70. })();
  71. export { outputDir, outputFile };