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