rollup.config.mjs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 pluginMarkdown from "@jackfranklin/rollup-plugin-markdown";
  7. import pluginReplace from "@rollup/plugin-replace";
  8. import pluginCJS from "rollup-plugin-commonjs";
  9. import pluginBabel from "@rollup/plugin-babel";
  10. import pluginExecute from "rollup-plugin-execute";
  11. import typescript from "typescript";
  12. const outputDir = "dist";
  13. const outputFile = getOutputFileName();
  14. /** @param {string} [suffix] */
  15. function getOutputFileName(suffix) {
  16. return `BetterYTM${suffix ?? ""}.user.js`;
  17. }
  18. export default (/**@type {import("./src/types").RollupArgs}*/ args) => (async () => {
  19. const mode = args["config-mode"] ?? (process.env.NODE_ENV === "production" ? "production" : "development");
  20. const branch = args["config-branch"] ?? "develop";
  21. const host = args["config-host"] ?? "github";
  22. const suffix = args["config-suffix"] ?? "";
  23. /** @type {import("rollup").RollupOptions} */
  24. const config = {
  25. input: "src/index.ts",
  26. plugins: [
  27. pluginReplace({
  28. "process.env.NODE_ENV": JSON.stringify(mode),
  29. ENVIRONMENT: JSON.stringify(mode),
  30. preventAssignment: true,
  31. }),
  32. pluginNodeResolve({
  33. extensions: [".ts", ".tsx", ".mts", ".json"],
  34. }),
  35. pluginTypeScript({
  36. typescript,
  37. sourceMap: mode === "development",
  38. }),
  39. pluginJson(),
  40. pluginHtml(),
  41. pluginCss({
  42. output: "global.css",
  43. }),
  44. pluginMarkdown(),
  45. pluginCJS({
  46. include: [
  47. "node_modules/**"
  48. ],
  49. exclude: [
  50. "node_modules/process-es6/**"
  51. ],
  52. }),
  53. pluginBabel({ babelHelpers: "bundled" }),
  54. pluginExecute([
  55. `npm run --silent post-build -- --mode=${mode} --branch=${branch} --host=${host} --suffix=${suffix}`,
  56. ...(mode === "development" ? ["npm run --silent invisible -- \"npm run tr-progress\""] : []),
  57. ]),
  58. ],
  59. output: {
  60. file: `${outputDir}/${getOutputFileName(suffix)}`,
  61. format: "iife",
  62. sourcemap: mode === "development",
  63. compact: mode === "development",
  64. banner: "\n/* global React, ReactDOM */",
  65. globals: {
  66. react: "React",
  67. "react-dom": "ReactDOM",
  68. },
  69. },
  70. onwarn(warning) {
  71. // ignore circular dependency warnings
  72. if(warning.code !== "CIRCULAR_DEPENDENCY") {
  73. const { message, ...rest } = warning;
  74. console.error(`\x1b[33m(!)\x1b[0m ${message}\n`, rest);
  75. }
  76. },
  77. external: id => /^react(-dom)?$/.test(id)
  78. };
  79. return config;
  80. })();
  81. export { outputDir, outputFile };