react18-tools/webgl-generative-particles

View on GitHub
lib/tsup.config.ts

Summary

Maintainability
A
0 mins
Test Coverage
import fs from "node:fs";
import { defineConfig, type Options } from "tsup";
import react18Plugin from "esbuild-plugin-react18";
import cssPlugin from "esbuild-plugin-react18-css";
import { rdiPlugin } from "esbuild-plugin-rdi";
import { webglPlugin } from "esbuild-plugin-webgl";

export default defineConfig(
  (options: Options) =>
    ({
      format: ["cjs", "esm"],
      target: "es2019",
      entry: ["./src"],
      sourcemap: false,
      clean: !options.watch,
      bundle: true,
      minify: !options.watch,
      esbuildPlugins: [
        {
          name: "webgl",
          setup(build) {
            if (!options.watch)
              build.onLoad({ filter: /simulator\.ts$/, namespace: "file" }, args => {
                const text = fs.readFileSync(args.path, "utf8");
                const contents = text
                  .replace(/if \(!gl\.[^}]*}/gm, "")
                  .replace(/;\s*if \(!(shader|program)[^;]*;/gm, "!;")
                  .trim();
                return { contents, loader: "ts" };
              });
          },
        },
        webglPlugin(),
        react18Plugin({ disableJSXRequireDedup: true }),
        cssPlugin({ generateScopedName: "[folder]__[local]" }),
        rdiPlugin(),
      ],
      ...options,
    }) as Options,
);