rollup.config.mjs 2.5 KB

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