rollup.config.mjs 2.3 KB

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