release: WRNexusJS 0.2.35

This commit is contained in:
2026-07-15 08:57:07 +05:30
parent 2c6e6f6de3
commit afb14c2fbf
55 changed files with 160 additions and 89 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ai",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/authz",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/cli",
"version": "0.2.35",
"version": "0.2.36",
"type": "module",
"main": "src/index.ts",
"exports": {
+9
View File
@@ -393,6 +393,15 @@ const MIGRATIONS: Migration[] = [
// No generated application files require automatic migration.
},
},
{
version: "0.2.36",
id: "attribute-bug",
description:
"Adds support for Tailwind arbitrary-value class directives and improves reactive class bindings.",
apply() {
// No generated application files require automatic migration.
},
},
];
/** Release tooling uses this to require an explicit migration entry per version. */
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/compiler",
"version": "0.2.35",
"version": "0.2.36",
"type": "module",
"main": "src/index.ts",
"exports": {
+24 -5
View File
@@ -526,18 +526,37 @@ export function parseHtmlView(src: string, pos: number): { nodes: ViewNode[]; en
};
const readAttributeName = (): string => {
const first = src[i];
if (i >= src.length || (!isNameStart(first!) && first !== ":" && first !== "$")) {
if (i >= src.length) {
return fail("Expected an attribute name");
}
const start = i++;
const start = i;
while (i < src.length) {
const char = src[i];
const next = src[i + 1];
if (
char === "=" ||
char === ">" ||
char === '"' ||
char === "'" ||
char === " " ||
char === "\t" ||
char === "\n" ||
char === "\r" ||
(char === "/" && next === ">")
) {
break;
}
while (i < src.length && isAttributeNamePart(src[i]!, src[i + 1])) {
i++;
}
if (i === start) {
return fail("Expected an attribute name");
}
return src.slice(start, i);
};
+43
View File
@@ -646,3 +646,46 @@ component CookieToggle {
expect(binding[1]).toBe("base {personalizationCookies ? 'enabled' : 'disabled'}");
});
test("parses class directives containing Tailwind arbitrary values", () => {
const ast = parse(`
component PageHeader {
state centered = false
view {
<div
class="py-12"
class:lg:grid-cols-[minmax(0,1fr)_auto]="!centered"
class:dark:bg-white/10="centered"
class:w-[calc(100%-2rem)]="centered"
>
Header
</div>
}
}
`);
expect(ast).toBeDefined();
});
test("compiles Tailwind arbitrary values in class directives", () => {
const output = generate(
parse(`
component PageHeader {
state centered = false
view {
<div
class="py-12"
class:lg:grid-cols-[minmax(0,1fr)_auto]="!centered"
class:dark:bg-white/10="centered"
>
Header
</div>
}
}
`),
);
expect(output).toContain("lg:grid-cols-[minmax(0,1fr)_auto]");
expect(output).toContain("dark:bg-white/10");
});
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/core",
"version": "0.2.35",
"version": "0.2.36",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/csr",
"version": "0.2.35",
"version": "0.2.36",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/db",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/dev-server",
"version": "0.2.35",
"version": "0.2.36",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/encryption",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/helpers",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"description": "Safe convenience helpers for WrNexus request contexts and common application flows.",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/i18n",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/jwt",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/mobile",
"version": "0.2.35",
"version": "0.2.36",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/native",
"version": "0.2.35",
"version": "0.2.36",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/oauth",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/pubsub",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/queue",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/reactive",
"version": "0.2.35",
"version": "0.2.36",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/router",
"version": "0.2.35",
"version": "0.2.36",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ssr",
"version": "0.2.35",
"version": "0.2.36",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/styles",
"version": "0.2.35",
"version": "0.2.36",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/test",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/tracking",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ui",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/uploader",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/validation",
"version": "0.2.35",
"version": "0.2.36",
"private": true,
"type": "module",
"main": "src/index.ts",