@devup-ui/rsbuild-plugin
Version:
Zero Config, Zero FOUC, Zero Runtime, CSS in JS Preprocessor
105 lines (104 loc) • 2.67 kB
JavaScript
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
};