Compare commits

...
3 Commits
Author SHA1 Message Date
Clintchiz 0f915c3c98 release: WRNexusJS 0.2.44 2026-07-15 18:54:29 +05:30
Clintchiz 9aa13fb4db release: WRNexusJS 0.2.43 2026-07-15 18:41:55 +05:30
Clintchiz 9070a1ef9c release: WRNexusJS 0.2.42 2026-07-15 18:15:22 +05:30
55 changed files with 609 additions and 125 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/ai", "name": "@wrnexus/ai",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.", "description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/authz", "name": "@wrnexus/authz",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/authz — part of the WrNexus framework.", "description": "@wrnexus/authz — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+11 -11
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/cli", "name": "@wrnexus/cli",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/cli — part of the WrNexus framework.", "description": "@wrnexus/cli — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
@@ -28,16 +28,16 @@
"wrnexus": "./dist/index.js" "wrnexus": "./dist/index.js"
}, },
"dependencies": { "dependencies": {
"@wrnexus/core": "^0.2.41", "@wrnexus/core": "^0.2.44",
"@wrnexus/router": "^0.2.41", "@wrnexus/router": "^0.2.44",
"@wrnexus/csr": "^0.2.41", "@wrnexus/csr": "^0.2.44",
"@wrnexus/compiler": "^0.2.41", "@wrnexus/compiler": "^0.2.44",
"@wrnexus/styles": "^0.2.41", "@wrnexus/styles": "^0.2.44",
"@wrnexus/dev-server": "^0.2.41", "@wrnexus/dev-server": "^0.2.44",
"@wrnexus/ui": "^0.2.41", "@wrnexus/ui": "^0.2.44",
"@wrnexus/validation": "^0.2.41", "@wrnexus/validation": "^0.2.44",
"@wrnexus/i18n": "^0.2.41", "@wrnexus/i18n": "^0.2.44",
"@wrnexus/db": "^0.2.41" "@wrnexus/db": "^0.2.44"
}, },
"files": [ "files": [
"dist" "dist"
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/compiler", "name": "@wrnexus/compiler",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/compiler — part of the WrNexus framework.", "description": "@wrnexus/compiler — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/core", "name": "@wrnexus/core",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/core — part of the WrNexus framework.", "description": "@wrnexus/core — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/csr", "name": "@wrnexus/csr",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/csr — part of the WrNexus framework.", "description": "@wrnexus/csr — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
@@ -21,7 +21,7 @@
} }
}, },
"dependencies": { "dependencies": {
"@wrnexus/core": "^0.2.41" "@wrnexus/core": "^0.2.44"
}, },
"files": [ "files": [
"dist" "dist"
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/db", "name": "@wrnexus/db",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/db — part of the WrNexus framework.", "description": "@wrnexus/db — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+13 -13
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/dev-server", "name": "@wrnexus/dev-server",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/dev-server — part of the WrNexus framework.", "description": "@wrnexus/dev-server — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
@@ -25,18 +25,18 @@
} }
}, },
"dependencies": { "dependencies": {
"@wrnexus/core": "^0.2.41", "@wrnexus/core": "^0.2.44",
"@wrnexus/router": "^0.2.41", "@wrnexus/router": "^0.2.44",
"@wrnexus/ssr": "^0.2.41", "@wrnexus/ssr": "^0.2.44",
"@wrnexus/csr": "^0.2.41", "@wrnexus/csr": "^0.2.44",
"@wrnexus/compiler": "^0.2.41", "@wrnexus/compiler": "^0.2.44",
"@wrnexus/styles": "^0.2.41", "@wrnexus/styles": "^0.2.44",
"@wrnexus/ui": "^0.2.41", "@wrnexus/ui": "^0.2.44",
"@wrnexus/validation": "^0.2.41", "@wrnexus/validation": "^0.2.44",
"@wrnexus/i18n": "^0.2.41", "@wrnexus/i18n": "^0.2.44",
"@wrnexus/db": "^0.2.41", "@wrnexus/db": "^0.2.44",
"@wrnexus/pubsub": "^0.2.41", "@wrnexus/pubsub": "^0.2.44",
"@wrnexus/uploader": "^0.2.41" "@wrnexus/uploader": "^0.2.44"
}, },
"files": [ "files": [
"dist" "dist"
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/encryption", "name": "@wrnexus/encryption",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/encryption — part of the WrNexus framework.", "description": "@wrnexus/encryption — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/helpers", "name": "@wrnexus/helpers",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "Safe convenience helpers for WrNexus request contexts and common application flows.", "description": "Safe convenience helpers for WrNexus request contexts and common application flows.",
"license": "MIT", "license": "MIT",
@@ -21,7 +21,7 @@
} }
}, },
"dependencies": { "dependencies": {
"@wrnexus/core": "^0.2.41" "@wrnexus/core": "^0.2.44"
}, },
"files": [ "files": [
"dist" "dist"
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/i18n", "name": "@wrnexus/i18n",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/i18n — part of the WrNexus framework.", "description": "@wrnexus/i18n — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
@@ -21,7 +21,7 @@
} }
}, },
"dependencies": { "dependencies": {
"@wrnexus/core": "^0.2.41" "@wrnexus/core": "^0.2.44"
}, },
"files": [ "files": [
"dist" "dist"
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/jwt", "name": "@wrnexus/jwt",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/jwt — part of the WrNexus framework.", "description": "@wrnexus/jwt — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/mobile", "name": "@wrnexus/mobile",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/mobile — part of the WrNexus framework.", "description": "@wrnexus/mobile — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
@@ -21,7 +21,7 @@
} }
}, },
"dependencies": { "dependencies": {
"@wrnexus/native": "^0.2.41" "@wrnexus/native": "^0.2.44"
}, },
"files": [ "files": [
"dist" "dist"
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/native", "name": "@wrnexus/native",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/native — part of the WrNexus framework.", "description": "@wrnexus/native — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/oauth", "name": "@wrnexus/oauth",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/oauth — part of the WrNexus framework.", "description": "@wrnexus/oauth — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/pubsub", "name": "@wrnexus/pubsub",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/pubsub — part of the WrNexus framework.", "description": "@wrnexus/pubsub — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/queue", "name": "@wrnexus/queue",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/queue — part of the WrNexus framework.", "description": "@wrnexus/queue — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/reactive", "name": "@wrnexus/reactive",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/reactive — part of the WrNexus framework.", "description": "@wrnexus/reactive — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+3 -3
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/router", "name": "@wrnexus/router",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/router — part of the WrNexus framework.", "description": "@wrnexus/router — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
@@ -21,8 +21,8 @@
} }
}, },
"dependencies": { "dependencies": {
"@wrnexus/compiler": "^0.2.41", "@wrnexus/compiler": "^0.2.44",
"@wrnexus/core": "^0.2.41" "@wrnexus/core": "^0.2.44"
}, },
"files": [ "files": [
"dist" "dist"
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/ssr", "name": "@wrnexus/ssr",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/ssr — part of the WrNexus framework.", "description": "@wrnexus/ssr — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
@@ -21,7 +21,7 @@
} }
}, },
"dependencies": { "dependencies": {
"@wrnexus/core": "^0.2.41" "@wrnexus/core": "^0.2.44"
}, },
"files": [ "files": [
"dist" "dist"
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/styles", "name": "@wrnexus/styles",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/styles — part of the WrNexus framework.", "description": "@wrnexus/styles — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
@@ -21,7 +21,7 @@
} }
}, },
"dependencies": { "dependencies": {
"@wrnexus/uploader": "^0.2.41" "@wrnexus/uploader": "^0.2.44"
}, },
"files": [ "files": [
"dist" "dist"
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/test", "name": "@wrnexus/test",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/test — part of the WrNexus framework.", "description": "@wrnexus/test — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/tracking", "name": "@wrnexus/tracking",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/tracking — part of the WrNexus framework.", "description": "@wrnexus/tracking — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/ui", "name": "@wrnexus/ui",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/ui — part of the WrNexus framework.", "description": "@wrnexus/ui — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
@@ -22,7 +22,7 @@
"./ui.css": "./ui.css" "./ui.css": "./ui.css"
}, },
"dependencies": { "dependencies": {
"@wrnexus/core": "^0.2.41" "@wrnexus/core": "^0.2.44"
}, },
"files": [ "files": [
"dist", "dist",
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/uploader", "name": "@wrnexus/uploader",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/uploader — part of the WrNexus framework.", "description": "@wrnexus/uploader — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
@@ -21,7 +21,7 @@
} }
}, },
"dependencies": { "dependencies": {
"@wrnexus/core": "^0.2.41" "@wrnexus/core": "^0.2.44"
}, },
"files": [ "files": [
"dist" "dist"
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/validation", "name": "@wrnexus/validation",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"description": "@wrnexus/validation — part of the WrNexus framework.", "description": "@wrnexus/validation — part of the WrNexus framework.",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/ai", "name": "@wrnexus/ai",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.", "description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/authz", "name": "@wrnexus/authz",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/cli", "name": "@wrnexus/cli",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+27
View File
@@ -447,6 +447,33 @@ const MIGRATIONS: Migration[] = [
// No generated application files require automatic migration. // No generated application files require automatic migration.
}, },
}, },
{
version: "0.2.42",
id: "conditions-bug",
description:
"Adds server-rendered component each/if blocks and fixes dynamic component rendering.",
apply() {
// No generated application files require automatic migration.
},
},
{
version: "0.2.43",
id: "conditions-bug",
description:
"Adds server-rendered component each/if blocks and fixes dynamic component rendering.",
apply() {
// No generated application files require automatic migration.
},
},
{
version: "0.2.44",
id: "conditions-bug",
description:
"Adds server-rendered component each/if blocks and fixes dynamic component rendering.",
apply() {
// No generated application files require automatic migration.
},
},
]; ];
/** Release tooling uses this to require an explicit migration entry per version. */ /** Release tooling uses this to require an explicit migration entry per version. */
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/compiler", "name": "@wrnexus/compiler",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/core", "name": "@wrnexus/core",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/csr", "name": "@wrnexus/csr",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+497 -40
View File
@@ -139,9 +139,40 @@ export const REACTIVE_RUNTIME = String.raw`
} }
if (ch === "(" || ch === "[" || ch === "{") depth++; if (ch === "(" || ch === "[" || ch === "{") depth++;
else if (ch === ")" || ch === "]" || ch === "}") depth--; else if (ch === ")" || ch === "]" || ch === "}") depth--;
else if ((ch === ";" || ch === "\n" || ch === "\r") && depth === 0) { else if (
var part = input.slice(start, i).trim(); (
if (part) parts.push(part); ch === ";" ||
ch === "\n" ||
ch === "\r"
) &&
depth === 0
) {
var nextIndex = i + 1;
while (
nextIndex < input.length &&
/\s/.test(input[nextIndex])
) {
nextIndex++;
}
if (
input.slice(
nextIndex,
nextIndex + 4,
) === "else"
) {
continue;
}
var part = input
.slice(start, i)
.trim();
if (part) {
parts.push(part);
}
start = i + 1; start = i + 1;
} }
} }
@@ -387,34 +418,98 @@ export const REACTIVE_RUNTIME = String.raw`
}); });
} }
function runStmt(stmt, locals) { function runStmt(
splitStatements(stmt).forEach(function (part) { source,
runStatement( locals,
part, ) {
function (expression) { return evalExpr(expression, locals); }, var statements =
splitStatements(source);
for (
var statementIndex = 0;
statementIndex <
statements.length;
statementIndex++
) {
var result = runStatement(
statements[statementIndex],
function (expression) {
return evalExpr(
expression,
locals,
);
},
function (name) { function (name) {
if (locals && Object.prototype.hasOwnProperty.call(locals, name)) return locals[name]; if (
locals &&
Object.prototype
.hasOwnProperty.call(
locals,
name,
)
) {
return locals[name];
}
return peekScope(name); return peekScope(name);
}, },
function (name, value) { function (name, value) {
if (locals && Object.prototype.hasOwnProperty.call(locals, name)) { if (
locals &&
Object.prototype
.hasOwnProperty.call(
locals,
name,
)
) {
locals[name] = value; locals[name] = value;
} else { } else {
writeScope(name, value); writeScope(name, value);
} }
}, },
function (body) {
return runStmt(
body,
locals,
);
},
); );
});
if (result.returned) {
return result;
}
}
return {
returned: false,
value: undefined,
};
} }
function installBehaviorFunctions(source) { function installBehaviorFunctions(source) {
extractBehaviorFunctions(source || "").forEach(function (definition) { extractBehaviorFunctions(source || "").forEach(function (definition) {
behaviorFunctions[definition.name] = function () { behaviorFunctions[
definition.name
] = function () {
var locals = {}; var locals = {};
for (var i = 0; i < definition.args.length; i++) {
locals[definition.args[i]] = arguments[i]; for (
var i = 0;
i < definition.args.length;
i++
) {
locals[definition.args[i]] =
arguments[i];
} }
runStmt(definition.body, locals);
var result = runStmt(
definition.body,
locals,
);
return result.returned
? result.value
: undefined;
}; };
}); });
} }
@@ -780,32 +875,369 @@ export const REACTIVE_RUNTIME = String.raw`
return initial; return initial;
} }
function runStatement(stmt, evalExpr, read, write) { function skipStatementWhitespace(
source,
index,
) {
while (
index < source.length &&
/\s/.test(source[index])
) {
index++;
}
return index;
}
function findClosingDelimiter(
source,
start,
opening,
closing,
) {
if (source[start] !== opening) {
return -1;
}
var depth = 1;
var quote = "";
var escaped = false;
for (
var index = start + 1;
index < source.length;
index++
) {
var character = source[index];
if (quote) {
if (escaped) {
escaped = false;
continue;
}
if (character === "\\") {
escaped = true;
continue;
}
if (character === quote) {
quote = "";
}
continue;
}
if (
character === '"' ||
character === "'" ||
character === "\`"
) {
quote = character;
continue;
}
if (character === opening) {
depth++;
continue;
}
if (character === closing) {
depth--;
if (depth === 0) {
return index;
}
}
}
return -1;
}
function parseIfStatement(source) {
source = String(source || "").trim();
if (
source.slice(0, 2) !== "if" ||
/[A-Za-z0-9_$]/.test(
source.charAt(2),
)
) {
return null;
}
var branches = [];
var index = 0;
var firstBranch = true;
while (index < source.length) {
index = skipStatementWhitespace(
source,
index,
);
var branchType;
if (
firstBranch &&
source.slice(index, index + 2) ===
"if" &&
!/[A-Za-z0-9_$]/.test(
source.charAt(index + 2),
)
) {
branchType = "if";
index += 2;
} else if (
source.slice(index, index + 7) ===
"else if" &&
!/[A-Za-z0-9_$]/.test(
source.charAt(index + 7),
)
) {
branchType = "else-if";
index += 7;
} else if (
source.slice(index, index + 4) ===
"else" &&
!/[A-Za-z0-9_$]/.test(
source.charAt(index + 4),
)
) {
branchType = "else";
index += 4;
} else {
break;
}
firstBranch = false;
index = skipStatementWhitespace(
source,
index,
);
var condition = null;
if (branchType !== "else") {
if (source.charAt(index) !== "(") {
throw new Error(
"Expected '(' after " +
(
branchType === "if"
? "if"
: "else if"
),
);
}
var conditionEnd =
findClosingDelimiter(
source,
index,
"(",
")",
);
if (conditionEnd < 0) {
throw new Error(
"Unclosed " +
(
branchType === "if"
? "if"
: "else if"
) +
" condition",
);
}
condition = source
.slice(
index + 1,
conditionEnd,
)
.trim();
index = skipStatementWhitespace(
source,
conditionEnd + 1,
);
}
if (source.charAt(index) !== "{") {
throw new Error(
"Expected '{' after " +
branchType,
);
}
var bodyEnd =
findClosingDelimiter(
source,
index,
"{",
"}",
);
if (bodyEnd < 0) {
throw new Error(
"Unclosed " +
branchType +
" body",
);
}
branches.push({
condition: condition,
body: source.slice(
index + 1,
bodyEnd,
),
});
index = skipStatementWhitespace(
source,
bodyEnd + 1,
);
if (
source.slice(index, index + 7) ===
"else if" ||
source.slice(index, index + 4) ===
"else"
) {
continue;
}
break;
}
return branches.length > 0
? branches
: null;
}
function runStatement(
stmt,
evalExpr,
read,
write,
runBlock,
) {
stmt = String(stmt || "").trim(); stmt = String(stmt || "").trim();
if (!stmt) return;
var inc = stmt.match(/^([A-Za-z_$][A-Za-z0-9_$]*)\s*(\+\+|--)$/); if (!stmt) {
if (inc) { return {
write(inc[1], Number(read(inc[1]) || 0) + (inc[2] === "++" ? 1 : -1)); returned: false,
return; value: undefined,
};
} }
var assign = stmt.match(/^([A-Za-z_$][A-Za-z0-9_$]*)\s*(\+=|-=|\*=|\/=|%=|=)\s*([\s\S]+)$/); var returnMatch =
if (!assign) { /^return(?:\s+([\s\S]+))?$/.exec(
evalExpr(stmt); // bare expression statement (e.g. a method/function call) stmt,
return; );
if (returnMatch) {
return {
returned: true,
value: returnMatch[1]
? evalExpr(returnMatch[1])
: undefined,
};
} }
var name = assign[1]; var ifBranches =
var op = assign[2]; parseIfStatement(stmt);
var next = evalExpr(assign[3]);
var current = read(name); if (ifBranches) {
if (op === "+=") next = current + next; for (
else if (op === "-=") next = Number(current || 0) - Number(next || 0); var branchIndex = 0;
else if (op === "*=") next = Number(current || 0) * Number(next || 0); branchIndex < ifBranches.length;
else if (op === "/=") next = Number(current || 0) / Number(next || 0); branchIndex++
else if (op === "%=") next = Number(current || 0) % Number(next || 0); ) {
write(name, next); var branch =
ifBranches[branchIndex];
if (
branch.condition === null ||
!!evalExpr(branch.condition)
) {
return runBlock(branch.body);
}
}
return {
returned: false,
value: undefined,
};
}
var increment = stmt.match(
/^([A-Za-z_$][A-Za-z0-9_$]*)\s*(\+\+|--)$/,
);
if (increment) {
write(
increment[1],
Number(read(increment[1]) || 0) +
(increment[2] === "++"
? 1
: -1),
);
return {
returned: false,
value: undefined,
};
}
var assignment = stmt.match(
/^([A-Za-z_$][A-Za-z0-9_$]*)\s*(\+=|-=|\*=|\/=|%=|=)\s*([\s\S]+)$/,
);
if (!assignment) {
evalExpr(stmt);
return {
returned: false,
value: undefined,
};
}
var name = assignment[1];
var operator = assignment[2];
var nextValue =
evalExpr(assignment[3]);
var currentValue = read(name);
if (operator === "+=") {
nextValue =
currentValue + nextValue;
} else if (operator === "-=") {
nextValue =
Number(currentValue || 0) -
Number(nextValue || 0);
} else if (operator === "*=") {
nextValue =
Number(currentValue || 0) *
Number(nextValue || 0);
} else if (operator === "/=") {
nextValue =
Number(currentValue || 0) /
Number(nextValue || 0);
} else if (operator === "%=") {
nextValue =
Number(currentValue || 0) %
Number(nextValue || 0);
}
write(name, nextValue);
return {
returned: false,
value: nextValue,
};
} }
function evaluateSpecialExpression( function evaluateSpecialExpression(
@@ -1225,11 +1657,36 @@ export const REACTIVE_RUNTIME = String.raw`
tokens.push({ type: "ident", value: input.slice(s, i) }); tokens.push({ type: "ident", value: input.slice(s, i) });
continue; continue;
} }
var three = input.substr(i, 3); var three = input.slice(i, i + 3);
if (three === "===" || three === "!==") { tokens.push({ type: "op", value: three }); i += 3; continue; }
var two = input.substr(i, 2); if (
if (["==", "!=", "<=", ">=", "&&", "||"].indexOf(two) !== -1) { three === "===" ||
tokens.push({ type: "op", value: two }); three === "!=="
) {
tokens.push({
type: "operator",
value: three,
});
i += 3;
continue;
}
var two = input.slice(i, i + 2);
if (
two === "==" ||
two === "!=" ||
two === ">=" ||
two === "<=" ||
two === "&&" ||
two === "||"
) {
tokens.push({
type: "operator",
value: two,
});
i += 2; i += 2;
continue; continue;
} }
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/db", "name": "@wrnexus/db",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/dev-server", "name": "@wrnexus/dev-server",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/encryption", "name": "@wrnexus/encryption",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/helpers", "name": "@wrnexus/helpers",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"description": "Safe convenience helpers for WrNexus request contexts and common application flows.", "description": "Safe convenience helpers for WrNexus request contexts and common application flows.",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/i18n", "name": "@wrnexus/i18n",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/jwt", "name": "@wrnexus/jwt",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/mobile", "name": "@wrnexus/mobile",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/native", "name": "@wrnexus/native",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/oauth", "name": "@wrnexus/oauth",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/pubsub", "name": "@wrnexus/pubsub",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/queue", "name": "@wrnexus/queue",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/reactive", "name": "@wrnexus/reactive",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/router", "name": "@wrnexus/router",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/ssr", "name": "@wrnexus/ssr",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/styles", "name": "@wrnexus/styles",
"version": "0.2.41", "version": "0.2.44",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/test", "name": "@wrnexus/test",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/tracking", "name": "@wrnexus/tracking",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/ui", "name": "@wrnexus/ui",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/uploader", "name": "@wrnexus/uploader",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/validation", "name": "@wrnexus/validation",
"version": "0.2.41", "version": "0.2.44",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,7 +1,7 @@
import { existsSync, readdirSync, readFileSync, writeFileSync } from "node:fs"; import { existsSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
import { join } from "node:path"; import { join } from "node:path";
const version = "0.2.41"; const version = "0.2.44";
const dependencyGroups = [ const dependencyGroups = [
"dependencies", "dependencies",