feat: centralize application framework primitives
Quality / quality (ubuntu-latest) (push) Failing after 14m38s
Quality / quality (windows-latest) (push) Canceled after 0s

This commit is contained in:
2026-08-22 23:07:46 +05:30
parent 96e082b943
commit a3ddd39b7b
73 changed files with 1429 additions and 84 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/syntax",
"version": "0.8.12",
"version": "0.8.13",
"type": "module",
"main": "src/index.ts",
"exports": {
+18
View File
@@ -393,6 +393,24 @@ export function parse(source: string): PageAst {
throw new ParseError(`Expected a ${kind} member keyword at offset ${kw.pos}`);
}
switch (kw.value) {
case "auth": {
lx.next();
expect("eq");
const value = lx.next();
if (value.type !== "ident" || !["true", "false"].includes(value.value)) {
throw new ParseError(`Expected auth = true or false at offset ${value.pos}`);
}
security.auth = value.value === "true" ? "required" : "false";
break;
}
case "permission": {
lx.next();
expect("eq");
const value = expect("string").value.trim();
if (!value) throw new ParseError(`Page permission cannot be empty at offset ${kw.pos}`);
security.permission = value;
break;
}
case "layout": {
// layout = "public" — selects app/layouts/<name>.wrn for this page.
lx.next();
+11
View File
@@ -0,0 +1,11 @@
import { expect, test } from "bun:test";
import { parse } from "../src/index.ts";
test("pages accept concise authentication and permission guards", () => {
const ast = parse(`page Dashboard {
auth = true
permission = "dashboard:read"
view { <h1>Dashboard</h1> }
}`);
expect(ast.security).toEqual({ auth: "required", permission: "dashboard:read" });
});