import { expect, test } from "bun:test"; import { generate, parse } from "../src/index.ts"; test("server-only loader data renders native input attributes without client state", async () => { const code = generate( parse(`import UserSelect from "./UserSelect.wrn" page Profile { load server account { return {} } view {

{account.name}

{#if account.readonly}

Read only

{:else}

Editable

{/if} {#each account.items as item}{item}{/each}
} }`), ); const javascript = new Bun.Transpiler({ loader: "ts" }).transformSync(code); const page = await import( `data:text/javascript;base64,${Buffer.from(javascript).toString("base64")}` ); const html = await page.default({ account: { items: ["Example record"], name: 'A ""', readonly: false, theme: "dark", identity: { name: "Alice" }, }, }); expect(html).toContain('value="A "<User>""'); expect(html).not.toContain(" readonly"); expect(html).toContain(''); expect(html).toContain(''); expect(html).toContain('identity="{"name":"Alice"}"'); expect(html).not.toContain("data-wrn-bind"); expect(html).not.toContain("data-wrn-prop-bind"); expect(html).not.toContain("{account."); expect(html).toContain("

A "<User>"

"); expect(html).toContain("

Editable

"); expect(html).toContain("Example record"); expect(html).not.toContain("data-wrn-if"); expect(html).not.toContain("data-wrn-each"); expect(html).not.toContain("data-text"); });