UNPKG

@devup-ui/vite-plugin

Version:

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

165 lines (164 loc) 4.34 kB
import { existsSync as d } from "node:fs"; import { writeFile as f, mkdir as k, readFile as D } from "node:fs/promises"; import { relative as O, dirname as F, resolve as l, join as i, basename as m } from "node:path"; import { setDebug as U, codeExtract as A, getCss as T, getDefaultTheme as B, registerTheme as $, getThemeInterface as M } from "@devup-ui/wasm"; function N(s) { return s.endsWith("devup-ui.css") ? null : parseInt(s.split("devup-ui-")[1].split(".")[0]); } async function _(s) { try { const u = d(s.devupFile) ? await D(s.devupFile, "utf-8") : void 0; if (u) { $(JSON.parse(u)?.theme ?? {}); const a = M( s.package, "CustomColors", "DevupThemeTypography", "DevupTheme" ); a && await f( i(s.distDir, "theme.d.ts"), a, "utf-8" ); } else $({}); } catch (u) { console.error(u), $({}); } await Promise.all([ d(s.cssDir) ? Promise.resolve() : k(s.cssDir, { recursive: !0 }), s.singleCss ? Promise.resolve() : f(i(s.cssDir, "devup-ui.css"), T(null, !1)) ]); } function z({ package: s = "@devup-ui/react", devupFile: u = "devup.json", distDir: a = "df", cssDir: o = l(a, "devup-ui"), extractCss: v = !0, debug: C = !1, include: g = [], singleCss: h = !1 } = {}) { U(C); const c = /* @__PURE__ */ new Map(); return { name: "devup-ui", async configResolved() { d(a) || await k(a, { recursive: !0 }), await f(i(a, ".gitignore"), "*", "utf-8"), await _({ package: s, cssDir: o, devupFile: u, distDir: a, singleCss: h }); }, config() { const r = B(), e = {}; r && (e["process.env.DEVUP_UI_DEFAULT_THEME"] = JSON.stringify(r)); const t = { server: { watch: { ignored: [`!${u}`] } }, define: e, optimizeDeps: { exclude: [...g, "@devup-ui/components"] }, ssr: { noExternal: [...g, /@devup-ui/] } }; return v && (t.build = { rollupOptions: { output: { manualChunks(n) { const p = m(n).split("?")[0]; if (/devup-ui(-\d+)?\.css$/.test(p)) return p; } } } }), t; }, apply() { return !0; }, async watchChange(r) { if (l(r) === l(u) && d(u)) try { await _({ package: s, cssDir: o, devupFile: u, distDir: a, singleCss: h }); } catch (e) { console.error(e); } }, resolveId(r, e) { const t = m(r).split("?")[0]; if (/devup-ui(-\d+)?\.css$/.test(t) && l(e ? i(F(e), r) : r) === l(i(o, t))) return i( o, `${t}?t=${Date.now().toString() + (c.get(N(t))?.length ?? 0)}` ); }, load(r) { const e = m(r).split("?")[0]; if (/devup-ui(-\d+)?\.css$/.test(e)) { const t = N(e), n = T(t, !1); return c.set(t, n), n; } }, enforce: "pre", async transform(r, e) { if (!v) return; const t = e.split("?")[0]; if (!/\.(tsx|ts|js|mjs|jsx)$/i.test(t) || new RegExp( `node_modules(?!.*(${["@devup-ui", ...g].join("|").replaceAll("/", "[\\/\\\\_]")})([\\/\\\\.]|$))` ).test(t)) return; let n = O(F(e), o).replaceAll("\\", "/"); n.startsWith("./") || (n = `./${n}`); const { code: p, css: j = "", map: I, cssFile: w, updatedBaseStyle: S // import main css in code } = A(t, r, s, n, h, !0, !1), y = []; if (S && y.push( f(i(o, "devup-ui.css"), T(null, !1), "utf-8") ), w) { const E = N(w), x = c.get(E); x && x.length < j.length && c.set(E, j), y.push( f( i(o, m(w)), `/* ${e} ${Date.now()} */`, "utf-8" ) ); } return await Promise.all(y), { code: p, map: I }; }, async generateBundle(r, e) { if (!v) return; const t = Object.keys(e).find( (n) => e[n].name === "devup-ui.css" ); t && "source" in e[t] && (e[t].source = c.get(null)); } }; } export { z as DevupUI };