mcp-import-boundary.test.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { expect, test } from "bun:test"
  2. import { mkdtemp, rm } from "node:fs/promises"
  3. import path from "node:path"
  4. const root = path.resolve(import.meta.dir, "../../..")
  5. test("loads the MCP SDK only when connecting or authorizing", async () => {
  6. const temporary = await mkdtemp(path.join(import.meta.dir, ".mcp-import-boundary-"))
  7. const metafile = path.join(temporary, "meta.json")
  8. try {
  9. const result = Bun.spawn(
  10. [
  11. process.execPath,
  12. "build",
  13. "packages/core/src/mcp/index.ts",
  14. "--target=node",
  15. "--format=esm",
  16. "--packages=bundle",
  17. "--splitting",
  18. `--metafile=${metafile}`,
  19. `--outdir=${path.join(temporary, "out")}`,
  20. ],
  21. { cwd: root, stdout: "pipe", stderr: "pipe" },
  22. )
  23. const [exitCode, stdout, stderr] = await Promise.all([
  24. result.exited,
  25. new Response(result.stdout).text(),
  26. new Response(result.stderr).text(),
  27. ])
  28. if (exitCode !== 0) throw new Error(stdout + stderr)
  29. const metadata = await Bun.file(metafile).json()
  30. const imports = metadata.inputs["packages/core/src/mcp/index.ts"].imports
  31. const lazy = imports.filter(
  32. (item: { original?: string }) => item.original === "./client.js" || item.original === "./oauth.js",
  33. )
  34. expect(new Set(lazy.map((item: { original: string }) => item.original))).toEqual(
  35. new Set(["./client.js", "./oauth.js"]),
  36. )
  37. expect(lazy.every((item: { kind: string }) => item.kind === "dynamic-import")).toBe(true)
  38. } finally {
  39. await rm(temporary, { recursive: true, force: true })
  40. }
  41. })