UNPKG

vitest-auto-mock

Version:

Library for mocking dependencies in Vitest with TypeScript without need to provide a path.

44 lines (43 loc) 1.57 kB
import { createFilter as u } from "vite"; import { configDefaults as p } from "vitest/config"; const m = "vi", f = "mocked"; function P() { let e = null; return { name: "vite-plugin-vitest-auto-mock", configResolved: ({ test: t }) => { const r = (t == null ? void 0 : t.include) ?? p.include; e = u(r); }, transform(t, r) { return !e || !e(r) ? void 0 : { code: d(t, this.parse) }; } }; } const d = (e, t) => { const n = t(e).body, o = n.filter(C), a = g(n); if (a.length === 0) return e; const l = I(o), c = a.map(l); return x(c).concat(e); }, g = (e) => { const t = e.filter((o) => o.type === "VariableDeclaration").map((o) => o.declarations[0].init), r = e.filter(E).map((o) => o.expression).filter(i); return [...t, ...r].filter(i).filter(y); }, y = (e) => { const t = e.callee; if (!A(t)) return !1; const r = t.object; if (!s(r) || r.name !== m) return !1; const n = t.property; return s(n) ? n.name === f : !1; }, I = (e) => (t) => M(e, t), M = (e, t) => { const r = t.arguments[0]; return s(r) ? k(e, r.name) : null; }, i = (e) => !!e && e.type === "CallExpression", s = (e) => e.type === "Identifier", A = (e) => e.type === "MemberExpression", E = (e) => e.type === "ExpressionStatement", C = (e) => e.type === "ImportDeclaration", k = (e, t) => e.filter((r) => b(r, t)).map((r) => r.source.raw)[0] ?? null, b = (e, t) => e.specifiers.some((r) => r.local.name === t), x = (e) => ` ` + e.filter((t) => !!t).map((t) => `vi.mock(${t});`).join(` `); export { P as default };