From 56027531ef94f9ad8e6ac7e82b441b9f9908fb6c Mon Sep 17 00:00:00 2001 From: Ajay Ghanwat Date: Tue, 14 Jul 2026 15:13:58 +0530 Subject: [PATCH] release: WRNexusJS 0.2.28 --- .publish/ai/package.json | 2 +- .publish/authz/package.json | 2 +- .publish/cli/package.json | 22 ++++++------- .publish/compiler/package.json | 2 +- .publish/core/package.json | 2 +- .publish/csr/package.json | 4 +-- .publish/db/package.json | 2 +- .publish/dev-server/package.json | 26 +++++++-------- .publish/encryption/package.json | 2 +- .publish/helpers/package.json | 4 +-- .publish/i18n/package.json | 4 +-- .publish/jwt/package.json | 2 +- .publish/mobile/package.json | 4 +-- .publish/native/package.json | 2 +- .publish/oauth/package.json | 2 +- .publish/pubsub/package.json | 2 +- .publish/queue/package.json | 2 +- .publish/reactive/package.json | 2 +- .publish/router/package.json | 6 ++-- .publish/ssr/package.json | 4 +-- .publish/styles/package.json | 4 +-- .publish/test/package.json | 2 +- .publish/tracking/package.json | 2 +- .publish/ui/package.json | 4 +-- .publish/uploader/package.json | 4 +-- .publish/validation/package.json | 2 +- packages/ai/package.json | 2 +- packages/authz/package.json | 2 +- packages/cli/package.json | 2 +- packages/cli/src/update.ts | 8 +++++ packages/compiler/package.json | 2 +- packages/compiler/src/codegen.ts | 44 ++++++++++++++++++++++--- packages/compiler/src/parser.ts | 19 +++++++---- packages/compiler/test/compiler.test.ts | 31 +++++++++++++++++ packages/core/package.json | 2 +- packages/csr/package.json | 2 +- packages/db/package.json | 2 +- packages/dev-server/package.json | 2 +- packages/encryption/package.json | 2 +- packages/helpers/package.json | 2 +- packages/i18n/package.json | 2 +- packages/jwt/package.json | 2 +- packages/mobile/package.json | 2 +- packages/native/package.json | 2 +- packages/oauth/package.json | 2 +- packages/pubsub/package.json | 2 +- packages/queue/package.json | 2 +- packages/reactive/package.json | 2 +- packages/router/package.json | 2 +- packages/ssr/package.json | 2 +- packages/styles/package.json | 2 +- packages/test/package.json | 2 +- packages/tracking/package.json | 2 +- packages/ui/package.json | 2 +- packages/uploader/package.json | 2 +- packages/validation/package.json | 2 +- 56 files changed, 175 insertions(+), 95 deletions(-) diff --git a/.publish/ai/package.json b/.publish/ai/package.json index 69678cb4..c535f49d 100644 --- a/.publish/ai/package.json +++ b/.publish/ai/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/ai", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.", "license": "MIT", diff --git a/.publish/authz/package.json b/.publish/authz/package.json index 991726a4..41f51e5d 100644 --- a/.publish/authz/package.json +++ b/.publish/authz/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/authz", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/authz — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/cli/package.json b/.publish/cli/package.json index 37152ab7..29cf36cb 100644 --- a/.publish/cli/package.json +++ b/.publish/cli/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/cli", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/cli — part of the WrNexus framework.", "license": "MIT", @@ -28,16 +28,16 @@ "wrnexus": "./dist/index.js" }, "dependencies": { - "@wrnexus/core": "^0.2.27", - "@wrnexus/router": "^0.2.27", - "@wrnexus/csr": "^0.2.27", - "@wrnexus/compiler": "^0.2.27", - "@wrnexus/styles": "^0.2.27", - "@wrnexus/dev-server": "^0.2.27", - "@wrnexus/ui": "^0.2.27", - "@wrnexus/validation": "^0.2.27", - "@wrnexus/i18n": "^0.2.27", - "@wrnexus/db": "^0.2.27" + "@wrnexus/core": "^0.2.28", + "@wrnexus/router": "^0.2.28", + "@wrnexus/csr": "^0.2.28", + "@wrnexus/compiler": "^0.2.28", + "@wrnexus/styles": "^0.2.28", + "@wrnexus/dev-server": "^0.2.28", + "@wrnexus/ui": "^0.2.28", + "@wrnexus/validation": "^0.2.28", + "@wrnexus/i18n": "^0.2.28", + "@wrnexus/db": "^0.2.28" }, "files": [ "dist" diff --git a/.publish/compiler/package.json b/.publish/compiler/package.json index 10b04586..00ce5ecb 100644 --- a/.publish/compiler/package.json +++ b/.publish/compiler/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/compiler", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/compiler — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/core/package.json b/.publish/core/package.json index f79e0266..4fb07c70 100644 --- a/.publish/core/package.json +++ b/.publish/core/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/core", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/core — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/csr/package.json b/.publish/csr/package.json index 27b61eb8..f8b4222d 100644 --- a/.publish/csr/package.json +++ b/.publish/csr/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/csr", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/csr — part of the WrNexus framework.", "license": "MIT", @@ -21,7 +21,7 @@ } }, "dependencies": { - "@wrnexus/core": "^0.2.27" + "@wrnexus/core": "^0.2.28" }, "files": [ "dist" diff --git a/.publish/db/package.json b/.publish/db/package.json index b4e50fc2..978799ae 100644 --- a/.publish/db/package.json +++ b/.publish/db/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/db", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/db — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/dev-server/package.json b/.publish/dev-server/package.json index 648b19d1..6b496205 100644 --- a/.publish/dev-server/package.json +++ b/.publish/dev-server/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/dev-server", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/dev-server — part of the WrNexus framework.", "license": "MIT", @@ -25,18 +25,18 @@ } }, "dependencies": { - "@wrnexus/core": "^0.2.27", - "@wrnexus/router": "^0.2.27", - "@wrnexus/ssr": "^0.2.27", - "@wrnexus/csr": "^0.2.27", - "@wrnexus/compiler": "^0.2.27", - "@wrnexus/styles": "^0.2.27", - "@wrnexus/ui": "^0.2.27", - "@wrnexus/validation": "^0.2.27", - "@wrnexus/i18n": "^0.2.27", - "@wrnexus/db": "^0.2.27", - "@wrnexus/pubsub": "^0.2.27", - "@wrnexus/uploader": "^0.2.27" + "@wrnexus/core": "^0.2.28", + "@wrnexus/router": "^0.2.28", + "@wrnexus/ssr": "^0.2.28", + "@wrnexus/csr": "^0.2.28", + "@wrnexus/compiler": "^0.2.28", + "@wrnexus/styles": "^0.2.28", + "@wrnexus/ui": "^0.2.28", + "@wrnexus/validation": "^0.2.28", + "@wrnexus/i18n": "^0.2.28", + "@wrnexus/db": "^0.2.28", + "@wrnexus/pubsub": "^0.2.28", + "@wrnexus/uploader": "^0.2.28" }, "files": [ "dist" diff --git a/.publish/encryption/package.json b/.publish/encryption/package.json index 69cb938d..d14ccb37 100644 --- a/.publish/encryption/package.json +++ b/.publish/encryption/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/encryption", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/encryption — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/helpers/package.json b/.publish/helpers/package.json index ad189a37..a3d1ca50 100644 --- a/.publish/helpers/package.json +++ b/.publish/helpers/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/helpers", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "Safe convenience helpers for WrNexus request contexts and common application flows.", "license": "MIT", @@ -21,7 +21,7 @@ } }, "dependencies": { - "@wrnexus/core": "^0.2.27" + "@wrnexus/core": "^0.2.28" }, "files": [ "dist" diff --git a/.publish/i18n/package.json b/.publish/i18n/package.json index 1b2cfec7..4b044d6e 100644 --- a/.publish/i18n/package.json +++ b/.publish/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/i18n", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/i18n — part of the WrNexus framework.", "license": "MIT", @@ -21,7 +21,7 @@ } }, "dependencies": { - "@wrnexus/core": "^0.2.27" + "@wrnexus/core": "^0.2.28" }, "files": [ "dist" diff --git a/.publish/jwt/package.json b/.publish/jwt/package.json index 8336a5fb..64f50ba4 100644 --- a/.publish/jwt/package.json +++ b/.publish/jwt/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/jwt", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/jwt — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/mobile/package.json b/.publish/mobile/package.json index 404040a7..bf318a6c 100644 --- a/.publish/mobile/package.json +++ b/.publish/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/mobile", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/mobile — part of the WrNexus framework.", "license": "MIT", @@ -21,7 +21,7 @@ } }, "dependencies": { - "@wrnexus/native": "^0.2.27" + "@wrnexus/native": "^0.2.28" }, "files": [ "dist" diff --git a/.publish/native/package.json b/.publish/native/package.json index 6109f281..fb04282e 100644 --- a/.publish/native/package.json +++ b/.publish/native/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/native", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/native — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/oauth/package.json b/.publish/oauth/package.json index 68f62443..ab71d43c 100644 --- a/.publish/oauth/package.json +++ b/.publish/oauth/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/oauth", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/oauth — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/pubsub/package.json b/.publish/pubsub/package.json index 5b867e48..aca2d2fe 100644 --- a/.publish/pubsub/package.json +++ b/.publish/pubsub/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/pubsub", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/pubsub — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/queue/package.json b/.publish/queue/package.json index 6bc01574..652f0aed 100644 --- a/.publish/queue/package.json +++ b/.publish/queue/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/queue", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/queue — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/reactive/package.json b/.publish/reactive/package.json index 9284fa55..42cfb1d0 100644 --- a/.publish/reactive/package.json +++ b/.publish/reactive/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/reactive", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/reactive — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/router/package.json b/.publish/router/package.json index 38651806..394e4410 100644 --- a/.publish/router/package.json +++ b/.publish/router/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/router", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/router — part of the WrNexus framework.", "license": "MIT", @@ -21,8 +21,8 @@ } }, "dependencies": { - "@wrnexus/compiler": "^0.2.27", - "@wrnexus/core": "^0.2.27" + "@wrnexus/compiler": "^0.2.28", + "@wrnexus/core": "^0.2.28" }, "files": [ "dist" diff --git a/.publish/ssr/package.json b/.publish/ssr/package.json index d0ce2b4d..e710af69 100644 --- a/.publish/ssr/package.json +++ b/.publish/ssr/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/ssr", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/ssr — part of the WrNexus framework.", "license": "MIT", @@ -21,7 +21,7 @@ } }, "dependencies": { - "@wrnexus/core": "^0.2.27" + "@wrnexus/core": "^0.2.28" }, "files": [ "dist" diff --git a/.publish/styles/package.json b/.publish/styles/package.json index a1634b18..6567fa60 100644 --- a/.publish/styles/package.json +++ b/.publish/styles/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/styles", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/styles — part of the WrNexus framework.", "license": "MIT", @@ -21,7 +21,7 @@ } }, "dependencies": { - "@wrnexus/uploader": "^0.2.27" + "@wrnexus/uploader": "^0.2.28" }, "files": [ "dist" diff --git a/.publish/test/package.json b/.publish/test/package.json index 6e6bbbed..d99671ac 100644 --- a/.publish/test/package.json +++ b/.publish/test/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/test", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/test — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/tracking/package.json b/.publish/tracking/package.json index d8572624..a701a7d8 100644 --- a/.publish/tracking/package.json +++ b/.publish/tracking/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/tracking", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/tracking — part of the WrNexus framework.", "license": "MIT", diff --git a/.publish/ui/package.json b/.publish/ui/package.json index b3746e60..aca4e3d1 100644 --- a/.publish/ui/package.json +++ b/.publish/ui/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/ui", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/ui — part of the WrNexus framework.", "license": "MIT", @@ -22,7 +22,7 @@ "./ui.css": "./ui.css" }, "dependencies": { - "@wrnexus/core": "^0.2.27" + "@wrnexus/core": "^0.2.28" }, "files": [ "dist", diff --git a/.publish/uploader/package.json b/.publish/uploader/package.json index 7f01fe0e..03a613eb 100644 --- a/.publish/uploader/package.json +++ b/.publish/uploader/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/uploader", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/uploader — part of the WrNexus framework.", "license": "MIT", @@ -21,7 +21,7 @@ } }, "dependencies": { - "@wrnexus/core": "^0.2.27" + "@wrnexus/core": "^0.2.28" }, "files": [ "dist" diff --git a/.publish/validation/package.json b/.publish/validation/package.json index c8883d11..af9595a8 100644 --- a/.publish/validation/package.json +++ b/.publish/validation/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/validation", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "description": "@wrnexus/validation — part of the WrNexus framework.", "license": "MIT", diff --git a/packages/ai/package.json b/packages/ai/package.json index 7d832d1a..c1f608f7 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/ai", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.", diff --git a/packages/authz/package.json b/packages/authz/package.json index d8208c9c..02e0943b 100644 --- a/packages/authz/package.json +++ b/packages/authz/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/authz", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/cli/package.json b/packages/cli/package.json index a6eb2cf4..2f52d8ef 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/cli", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/cli/src/update.ts b/packages/cli/src/update.ts index 5661162c..f8208222 100644 --- a/packages/cli/src/update.ts +++ b/packages/cli/src/update.ts @@ -321,6 +321,14 @@ const MIGRATIONS: Migration[] = [ // No project file migration is required for this framework release. }, }, + { + version: "0.2.28", + id: "layout-component-improvements", + description: "Added new block layout for component and improved component rendering.", + apply() { + // No project file migration is required for this framework release. + }, + }, ]; /** Release tooling uses this to require an explicit migration entry per version. */ diff --git a/packages/compiler/package.json b/packages/compiler/package.json index 077ffd05..9e408bb8 100644 --- a/packages/compiler/package.json +++ b/packages/compiler/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/compiler", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/compiler/src/codegen.ts b/packages/compiler/src/codegen.ts index ef56b761..0575cf4e 100644 --- a/packages/compiler/src/codegen.ts +++ b/packages/compiler/src/codegen.ts @@ -599,7 +599,9 @@ async function __wrnexusRenderSsrBindings(html: string, ctx: any): Promise`) + `\${__wireHtml(${ctx.resolveExpr(expr)})}` + escLit(``); + } else if (expr === "content") { + out += `\${__wireRaw(${ctx.resolveExpr(expr)})}`; } else { out += `\${__wireHtml(${ctx.resolveExpr(expr)})}`; } @@ -1024,9 +1028,22 @@ function renderComponentNode(node: ViewNode, ctx: CompCtx): string { function generateComponent(ast: PageAst): string { const out: string[] = []; + const effectiveProps = + ast.kind === "layout" && !ast.props.some((prop) => prop.name === "content") + ? [ + { + name: "content", + default: '""', + }, + ...ast.props, + ] + : ast.props; + const stateNames = new Set(ast.states.map((s) => s.name)); const nameRefs = new Map(); - for (const p of ast.props) nameRefs.set(p.name, safeRef(p.name)); + for (const p of effectiveProps) { + nameRefs.set(p.name, safeRef(p.name)); + } for (const s of ast.states) nameRefs.set(s.name, safeRef(s.name)); const resolveExpr = (expr: string): string => { let result = expr; @@ -1050,10 +1067,13 @@ function generateComponent(ast: PageAst): string { // Prop-driven text/attributes are baked server-side, so static components ship // no JavaScript at all. const needsScope = ast.states.length > 0 || viewHasEvents(ast.view); - const scopeKeys = [...ast.props.map((p) => p.name), ...ast.states.map((s) => s.name)]; + const scopeKeys = [ + ...effectiveProps.map((prop) => prop.name), + ...ast.states.map((state) => state.name), + ]; const decls: string[] = []; - for (const prop of ast.props) { + for (const prop of effectiveProps) { decls.push( ` const ${nameRefs.get(prop.name)} = __coerce(__p[${JSON.stringify(prop.name)}], (${resolveExpr(prop.default)}));`, ); @@ -1073,7 +1093,11 @@ function generateComponent(ast: PageAst): string { ? ` const __scope = "";\n` : ""; - out.push(`export const __wrnexusComponent = ${JSON.stringify(ast.name)};`); + if (ast.kind === "layout") { + out.push(`export const __wrnexusLayout = ${JSON.stringify(ast.name)};`); + } else { + out.push(`export const __wrnexusComponent = ${JSON.stringify(ast.name)};`); + } out.push(`function __coerce(v: any, def: any): any { if (v === undefined || v === null) return def; if (typeof def === "number") return Number(v); @@ -1116,3 +1140,13 @@ function __wireAttr(v: any): string { return out.join("\n\n") + "\n"; } + +function __wireHtml(v: any): string { + return String(v == null ? "" : v).replace(/[&<>]/g, (c) => + c === "&" ? "&" : c === "<" ? "<" : ">", + ); +} + +function __wireRaw(v: any): string { + return String(v == null ? "" : v); +} diff --git a/packages/compiler/src/parser.ts b/packages/compiler/src/parser.ts index de5c0844..38fbf65d 100644 --- a/packages/compiler/src/parser.ts +++ b/packages/compiler/src/parser.ts @@ -124,8 +124,11 @@ export interface PropDecl { export interface PageAst { type: "page"; - /** `page` (a route) or `component` (a reusable, prop-driven fragment). */ - kind: "page" | "component"; + /** + * `page` is a route, `component` is a reusable fragment, + * and `layout` is a reusable page wrapper. + */ + kind: "page" | "component" | "layout"; name: string; /** Name of the page layout (`app/layouts/.wrn`), if the page sets one. */ layout?: string; @@ -183,14 +186,18 @@ export function parse(source: string): PageAst { }; try { - // A file is either a `page` (a route) or a `component` (a reusable fragment). + // A file may contain a page, reusable component, or reusable layout. const opener = lx.next(); - if (opener.type !== "ident" || (opener.value !== "page" && opener.value !== "component")) { + + if (opener.type !== "ident" || !["page", "component", "layout"].includes(opener.value)) { throw new ParseError( - `Expected 'page' or 'component' but got '${opener.value || opener.type}' at offset ${opener.pos}`, + `Expected 'page', 'component', or 'layout' but got '${ + opener.value || opener.type + }' at offset ${opener.pos}`, ); } - const kind: "page" | "component" = opener.value === "component" ? "component" : "page"; + + const kind = opener.value as "page" | "component" | "layout"; const name = expect("ident").value; expect("lbrace"); diff --git a/packages/compiler/test/compiler.test.ts b/packages/compiler/test/compiler.test.ts index 5b7de797..19875fde 100644 --- a/packages/compiler/test/compiler.test.ts +++ b/packages/compiler/test/compiler.test.ts @@ -212,3 +212,34 @@ component ParentCard { expect(output).toContain('title="${__wireAttr(title)}"'); }); + +test("parses a layout block", () => { + const ast = parse(` +layout AppLayout { + view { +
{content}
+ } +} +`); + + expect(ast.kind).toBe("layout"); + expect(ast.name).toBe("AppLayout"); +}); + +test("layouts compile as reusable render modules", () => { + const output = generate( + parse(` +layout AppLayout { + view { +
{content}
+ } +} +`), + ); + + expect(output).toContain('export const __wrnexusLayout = "AppLayout"'); + + expect(output).toContain("${__wireRaw(content)}"); + + expect(output).toContain("export function render"); +}); diff --git a/packages/core/package.json b/packages/core/package.json index c415f6aa..5063a060 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/core", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/csr/package.json b/packages/csr/package.json index b4ec431c..451084c9 100644 --- a/packages/csr/package.json +++ b/packages/csr/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/csr", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/db/package.json b/packages/db/package.json index 4667456f..0dcbe1b2 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/db", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/dev-server/package.json b/packages/dev-server/package.json index 8f8b13bb..6ecd932e 100644 --- a/packages/dev-server/package.json +++ b/packages/dev-server/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/dev-server", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/encryption/package.json b/packages/encryption/package.json index 6b3732f5..43127462 100644 --- a/packages/encryption/package.json +++ b/packages/encryption/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/encryption", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/helpers/package.json b/packages/helpers/package.json index 263c5f2c..7e5fbcce 100644 --- a/packages/helpers/package.json +++ b/packages/helpers/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/helpers", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "description": "Safe convenience helpers for WrNexus request contexts and common application flows.", diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 92778bca..7d8d7f8b 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/i18n", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/jwt/package.json b/packages/jwt/package.json index 04d342b3..d5f46105 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/jwt", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/mobile/package.json b/packages/mobile/package.json index 38c7f8fb..bbe78391 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/mobile", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/native/package.json b/packages/native/package.json index 3e59d09b..7b909e02 100644 --- a/packages/native/package.json +++ b/packages/native/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/native", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/oauth/package.json b/packages/oauth/package.json index 927c24da..987437eb 100644 --- a/packages/oauth/package.json +++ b/packages/oauth/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/oauth", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/pubsub/package.json b/packages/pubsub/package.json index bb61742c..d71fda71 100644 --- a/packages/pubsub/package.json +++ b/packages/pubsub/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/pubsub", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/queue/package.json b/packages/queue/package.json index 55a2d81f..95fe539f 100644 --- a/packages/queue/package.json +++ b/packages/queue/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/queue", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/reactive/package.json b/packages/reactive/package.json index 0bd9ebd1..bb611b35 100644 --- a/packages/reactive/package.json +++ b/packages/reactive/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/reactive", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/router/package.json b/packages/router/package.json index 73a8f883..8b94485c 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/router", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/ssr/package.json b/packages/ssr/package.json index dbe61910..bc7c755a 100644 --- a/packages/ssr/package.json +++ b/packages/ssr/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/ssr", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/styles/package.json b/packages/styles/package.json index 46c428f2..9be35def 100644 --- a/packages/styles/package.json +++ b/packages/styles/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/styles", - "version": "0.2.27", + "version": "0.2.28", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/test/package.json b/packages/test/package.json index 4f6f7627..f901b71b 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/test", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/tracking/package.json b/packages/tracking/package.json index 074e6d25..ccb0a3de 100644 --- a/packages/tracking/package.json +++ b/packages/tracking/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/tracking", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/ui/package.json b/packages/ui/package.json index 662f930b..a8c9ca60 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/ui", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/uploader/package.json b/packages/uploader/package.json index 856685ef..07b29cab 100644 --- a/packages/uploader/package.json +++ b/packages/uploader/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/uploader", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/validation/package.json b/packages/validation/package.json index cca80b53..0d53a7b4 100644 --- a/packages/validation/package.json +++ b/packages/validation/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/validation", - "version": "0.2.27", + "version": "0.2.28", "private": true, "type": "module", "main": "src/index.ts",