Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0f915c3c98 | ||
|
|
9aa13fb4db | ||
|
|
9070a1ef9c | ||
|
|
4230de7065 | ||
|
|
0006aef2c4 | ||
|
|
7dfca4a190 |
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/ai",
|
"name": "@wrnexus/ai",
|
||||||
"version": "0.2.39",
|
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/authz",
|
"name": "@wrnexus/authz",
|
||||||
"version": "0.2.39",
|
"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
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/cli",
|
"name": "@wrnexus/cli",
|
||||||
"version": "0.2.39",
|
"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.39",
|
"@wrnexus/core": "^0.2.44",
|
||||||
"@wrnexus/router": "^0.2.39",
|
"@wrnexus/router": "^0.2.44",
|
||||||
"@wrnexus/csr": "^0.2.39",
|
"@wrnexus/csr": "^0.2.44",
|
||||||
"@wrnexus/compiler": "^0.2.39",
|
"@wrnexus/compiler": "^0.2.44",
|
||||||
"@wrnexus/styles": "^0.2.39",
|
"@wrnexus/styles": "^0.2.44",
|
||||||
"@wrnexus/dev-server": "^0.2.39",
|
"@wrnexus/dev-server": "^0.2.44",
|
||||||
"@wrnexus/ui": "^0.2.39",
|
"@wrnexus/ui": "^0.2.44",
|
||||||
"@wrnexus/validation": "^0.2.39",
|
"@wrnexus/validation": "^0.2.44",
|
||||||
"@wrnexus/i18n": "^0.2.39",
|
"@wrnexus/i18n": "^0.2.44",
|
||||||
"@wrnexus/db": "^0.2.39"
|
"@wrnexus/db": "^0.2.44"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/compiler",
|
"name": "@wrnexus/compiler",
|
||||||
"version": "0.2.39",
|
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/core",
|
"name": "@wrnexus/core",
|
||||||
"version": "0.2.39",
|
"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",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/csr",
|
"name": "@wrnexus/csr",
|
||||||
"version": "0.2.39",
|
"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.39"
|
"@wrnexus/core": "^0.2.44"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/db",
|
"name": "@wrnexus/db",
|
||||||
"version": "0.2.39",
|
"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",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/dev-server",
|
"name": "@wrnexus/dev-server",
|
||||||
"version": "0.2.39",
|
"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.39",
|
"@wrnexus/core": "^0.2.44",
|
||||||
"@wrnexus/router": "^0.2.39",
|
"@wrnexus/router": "^0.2.44",
|
||||||
"@wrnexus/ssr": "^0.2.39",
|
"@wrnexus/ssr": "^0.2.44",
|
||||||
"@wrnexus/csr": "^0.2.39",
|
"@wrnexus/csr": "^0.2.44",
|
||||||
"@wrnexus/compiler": "^0.2.39",
|
"@wrnexus/compiler": "^0.2.44",
|
||||||
"@wrnexus/styles": "^0.2.39",
|
"@wrnexus/styles": "^0.2.44",
|
||||||
"@wrnexus/ui": "^0.2.39",
|
"@wrnexus/ui": "^0.2.44",
|
||||||
"@wrnexus/validation": "^0.2.39",
|
"@wrnexus/validation": "^0.2.44",
|
||||||
"@wrnexus/i18n": "^0.2.39",
|
"@wrnexus/i18n": "^0.2.44",
|
||||||
"@wrnexus/db": "^0.2.39",
|
"@wrnexus/db": "^0.2.44",
|
||||||
"@wrnexus/pubsub": "^0.2.39",
|
"@wrnexus/pubsub": "^0.2.44",
|
||||||
"@wrnexus/uploader": "^0.2.39"
|
"@wrnexus/uploader": "^0.2.44"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/encryption",
|
"name": "@wrnexus/encryption",
|
||||||
"version": "0.2.39",
|
"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",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/helpers",
|
"name": "@wrnexus/helpers",
|
||||||
"version": "0.2.39",
|
"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.39"
|
"@wrnexus/core": "^0.2.44"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/i18n",
|
"name": "@wrnexus/i18n",
|
||||||
"version": "0.2.39",
|
"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.39"
|
"@wrnexus/core": "^0.2.44"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/jwt",
|
"name": "@wrnexus/jwt",
|
||||||
"version": "0.2.39",
|
"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",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/mobile",
|
"name": "@wrnexus/mobile",
|
||||||
"version": "0.2.39",
|
"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.39"
|
"@wrnexus/native": "^0.2.44"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/native",
|
"name": "@wrnexus/native",
|
||||||
"version": "0.2.39",
|
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/oauth",
|
"name": "@wrnexus/oauth",
|
||||||
"version": "0.2.39",
|
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/pubsub",
|
"name": "@wrnexus/pubsub",
|
||||||
"version": "0.2.39",
|
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/queue",
|
"name": "@wrnexus/queue",
|
||||||
"version": "0.2.39",
|
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/reactive",
|
"name": "@wrnexus/reactive",
|
||||||
"version": "0.2.39",
|
"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",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/router",
|
"name": "@wrnexus/router",
|
||||||
"version": "0.2.39",
|
"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.39",
|
"@wrnexus/compiler": "^0.2.44",
|
||||||
"@wrnexus/core": "^0.2.39"
|
"@wrnexus/core": "^0.2.44"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/ssr",
|
"name": "@wrnexus/ssr",
|
||||||
"version": "0.2.39",
|
"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.39"
|
"@wrnexus/core": "^0.2.44"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/styles",
|
"name": "@wrnexus/styles",
|
||||||
"version": "0.2.39",
|
"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.39"
|
"@wrnexus/uploader": "^0.2.44"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/test",
|
"name": "@wrnexus/test",
|
||||||
"version": "0.2.39",
|
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/tracking",
|
"name": "@wrnexus/tracking",
|
||||||
"version": "0.2.39",
|
"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",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/ui",
|
"name": "@wrnexus/ui",
|
||||||
"version": "0.2.39",
|
"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.39"
|
"@wrnexus/core": "^0.2.44"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/uploader",
|
"name": "@wrnexus/uploader",
|
||||||
"version": "0.2.39",
|
"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.39"
|
"@wrnexus/core": "^0.2.44"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/validation",
|
"name": "@wrnexus/validation",
|
||||||
"version": "0.2.39",
|
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/ai",
|
"name": "@wrnexus/ai",
|
||||||
"version": "0.2.39",
|
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/authz",
|
"name": "@wrnexus/authz",
|
||||||
"version": "0.2.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -429,6 +429,51 @@ const MIGRATIONS: Migration[] = [
|
|||||||
// No generated application files require automatic migration.
|
// No generated application files require automatic migration.
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
version: "0.2.40",
|
||||||
|
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.41",
|
||||||
|
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.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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/compiler",
|
"name": "@wrnexus/compiler",
|
||||||
"version": "0.2.39",
|
"version": "0.2.44",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { join } from "node:path";
|
|||||||
import { pathToFileURL } from "node:url";
|
import { pathToFileURL } from "node:url";
|
||||||
import { generate, parse } from "../src/index.ts";
|
import { generate, parse } from "../src/index.ts";
|
||||||
import { compileWireFile } from "../src/index.ts";
|
import { compileWireFile } from "../src/index.ts";
|
||||||
|
import { mountHtml } from "@wrnexus/test";
|
||||||
|
|
||||||
let seq = 0;
|
let seq = 0;
|
||||||
/** Compile a `.wrn` source and import the resulting module. */
|
/** Compile a `.wrn` source and import the resulting module. */
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/core",
|
"name": "@wrnexus/core",
|
||||||
"version": "0.2.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -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,40 +875,634 @@ 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(
|
||||||
|
expression,
|
||||||
|
read,
|
||||||
|
) {
|
||||||
|
var source = String(
|
||||||
|
expression || "",
|
||||||
|
).trim();
|
||||||
|
|
||||||
|
// Remove an optional trailing semicolon.
|
||||||
|
if (
|
||||||
|
source.charAt(
|
||||||
|
source.length - 1,
|
||||||
|
) === ";"
|
||||||
|
) {
|
||||||
|
source = source
|
||||||
|
.slice(0, -1)
|
||||||
|
.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Array literals containing spreads:
|
||||||
|
*
|
||||||
|
* [...openIndexes, index]
|
||||||
|
* [first, ...otherItems]
|
||||||
|
*/
|
||||||
|
if (
|
||||||
|
source.charAt(0) === "[" &&
|
||||||
|
source.charAt(
|
||||||
|
source.length - 1,
|
||||||
|
) === "]" &&
|
||||||
|
source.indexOf("...") !== -1
|
||||||
|
) {
|
||||||
|
var arraySource = source.slice(
|
||||||
|
1,
|
||||||
|
-1,
|
||||||
|
);
|
||||||
|
|
||||||
|
var arrayParts = splitTopLevel(
|
||||||
|
arraySource,
|
||||||
|
",",
|
||||||
|
);
|
||||||
|
|
||||||
|
var arrayResult = [];
|
||||||
|
|
||||||
|
arrayParts.forEach(function (
|
||||||
|
part,
|
||||||
|
) {
|
||||||
|
var partSource =
|
||||||
|
part.trim();
|
||||||
|
|
||||||
|
if (!partSource) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
partSource.slice(0, 3) ===
|
||||||
|
"..."
|
||||||
|
) {
|
||||||
|
var spreadResult =
|
||||||
|
evaluateExpression(
|
||||||
|
partSource
|
||||||
|
.slice(3)
|
||||||
|
.trim(),
|
||||||
|
read,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
Array.isArray(
|
||||||
|
spreadResult,
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
Array.prototype.push.apply(
|
||||||
|
arrayResult,
|
||||||
|
spreadResult,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
arrayResult.push(
|
||||||
|
evaluateExpression(
|
||||||
|
partSource,
|
||||||
|
read,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
matched: true,
|
||||||
|
value: arrayResult,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* First recognize the array method call without
|
||||||
|
* trying to parse the callback in the same regex.
|
||||||
|
*/
|
||||||
|
var methodMatch =
|
||||||
|
/^([\s\S]+)\.(filter|map|some|every|find|findIndex)\(\s*([\s\S]*)\s*\)$/.exec(
|
||||||
|
source,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!methodMatch) {
|
||||||
|
return {
|
||||||
|
matched: false,
|
||||||
|
value: undefined,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var collectionSource =
|
||||||
|
methodMatch[1].trim();
|
||||||
|
|
||||||
|
var method =
|
||||||
|
methodMatch[2];
|
||||||
|
|
||||||
|
var callbackSource =
|
||||||
|
methodMatch[3].trim();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Supported callbacks:
|
||||||
|
*
|
||||||
|
* item => item.active
|
||||||
|
* (item) => item.active
|
||||||
|
* (item, index) => index > 0
|
||||||
|
*/
|
||||||
|
var callbackMatch =
|
||||||
|
/^(?:\(\s*([A-Za-z_$][A-Za-z0-9_$]*)\s*(?:,\s*([A-Za-z_$][A-Za-z0-9_$]*)\s*)?\)|([A-Za-z_$][A-Za-z0-9_$]*))\s*=>\s*([\s\S]+)$/.exec(
|
||||||
|
callbackSource,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!callbackMatch) {
|
||||||
|
return {
|
||||||
|
matched: false,
|
||||||
|
value: undefined,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var itemName =
|
||||||
|
callbackMatch[1] ||
|
||||||
|
callbackMatch[3];
|
||||||
|
|
||||||
|
var indexName =
|
||||||
|
callbackMatch[2];
|
||||||
|
|
||||||
|
var callbackBody =
|
||||||
|
callbackMatch[4].trim();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Support expression bodies wrapped in parentheses:
|
||||||
|
*
|
||||||
|
* item => (
|
||||||
|
* item.active
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
if (
|
||||||
|
callbackBody.charAt(0) ===
|
||||||
|
"(" &&
|
||||||
|
callbackBody.charAt(
|
||||||
|
callbackBody.length - 1,
|
||||||
|
) === ")"
|
||||||
|
) {
|
||||||
|
callbackBody = callbackBody
|
||||||
|
.slice(1, -1)
|
||||||
|
.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
var collection =
|
||||||
|
evaluateExpression(
|
||||||
|
collectionSource,
|
||||||
|
read,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!Array.isArray(collection)) {
|
||||||
|
collection = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
var callback = function (
|
||||||
|
itemValue,
|
||||||
|
itemIndex,
|
||||||
|
) {
|
||||||
|
return evaluateExpression(
|
||||||
|
callbackBody,
|
||||||
|
function (name) {
|
||||||
|
if (name === itemName) {
|
||||||
|
return itemValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
indexName &&
|
||||||
|
name === indexName
|
||||||
|
) {
|
||||||
|
return itemIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
return read(name);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
var result;
|
||||||
|
|
||||||
|
if (method === "filter") {
|
||||||
|
result =
|
||||||
|
collection.filter(callback);
|
||||||
|
} else if (
|
||||||
|
method === "map"
|
||||||
|
) {
|
||||||
|
result =
|
||||||
|
collection.map(callback);
|
||||||
|
} else if (
|
||||||
|
method === "some"
|
||||||
|
) {
|
||||||
|
result =
|
||||||
|
collection.some(callback);
|
||||||
|
} else if (
|
||||||
|
method === "every"
|
||||||
|
) {
|
||||||
|
result =
|
||||||
|
collection.every(callback);
|
||||||
|
} else if (
|
||||||
|
method === "find"
|
||||||
|
) {
|
||||||
|
result =
|
||||||
|
collection.find(callback);
|
||||||
|
} else {
|
||||||
|
result =
|
||||||
|
collection.findIndex(
|
||||||
|
callback,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
matched: true,
|
||||||
|
value: result,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// A small, eval-free expression evaluator (so a strict CSP needs no
|
// A small, eval-free expression evaluator (so a strict CSP needs no
|
||||||
// 'unsafe-eval'). Supports: literals, identifiers, member access (a.b, a[b]),
|
// 'unsafe-eval'). Supports: literals, identifiers, member access (a.b, a[b]),
|
||||||
// function/method calls, arrays, objects, arithmetic, comparison, equality,
|
// function/method calls, arrays, objects, arithmetic, comparison, equality,
|
||||||
// logical (&& ||), unary (! - +), and the ternary operator.
|
// logical (&& ||), unary (! - +), and the ternary operator.
|
||||||
function evaluateExpression(expr, read) {
|
function evaluateExpression(
|
||||||
var tokens = tokenizeExpression(String(expr || ""));
|
expr,
|
||||||
|
read,
|
||||||
|
) {
|
||||||
|
expr = String(
|
||||||
|
expr || "",
|
||||||
|
).trim();
|
||||||
|
|
||||||
|
var special =
|
||||||
|
evaluateSpecialExpression(
|
||||||
|
expr,
|
||||||
|
read,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (special.matched) {
|
||||||
|
return special.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
var tokens =
|
||||||
|
tokenizeExpression(expr);
|
||||||
|
|
||||||
var index = 0;
|
var index = 0;
|
||||||
function peek() { return tokens[index]; }
|
function peek() { return tokens[index]; }
|
||||||
function next() { return tokens[index++]; }
|
function next() { return tokens[index++]; }
|
||||||
@@ -968,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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/db",
|
"name": "@wrnexus/db",
|
||||||
"version": "0.2.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
import { existsSync, rmSync } from "node:fs";
|
||||||
|
import { resolve } from "node:path";
|
||||||
|
|
||||||
|
export interface ResetDevCacheOptions {
|
||||||
|
rootDir?: string;
|
||||||
|
cacheDir?: string;
|
||||||
|
enabled?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function resetDevCache(options: ResetDevCacheOptions = {}): string {
|
||||||
|
const rootDir = resolve(options.rootDir ?? process.cwd());
|
||||||
|
|
||||||
|
const cacheDir = resolve(rootDir, options.cacheDir ?? ".wrnexus");
|
||||||
|
|
||||||
|
if (options.enabled === false) {
|
||||||
|
return cacheDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Safety: never allow deleting the project root.
|
||||||
|
if (cacheDir === rootDir) {
|
||||||
|
throw new Error("Refusing to remove the project root as the WRNexus cache directory.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (existsSync(cacheDir)) {
|
||||||
|
rmSync(cacheDir, {
|
||||||
|
recursive: true,
|
||||||
|
force: true,
|
||||||
|
maxRetries: 3,
|
||||||
|
retryDelay: 100,
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`[wrnexus] cleared generated cache: ${cacheDir}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cacheDir;
|
||||||
|
}
|
||||||
@@ -29,6 +29,7 @@ import { createDevAssetServer } from "./assets.ts";
|
|||||||
import { HmrHub } from "./hmr.ts";
|
import { HmrHub } from "./hmr.ts";
|
||||||
import { startWatcher } from "./watch.ts";
|
import { startWatcher } from "./watch.ts";
|
||||||
export { RESTART_EXIT_CODE } from "./restart.ts";
|
export { RESTART_EXIT_CODE } from "./restart.ts";
|
||||||
|
import { resetDevCache } from "./cache.ts";
|
||||||
|
|
||||||
export interface ServeOptions {
|
export interface ServeOptions {
|
||||||
appDir: string;
|
appDir: string;
|
||||||
@@ -122,6 +123,12 @@ export async function startServer(opts: ServeOptions): Promise<RunningServer> {
|
|||||||
const router = buildRouter(appDir, { componentDirs: [uiComponentsDir()] });
|
const router = buildRouter(appDir, { componentDirs: [uiComponentsDir()] });
|
||||||
const styleEntry = opts.styleEntry ?? null;
|
const styleEntry = opts.styleEntry ?? null;
|
||||||
const appRoot = dirname(appDir);
|
const appRoot = dirname(appDir);
|
||||||
|
|
||||||
|
resetDevCache({
|
||||||
|
rootDir: appRoot,
|
||||||
|
enabled: process.env.WRNEXUS_PRESERVE_CACHE !== "1",
|
||||||
|
});
|
||||||
|
|
||||||
// Compile every `.wrn` into ONE cache dir at the project root, instead of a
|
// Compile every `.wrn` into ONE cache dir at the project root, instead of a
|
||||||
// `.wrnexus/` next to each source file (and inside node_modules UI dirs).
|
// `.wrnexus/` next to each source file (and inside node_modules UI dirs).
|
||||||
setCompileCacheDir(join(appRoot, ".wrnexus"));
|
setCompileCacheDir(join(appRoot, ".wrnexus"));
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/encryption",
|
"name": "@wrnexus/encryption",
|
||||||
"version": "0.2.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wrnexus/i18n",
|
"name": "@wrnexus/i18n",
|
||||||
"version": "0.2.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"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.39",
|
"version": "0.2.44",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -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.39";
|
const version = "0.2.44";
|
||||||
|
|
||||||
const dependencyGroups = [
|
const dependencyGroups = [
|
||||||
"dependencies",
|
"dependencies",
|
||||||
|
|||||||
Reference in New Issue
Block a user