feat: centralize application framework primitives
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@wrnexus/syntax",
|
||||
"version": "0.8.12",
|
||||
"version": "0.8.13",
|
||||
"type": "module",
|
||||
"main": "src/index.ts",
|
||||
"exports": {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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" });
|
||||
});
|
||||
Reference in New Issue
Block a user