@winter-love/vite-plugin-monorepo-alias
Version:
vite monorepo alias plugin
75 lines (74 loc) • 2.06 kB
JavaScript
import z from "node:path";
const i = (e, t) => e.replace(/\\?\/*$/u, t), A = (e, t) => e.replace(/^\\?\/*/u, t), g = (e) => {
const t = i(A(e, "/"), "/[-._a-zA-Z0-9]+/");
return new RegExp(`${t}`, "u");
}, $ = (e) => g(typeof e == "string" ? e : e.source), x = (e) => e.map($), v = (e, t, r) => {
console.log("root", e);
for (const s of t) {
const o = r.match(s);
if (o) {
const [n] = o, [a, c] = r.split(n);
if (typeof c == "string" && a === i(e, ""))
return {
relativePath: c,
relativeWorkspaceRoot: n,
root: e,
workspaceRoot: `${a}${i(n, "")}`
};
}
}
}, w = (e, t = []) => {
for (const [r, s] of t) {
const o = e.replace(r, "");
if (o !== e)
return `${s}${o}`;
}
return e;
}, E = (e) => new RegExp(`^${e}`, "u"), L = (e) => Object.entries(e).map(([t, r]) => [E(t), r]), W = (e) => i(A(e, "/"), "/"), y = (e) => Object.fromEntries(
Object.entries(e).map(([t, r]) => [W(t), L(r)])
), h = (e, t) => e.replaceAll(t, "/"), I = (e, t) => e.replaceAll("/", t), P = (e) => {
const {
workspacePaths: t = [],
alias: r = {
DEFAULT: {
src: "src"
}
},
root: s = process.cwd(),
separator: o = z.sep
} = e, n = y({
DEFAULT: {
src: "src"
},
...r
}), a = x(t), c = h(s, o);
return {
name: "monorepo-alias",
resolveId(l, p, d) {
if (!p)
return l;
const k = h(p, o), u = v(c, a, k);
if (!u)
return l;
const R = n[u.relativeWorkspaceRoot] ?? n["/DEFAULT/"], m = I(`${u.workspaceRoot}/${w(l, R)}`, o);
return this.resolve(m, p, { skipSelf: !0, ...d }).then((f) => f || {
id: m
});
}
};
}, F = P;
export {
P as createAlias,
w as getAliasId,
$ as getWorkspaceRegex,
x as getWorkspaceRegexList,
g as getWorkspaceRegexString,
v as matchWorkspace,
F as monorepoAlias,
L as normalizeAlias,
E as normalizeAliasKey,
y as normalizeAliasTree,
W as normalizeAliasTreeKey,
A as trimFirstSlash,
i as trimLastSlash
};