feat: release design system engine, studio and component contracts

This commit is contained in:
Clintchiz committed 2026-10-19 13:09:03 +05:30
1 parent ff1065fb27
commit 3943b946d6
693 files changed
+175546 -3894

No files matched your search

@@ -0,0 +1,49 @@
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 { <h3>Address review</h3>{#if review}<p>{review.address}</p>{#if review.suppression.active}<button>Reactivate</button>{/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("<h3>Address review</h3>");
});
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}<p>{review.address}</p>{#if review.suppression}<b>{review.suppression.reason}</b>{:else}<i>No block</i>{/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</span>');
expect(html).toContain("<i>No block</i>");
expect(html).not.toContain("<b>null</b>");
});
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}<Input label="{messages.evidence}" /><Button label="{messages.reactivate}" />{/if} }
}`;
const code = new Bun.Transpiler({ loader: "ts" }).transformSync(
compile(source, "LocalizedReview.wrn").code,
);
const mod = await import("data:text/javascript;base64," + Buffer.from(code).toString("base64"));
const html = mod.render({});
const match = /data-wrn-if="([A-Za-z0-9+/=]+)"/.exec(html)!;
const body = JSON.parse(Buffer.from(match[1]!, "base64").toString())[0].body;
expect(body).toContain("data-wrn-prop-bind-0=");
expect(body).not.toContain("data-wrn-bind-0=");
expect(body).toContain("messages.evidence");
expect(body).toContain("messages.reactivate");
});