import { expect, test } from "bun:test"; import { generate, parse } from "../src/index.ts"; test("Async syntax compiles loading, success and error branches into inert templates", () => { const code = generate( parse(`page Users { load client users { return [{ name: "Ada" }] } view {

Loading users

{users.name}

{error.message}

} }`), ); expect(code).toContain('data-wrn-async="users"'); expect(code).toContain('data-wrn-async-retries="3"'); expect(code).toContain("data-wrn-async-loading"); expect(code).toContain("data-wrn-async-success"); expect(code).toContain("data-wrn-async-error"); expect(code).toContain("__wrnexusClientLoad"); }); test("server named loads render Async success content during SSR", () => { const code = generate( parse(`page Users { load server users { return { name: "Ada" } } view {

Loading

{users.name}

Failed

} }`), ); expect(code).toContain('const users = ctx["users"]'); expect(code).toContain('data-wrn-async-resolved="true"'); expect(code).toContain('ctx["users"] !== undefined'); }); test("named loads support memoized dependencies and deferred execution", () => { const code = generate( parse(`page Data { load server account { return { id: 7 } } load server projects after account { return [account.id] } load server audit after projects defer { return { project: projects[0] } } view { WaitReady } }`), ); expect(code).toContain("const account = await __load_account()"); expect(code).toContain("const projects = await __load_projects()"); expect(code).toContain("__promise_projects ??="); expect(code).toContain("export async function __wrnexusClientLoad"); expect(code).toContain('return { "audit": __values[0] }'); }); test("load dependency cycles and cross-phase server dependencies fail compilation", () => { expect(() => parse( `page Cycle { load server first after second { return 1 } load server second after first { return 2 } view {

x

} }`, ), ).toThrow("cycle"); expect(() => parse( `page Phase { load client browser { return 1 } load server invalid after browser { return 2 } view {

x

} }`, ), ).toThrow("cannot depend"); });