import { expect, test } from "bun:test"; import { mergePluginAssets, runtimeIdsFromMarkup, runtimeScriptsForMarkup, servePluginAsset, } from "../src/plugin-assets.ts"; import { resolvePackageMigrations } from "../src/plugin-migrations.ts"; test("injects only runtimes referenced by rendered markup", () => { const runtimes = [ { id: "captcha", source: "window.captcha = true" }, { id: "editor", source: "window.editor = true" }, ]; const body = '
'; expect([...runtimeIdsFromMarkup(body)]).toEqual(["captcha"]); const scripts = runtimeScriptsForMarkup(body, runtimes); expect(scripts).toHaveLength(1); expect(scripts[0]).toMatchObject({ src: "/__wrnexus/assets/captcha.js", type: "module", defer: true, }); }); test("serves package assets with a safe content type", async () => { const assets = mergePluginAssets( [{ id: "captcha", source: "window.captcha = true", type: "script" }], [], ); const response = await servePluginAsset(assets, "/__wrnexus/assets/captcha.js", "development"); expect(response?.status).toBe(200); expect(response?.headers.get("content-type")).toBe("text/javascript; charset=utf-8"); expect(response?.headers.get("x-content-type-options")).toBe("nosniff"); expect(await response?.text()).toContain("window.captcha"); }); test("resolves inline package migrations for the requested database", () => { const migrations = resolvePackageMigrations( [ { id: "default-schema", source: "-- +up\nCREATE TABLE one(id INTEGER);" }, { id: "analytics-schema", database: "analytics", source: "-- +up\nCREATE TABLE events(id INTEGER);", }, ], "analytics", ); expect(migrations).toHaveLength(1); expect(migrations[0]?.name).toBe("analytics-schema"); expect(migrations[0]?.up).toContain("CREATE TABLE events"); }); import { collectScripts } from "../src/runtime.ts"; test("collectScripts automatically adds a referenced package runtime once", () => { const scripts = collectScripts( '
', [{ id: "captcha", source: "window.captcha = true", type: "script" }], ); expect( scripts.filter( (script) => typeof script !== "string" && script.src === "/__wrnexus/assets/captcha.js", ), ).toHaveLength(1); }); test("collectScripts omits client navigation in document mode", () => { const scripts = collectScripts("
Server rendered
", [], { mode: "document", }); expect(scripts).not.toContain("/__wrnexus/nav.js"); });