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