import path from "node:path"; import { pathToFileURL } from "node:url"; import { describe, expect, it } from "vitest"; import { resolveFileModuleUrl, resolveFunctionModuleExport } from "./module-loader.js"; describe("hooks module loader helpers", () => { it("builds a file URL without cache-busting by default", () => { const modulePath = path.resolve("/tmp/hook-handler.js"); expect(resolveFileModuleUrl({ modulePath })).toBe(pathToFileURL(modulePath).href); }); it("adds a cache-busting query when requested", () => { const modulePath = path.resolve("/tmp/hook-handler.js"); expect( resolveFileModuleUrl({ modulePath, cacheBust: true, nowMs: 123, }), ).toBe(`${pathToFileURL(modulePath).href}?t=123`); }); it("resolves explicit function exports", () => { const fn = () => "ok"; const resolved = resolveFunctionModuleExport({ mod: { run: fn }, exportName: "run", }); expect(resolved).toBe(fn); }); it("falls back through named exports when no explicit export is provided", () => { const fallback = () => "ok"; const resolved = resolveFunctionModuleExport({ mod: { transform: fallback }, fallbackExportNames: ["default", "transform"], }); expect(resolved).toBe(fallback); }); it("returns undefined when export exists but is not callable", () => { const resolved = resolveFunctionModuleExport({ mod: { run: "nope" }, exportName: "run", }); expect(resolved).toBeUndefined(); }); });