import { expect, test } from "bun:test"; import { compile } from "../src/index.ts"; test("inactive conditional branches do not dereference null state during server rendering", async () => { const source = `component AddressReview { state review = null view {

Address review

{#if review}

{review.address}

{#if review.suppression.active}{/if}{/if} } }`; const code = new Bun.Transpiler({ loader: "ts" }).transformSync( compile(source, "AddressReview.wrn").code, ); const mod = await import("data:text/javascript;base64," + Buffer.from(code).toString("base64")); expect(() => mod.render({})).not.toThrow(); expect(mod.render({})).toContain("

Address review

"); }); test("selected branches render state while inactive nested branches remain browser templates", async () => { const source = `component AddressReview { props { review = { address: 'review@example.test', suppression: null } } view { {#if review}

{review.address}

{#if review.suppression}{review.suppression.reason}{:else}No block{/if}{/if} } }`; const code = new Bun.Transpiler({ loader: "ts" }).transformSync( compile(source, "ReviewedAddress.wrn").code, ); const mod = await import("data:text/javascript;base64," + Buffer.from(code).toString("base64")); const html = mod.render({}); expect(html).toContain('data-text="review.address">review@example.test'); expect(html).toContain("No block"); expect(html).not.toContain("null"); }); test("inactive branch child components retain parent prop bindings", async () => { const source = `component AddressReview { props { messages = { evidence: 'Evidence', reactivate: 'Reactivate' } } state review = null view { {#if review}