UNPKG

@devup-ui/rsbuild-plugin

Version:

Zero Config, Zero FOUC, Zero Runtime, CSS in JS Preprocessor

105 lines (104 loc) 2.67 kB
import { existsSync as d } from "node:fs"; import { mkdir as w, writeFile as a, readFile as E } from "node:fs/promises"; import { join as i, resolve as D, basename as _ } from "node:path"; import { setDebug as $, getDefaultTheme as h, codeExtract as b, getCss as y, registerTheme as n, getThemeInterface as S } from "@devup-ui/wasm"; let c = ""; async function U(e) { try { const t = d(e.devupFile) ? await E(e.devupFile, "utf-8") : void 0; if (t) { n(JSON.parse(t)?.theme ?? {}); const l = S( e.package, "CustomColors", "DevupThemeTypography", "DevupTheme" ); l && await a( i(e.distDir, "theme.d.ts"), l, "utf-8" ); } else n({}); } catch (t) { console.error(t), n({}); } await Promise.all([ d(e.cssDir) ? Promise.resolve() : w(e.cssDir, { recursive: !0 }), e.singleCss ? Promise.resolve() : a(i(e.cssDir, "devup-ui.css"), y(null, !1)) ]); } const N = ({ include: e = [], package: t = "@devup-ui/react", extractCss: l = !0, distDir: r = "df", cssDir: u = D(r, "devup-ui"), devupFile: T = "devup.json", debug: C = !1, singleCss: p = !1 } = {}) => ({ name: "devup-ui-rsbuild-plugin", async setup(f) { $(C), d(r) || await w(r, { recursive: !0 }), await a(i(r, ".gitignore"), "*", "utf-8"), await U({ package: t, cssDir: u, devupFile: T, distDir: r, singleCss: p }), l && (f.transform( { test: u }, () => c ), f.modifyRsbuildConfig((s) => (h() && (s.source ??= {}, s.source.define = { "process.env.DEVUP_UI_DEFAULT_THEME": JSON.stringify(h()), ...s.source.define }), s)), f.transform( { test: /\.(tsx|ts|js|mjs|jsx)$/ }, async ({ code: s, resourcePath: o }) => { if (new RegExp( `node_modules(?!.*(${["@devup-ui", ...e].join("|").replaceAll("/", "[\\/\\\\_]")})([\\/\\\\.]|$))` ).test(o)) return s; const { code: F, css: v = "", map: j, cssFile: g, updatedBaseStyle: x } = b( o, s, t, u, p, !1, !0 ), m = []; return x && m.push( a( i(u, "devup-ui.css"), y(null, !1), "utf-8" ) ), g && (c.length < v.length && (c = v), m.push( a( i(u, _(g)), `/* ${o} ${Date.now()} */`, "utf-8" ) )), await Promise.all(m), { code: F, map: j }; } )); } }); export { N as DevupUI };