release: WRNexusJS 0.7.0
This commit is contained in:
+113
-78
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"status": "private-developer-preview",
|
||||
"generatedAt": "2026-07-13",
|
||||
"documents": [
|
||||
@@ -7,525 +7,560 @@
|
||||
"url": "/",
|
||||
"title": "WRNexusJS",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/access",
|
||||
"title": "access",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/getting-started",
|
||||
"title": "getting started",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/tutorial",
|
||||
"title": "tutorial",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/architecture",
|
||||
"title": "architecture",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/language",
|
||||
"title": "language",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages",
|
||||
"title": "packages",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/project-structure",
|
||||
"title": "project structure",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/routing",
|
||||
"title": "routing",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/pages-and-components",
|
||||
"title": "pages and components",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/server-data",
|
||||
"title": "server data",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/api-routes",
|
||||
"title": "api routes",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/middleware",
|
||||
"title": "middleware",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/forms-and-validation",
|
||||
"title": "forms and validation",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/authentication",
|
||||
"title": "authentication",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/authorization",
|
||||
"title": "authorization",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/security",
|
||||
"title": "security",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/database",
|
||||
"title": "database",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/uploads",
|
||||
"title": "uploads",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/realtime",
|
||||
"title": "realtime",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/pubsub",
|
||||
"title": "pubsub",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/queues",
|
||||
"title": "queues",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "experimental"
|
||||
},
|
||||
{
|
||||
"url": "/guides/testing",
|
||||
"title": "testing",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/workspaces-and-gateway",
|
||||
"title": "workspaces and gateway",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/deployment",
|
||||
"title": "deployment",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/configuration-and-profiles",
|
||||
"title": "configuration and profiles",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/i18n-and-themes",
|
||||
"title": "i18n and themes",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/mobile",
|
||||
"title": "mobile",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "experimental"
|
||||
},
|
||||
{
|
||||
"url": "/guides/observability",
|
||||
"title": "observability",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/upgrading",
|
||||
"title": "upgrading",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/guides/troubleshooting",
|
||||
"title": "troubleshooting",
|
||||
"section": "guide",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/examples",
|
||||
"title": "examples",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/showcase",
|
||||
"title": "showcase",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/benchmarks",
|
||||
"title": "benchmarks",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/roadmap",
|
||||
"title": "roadmap",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/changelog",
|
||||
"title": "changelog",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/releases/0.6.0",
|
||||
"title": "0.6.0",
|
||||
"url": "/releases/0.7.0",
|
||||
"title": "0.7.0",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/security",
|
||||
"title": "security",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/support",
|
||||
"title": "support",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/license",
|
||||
"title": "license",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/search",
|
||||
"title": "search",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/404",
|
||||
"title": "404",
|
||||
"section": "portal",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/ai",
|
||||
"title": "ai",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/auth",
|
||||
"title": "auth",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/authz",
|
||||
"title": "authz",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/benchmark",
|
||||
"title": "benchmark",
|
||||
"section": "package",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/cache",
|
||||
"title": "cache",
|
||||
"section": "package",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/captcha",
|
||||
"title": "captcha",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/cli",
|
||||
"title": "cli",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/compiler",
|
||||
"title": "compiler",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/core",
|
||||
"title": "core",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/csr",
|
||||
"title": "csr",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/db",
|
||||
"title": "db",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/dev-server",
|
||||
"title": "dev server",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/dev-toolbar",
|
||||
"title": "dev toolbar",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/encryption",
|
||||
"title": "encryption",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/helpers",
|
||||
"title": "helpers",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/i18n",
|
||||
"title": "i18n",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/image",
|
||||
"title": "image",
|
||||
"section": "package",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/jwt",
|
||||
"title": "jwt",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/mobile",
|
||||
"title": "mobile",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "experimental"
|
||||
},
|
||||
{
|
||||
"url": "/packages/native",
|
||||
"title": "native",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/oauth",
|
||||
"title": "oauth",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/observability",
|
||||
"title": "observability",
|
||||
"section": "package",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/plugin",
|
||||
"title": "plugin",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/pubsub",
|
||||
"title": "pubsub",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/queue",
|
||||
"title": "queue",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/reactive",
|
||||
"title": "reactive",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/router",
|
||||
"title": "router",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/security",
|
||||
"title": "security",
|
||||
"section": "package",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/ssr",
|
||||
"title": "ssr",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/store",
|
||||
"title": "store",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/styles",
|
||||
"title": "styles",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/syntax",
|
||||
"title": "syntax",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/test",
|
||||
"title": "test",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/tracking",
|
||||
"title": "tracking",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/typecheck",
|
||||
"title": "typecheck",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/ui",
|
||||
"title": "ui",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/uploader",
|
||||
"title": "uploader",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
},
|
||||
{
|
||||
"url": "/packages/validation",
|
||||
"title": "validation",
|
||||
"section": "package",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"stability": "preview"
|
||||
}
|
||||
]
|
||||
|
||||
+604
-35
@@ -1,6 +1,6 @@
|
||||
# WRNexusJS documentation 0.6.0
|
||||
# WRNexusJS documentation 0.7.0
|
||||
|
||||
Status: Private Developer Preview. This site documents 33 release-aligned packages.
|
||||
Status: Private Developer Preview. This site documents 38 release-aligned packages.
|
||||
|
||||
# WrNexus
|
||||
|
||||
@@ -279,7 +279,7 @@ wrnexus eject <component> # copy a Wire UI component's .wrn into app/compone
|
||||
4. Style with Tailwind utility classes in the view, or theme tokens (`var(--wire-*)`), or `style { }`.
|
||||
5. Never emit React/JSX, a manual router, or client-side island JS — the framework handles hydration.
|
||||
|
||||
Release: WRNexusJS 0.6.0
|
||||
Release: WRNexusJS 0.7.0
|
||||
|
||||
# Canonical documentation locations
|
||||
|
||||
@@ -288,7 +288,7 @@ Release: WRNexusJS 0.6.0
|
||||
|
||||
# Installed package documentation
|
||||
|
||||
The following README files and declarations come from the installed private 0.6.0 release.
|
||||
The following README files and declarations come from the installed private 0.7.0 release.
|
||||
|
||||
## @wrnexus/ai
|
||||
|
||||
@@ -1206,6 +1206,156 @@ export { type AuthorizationDecision, type DecisionPolicy, type Policy, type Rbac
|
||||
|
||||
---
|
||||
|
||||
## @wrnexus/benchmark
|
||||
|
||||
Documentation URL: https://wrnexusjs.dev/packages/benchmark
|
||||
|
||||
# @wrnexus/benchmark
|
||||
|
||||
Deterministic benchmark execution, percentiles, baseline comparisons, and regression budgets for builds, SSR, hydration, stores, and application hot paths.
|
||||
|
||||
```ts
|
||||
import { runBenchmark, assertBenchmarkBudget } from "@wrnexus/benchmark";
|
||||
const result = await runBenchmark("render", render, { iterations: 100 });
|
||||
assertBenchmarkBudget(result, baseline, { p95Percent: 5 });
|
||||
```
|
||||
|
||||
### Exported TypeScript declarations
|
||||
|
||||
```ts
|
||||
interface BenchmarkOptions {
|
||||
iterations?: number;
|
||||
warmup?: number;
|
||||
clock?: () => number;
|
||||
setup?: () => void | Promise<void>;
|
||||
teardown?: () => void | Promise<void>;
|
||||
}
|
||||
interface BenchmarkResult {
|
||||
name: string;
|
||||
iterations: number;
|
||||
totalMs: number;
|
||||
meanMs: number;
|
||||
minMs: number;
|
||||
maxMs: number;
|
||||
p50Ms: number;
|
||||
p95Ms: number;
|
||||
p99Ms: number;
|
||||
operationsPerSecond: number;
|
||||
samples: number[];
|
||||
}
|
||||
interface RegressionBudget {
|
||||
meanPercent?: number;
|
||||
p95Percent?: number;
|
||||
maxAbsoluteMs?: number;
|
||||
minOperationsPerSecond?: number;
|
||||
}
|
||||
interface RegressionViolation {
|
||||
metric: "meanMs" | "p95Ms" | "maxMs" | "operationsPerSecond";
|
||||
baseline?: number;
|
||||
current: number;
|
||||
limit: number;
|
||||
message: string;
|
||||
}
|
||||
declare function percentile(values: readonly number[], quantile: number): number;
|
||||
declare function runBenchmark(name: string, operation: () => void | Promise<void>, options?: BenchmarkOptions): Promise<BenchmarkResult>;
|
||||
declare function compareBenchmark(current: BenchmarkResult, baseline: BenchmarkResult | undefined, budget?: RegressionBudget): RegressionViolation[];
|
||||
declare function assertBenchmarkBudget(current: BenchmarkResult, baseline: BenchmarkResult | undefined, budget: RegressionBudget): void;
|
||||
|
||||
export { type BenchmarkOptions, type BenchmarkResult, type RegressionBudget, type RegressionViolation, assertBenchmarkBudget, compareBenchmark, percentile, runBenchmark };
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## @wrnexus/cache
|
||||
|
||||
Documentation URL: https://wrnexusjs.dev/packages/cache
|
||||
|
||||
# @wrnexus/cache
|
||||
|
||||
Bounded in-memory/tag caching and HTTP response caching for WRNexusJS. Supports request deduplication, tag invalidation, ETags, fresh/stale states, and optional detached stale revalidation.
|
||||
|
||||
```ts
|
||||
import { TagCache, responseCache } from "@wrnexus/cache";
|
||||
const cache = new TagCache({ ttlMs: 60_000, staleWhileRevalidateMs: 300_000 });
|
||||
export default responseCache({ cache, tags: ["products"] });
|
||||
```
|
||||
|
||||
### Exported TypeScript declarations
|
||||
|
||||
```ts
|
||||
import { Context, Middleware } from '@wrnexus/core';
|
||||
|
||||
interface CacheEntry<V> {
|
||||
value: V;
|
||||
createdAt: number;
|
||||
expiresAt: number;
|
||||
staleUntil: number;
|
||||
tags: string[];
|
||||
}
|
||||
type CacheLookup<V> = {
|
||||
state: "miss";
|
||||
} | {
|
||||
state: "fresh" | "stale";
|
||||
entry: CacheEntry<V>;
|
||||
};
|
||||
interface CacheSetOptions {
|
||||
ttlMs?: number;
|
||||
staleWhileRevalidateMs?: number;
|
||||
tags?: string[];
|
||||
}
|
||||
interface TagCacheOptions {
|
||||
ttlMs?: number;
|
||||
staleWhileRevalidateMs?: number;
|
||||
maxEntries?: number;
|
||||
clock?: () => number;
|
||||
}
|
||||
declare class TagCache<V = unknown> {
|
||||
private entries;
|
||||
private tagIndex;
|
||||
private pending;
|
||||
private readonly ttlMs;
|
||||
private readonly staleMs;
|
||||
private readonly maxEntries;
|
||||
private readonly clock;
|
||||
constructor(options?: TagCacheOptions);
|
||||
lookup(key: string): CacheLookup<V>;
|
||||
get(key: string): V | undefined;
|
||||
set(key: string, value: V, options?: CacheSetOptions): void;
|
||||
getOrLoad(key: string, loader: () => V | Promise<V>, options?: CacheSetOptions): Promise<V>;
|
||||
delete(key: string): boolean;
|
||||
invalidateTag(tag: string): number;
|
||||
invalidateTags(tags: Iterable<string>): number;
|
||||
clear(): void;
|
||||
get size(): number;
|
||||
}
|
||||
|
||||
interface CachedResponse {
|
||||
status: number;
|
||||
statusText: string;
|
||||
headers: [string, string][];
|
||||
body: Uint8Array;
|
||||
etag: string;
|
||||
}
|
||||
interface ResponseCacheOptions extends CacheSetOptions {
|
||||
cache?: TagCache<CachedResponse>;
|
||||
key?: (ctx: Context) => string;
|
||||
vary?: string[];
|
||||
shouldCache?: (ctx: Context, response: Response) => boolean;
|
||||
/**
|
||||
* Optional detached revalidator used for stale-while-revalidate. Middleware
|
||||
* `next()` is deliberately never called after a response has been returned,
|
||||
* because many middleware pipelines are single-use.
|
||||
*/
|
||||
revalidate?: (ctx: Context) => Promise<Response>;
|
||||
onRevalidateError?: (error: unknown, ctx: Context) => void;
|
||||
}
|
||||
declare function responseCache(options?: ResponseCacheOptions): Middleware;
|
||||
|
||||
export { type CacheEntry, type CacheLookup, type CacheSetOptions, type CachedResponse, type ResponseCacheOptions, TagCache, type TagCacheOptions, responseCache };
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## @wrnexus/captcha
|
||||
|
||||
Documentation URL: https://wrnexusjs.dev/packages/captcha
|
||||
@@ -2206,6 +2356,17 @@ interface WrnSourceMap {
|
||||
}
|
||||
declare function createWrnSourceMap(source: string, generated: string): WrnSourceMap;
|
||||
|
||||
type RouteExecutionKind = "static" | "static-interactive" | "request-ssr" | "authenticated-ssr" | "streaming-ssr" | "dynamic";
|
||||
interface RuntimeRequirements {
|
||||
kind: RouteExecutionKind;
|
||||
canPrerender: boolean;
|
||||
needsClientRuntime: boolean;
|
||||
needsServerRuntime: boolean;
|
||||
hydrationStrategy: string | null;
|
||||
reasons: string[];
|
||||
}
|
||||
declare function analyzeRuntimeRequirements(ast: PageAst$1): RuntimeRequirements;
|
||||
|
||||
declare class NativeCompileError extends Error {
|
||||
constructor(message: string);
|
||||
}
|
||||
@@ -2270,7 +2431,7 @@ declare function compileWireFile(source: string, filePath?: string): string;
|
||||
/** Richer entry point returning the AST and structured diagnostics. */
|
||||
declare function compile(source: string, filePath?: string): CompileResult;
|
||||
|
||||
export { type CompilationCache, type CompilationCacheEntry, type CompilationCacheOptions, type CompileResult, DependencyGraph, NativeCompileError, compilationKey, compile, compileNativeWireFile, compileWireFile, createCompilationCache, createComponentContract, createWrnSourceMap, generate, generateBrowserModule, generateDeclarations, generateNative, generateServerFunctionsModule, generateStoreBrowserModule, generateStoreModule, generateTargets, resolveWrnImport, resolveWrnImports, rpcManifest };
|
||||
export { type CompilationCache, type CompilationCacheEntry, type CompilationCacheOptions, type CompileResult, DependencyGraph, NativeCompileError, type RouteExecutionKind, type RuntimeRequirements, analyzeRuntimeRequirements, compilationKey, compile, compileNativeWireFile, compileWireFile, createCompilationCache, createComponentContract, createWrnSourceMap, generate, generateBrowserModule, generateDeclarations, generateNative, generateServerFunctionsModule, generateStoreBrowserModule, generateStoreModule, generateTargets, resolveWrnImport, resolveWrnImports, rpcManifest };
|
||||
```
|
||||
|
||||
---
|
||||
@@ -2746,10 +2907,21 @@ interface LocalStorageSnapshot {
|
||||
getAll(): Record<string, string>;
|
||||
has(key: string): boolean;
|
||||
}
|
||||
interface SessionPolicy {
|
||||
cookieName?: string;
|
||||
idleTimeoutMs?: number;
|
||||
absoluteTimeoutMs?: number;
|
||||
sameSite?: NonNullable<CookieOptions["sameSite"]>;
|
||||
secure?: boolean;
|
||||
}
|
||||
declare function setSessionPolicy(policy: SessionPolicy): void;
|
||||
/** A stored session: its data plus an absolute expiry timestamp (ms). */
|
||||
interface SessionEntry {
|
||||
data: Record<string, unknown>;
|
||||
expiresAt: number;
|
||||
/** Creation time used for the absolute session lifetime. Optional for old backends. */
|
||||
createdAt?: number;
|
||||
lastAccessAt?: number;
|
||||
}
|
||||
/**
|
||||
* Pluggable session persistence. The default is process-local memory; swap in a
|
||||
@@ -2785,6 +2957,10 @@ interface AsyncSessionBackend {
|
||||
*/
|
||||
declare function loadSession(backend: AsyncSessionBackend, options?: {
|
||||
ttlMs?: number;
|
||||
absoluteTtlMs?: number;
|
||||
cookieName?: string;
|
||||
sameSite?: NonNullable<CookieOptions["sameSite"]>;
|
||||
secure?: boolean;
|
||||
}): Middleware;
|
||||
|
||||
/**
|
||||
@@ -2891,27 +3067,26 @@ declare function isSafeIslandName(name: string): boolean;
|
||||
declare function isSafeRequestPath(pathname: string): boolean;
|
||||
|
||||
/**
|
||||
* CSRF protection via the double-submit cookie pattern.
|
||||
*
|
||||
* The framework sets a readable `wire-csrf` cookie on page loads; the client
|
||||
* echoes it in an `x-csrf-token` header on unsafe requests (the Wire UI form
|
||||
* runtime does this automatically). The server checks header === cookie. A
|
||||
* cross-site attacker can't read the cookie to forge the header, so the request
|
||||
* is rejected — while same-origin requests pass.
|
||||
* CSRF protection via the double-submit cookie pattern plus origin/fetch
|
||||
* metadata validation for unsafe requests.
|
||||
*/
|
||||
|
||||
declare const CSRF_COOKIE = "wire-csrf";
|
||||
declare const CSRF_HEADER = "x-csrf-token";
|
||||
interface CsrfProtectionOptions {
|
||||
/** Validate Origin when present. Defaults to true. */
|
||||
verifyOrigin?: boolean;
|
||||
/** Additional exact origins permitted for trusted cross-origin clients. */
|
||||
trustedOrigins?: string[];
|
||||
/** Reject Sec-Fetch-Site: cross-site on unsafe requests. Defaults to true. */
|
||||
verifyFetchMetadata?: boolean;
|
||||
}
|
||||
/** Ensure the CSRF cookie exists (readable by JS) and return its token. */
|
||||
declare function csrfToken(ctx: Context): string;
|
||||
/**
|
||||
* Verify an unsafe request's CSRF token against the cookie. Safe methods
|
||||
* (GET/HEAD/OPTIONS) always pass. The token may arrive in the `x-csrf-token`
|
||||
* header or a `_csrf` field already parsed onto `ctx.locals`.
|
||||
*/
|
||||
declare function verifyCsrf(ctx: Context): boolean;
|
||||
/** Middleware that 403s unsafe requests with a missing/mismatched CSRF token. */
|
||||
declare function csrfProtection(): Middleware;
|
||||
/** Verify an unsafe request's token, origin, and browser fetch metadata. */
|
||||
declare function verifyCsrf(ctx: Context, options?: CsrfProtectionOptions): boolean;
|
||||
/** Middleware that 403s unsafe requests with a missing/mismatched token. */
|
||||
declare function csrfProtection(options?: CsrfProtectionOptions): Middleware;
|
||||
|
||||
/**
|
||||
* Authentication primitives.
|
||||
@@ -3069,6 +3244,8 @@ interface CacheControlOptions {
|
||||
noCache?: boolean;
|
||||
/** stale-while-revalidate window in seconds. */
|
||||
staleWhileRevalidate?: number;
|
||||
/** stale-if-error window in seconds. */
|
||||
staleIfError?: number;
|
||||
immutable?: boolean;
|
||||
}
|
||||
/** Build a Cache-Control header value from options. */
|
||||
@@ -3081,16 +3258,37 @@ declare function etag(body: string | ArrayBuffer | Uint8Array, weak?: boolean):
|
||||
declare function notModified(req: Request, tag: string): boolean;
|
||||
|
||||
/**
|
||||
* File upload helpers. Bun parses `multipart/form-data` natively via
|
||||
* `Request.formData()`, yielding web `File` objects; these helpers validate and
|
||||
* persist them safely (size/type limits, filename sanitisation to prevent path
|
||||
* traversal).
|
||||
* File upload helpers. The legacy `saveUpload` keeps the original sanitized
|
||||
* filename for compatibility. New applications should use `saveUploadSecure`,
|
||||
* which stores a random name and supports content inspection/scanning hooks.
|
||||
*/
|
||||
declare class UploadError extends Error {
|
||||
constructor(message: string);
|
||||
readonly code: string;
|
||||
constructor(message: string, code?: string);
|
||||
}
|
||||
interface UploadInspectionResult {
|
||||
allowed: boolean;
|
||||
detectedType?: string;
|
||||
reason?: string;
|
||||
}
|
||||
type UploadInspector = (input: {
|
||||
file: File;
|
||||
bytes: Uint8Array;
|
||||
filename: string;
|
||||
}) => UploadInspectionResult | Promise<UploadInspectionResult>;
|
||||
type UploadScanner = (input: {
|
||||
file: File;
|
||||
bytes: Uint8Array;
|
||||
filename: string;
|
||||
}) => boolean | {
|
||||
clean: boolean;
|
||||
reason?: string;
|
||||
} | Promise<boolean | {
|
||||
clean: boolean;
|
||||
reason?: string;
|
||||
}>;
|
||||
interface SaveUploadOptions {
|
||||
/** Destination directory. */
|
||||
/** Destination directory. Keep this outside the public web root. */
|
||||
dir: string;
|
||||
/** Reject files larger than this many bytes. */
|
||||
maxBytes?: number;
|
||||
@@ -3098,22 +3296,48 @@ interface SaveUploadOptions {
|
||||
allowedTypes?: string[];
|
||||
/** Choose the stored filename. Default: the sanitised original name. */
|
||||
filename?: (file: File) => string;
|
||||
/** Content/magic-byte inspection hook. */
|
||||
inspect?: UploadInspector;
|
||||
/** Malware scanning hook. */
|
||||
scan?: UploadScanner;
|
||||
/** Called after validation but before persistence. */
|
||||
beforeSave?: (input: {
|
||||
file: File;
|
||||
bytes: Uint8Array;
|
||||
filename: string;
|
||||
}) => void | Promise<void>;
|
||||
}
|
||||
interface SecureUploadOptions extends Omit<SaveUploadOptions, "filename"> {
|
||||
/** Preserve the original sanitized name instead of a random server name. */
|
||||
preserveOriginalName?: boolean;
|
||||
/** Optional custom secure filename generator. */
|
||||
filename?: (file: File) => string;
|
||||
/** Preserve a conservative extension on random filenames. Defaults to true. */
|
||||
preserveExtension?: boolean;
|
||||
}
|
||||
interface SavedUpload {
|
||||
path: string;
|
||||
filename: string;
|
||||
size: number;
|
||||
type: string;
|
||||
detectedType?: string;
|
||||
}
|
||||
/** All `File` values in a parsed form, with their field names. */
|
||||
declare function collectUploads(form: FormData): {
|
||||
declare function collectUploads(form: FormData, options?: {
|
||||
maxFiles?: number;
|
||||
maxTotalBytes?: number;
|
||||
}): {
|
||||
field: string;
|
||||
file: File;
|
||||
}[];
|
||||
/** Validate and write one uploaded file to disk. Throws `UploadError` on reject. */
|
||||
/** Validate and write one uploaded file using a compatibility filename policy. */
|
||||
declare function saveUpload(file: File, options: SaveUploadOptions): Promise<SavedUpload>;
|
||||
/** Store an upload under a random server-generated name by default. */
|
||||
declare function saveUploadSecure(file: File, options: SecureUploadOptions): Promise<SavedUpload>;
|
||||
/** Strip directory separators, traversal, and control chars from a filename. */
|
||||
declare function sanitizeFilename(name: string): string;
|
||||
declare function randomUploadFilename(originalName?: string, preserveExtension?: boolean): string;
|
||||
declare function secureDownloadHeaders(filename: string, type?: string): Headers;
|
||||
|
||||
/**
|
||||
* Streaming response primitives.
|
||||
@@ -3235,7 +3459,27 @@ interface RoomAuthInfo {
|
||||
/** The upgrade request's headers (cookies, etc.). */
|
||||
headers: Headers;
|
||||
}
|
||||
interface RealtimeSecurityOptions {
|
||||
/** Maximum inbound or outbound serialized message size. Defaults to 64 KiB. */
|
||||
maxMessageBytes?: number;
|
||||
/** Maximum messages accepted per connection per rolling second. Defaults to 30. */
|
||||
maxMessagesPerSecond?: number;
|
||||
/** Maximum live connections in one room. Defaults to 1,000. */
|
||||
maxConnectionsPerRoom?: number;
|
||||
/** Maximum connections for one authenticated user in a room. Defaults to 10. */
|
||||
maxConnectionsPerUser?: number;
|
||||
/** Reject anonymous connections before onConnect. */
|
||||
requireUser?: boolean;
|
||||
/** Maximum nested JSON depth. Defaults to 32. */
|
||||
maxJsonDepth?: number;
|
||||
/** Optional message schema/authorization predicate. */
|
||||
validateMessage?(message: unknown, client: RoomClient): boolean | Promise<boolean>;
|
||||
/** Called when a connection is rejected or closed for a policy violation. */
|
||||
onViolation?(reason: string, client?: RoomClient): void;
|
||||
}
|
||||
interface RoomHandlers<TData = Record<string, unknown>> {
|
||||
/** Per-room abuse and payload controls. */
|
||||
security?: RealtimeSecurityOptions;
|
||||
/**
|
||||
* Gate the connection BEFORE it is accepted. Return false to reject the
|
||||
* upgrade with 403 (e.g. `authorize: (info) => !!info.user` to require auth).
|
||||
@@ -3277,6 +3521,9 @@ interface RealtimeEnvelope {
|
||||
interface RealtimeBridge {
|
||||
publish(envelope: RealtimeEnvelope): void;
|
||||
}
|
||||
interface RealtimeRegistryOptions extends RealtimeSecurityOptions {
|
||||
now?: () => number;
|
||||
}
|
||||
interface RealtimeRegistry {
|
||||
open(socket: RawSocket, meta: RealtimeConnectMeta): void | Promise<void>;
|
||||
message(socket: RawSocket, raw: string | Uint8Array): void | Promise<void>;
|
||||
@@ -3289,7 +3536,7 @@ interface RealtimeRegistry {
|
||||
size(): number;
|
||||
}
|
||||
/** Create the registry that maps sockets ↔ rooms and drives room handlers. */
|
||||
declare function createRealtimeRegistry(): RealtimeRegistry;
|
||||
declare function createRealtimeRegistry(options?: RealtimeRegistryOptions): RealtimeRegistry;
|
||||
/**
|
||||
* A minimal pub/sub bus (structurally satisfied by `@wrnexus/pubsub`). Used to
|
||||
* bridge realtime broadcasts across processes without a hard dependency.
|
||||
@@ -3386,9 +3633,22 @@ interface TrustedTypesConfig {
|
||||
allowDuplicates?: boolean;
|
||||
}
|
||||
type PermissionsPolicyConfig = Record<string, string | string[] | false | null | undefined>;
|
||||
interface RequestLimitsConfig {
|
||||
maxUrlLength?: number;
|
||||
maxHeaderCount?: number;
|
||||
maxHeaderBytes?: number;
|
||||
maxQueryParameters?: number;
|
||||
maxBodyBytes?: number;
|
||||
timeoutMs?: number;
|
||||
maxConcurrent?: number;
|
||||
trustedHosts?: string[];
|
||||
fetchMetadata?: boolean;
|
||||
}
|
||||
interface SecurityConfig {
|
||||
/** Set false to skip all framework security headers except explicitly enabled CORS. */
|
||||
headers?: boolean;
|
||||
/** Built-in request size, timeout, concurrency, host, and Fetch Metadata limits. */
|
||||
requestLimits?: RequestLimitsConfig;
|
||||
/**
|
||||
* Trust `X-Forwarded-Proto` / `X-Forwarded-Host` when building `ctx.url` — set
|
||||
* this when the app runs behind a TLS-terminating reverse proxy (nginx, the
|
||||
@@ -3407,6 +3667,12 @@ interface SecurityConfig {
|
||||
frameOptions?: false | "DENY" | "SAMEORIGIN";
|
||||
/** Defaults to "strict-origin-when-cross-origin". */
|
||||
referrerPolicy?: false | string;
|
||||
/** Defaults to "same-origin". */
|
||||
crossOriginResourcePolicy?: false | "same-origin" | "same-site" | "cross-origin";
|
||||
/** Isolate the origin in its own agent cluster. Defaults to true. */
|
||||
originAgentCluster?: boolean;
|
||||
/** Disable speculative DNS prefetching. Defaults to true. */
|
||||
disableDnsPrefetch?: boolean;
|
||||
/** Defaults to a restrictive browser capability policy. */
|
||||
permissionsPolicy?: false | PermissionsPolicyConfig;
|
||||
/** Extra static headers applied last. */
|
||||
@@ -3510,6 +3776,20 @@ interface PerformanceBudgets {
|
||||
imageBytes?: number;
|
||||
hydrationMs?: number;
|
||||
serverRenderMs?: number;
|
||||
/** Largest Contentful Paint in milliseconds. Recommended <= 2500. */
|
||||
lcpMs?: number;
|
||||
/** Interaction to Next Paint in milliseconds. Recommended <= 200. */
|
||||
inpMs?: number;
|
||||
/** Cumulative Layout Shift score. Recommended <= 0.1. */
|
||||
cls?: number;
|
||||
/** Time to First Byte in milliseconds. */
|
||||
ttfbMs?: number;
|
||||
/** Longest main-thread task in milliseconds. Recommended <= 50. */
|
||||
longTaskMs?: number;
|
||||
/** Number of client hydration boundaries on the route. */
|
||||
hydratedComponents?: number;
|
||||
/** Total request count for the initial navigation. */
|
||||
requests?: number;
|
||||
}
|
||||
interface PerformanceMeasurement {
|
||||
routeJsBytes?: number;
|
||||
@@ -3518,6 +3798,13 @@ interface PerformanceMeasurement {
|
||||
imageBytes?: number;
|
||||
hydrationMs?: number;
|
||||
serverRenderMs?: number;
|
||||
lcpMs?: number;
|
||||
inpMs?: number;
|
||||
cls?: number;
|
||||
ttfbMs?: number;
|
||||
longTaskMs?: number;
|
||||
hydratedComponents?: number;
|
||||
requests?: number;
|
||||
}
|
||||
interface BudgetViolation {
|
||||
metric: keyof PerformanceBudgets;
|
||||
@@ -3525,6 +3812,7 @@ interface BudgetViolation {
|
||||
actual: number;
|
||||
overBy: number;
|
||||
}
|
||||
declare const recommendedWebBudgets: Readonly<PerformanceBudgets>;
|
||||
declare function checkPerformanceBudgets(budgets: PerformanceBudgets, measurement: PerformanceMeasurement): BudgetViolation[];
|
||||
|
||||
interface ProblemDetails {
|
||||
@@ -3601,7 +3889,7 @@ declare function withIdempotency<T>(store: IdempotencyStore<T>, key: string, exe
|
||||
replayed: boolean;
|
||||
}>;
|
||||
|
||||
export { type ActionDefinition, ApplicationLifecycle, type AsyncSessionBackend, type Bucket, type BudgetViolation, CSRF_COOKIE, CSRF_HEADER, type CacheControlOptions, type CachePolicy, type ContentSecurityPolicyConfig, type Context, type CookieOptions, type CookieStore, type CorsConfig, type CorsOrigin, type CspDirectiveValue, type DefinedAction, type DefinedEndpoint, type DefinedLoader, type EndpointDefinition, EndpointError, type EndpointErrorBody, type FeatureFlags, type FeatureRule, type FeatureValue, type HealthCheck, type HealthCheckResult, HealthRegistry, type HstsConfig, type IdempotencyRecord, type IdempotencyStore, type LifecycleHandler, type LifecyclePhase, type LoaderDefinition, type LocalStorageSnapshot, type Middleware, type Mode, type Next, type PageComponent, type PageMeta, type PerformanceBudgets, type PerformanceMeasurement, type PermissionsPolicyConfig, type ProblemDetails, type ProblemDetailsInput, type RateLimitOptions, type RateLimitStore, type RawSocket, type RealtimeBridge, type RealtimeBus, type RealtimeConnectMeta, type RealtimeEnvelope, type RealtimeHandler, type RealtimeRegistry, type RealtimeSocket, type RequestLoggerOptions, type RequestRecord, type RequireAuthOptions, type Room, type RoomAuthInfo, type RoomClient, type RoomDefinition, type RoomHandlers, type RpcClientOptions, SESSION_USER_KEY, type SaveUploadOptions, type SavedUpload, type SchemaLike, type SecurityConfig, type SeoConfig, type ServerSentEvent, ServiceContainer, type ServiceToken, type SessionBackend, type SessionEntry, type SessionStore, type Span, type SpanRecord, type StreamResponseInit, type TFunction, TTLCache, type Target, type Tenant, type TenantMiddlewareOptions, type TenantResolver, type Tracer, type TrustedTypesConfig, UploadError, bridgeRealtime, cacheControl, checkPerformanceBudgets, collectUploads, createContext, createCorsPreflightResponse, createRealtimeRegistry, createRpcClient, createTracer, csrfProtection, csrfToken, dedupe, defaultKey, defineAction, defineEndpoint, defineFeatureFlags, defineLoader, defineRoom, escapeHtml, etag, getUser, hashPassword, isRoomDefinition, isSafeIslandName, isSafeRequestPath, isWebSocketOriginAllowed, loadSession, logIn, logOut, memoryIdempotencyStore, notModified, peerKey, problem, proxyKey, rateLimit, renderDevError, renderError, renderNotFound, renderProdError, renderStatusPage, requestId, requestLogger, requireAuth, requireTenant, resolveRequestUrl, sanitizeFilename, saveUpload, serviceToken, sessionAuth, setSessionBackend, sse, streamResponse, tenantFromSubdomain, tenantMiddleware, tenantScope, tracingMiddleware, verifyCsrf, verifyPassword, withCacheControl, withContextHeaders, withIdempotency, withSecurityHeaders, withSpan };
|
||||
export { type ActionDefinition, ApplicationLifecycle, type AsyncSessionBackend, type Bucket, type BudgetViolation, CSRF_COOKIE, CSRF_HEADER, type CacheControlOptions, type CachePolicy, type ContentSecurityPolicyConfig, type Context, type CookieOptions, type CookieStore, type CorsConfig, type CorsOrigin, type CspDirectiveValue, type CsrfProtectionOptions, type DefinedAction, type DefinedEndpoint, type DefinedLoader, type EndpointDefinition, EndpointError, type EndpointErrorBody, type FeatureFlags, type FeatureRule, type FeatureValue, type HealthCheck, type HealthCheckResult, HealthRegistry, type HstsConfig, type IdempotencyRecord, type IdempotencyStore, type LifecycleHandler, type LifecyclePhase, type LoaderDefinition, type LocalStorageSnapshot, type Middleware, type Mode, type Next, type PageComponent, type PageMeta, type PerformanceBudgets, type PerformanceMeasurement, type PermissionsPolicyConfig, type ProblemDetails, type ProblemDetailsInput, type RateLimitOptions, type RateLimitStore, type RawSocket, type RealtimeBridge, type RealtimeBus, type RealtimeConnectMeta, type RealtimeEnvelope, type RealtimeHandler, type RealtimeRegistry, type RealtimeRegistryOptions, type RealtimeSecurityOptions, type RealtimeSocket, type RequestLimitsConfig, type RequestLoggerOptions, type RequestRecord, type RequireAuthOptions, type Room, type RoomAuthInfo, type RoomClient, type RoomDefinition, type RoomHandlers, type RpcClientOptions, SESSION_USER_KEY, type SaveUploadOptions, type SavedUpload, type SchemaLike, type SecureUploadOptions, type SecurityConfig, type SeoConfig, type ServerSentEvent, ServiceContainer, type ServiceToken, type SessionBackend, type SessionEntry, type SessionPolicy, type SessionStore, type Span, type SpanRecord, type StreamResponseInit, type TFunction, TTLCache, type Target, type Tenant, type TenantMiddlewareOptions, type TenantResolver, type Tracer, type TrustedTypesConfig, UploadError, type UploadInspectionResult, type UploadInspector, type UploadScanner, bridgeRealtime, cacheControl, checkPerformanceBudgets, collectUploads, createContext, createCorsPreflightResponse, createRealtimeRegistry, createRpcClient, createTracer, csrfProtection, csrfToken, dedupe, defaultKey, defineAction, defineEndpoint, defineFeatureFlags, defineLoader, defineRoom, escapeHtml, etag, getUser, hashPassword, isRoomDefinition, isSafeIslandName, isSafeRequestPath, isWebSocketOriginAllowed, loadSession, logIn, logOut, memoryIdempotencyStore, notModified, peerKey, problem, proxyKey, randomUploadFilename, rateLimit, recommendedWebBudgets, renderDevError, renderError, renderNotFound, renderProdError, renderStatusPage, requestId, requestLogger, requireAuth, requireTenant, resolveRequestUrl, sanitizeFilename, saveUpload, saveUploadSecure, secureDownloadHeaders, serviceToken, sessionAuth, setSessionBackend, setSessionPolicy, sse, streamResponse, tenantFromSubdomain, tenantMiddleware, tenantScope, tracingMiddleware, verifyCsrf, verifyPassword, withCacheControl, withContextHeaders, withIdempotency, withSecurityHeaders, withSpan };
|
||||
```
|
||||
|
||||
---
|
||||
@@ -4359,7 +4647,34 @@ declare function tenantScope(sql: string, tenantId: unknown, dialect: Dialect, e
|
||||
};
|
||||
declare function softDeleteClause(column?: string): string;
|
||||
|
||||
export { type CursorPage, type CursorPageOptions, Db, Dialect, type Migration, Model, type ModelRef, type PageOptions, type Paginated, type QueryDef, type QueryKind, type RelationOptions, Row, appliedMigrations, applyMigrations, closeDatabases, cursorPaginate, databaseNames, generateQueriesFile, getDb, hasDb, loadMigrations, loadRelated, migrate, optimisticUpdate, paginate, parseMigration, parseQueries, registerDb, registerLazyDb, rollback, scaffoldMigration, setDb, softDeleteClause, status, tenantScope };
|
||||
interface QueryRecord {
|
||||
sql: string;
|
||||
paramsCount: number;
|
||||
durationMs: number;
|
||||
rowCount?: number;
|
||||
operation: "all" | "one" | "exec";
|
||||
duplicateCount: number;
|
||||
}
|
||||
interface QueryIssue {
|
||||
code: string;
|
||||
severity: "error" | "warning" | "info";
|
||||
message: string;
|
||||
sql: string;
|
||||
}
|
||||
interface QueryPolicy {
|
||||
slowQueryMs?: number;
|
||||
timeoutMs?: number;
|
||||
maxRows?: number;
|
||||
duplicateWarningCount?: number;
|
||||
warnSelectStar?: boolean;
|
||||
warnUnboundedSelect?: boolean;
|
||||
onQuery?: (record: QueryRecord) => void | Promise<void>;
|
||||
onIssue?: (issue: QueryIssue) => void | Promise<void>;
|
||||
}
|
||||
declare function instrumentDb(db: Db, policy?: QueryPolicy): Db;
|
||||
declare function queryOperation(sql: string): string;
|
||||
|
||||
export { type CursorPage, type CursorPageOptions, Db, Dialect, type Migration, Model, type ModelRef, type PageOptions, type Paginated, type QueryDef, type QueryIssue, type QueryKind, type QueryPolicy, type QueryRecord, type RelationOptions, Row, appliedMigrations, applyMigrations, closeDatabases, cursorPaginate, databaseNames, generateQueriesFile, getDb, hasDb, instrumentDb, loadMigrations, loadRelated, migrate, optimisticUpdate, paginate, parseMigration, parseQueries, queryOperation, registerDb, registerLazyDb, rollback, scaffoldMigration, setDb, softDeleteClause, status, tenantScope };
|
||||
```
|
||||
|
||||
---
|
||||
@@ -4786,7 +5101,7 @@ interface RuntimeDeps {
|
||||
clientRuntimes?: ClientRuntimeDefinition[];
|
||||
/** Page navigation strategy. `document` disables same-origin link interception. */
|
||||
navigation?: {
|
||||
mode?: "client" | "document";
|
||||
mode?: "auto" | "client" | "document";
|
||||
};
|
||||
/** Raw HTML appended to every page head (e.g. CDN framework links). */
|
||||
head?: string;
|
||||
@@ -4891,6 +5206,21 @@ interface GatewayApp {
|
||||
auth?: GatewayAuth;
|
||||
}
|
||||
/** Gateway-wide security controls, enforced for every app. */
|
||||
interface GatewayRequestLimits {
|
||||
maxUrlLength?: number;
|
||||
maxHeaderCount?: number;
|
||||
maxHeaderBytes?: number;
|
||||
maxQueryParameters?: number;
|
||||
maxBodyBytes?: number;
|
||||
timeoutMs?: number;
|
||||
maxConcurrent?: number;
|
||||
fetchMetadata?: boolean;
|
||||
}
|
||||
interface GatewayWebSocketSecurity {
|
||||
maxMessageBytes?: number;
|
||||
maxQueuedMessages?: number;
|
||||
allowedOrigins?: string[];
|
||||
}
|
||||
interface GatewaySecurity {
|
||||
/** Reject requests whose Host matches no app (404) instead of routing to the first. */
|
||||
trustedHostsOnly?: boolean;
|
||||
@@ -4905,6 +5235,10 @@ interface GatewaySecurity {
|
||||
forwardedHeaders?: boolean;
|
||||
/** Log each request (host → app, method, path, status). */
|
||||
accessLog?: boolean;
|
||||
/** URL, header, body, timeout, concurrency, and Fetch Metadata limits. */
|
||||
requestLimits?: GatewayRequestLimits;
|
||||
/** WebSocket origin, payload, and pre-connect queue limits. */
|
||||
websocket?: GatewayWebSocketSecurity;
|
||||
}
|
||||
interface GatewayOptions {
|
||||
port?: number;
|
||||
@@ -5762,6 +6096,95 @@ export { I18N_JS_HREF, I18N_RUNTIME, type I18nConfig, LANG_COOKIE, type LocaleFo
|
||||
|
||||
---
|
||||
|
||||
## @wrnexus/image
|
||||
|
||||
Documentation URL: https://wrnexusjs.dev/packages/image
|
||||
|
||||
# @wrnexus/image
|
||||
|
||||
Responsive image attribute generation with secure remote-host policies and audits for dimensions, LCP loading, source oversizing, transfer size, and modern formats.
|
||||
|
||||
```ts
|
||||
import { createResponsiveImage } from "@wrnexus/image";
|
||||
const attrs = createResponsiveImage({
|
||||
src: "/hero.jpg",
|
||||
alt: "Hero",
|
||||
width: 1600,
|
||||
height: 900,
|
||||
widths: [480, 960, 1600],
|
||||
sizes: "100vw",
|
||||
format: "avif",
|
||||
});
|
||||
```
|
||||
|
||||
### Exported TypeScript declarations
|
||||
|
||||
```ts
|
||||
type ImageFormat = "avif" | "webp" | "jpeg" | "png" | "original";
|
||||
interface ImageLoaderInput {
|
||||
src: string;
|
||||
width: number;
|
||||
quality?: number;
|
||||
format?: ImageFormat;
|
||||
}
|
||||
type ImageLoader = (input: ImageLoaderInput) => string;
|
||||
interface ImagePolicy {
|
||||
remoteHosts?: string[];
|
||||
allowedProtocols?: string[];
|
||||
maxWidth?: number;
|
||||
maxQuality?: number;
|
||||
}
|
||||
interface ResponsiveImageOptions extends ImagePolicy {
|
||||
src: string;
|
||||
alt: string;
|
||||
width: number;
|
||||
height: number;
|
||||
widths?: number[];
|
||||
sizes?: string;
|
||||
quality?: number;
|
||||
format?: ImageFormat;
|
||||
loading?: "eager" | "lazy";
|
||||
fetchPriority?: "high" | "low" | "auto";
|
||||
decoding?: "async" | "sync" | "auto";
|
||||
loader?: ImageLoader;
|
||||
class?: string;
|
||||
}
|
||||
interface ResponsiveImageAttributes {
|
||||
src: string;
|
||||
srcset?: string;
|
||||
sizes?: string;
|
||||
alt: string;
|
||||
width: string;
|
||||
height: string;
|
||||
loading: "eager" | "lazy";
|
||||
decoding: "async" | "sync" | "auto";
|
||||
fetchpriority?: "high" | "low" | "auto";
|
||||
class?: string;
|
||||
}
|
||||
interface ImageAuditInput {
|
||||
src: string;
|
||||
width?: number;
|
||||
height?: number;
|
||||
renderedWidth?: number;
|
||||
bytes?: number;
|
||||
loading?: string;
|
||||
fetchPriority?: string;
|
||||
isLcp?: boolean;
|
||||
}
|
||||
interface ImageAuditIssue {
|
||||
code: string;
|
||||
severity: "error" | "warning" | "info";
|
||||
message: string;
|
||||
}
|
||||
declare const defaultImageLoader: ImageLoader;
|
||||
declare function createResponsiveImage(options: ResponsiveImageOptions): ResponsiveImageAttributes;
|
||||
declare function auditImage(input: ImageAuditInput): ImageAuditIssue[];
|
||||
|
||||
export { type ImageAuditInput, type ImageAuditIssue, type ImageFormat, type ImageLoader, type ImageLoaderInput, type ImagePolicy, type ResponsiveImageAttributes, type ResponsiveImageOptions, auditImage, createResponsiveImage, defaultImageLoader };
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## @wrnexus/jwt
|
||||
|
||||
Documentation URL: https://wrnexusjs.dev/packages/jwt
|
||||
@@ -6633,6 +7056,82 @@ export { type CompleteAuthOptions, type OAuthProfile, type OAuthProvider, type O
|
||||
|
||||
---
|
||||
|
||||
## @wrnexus/observability
|
||||
|
||||
Documentation URL: https://wrnexusjs.dev/packages/observability
|
||||
|
||||
# @wrnexus/observability
|
||||
|
||||
Privacy-conscious counters, gauges, histograms, HTTP middleware, Web Vitals ingestion, browser collection, and exporter adapters. Request bodies and user identifiers are not collected by default.
|
||||
|
||||
```ts
|
||||
export default {
|
||||
observability: { enabled: true, serverTiming: true, sampleRate: 0.1, webVitals: true },
|
||||
};
|
||||
```
|
||||
|
||||
### Exported TypeScript declarations
|
||||
|
||||
```ts
|
||||
import { Context, Middleware } from '@wrnexus/core';
|
||||
export { WebVitalsClientOptions, webVitalsClient } from './client.js';
|
||||
|
||||
type MetricLabels = Record<string, string | number | boolean>;
|
||||
interface MetricPoint {
|
||||
name: string;
|
||||
type: "counter" | "gauge" | "histogram";
|
||||
value: number;
|
||||
count?: number;
|
||||
sum?: number;
|
||||
min?: number;
|
||||
max?: number;
|
||||
labels: MetricLabels;
|
||||
timestamp: number;
|
||||
}
|
||||
declare class MetricsRegistry {
|
||||
private readonly clock;
|
||||
private points;
|
||||
constructor(clock?: () => number);
|
||||
increment(name: string, value?: number, labels?: MetricLabels): void;
|
||||
gauge(name: string, value: number, labels?: MetricLabels): void;
|
||||
observe(name: string, value: number, labels?: MetricLabels): void;
|
||||
snapshot(): MetricPoint[];
|
||||
reset(): void;
|
||||
}
|
||||
|
||||
interface MetricsMiddlewareOptions {
|
||||
registry?: MetricsRegistry;
|
||||
routeLabel?: (ctx: Context) => string;
|
||||
includePath?: boolean;
|
||||
}
|
||||
declare function metricsMiddleware(options?: MetricsMiddlewareOptions): Middleware;
|
||||
interface WebVitalRecord {
|
||||
name: "LCP" | "INP" | "CLS" | "FCP" | "TTFB";
|
||||
value: number;
|
||||
rating?: "good" | "needs-improvement" | "poor";
|
||||
route?: string;
|
||||
navigationType?: string;
|
||||
}
|
||||
interface WebVitalsHandlerOptions {
|
||||
registry?: MetricsRegistry;
|
||||
onRecord?: (record: WebVitalRecord, request: Request) => void | Promise<void>;
|
||||
maxBodyBytes?: number;
|
||||
}
|
||||
declare function createWebVitalsHandler(options?: WebVitalsHandlerOptions): (request: Request) => Promise<Response>;
|
||||
interface MetricExporter {
|
||||
export(points: readonly MetricPoint[]): Promise<void> | void;
|
||||
}
|
||||
declare function createHttpMetricExporter(endpoint: string, options?: {
|
||||
headers?: HeadersInit;
|
||||
fetch?: typeof fetch;
|
||||
}): MetricExporter;
|
||||
declare const defaultMetrics: MetricsRegistry;
|
||||
|
||||
export { type MetricExporter, type MetricLabels, type MetricPoint, type MetricsMiddlewareOptions, MetricsRegistry, type WebVitalRecord, type WebVitalsHandlerOptions, createHttpMetricExporter, createWebVitalsHandler, defaultMetrics, metricsMiddleware };
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## @wrnexus/plugin
|
||||
|
||||
Documentation URL: https://wrnexusjs.dev/packages/plugin
|
||||
@@ -7655,6 +8154,62 @@ export { type ComponentRef, type ExternalRouteDefinition, type NamedRoute, type
|
||||
|
||||
---
|
||||
|
||||
## @wrnexus/security
|
||||
|
||||
Documentation URL: https://wrnexusjs.dev/packages/security
|
||||
|
||||
# @wrnexus/security
|
||||
|
||||
Secure-by-default utilities for WRNexusJS: bounded HTML-safe serialization, prototype-pollution rejection, URL policy, secure cookies, request hardening, security presets, and SSRF-safe remote fetches.
|
||||
|
||||
```ts
|
||||
import { safeFetch, securityPreset, setSecureCookie } from "@wrnexus/security";
|
||||
|
||||
export default { security: securityPreset("strict") };
|
||||
const response = await safeFetch(remoteUrl, { allowedHosts: ["api.example.com"] });
|
||||
setSecureCookie(ctx, "__Host-session", sessionId);
|
||||
```
|
||||
|
||||
### Exported TypeScript declarations
|
||||
|
||||
```ts
|
||||
export { S as SafeFetchOptions, a as SafeUrlPolicy, i as isPrivateAddress, b as isSafeUrl, s as safeFetch, c as sanitizeUrl, v as validateUrl } from './fetch-DNyX0J_D.js';
|
||||
export { SecureSerializeOptions, secureJsonStringify, serializeForHtml } from './serialization.js';
|
||||
import { CookieOptions, Context, RequestLimitsConfig, Middleware, SecurityConfig } from '@wrnexus/core';
|
||||
export { TrustedHtmlPolicy, TrustedHtmlValue, createTrustedHtml, isTrustedHtml, unwrapTrustedHtml } from './trusted-html.js';
|
||||
|
||||
declare class SecurityError extends Error {
|
||||
readonly code: string;
|
||||
readonly status: number;
|
||||
constructor(code: string, message: string, status?: number, options?: ErrorOptions);
|
||||
}
|
||||
|
||||
interface SafeObjectOptions {
|
||||
maxDepth?: number;
|
||||
maxKeys?: number;
|
||||
allowInstances?: boolean;
|
||||
}
|
||||
declare function isDangerousObjectKey(key: string): boolean;
|
||||
declare function assertSafeObject(value: unknown, options?: SafeObjectOptions): void;
|
||||
declare function safeMerge<T extends Record<string, unknown>>(target: T, ...sources: Array<Record<string, unknown> | undefined | null>): T;
|
||||
|
||||
interface SecureCookieOptions extends CookieOptions {
|
||||
hostOnly?: boolean;
|
||||
}
|
||||
declare function secureCookieOptions(ctx: Pick<Context, "url">, options?: SecureCookieOptions): CookieOptions;
|
||||
declare function setSecureCookie(ctx: Pick<Context, "url" | "cookies">, name: string, value: string, options?: SecureCookieOptions): void;
|
||||
|
||||
type RequestHardeningOptions = RequestLimitsConfig;
|
||||
declare function requestHardening(options?: RequestHardeningOptions): Middleware;
|
||||
|
||||
type SecurityPreset = "balanced" | "strict" | "api";
|
||||
declare function securityPreset(preset?: SecurityPreset): SecurityConfig;
|
||||
|
||||
export { type RequestHardeningOptions, type SafeObjectOptions, type SecureCookieOptions, SecurityError, type SecurityPreset, assertSafeObject, isDangerousObjectKey, requestHardening, safeMerge, secureCookieOptions, securityPreset, setSecureCookie };
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## @wrnexus/ssr
|
||||
|
||||
Documentation URL: https://wrnexusjs.dev/packages/ssr
|
||||
@@ -8516,6 +9071,10 @@ interface ObservabilityConfig {
|
||||
sampleRate?: number;
|
||||
exporter?: "console" | "otlp" | "none";
|
||||
endpoint?: string;
|
||||
/** Collect privacy-preserving Core Web Vitals from real browsers. */
|
||||
webVitals?: boolean;
|
||||
/** Same-origin endpoint receiving Web Vitals. */
|
||||
webVitalsEndpoint?: string;
|
||||
}
|
||||
interface TenancyConfig {
|
||||
mode?: "subdomain" | "domain" | "path" | "custom";
|
||||
@@ -8532,11 +9091,13 @@ interface BuildConfig {
|
||||
}
|
||||
interface NavigationConfig {
|
||||
/**
|
||||
* `client` progressively enhances same-origin links with in-place page swaps.
|
||||
* `auto` (default) omits navigation JavaScript from fully static pages and
|
||||
* progressively enhances routes that already need browser behavior.
|
||||
* `client` always enhances same-origin links with in-place page swaps.
|
||||
* `document` keeps normal browser navigation so every route performs a fresh
|
||||
* server-rendered document request.
|
||||
*/
|
||||
mode?: "client" | "document";
|
||||
mode?: "auto" | "client" | "document";
|
||||
}
|
||||
interface ImportsConfig {
|
||||
mode?: "legacy" | "compatible" | "explicit";
|
||||
@@ -8736,6 +9297,14 @@ interface ContrastResult {
|
||||
level: "fail" | "aa-large" | "aa" | "aaa";
|
||||
}
|
||||
declare function contrast(foreground: string, background: string): ContrastResult | null;
|
||||
interface CssPerformanceAuditIssue {
|
||||
code: string;
|
||||
severity: "error" | "warning" | "info";
|
||||
message: string;
|
||||
line?: number;
|
||||
}
|
||||
/** Detect CSS patterns that commonly increase style, paint, or compositing cost. */
|
||||
declare function auditCssPerformance(source: string): CssPerformanceAuditIssue[];
|
||||
|
||||
/**
|
||||
* @wrnexus/styles — global stylesheet pipeline + app config.
|
||||
@@ -8755,7 +9324,7 @@ declare function contrast(foreground: string, background: string): ContrastResul
|
||||
*/
|
||||
declare function renderStyles(ctx: StyleProcessContext, styles?: StylesConfig): Promise<string>;
|
||||
|
||||
export { ACCENT_COOKIE, type AppConfig, type BuildConfig, type ConfigIssue, type ContrastResult, type CssTokenAudit, type CustomThemePalette, DEFAULT_THEMES, type DevToolbarConfig, type ExperimentalConfig, type ExplainedConfig, type FontConfig, type FontDisplay, type GoogleFont, type LocalFontFace, type MobileConfig, type Mode, type NavigationConfig, type ObservabilityConfig, type PerformanceConfig, type PwaConfig, type ResolvedTheme, type StyleProcessContext, type StyleSource, type StylesConfig, type Mode as StylesMode, THEME_COOKIE, THEME_CSS_HREF, THEME_JS_HREF, THEME_PALETTES, THEME_PALETTE_NAMES, type TenancyConfig, type ThemeAccentConfig, type ThemeConfig, type ThemePaletteName, type ThemeTokens, auditWireTokens, bundleCss, contrast, defineConfig, explainAppConfig, findStyleEntry, fontCspSources, headToString, loadAppConfig, loadEnv, loadRawConfig, normalizeStyleSources, renderFontHead, renderProductionFontHead, renderStyles, renderThemeCss, renderThemeRuntime, resolveAccentName, resolveProfile, resolveThemeConfig, resolveThemeName, tailwindSourceDirectives, validateAppConfig };
|
||||
export { ACCENT_COOKIE, type AppConfig, type BuildConfig, type ConfigIssue, type ContrastResult, type CssPerformanceAuditIssue, type CssTokenAudit, type CustomThemePalette, DEFAULT_THEMES, type DevToolbarConfig, type ExperimentalConfig, type ExplainedConfig, type FontConfig, type FontDisplay, type GoogleFont, type LocalFontFace, type MobileConfig, type Mode, type NavigationConfig, type ObservabilityConfig, type PerformanceConfig, type PwaConfig, type ResolvedTheme, type StyleProcessContext, type StyleSource, type StylesConfig, type Mode as StylesMode, THEME_COOKIE, THEME_CSS_HREF, THEME_JS_HREF, THEME_PALETTES, THEME_PALETTE_NAMES, type TenancyConfig, type ThemeAccentConfig, type ThemeConfig, type ThemePaletteName, type ThemeTokens, auditCssPerformance, auditWireTokens, bundleCss, contrast, defineConfig, explainAppConfig, findStyleEntry, fontCspSources, headToString, loadAppConfig, loadEnv, loadRawConfig, normalizeStyleSources, renderFontHead, renderProductionFontHead, renderStyles, renderThemeCss, renderThemeRuntime, resolveAccentName, resolveProfile, resolveThemeConfig, resolveThemeName, tailwindSourceDirectives, validateAppConfig };
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
+66
-36
@@ -1,6 +1,6 @@
|
||||
# WRNexusJS documentation 0.6.0
|
||||
# WRNexusJS documentation 0.7.0
|
||||
|
||||
Status: Private Developer Preview. This site documents 33 release-aligned packages.
|
||||
Status: Private Developer Preview. This site documents 38 release-aligned packages.
|
||||
|
||||
# WrNexus
|
||||
|
||||
@@ -289,205 +289,235 @@ wrnexus eject <component> # copy a Wire UI component's .wrn into app/compone
|
||||
|
||||
## @wrnexus/ai
|
||||
|
||||
- @wrnexus/ai 0.6.0
|
||||
- @wrnexus/ai 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/ai
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/auth
|
||||
|
||||
- @wrnexus/auth 0.6.0
|
||||
- @wrnexus/auth 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/auth
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/authz
|
||||
|
||||
- @wrnexus/authz 0.6.0
|
||||
- @wrnexus/authz 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/authz
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/benchmark
|
||||
|
||||
- @wrnexus/benchmark 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/benchmark
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/cache
|
||||
|
||||
- @wrnexus/cache 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/cache
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/captcha
|
||||
|
||||
- @wrnexus/captcha 0.6.0
|
||||
- @wrnexus/captcha 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/captcha
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/cli
|
||||
|
||||
- @wrnexus/cli 0.6.0
|
||||
- @wrnexus/cli 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/cli
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/compiler
|
||||
|
||||
- @wrnexus/compiler 0.6.0
|
||||
- @wrnexus/compiler 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/compiler
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/core
|
||||
|
||||
- @wrnexus/core 0.6.0
|
||||
- @wrnexus/core 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/core
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/csr
|
||||
|
||||
- @wrnexus/csr 0.6.0
|
||||
- @wrnexus/csr 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/csr
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/db
|
||||
|
||||
- @wrnexus/db 0.6.0
|
||||
- @wrnexus/db 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/db
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/dev-server
|
||||
|
||||
- @wrnexus/dev-server 0.6.0
|
||||
- @wrnexus/dev-server 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/dev-server
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/dev-toolbar
|
||||
|
||||
- @wrnexus/dev-toolbar 0.6.0
|
||||
- @wrnexus/dev-toolbar 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/dev-toolbar
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/encryption
|
||||
|
||||
- @wrnexus/encryption 0.6.0
|
||||
- @wrnexus/encryption 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/encryption
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/helpers
|
||||
|
||||
- @wrnexus/helpers 0.6.0
|
||||
- @wrnexus/helpers 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/helpers
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/i18n
|
||||
|
||||
- @wrnexus/i18n 0.6.0
|
||||
- @wrnexus/i18n 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/i18n
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/image
|
||||
|
||||
- @wrnexus/image 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/image
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/jwt
|
||||
|
||||
- @wrnexus/jwt 0.6.0
|
||||
- @wrnexus/jwt 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/jwt
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/mobile
|
||||
|
||||
- @wrnexus/mobile 0.6.0
|
||||
- @wrnexus/mobile 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/mobile
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/native
|
||||
|
||||
- @wrnexus/native 0.6.0
|
||||
- @wrnexus/native 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/native
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/oauth
|
||||
|
||||
- @wrnexus/oauth 0.6.0
|
||||
- @wrnexus/oauth 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/oauth
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/observability
|
||||
|
||||
- @wrnexus/observability 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/observability
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/plugin
|
||||
|
||||
- @wrnexus/plugin 0.6.0
|
||||
- @wrnexus/plugin 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/plugin
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/pubsub
|
||||
|
||||
- @wrnexus/pubsub 0.6.0
|
||||
- @wrnexus/pubsub 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/pubsub
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/queue
|
||||
|
||||
- @wrnexus/queue 0.6.0
|
||||
- @wrnexus/queue 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/queue
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/reactive
|
||||
|
||||
- @wrnexus/reactive 0.6.0
|
||||
- @wrnexus/reactive 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/reactive
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/router
|
||||
|
||||
- @wrnexus/router 0.6.0
|
||||
- @wrnexus/router 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/router
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/security
|
||||
|
||||
- @wrnexus/security 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/security
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/ssr
|
||||
|
||||
- @wrnexus/ssr 0.6.0
|
||||
- @wrnexus/ssr 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/ssr
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/store
|
||||
|
||||
- @wrnexus/store 0.6.0
|
||||
- @wrnexus/store 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/store
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/styles
|
||||
|
||||
- @wrnexus/styles 0.6.0
|
||||
- @wrnexus/styles 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/styles
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/syntax
|
||||
|
||||
- @wrnexus/syntax 0.6.0
|
||||
- @wrnexus/syntax 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/syntax
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/test
|
||||
|
||||
- @wrnexus/test 0.6.0
|
||||
- @wrnexus/test 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/test
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/tracking
|
||||
|
||||
- @wrnexus/tracking 0.6.0
|
||||
- @wrnexus/tracking 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/tracking
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/typecheck
|
||||
|
||||
- @wrnexus/typecheck 0.6.0
|
||||
- @wrnexus/typecheck 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/typecheck
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/ui
|
||||
|
||||
- @wrnexus/ui 0.6.0
|
||||
- @wrnexus/ui 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/ui
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/uploader
|
||||
|
||||
- @wrnexus/uploader 0.6.0
|
||||
- @wrnexus/uploader 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/uploader
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
## @wrnexus/validation
|
||||
|
||||
- @wrnexus/validation 0.6.0
|
||||
- @wrnexus/validation 0.7.0
|
||||
- Documentation: https://wrnexusjs.dev/packages/validation
|
||||
- README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt
|
||||
|
||||
# UI component catalog
|
||||
|
||||
The installed @wrnexus/ui 0.6.0 release contains 108 documented components. The contracts below include every mount name, purpose, prop type, required/default status, slot, and event. Interactive examples live only on the dedicated component showcase.
|
||||
The installed @wrnexus/ui 0.7.0 release contains 108 documented components. The contracts below include every mount name, purpose, prop type, required/default status, slot, and event. Interactive examples live only on the dedicated component showcase.
|
||||
|
||||
### Accordion
|
||||
Showcase: https://component.wrnexusjs.dev/
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://wrnexusjs.dev/</loc></url><url><loc>https://wrnexusjs.dev/access</loc></url><url><loc>https://wrnexusjs.dev/getting-started</loc></url><url><loc>https://wrnexusjs.dev/tutorial</loc></url><url><loc>https://wrnexusjs.dev/architecture</loc></url><url><loc>https://wrnexusjs.dev/language</loc></url><url><loc>https://wrnexusjs.dev/packages</loc></url><url><loc>https://wrnexusjs.dev/guides/project-structure</loc></url><url><loc>https://wrnexusjs.dev/guides/routing</loc></url><url><loc>https://wrnexusjs.dev/guides/pages-and-components</loc></url><url><loc>https://wrnexusjs.dev/guides/server-data</loc></url><url><loc>https://wrnexusjs.dev/guides/api-routes</loc></url><url><loc>https://wrnexusjs.dev/guides/middleware</loc></url><url><loc>https://wrnexusjs.dev/guides/forms-and-validation</loc></url><url><loc>https://wrnexusjs.dev/guides/authentication</loc></url><url><loc>https://wrnexusjs.dev/guides/authorization</loc></url><url><loc>https://wrnexusjs.dev/guides/security</loc></url><url><loc>https://wrnexusjs.dev/guides/database</loc></url><url><loc>https://wrnexusjs.dev/guides/uploads</loc></url><url><loc>https://wrnexusjs.dev/guides/realtime</loc></url><url><loc>https://wrnexusjs.dev/guides/pubsub</loc></url><url><loc>https://wrnexusjs.dev/guides/queues</loc></url><url><loc>https://wrnexusjs.dev/guides/testing</loc></url><url><loc>https://wrnexusjs.dev/guides/workspaces-and-gateway</loc></url><url><loc>https://wrnexusjs.dev/guides/deployment</loc></url><url><loc>https://wrnexusjs.dev/guides/configuration-and-profiles</loc></url><url><loc>https://wrnexusjs.dev/guides/i18n-and-themes</loc></url><url><loc>https://wrnexusjs.dev/guides/mobile</loc></url><url><loc>https://wrnexusjs.dev/guides/observability</loc></url><url><loc>https://wrnexusjs.dev/guides/upgrading</loc></url><url><loc>https://wrnexusjs.dev/guides/troubleshooting</loc></url><url><loc>https://wrnexusjs.dev/examples</loc></url><url><loc>https://wrnexusjs.dev/showcase</loc></url><url><loc>https://wrnexusjs.dev/benchmarks</loc></url><url><loc>https://wrnexusjs.dev/roadmap</loc></url><url><loc>https://wrnexusjs.dev/changelog</loc></url><url><loc>https://wrnexusjs.dev/releases/0.6.0</loc></url><url><loc>https://wrnexusjs.dev/security</loc></url><url><loc>https://wrnexusjs.dev/support</loc></url><url><loc>https://wrnexusjs.dev/license</loc></url><url><loc>https://wrnexusjs.dev/search</loc></url><url><loc>https://wrnexusjs.dev/404</loc></url><url><loc>https://wrnexusjs.dev/packages/ai</loc></url><url><loc>https://wrnexusjs.dev/packages/auth</loc></url><url><loc>https://wrnexusjs.dev/packages/authz</loc></url><url><loc>https://wrnexusjs.dev/packages/captcha</loc></url><url><loc>https://wrnexusjs.dev/packages/cli</loc></url><url><loc>https://wrnexusjs.dev/packages/compiler</loc></url><url><loc>https://wrnexusjs.dev/packages/core</loc></url><url><loc>https://wrnexusjs.dev/packages/csr</loc></url><url><loc>https://wrnexusjs.dev/packages/db</loc></url><url><loc>https://wrnexusjs.dev/packages/dev-server</loc></url><url><loc>https://wrnexusjs.dev/packages/dev-toolbar</loc></url><url><loc>https://wrnexusjs.dev/packages/encryption</loc></url><url><loc>https://wrnexusjs.dev/packages/helpers</loc></url><url><loc>https://wrnexusjs.dev/packages/i18n</loc></url><url><loc>https://wrnexusjs.dev/packages/jwt</loc></url><url><loc>https://wrnexusjs.dev/packages/mobile</loc></url><url><loc>https://wrnexusjs.dev/packages/native</loc></url><url><loc>https://wrnexusjs.dev/packages/oauth</loc></url><url><loc>https://wrnexusjs.dev/packages/plugin</loc></url><url><loc>https://wrnexusjs.dev/packages/pubsub</loc></url><url><loc>https://wrnexusjs.dev/packages/queue</loc></url><url><loc>https://wrnexusjs.dev/packages/reactive</loc></url><url><loc>https://wrnexusjs.dev/packages/router</loc></url><url><loc>https://wrnexusjs.dev/packages/ssr</loc></url><url><loc>https://wrnexusjs.dev/packages/store</loc></url><url><loc>https://wrnexusjs.dev/packages/styles</loc></url><url><loc>https://wrnexusjs.dev/packages/syntax</loc></url><url><loc>https://wrnexusjs.dev/packages/test</loc></url><url><loc>https://wrnexusjs.dev/packages/tracking</loc></url><url><loc>https://wrnexusjs.dev/packages/typecheck</loc></url><url><loc>https://wrnexusjs.dev/packages/ui</loc></url><url><loc>https://wrnexusjs.dev/packages/uploader</loc></url><url><loc>https://wrnexusjs.dev/packages/validation</loc></url></urlset>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://wrnexusjs.dev/</loc></url><url><loc>https://wrnexusjs.dev/access</loc></url><url><loc>https://wrnexusjs.dev/getting-started</loc></url><url><loc>https://wrnexusjs.dev/tutorial</loc></url><url><loc>https://wrnexusjs.dev/architecture</loc></url><url><loc>https://wrnexusjs.dev/language</loc></url><url><loc>https://wrnexusjs.dev/packages</loc></url><url><loc>https://wrnexusjs.dev/guides/project-structure</loc></url><url><loc>https://wrnexusjs.dev/guides/routing</loc></url><url><loc>https://wrnexusjs.dev/guides/pages-and-components</loc></url><url><loc>https://wrnexusjs.dev/guides/server-data</loc></url><url><loc>https://wrnexusjs.dev/guides/api-routes</loc></url><url><loc>https://wrnexusjs.dev/guides/middleware</loc></url><url><loc>https://wrnexusjs.dev/guides/forms-and-validation</loc></url><url><loc>https://wrnexusjs.dev/guides/authentication</loc></url><url><loc>https://wrnexusjs.dev/guides/authorization</loc></url><url><loc>https://wrnexusjs.dev/guides/security</loc></url><url><loc>https://wrnexusjs.dev/guides/database</loc></url><url><loc>https://wrnexusjs.dev/guides/uploads</loc></url><url><loc>https://wrnexusjs.dev/guides/realtime</loc></url><url><loc>https://wrnexusjs.dev/guides/pubsub</loc></url><url><loc>https://wrnexusjs.dev/guides/queues</loc></url><url><loc>https://wrnexusjs.dev/guides/testing</loc></url><url><loc>https://wrnexusjs.dev/guides/workspaces-and-gateway</loc></url><url><loc>https://wrnexusjs.dev/guides/deployment</loc></url><url><loc>https://wrnexusjs.dev/guides/configuration-and-profiles</loc></url><url><loc>https://wrnexusjs.dev/guides/i18n-and-themes</loc></url><url><loc>https://wrnexusjs.dev/guides/mobile</loc></url><url><loc>https://wrnexusjs.dev/guides/observability</loc></url><url><loc>https://wrnexusjs.dev/guides/upgrading</loc></url><url><loc>https://wrnexusjs.dev/guides/troubleshooting</loc></url><url><loc>https://wrnexusjs.dev/examples</loc></url><url><loc>https://wrnexusjs.dev/showcase</loc></url><url><loc>https://wrnexusjs.dev/benchmarks</loc></url><url><loc>https://wrnexusjs.dev/roadmap</loc></url><url><loc>https://wrnexusjs.dev/changelog</loc></url><url><loc>https://wrnexusjs.dev/releases/0.7.0</loc></url><url><loc>https://wrnexusjs.dev/security</loc></url><url><loc>https://wrnexusjs.dev/support</loc></url><url><loc>https://wrnexusjs.dev/license</loc></url><url><loc>https://wrnexusjs.dev/search</loc></url><url><loc>https://wrnexusjs.dev/404</loc></url><url><loc>https://wrnexusjs.dev/packages/ai</loc></url><url><loc>https://wrnexusjs.dev/packages/auth</loc></url><url><loc>https://wrnexusjs.dev/packages/authz</loc></url><url><loc>https://wrnexusjs.dev/packages/benchmark</loc></url><url><loc>https://wrnexusjs.dev/packages/cache</loc></url><url><loc>https://wrnexusjs.dev/packages/captcha</loc></url><url><loc>https://wrnexusjs.dev/packages/cli</loc></url><url><loc>https://wrnexusjs.dev/packages/compiler</loc></url><url><loc>https://wrnexusjs.dev/packages/core</loc></url><url><loc>https://wrnexusjs.dev/packages/csr</loc></url><url><loc>https://wrnexusjs.dev/packages/db</loc></url><url><loc>https://wrnexusjs.dev/packages/dev-server</loc></url><url><loc>https://wrnexusjs.dev/packages/dev-toolbar</loc></url><url><loc>https://wrnexusjs.dev/packages/encryption</loc></url><url><loc>https://wrnexusjs.dev/packages/helpers</loc></url><url><loc>https://wrnexusjs.dev/packages/i18n</loc></url><url><loc>https://wrnexusjs.dev/packages/image</loc></url><url><loc>https://wrnexusjs.dev/packages/jwt</loc></url><url><loc>https://wrnexusjs.dev/packages/mobile</loc></url><url><loc>https://wrnexusjs.dev/packages/native</loc></url><url><loc>https://wrnexusjs.dev/packages/oauth</loc></url><url><loc>https://wrnexusjs.dev/packages/observability</loc></url><url><loc>https://wrnexusjs.dev/packages/plugin</loc></url><url><loc>https://wrnexusjs.dev/packages/pubsub</loc></url><url><loc>https://wrnexusjs.dev/packages/queue</loc></url><url><loc>https://wrnexusjs.dev/packages/reactive</loc></url><url><loc>https://wrnexusjs.dev/packages/router</loc></url><url><loc>https://wrnexusjs.dev/packages/security</loc></url><url><loc>https://wrnexusjs.dev/packages/ssr</loc></url><url><loc>https://wrnexusjs.dev/packages/store</loc></url><url><loc>https://wrnexusjs.dev/packages/styles</loc></url><url><loc>https://wrnexusjs.dev/packages/syntax</loc></url><url><loc>https://wrnexusjs.dev/packages/test</loc></url><url><loc>https://wrnexusjs.dev/packages/tracking</loc></url><url><loc>https://wrnexusjs.dev/packages/typecheck</loc></url><url><loc>https://wrnexusjs.dev/packages/ui</loc></url><url><loc>https://wrnexusjs.dev/packages/uploader</loc></url><url><loc>https://wrnexusjs.dev/packages/validation</loc></url></urlset>
|
||||
|
||||
Reference in New Issue
Block a user