release: WRNexusJS 0.5.10

This commit is contained in:
2026-07-30 13:36:29 +05:30
parent 8fc6f15402
commit d1b0c55b53
159 changed files with 7509 additions and 604 deletions
@@ -305,3 +305,46 @@ test("schema-backed forms validate on input, change, and blur and synchronize fi
delete (globalThis as Record<string, unknown>).document;
}
});
test("submit guards run only after schema fields are valid", () => {
const win = new Window() as unknown as Window & Record<string, unknown>;
win.document.body.innerHTML = `
<form data-schema="guarded">
<input name="email">
<span data-error="email"></span>
</form>`;
win.__wireSchemas = {
guarded: v.object({ email: v.string().required("Enter an email") }).describe(),
};
(globalThis as Record<string, unknown>).window = win;
(globalThis as Record<string, unknown>).document = win.document;
try {
(0, eval)(VALIDATE_RUNTIME);
const form = win.document.querySelector("form")! as unknown as HTMLFormElement & {
__wireSubmitGuards?: Array<() => boolean>;
};
let guardCalls = 0;
form.__wireSubmitGuards = [
() => {
guardCalls += 1;
return false;
},
];
form.dispatchEvent(
new win.Event("submit", { bubbles: true, cancelable: true }) as unknown as Event,
);
expect(guardCalls).toBe(0);
expect(win.document.querySelector("[data-error=email]")!.textContent).toBe("Enter an email");
(form.elements.namedItem("email") as HTMLInputElement).value = "person@example.com";
form.dispatchEvent(
new win.Event("submit", { bubbles: true, cancelable: true }) as unknown as Event,
);
expect(guardCalls).toBe(1);
} finally {
delete (globalThis as Record<string, unknown>).window;
delete (globalThis as Record<string, unknown>).document;
}
});