Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cade812569 | ||
|
|
936488ac06 |
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/ai",
|
"name": "@wrnexus/ai",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/authz",
|
"name": "@wrnexus/authz",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/cli",
|
"name": "@wrnexus/cli",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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.32",
|
"@wrnexus/core": "^0.2.34",
|
||||||
"@wrnexus/router": "^0.2.32",
|
"@wrnexus/router": "^0.2.34",
|
||||||
"@wrnexus/csr": "^0.2.32",
|
"@wrnexus/csr": "^0.2.34",
|
||||||
"@wrnexus/compiler": "^0.2.32",
|
"@wrnexus/compiler": "^0.2.34",
|
||||||
"@wrnexus/styles": "^0.2.32",
|
"@wrnexus/styles": "^0.2.34",
|
||||||
"@wrnexus/dev-server": "^0.2.32",
|
"@wrnexus/dev-server": "^0.2.34",
|
||||||
"@wrnexus/ui": "^0.2.32",
|
"@wrnexus/ui": "^0.2.34",
|
||||||
"@wrnexus/validation": "^0.2.32",
|
"@wrnexus/validation": "^0.2.34",
|
||||||
"@wrnexus/i18n": "^0.2.32",
|
"@wrnexus/i18n": "^0.2.34",
|
||||||
"@wrnexus/db": "^0.2.32"
|
"@wrnexus/db": "^0.2.34"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/compiler",
|
"name": "@wrnexus/compiler",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/core",
|
"name": "@wrnexus/core",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "@wrnexus/core — part of the WrNexus framework.",
|
"description": "@wrnexus/core — part of the WrNexus framework.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/csr",
|
"name": "@wrnexus/csr",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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.32"
|
"@wrnexus/core": "^0.2.34"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/db",
|
"name": "@wrnexus/db",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "@wrnexus/db — part of the WrNexus framework.",
|
"description": "@wrnexus/db — part of the WrNexus framework.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/dev-server",
|
"name": "@wrnexus/dev-server",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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.32",
|
"@wrnexus/core": "^0.2.34",
|
||||||
"@wrnexus/router": "^0.2.32",
|
"@wrnexus/router": "^0.2.34",
|
||||||
"@wrnexus/ssr": "^0.2.32",
|
"@wrnexus/ssr": "^0.2.34",
|
||||||
"@wrnexus/csr": "^0.2.32",
|
"@wrnexus/csr": "^0.2.34",
|
||||||
"@wrnexus/compiler": "^0.2.32",
|
"@wrnexus/compiler": "^0.2.34",
|
||||||
"@wrnexus/styles": "^0.2.32",
|
"@wrnexus/styles": "^0.2.34",
|
||||||
"@wrnexus/ui": "^0.2.32",
|
"@wrnexus/ui": "^0.2.34",
|
||||||
"@wrnexus/validation": "^0.2.32",
|
"@wrnexus/validation": "^0.2.34",
|
||||||
"@wrnexus/i18n": "^0.2.32",
|
"@wrnexus/i18n": "^0.2.34",
|
||||||
"@wrnexus/db": "^0.2.32",
|
"@wrnexus/db": "^0.2.34",
|
||||||
"@wrnexus/pubsub": "^0.2.32",
|
"@wrnexus/pubsub": "^0.2.34",
|
||||||
"@wrnexus/uploader": "^0.2.32"
|
"@wrnexus/uploader": "^0.2.34"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/encryption",
|
"name": "@wrnexus/encryption",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "@wrnexus/encryption — part of the WrNexus framework.",
|
"description": "@wrnexus/encryption — part of the WrNexus framework.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/helpers",
|
"name": "@wrnexus/helpers",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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.32"
|
"@wrnexus/core": "^0.2.34"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/i18n",
|
"name": "@wrnexus/i18n",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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.32"
|
"@wrnexus/core": "^0.2.34"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/jwt",
|
"name": "@wrnexus/jwt",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "@wrnexus/jwt — part of the WrNexus framework.",
|
"description": "@wrnexus/jwt — part of the WrNexus framework.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/mobile",
|
"name": "@wrnexus/mobile",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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.32"
|
"@wrnexus/native": "^0.2.34"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/native",
|
"name": "@wrnexus/native",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/oauth",
|
"name": "@wrnexus/oauth",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/pubsub",
|
"name": "@wrnexus/pubsub",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/queue",
|
"name": "@wrnexus/queue",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/reactive",
|
"name": "@wrnexus/reactive",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "@wrnexus/reactive — part of the WrNexus framework.",
|
"description": "@wrnexus/reactive — part of the WrNexus framework.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/router",
|
"name": "@wrnexus/router",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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.32",
|
"@wrnexus/compiler": "^0.2.34",
|
||||||
"@wrnexus/core": "^0.2.32"
|
"@wrnexus/core": "^0.2.34"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/ssr",
|
"name": "@wrnexus/ssr",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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.32"
|
"@wrnexus/core": "^0.2.34"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/styles",
|
"name": "@wrnexus/styles",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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.32"
|
"@wrnexus/uploader": "^0.2.34"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/test",
|
"name": "@wrnexus/test",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/tracking",
|
"name": "@wrnexus/tracking",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "@wrnexus/tracking — part of the WrNexus framework.",
|
"description": "@wrnexus/tracking — part of the WrNexus framework.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/ui",
|
"name": "@wrnexus/ui",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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.32"
|
"@wrnexus/core": "^0.2.34"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/uploader",
|
"name": "@wrnexus/uploader",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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.32"
|
"@wrnexus/core": "^0.2.34"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/validation",
|
"name": "@wrnexus/validation",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/ai",
|
"name": "@wrnexus/ai",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/authz",
|
"name": "@wrnexus/authz",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/cli",
|
"name": "@wrnexus/cli",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -366,6 +366,24 @@ const MIGRATIONS: Migration[] = [
|
|||||||
// No generated application files require automatic migration.
|
// No generated application files require automatic migration.
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
version: "0.2.33",
|
||||||
|
id: "fix-runtime-bug",
|
||||||
|
description:
|
||||||
|
"Fixes safe encoding and browser parsing of multiline component behavior metadata.",
|
||||||
|
apply() {
|
||||||
|
// No generated application files require automatic migration.
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
version: "0.2.34",
|
||||||
|
id: "reactive-bug",
|
||||||
|
description:
|
||||||
|
"Fixes component behavior encoding, lifecycle and watcher metadata parsing, CSR cleanup, and reactive form control property updates.",
|
||||||
|
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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/compiler",
|
"name": "@wrnexus/compiler",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -925,7 +925,7 @@ function behaviorAttribute(behavior: ComponentBehavior | null): string {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
const encoded = encodeURIComponent(JSON.stringify(behavior));
|
const encoded = Buffer.from(JSON.stringify(behavior), "utf8").toString("base64");
|
||||||
|
|
||||||
return ` data-wrn-behavior="${encoded}"`;
|
return ` data-wrn-behavior="${encoded}"`;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,39 @@ async function compileAndImport(src: string): Promise<Record<string, unknown>> {
|
|||||||
return import(pathToFileURL(file).href);
|
return import(pathToFileURL(file).href);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CompiledBehavior = {
|
||||||
|
functions: string;
|
||||||
|
lifecycle: {
|
||||||
|
mount?: string;
|
||||||
|
update?: string;
|
||||||
|
unmount?: string;
|
||||||
|
};
|
||||||
|
watches: Array<{
|
||||||
|
state: string;
|
||||||
|
body: string;
|
||||||
|
}>;
|
||||||
|
};
|
||||||
|
|
||||||
|
function extractCompiledBehavior(output: string): CompiledBehavior {
|
||||||
|
const marker = 'data-wrn-behavior="';
|
||||||
|
|
||||||
|
const start = output.indexOf(marker);
|
||||||
|
|
||||||
|
expect(start).toBeGreaterThanOrEqual(0);
|
||||||
|
|
||||||
|
const valueStart = start + marker.length;
|
||||||
|
|
||||||
|
const valueEnd = output.indexOf('"', valueStart);
|
||||||
|
|
||||||
|
expect(valueEnd).toBeGreaterThan(valueStart);
|
||||||
|
|
||||||
|
const encoded = output.slice(valueStart, valueEnd);
|
||||||
|
|
||||||
|
expect(encoded).toMatch(/^[A-Za-z0-9+/]+=*$/);
|
||||||
|
|
||||||
|
return JSON.parse(Buffer.from(encoded, "base64").toString("utf8")) as CompiledBehavior;
|
||||||
|
}
|
||||||
|
|
||||||
test("parses a page with a layout member", () => {
|
test("parses a page with a layout member", () => {
|
||||||
const ast = parse(`page Home {\n layout = "public"\n view { <h1>Hi</h1> }\n}`);
|
const ast = parse(`page Home {\n layout = "public"\n view { <h1>Hi</h1> }\n}`);
|
||||||
expect(ast.kind).toBe("page");
|
expect(ast.kind).toBe("page");
|
||||||
@@ -382,11 +415,13 @@ component LifecycleTest {
|
|||||||
`),
|
`),
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(output).toContain("%22mount%22");
|
const behavior = extractCompiledBehavior(output);
|
||||||
|
|
||||||
expect(output).toContain("%22update%22");
|
expect(behavior.lifecycle.mount).toContain("ready = true");
|
||||||
|
|
||||||
expect(output).toContain("%22unmount%22");
|
expect(behavior.lifecycle.update).toContain("console.log(ready)");
|
||||||
|
|
||||||
|
expect(behavior.lifecycle.unmount).toContain("ready = false");
|
||||||
});
|
});
|
||||||
test("component watchers compile into behavior metadata", () => {
|
test("component watchers compile into behavior metadata", () => {
|
||||||
const output = generate(
|
const output = generate(
|
||||||
@@ -405,9 +440,13 @@ component WatchTest {
|
|||||||
`),
|
`),
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(output).toContain("%22state%22%3A%22visible%22");
|
const behavior = extractCompiledBehavior(output);
|
||||||
|
|
||||||
expect(output).toContain("console.log");
|
expect(behavior.watches).toHaveLength(1);
|
||||||
|
|
||||||
|
expect(behavior.watches[0]?.state).toBe("visible");
|
||||||
|
|
||||||
|
expect(behavior.watches[0]?.body).toContain('console.log("changed", visible)');
|
||||||
});
|
});
|
||||||
test("behavior-only components still receive a reactive scope", () => {
|
test("behavior-only components still receive a reactive scope", () => {
|
||||||
const output = generate(
|
const output = generate(
|
||||||
@@ -479,10 +518,9 @@ component BackToTop {
|
|||||||
|
|
||||||
expect(output).toContain("data-wrn-behavior=");
|
expect(output).toContain("data-wrn-behavior=");
|
||||||
|
|
||||||
expect(output).toContain("%7B");
|
|
||||||
expect(output).toContain("%22functions%22");
|
|
||||||
|
|
||||||
expect(output).not.toContain('data-wrn-behavior="{');
|
expect(output).not.toContain('data-wrn-behavior="{');
|
||||||
|
|
||||||
|
expect(output).not.toContain('data-wrn-behavior="%7B');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("component watchers compile into behavior metadata", () => {
|
test("component watchers compile into behavior metadata", () => {
|
||||||
@@ -506,7 +544,7 @@ component WatchTest {
|
|||||||
|
|
||||||
expect(match).not.toBeNull();
|
expect(match).not.toBeNull();
|
||||||
|
|
||||||
const behavior = JSON.parse(decodeURIComponent(match![1]));
|
const behavior = extractBehavior(output);
|
||||||
|
|
||||||
expect(behavior.watches).toEqual([
|
expect(behavior.watches).toEqual([
|
||||||
{
|
{
|
||||||
@@ -546,7 +584,7 @@ component LifecycleTest {
|
|||||||
|
|
||||||
expect(match).not.toBeNull();
|
expect(match).not.toBeNull();
|
||||||
|
|
||||||
const behavior = JSON.parse(decodeURIComponent(match![1]));
|
const behavior = extractBehavior(output);
|
||||||
|
|
||||||
expect(behavior.lifecycle.mount).toContain("ready = true");
|
expect(behavior.lifecycle.mount).toContain("ready = true");
|
||||||
|
|
||||||
@@ -554,3 +592,21 @@ component LifecycleTest {
|
|||||||
|
|
||||||
expect(behavior.lifecycle.unmount).toContain("ready = false");
|
expect(behavior.lifecycle.unmount).toContain("ready = false");
|
||||||
});
|
});
|
||||||
|
function extractBehavior(output: string): {
|
||||||
|
functions: string;
|
||||||
|
lifecycle: {
|
||||||
|
mount?: string;
|
||||||
|
update?: string;
|
||||||
|
unmount?: string;
|
||||||
|
};
|
||||||
|
watches: Array<{
|
||||||
|
state: string;
|
||||||
|
body: string;
|
||||||
|
}>;
|
||||||
|
} {
|
||||||
|
const match = /data-wrn-behavior="([^"]+)"/.exec(output);
|
||||||
|
|
||||||
|
expect(match).not.toBeNull();
|
||||||
|
|
||||||
|
return JSON.parse(Buffer.from(match![1], "base64").toString("utf8"));
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/core",
|
"name": "@wrnexus/core",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/csr",
|
"name": "@wrnexus/csr",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -43,6 +43,17 @@ export const REACTIVE_RUNTIME = String.raw`
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function decodeBehaviorPayload(value) {
|
||||||
|
var binary = window.atob(value);
|
||||||
|
var bytes = new Uint8Array(binary.length);
|
||||||
|
|
||||||
|
for (var index = 0; index < binary.length; index++) {
|
||||||
|
bytes[index] = binary.charCodeAt(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new TextDecoder("utf-8").decode(bytes);
|
||||||
|
}
|
||||||
|
|
||||||
function parseBehavior(element) {
|
function parseBehavior(element) {
|
||||||
var raw = element.getAttribute(
|
var raw = element.getAttribute(
|
||||||
"data-wrn-behavior",
|
"data-wrn-behavior",
|
||||||
@@ -53,7 +64,9 @@ export const REACTIVE_RUNTIME = String.raw`
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var decoded = decodeURIComponent(raw);
|
var decoded =
|
||||||
|
decodeBehaviorPayload(raw);
|
||||||
|
|
||||||
var parsed = JSON.parse(decoded);
|
var parsed = JSON.parse(decoded);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
@@ -151,6 +164,119 @@ export const REACTIVE_RUNTIME = String.raw`
|
|||||||
subscribe: function (f) { subs.add(f); return function () { subs.delete(f); }; }
|
subscribe: function (f) { subs.add(f); return function () { subs.delete(f); }; }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
function applyReactiveAttribute(node, name, value) {
|
||||||
|
var lowerName = String(name || "").toLowerCase();
|
||||||
|
|
||||||
|
if (
|
||||||
|
lowerName === "value" &&
|
||||||
|
(
|
||||||
|
node instanceof HTMLInputElement ||
|
||||||
|
node instanceof HTMLTextAreaElement ||
|
||||||
|
node instanceof HTMLSelectElement
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
var nextValue =
|
||||||
|
value == null ? "" : String(value);
|
||||||
|
|
||||||
|
if (node.value !== nextValue) {
|
||||||
|
node.value = nextValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value == null) {
|
||||||
|
node.removeAttribute("value");
|
||||||
|
} else {
|
||||||
|
node.setAttribute(
|
||||||
|
"value",
|
||||||
|
nextValue,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
lowerName === "checked" &&
|
||||||
|
node instanceof HTMLInputElement
|
||||||
|
) {
|
||||||
|
var checked = !!value;
|
||||||
|
|
||||||
|
if (node.checked !== checked) {
|
||||||
|
node.checked = checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checked) {
|
||||||
|
node.setAttribute(
|
||||||
|
"checked",
|
||||||
|
"",
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
node.removeAttribute(
|
||||||
|
"checked",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
lowerName === "selected" &&
|
||||||
|
node instanceof HTMLOptionElement
|
||||||
|
) {
|
||||||
|
var selected = !!value;
|
||||||
|
|
||||||
|
node.selected = selected;
|
||||||
|
|
||||||
|
if (selected) {
|
||||||
|
node.setAttribute(
|
||||||
|
"selected",
|
||||||
|
"",
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
node.removeAttribute(
|
||||||
|
"selected",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
lowerName === "disabled" ||
|
||||||
|
lowerName === "required" ||
|
||||||
|
lowerName === "readonly" ||
|
||||||
|
lowerName === "multiple"
|
||||||
|
) {
|
||||||
|
var enabled = !!value;
|
||||||
|
|
||||||
|
if (lowerName in node) {
|
||||||
|
try {
|
||||||
|
node[lowerName] = enabled;
|
||||||
|
} catch (_) {
|
||||||
|
// Fall through to attribute handling.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enabled) {
|
||||||
|
node.setAttribute(
|
||||||
|
name,
|
||||||
|
"",
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
node.removeAttribute(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value === false || value == null) {
|
||||||
|
node.removeAttribute(name);
|
||||||
|
} else {
|
||||||
|
node.setAttribute(
|
||||||
|
name,
|
||||||
|
value === true ? "" : String(value),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function setupScope(el) {
|
function setupScope(el) {
|
||||||
if (el.__wrnexusScope) return; // idempotent: safe to call again after an HMR morph
|
if (el.__wrnexusScope) return; // idempotent: safe to call again after an HMR morph
|
||||||
@@ -473,8 +599,7 @@ export const REACTIVE_RUNTIME = String.raw`
|
|||||||
} catch (e) { return ""; }
|
} catch (e) { return ""; }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (raw === false || raw == null) node.removeAttribute(name);
|
applyReactiveAttribute(node, name, raw);
|
||||||
else node.setAttribute(name, raw === true ? "" : String(raw));
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/db",
|
"name": "@wrnexus/db",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/dev-server",
|
"name": "@wrnexus/dev-server",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/encryption",
|
"name": "@wrnexus/encryption",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/helpers",
|
"name": "@wrnexus/helpers",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/i18n",
|
"name": "@wrnexus/i18n",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/jwt",
|
"name": "@wrnexus/jwt",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/mobile",
|
"name": "@wrnexus/mobile",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/native",
|
"name": "@wrnexus/native",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/oauth",
|
"name": "@wrnexus/oauth",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/pubsub",
|
"name": "@wrnexus/pubsub",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/queue",
|
"name": "@wrnexus/queue",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/reactive",
|
"name": "@wrnexus/reactive",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/router",
|
"name": "@wrnexus/router",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/ssr",
|
"name": "@wrnexus/ssr",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/styles",
|
"name": "@wrnexus/styles",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/test",
|
"name": "@wrnexus/test",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/tracking",
|
"name": "@wrnexus/tracking",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/ui",
|
"name": "@wrnexus/ui",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/uploader",
|
"name": "@wrnexus/uploader",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/validation",
|
"name": "@wrnexus/validation",
|
||||||
"version": "0.2.32",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
Reference in New Issue
Block a user