Page not found
The address may be outdated or misspelled. No private or duplicate route is exposed here.
From b536b57447cc10e094e7a3f4403c75226b7231dd Mon Sep 17 00:00:00 2001
From: Ajay Ghanwat The address may be outdated or misspelled. No private or duplicate route is exposed here. WRNexusJS 0.8.8 packages are not available from the public npm registry. Installation requires approval and private registry credentials supplied by WorkRoot. Never paste registry tokens into source control, issue reports, or support messages. Access approval, response time, licensing terms, and support level remain owner-controlled. This site does not collect access requests directly. WRNexusJS 0.8.72 packages are not available from the public npm registry. Installation requires approval and private registry credentials supplied by WorkRoot. Never paste registry tokens into source control, issue reports, or support messages. Access approval, response time, licensing terms, and support level remain owner-controlled. This site does not collect access requests directly. WRNexusJS is Bun-native and SSR-first. File discovery maps pages and API handlers; middleware enriches or short-circuits a request; the compiler turns Validation happens at trust boundaries. Session authentication establishes identity; authorization makes resource decisions. CSP, Trusted Types, CSRF, upload checks, WebSocket origins, request limits, and output escaping are layered controls—not substitutes for application policy. Rooms are process-local unless connected through pub/sub. Redis-backed pub/sub distributes events. Queue durability depends on the selected driver and must be evaluated explicitly. The gateway can dispatch multiple applications while preserving route, component, asset, config, and session boundaries. Validate host routing and isolation before production. Mobile compatibility bridges SSR-safe Capacitor capabilities; native route generation is experimental and is not general web portability. Test each target platform. WRNexusJS is Bun-native and SSR-first. File discovery maps pages and API handlers; middleware enriches or short-circuits a request; the compiler turns Validation happens at trust boundaries. Session authentication establishes identity; authorization makes resource decisions. CSP, Trusted Types, CSRF, upload checks, WebSocket origins, request limits, and output escaping are layered controls—not substitutes for application policy. Rooms are process-local unless connected through pub/sub. Redis-backed pub/sub distributes events. Queue durability depends on the selected driver and must be evaluated explicitly. The gateway can dispatch multiple applications while preserving route, component, asset, config, and session boundaries. Validate host routing and isolation before production. Mobile compatibility bridges SSR-safe Capacitor capabilities; native route generation is experimental and is not general web portability. Test each target platform. No comparative speed claims are published. A valid baseline must record scripts, commit, Bun/framework versions, hardware, OS, warmup, samples, workload, raw results, median, percentiles, memory, HTML size, browser JavaScript size, and run date. The roadmap starts with WRNexusJS-only measurements before any maintained equivalent-workload comparison. Documentation is aligned to all 47 installed packages. This release adds Run The packages use semantic-looking versions, but a formal compatibility and old-release support policy has not been approved. Preview consumers should treat minor releases as potentially requiring migration review. Documentation is aligned to all 47 installed packages. This release adds Run The packages use semantic-looking versions, but a formal compatibility and old-release support policy has not been approved. Preview consumers should treat minor releases as potentially requiring migration review. Examples are tied to installed 0.8.8 package documentation. The focused snippets in guides are source-verified; standalone runnable projects and CI compilation are tracked as remaining work. Examples are tied to installed 0.8.72 package documentation. The focused snippets in guides are source-verified; standalone runnable projects and CI compilation are tracked as remaining work. This path creates a server-rendered page, validated API route, middleware, and realtime next step. It requires approved registry access and Bun 1.3.x; this site was verified with Bun 1.3.14. This path creates a server-rendered page, validated API route, middleware, and realtime next step. It requires approved registry access and Bun 1.3.x; this site was verified with Bun 1.3.14. Next: deployment, database, authentication, and workspaces. Export GET, POST, PUT, PATCH, or DELETE from app/api files. Validate request bodies, enforce authentication and authorization, cap request sizes, and return Web Responses. Validate a mutation and return an explicit HTTP result. Export GET, POST, PUT, PATCH, or DELETE from app/api files. Validate request bodies, enforce authentication and authorization, cap request sizes, and return Web Responses. Validate a mutation and return an explicit HTTP result. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Configure session authentication, log users in through supported auth helpers, and read identity from context. Cookie flags, rotation, expiry, and secret storage remain deployment responsibilities. Require an authenticated session in middleware and redirect browser requests to login. Configure session authentication, log users in through supported auth helpers, and read identity from context. Cookie flags, rotation, expiry, and secret storage remain deployment responsibilities. Require an authenticated session in middleware and redirect browser requests to login. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Authentication identifies; authorization decides. Enforce permissions in server routes and policies, including object ownership. UI hiding is never an authorization boundary. Check the exact permission at the mutation boundary; hiding UI is only a convenience. Authentication identifies; authorization decides. Enforce permissions in server routes and policies, including object ownership. UI hiding is never an authorization boundary. Check the exact permission at the mutation boundary; hiding UI is only a convenience. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support wrnexus.config.ts owns styles, SEO, security, data, mobile, fonts, and profiles. Keep secrets in validated environment variables and review merged production configuration. Keep shared defaults at the root and make production differences explicit. wrnexus.config.ts owns styles, SEO, security, data, mobile, fonts, and profiles. Keep secrets in validated environment variables and review merged production configuration. Keep shared defaults at the root and make production differences explicit. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Configure SQLite or the installed supported driver, keep queries in named SQL blocks, generate typed functions, and apply migrations before traffic. Back up data and test rollback independently. Create a migration from models, apply it, and regenerate typed database functions. Configure SQLite or the installed supported driver, keep queries in named SQL blocks, generate typed functions, and apply migrations before traffic. Back up data and test rollback independently. Create a migration from models, apply it, and regenerate typed database functions. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Run bun run build, apply migrations, and start dist/server.js with Bun. Configure TLS, proxy trust, environment validation, health checks, graceful restarts, logs, backups, and restrictive security headers. Build once, apply migrations before traffic, and run the immutable Bun server artifact. Run bun run build, apply migrations, and start dist/server.js with Bun. Configure TLS, proxy trust, environment validation, health checks, graceful restarts, logs, backups, and restrictive security headers. Build once, apply migrations before traffic, and run the immutable Bun server artifact. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Define a v.object schema, use data-schema on the form, show field errors with data-error, and always call parseBody on the server. refine is server-only. Use the same named schema in the browser form and authoritative API handler. Define a v.object schema, use data-schema on the form, show field errors with data-error, and always call parseBody on the server. refine is server-only. Use the same named schema in the browser form and authoritative API handler. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support This walkthrough builds a small team portal. Public visitors can read the home and pricing pages, users can sign in, and the dashboard separates ordinary members from administrators. Every authorization decision remains on the server. This walkthrough builds a small team portal. Public visitors can read the home and pricing pages, users can sign in, and the dashboard separates ordinary members from administrators. Every authorization decision remains on the server. Tests should prove anonymous d
Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Store locale JSON under app/locales and use translation directives. Themes resolve CSS tokens; ensure contrast, system preference behavior, persistence, and non-color cues. Configure one default locale and theme, then reference translation keys in server-rendered markup. Store locale JSON under app/locales and use translation directives. Themes resolve CSS tokens; ensure contrast, system preference behavior, persistence, and non-color cues. Configure one default locale and theme, then reference translation keys in server-rendered markup. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Middleware receives context and next. Return next() to continue or return a Response to stop. Put request limits and trust-boundary controls before business logic. Add a request identifier and reject unsupported methods before application handlers run. Middleware receives context and next. Return next() to continue or return a Response to stop. Put request limits and trust-boundary controls before business logic. Add a request identifier and reject unsupported methods before application handlers run. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Mobile capabilities are experimental in this preview. Test Capacitor permissions and lifecycle on each platform; do not assume every .wrn or browser API converts to native. Generate the mobile surface, compile it, and inspect supported native capabilities before relying on one. Mobile capabilities are experimental in this preview. Test Capacitor permissions and lifecycle on each platform; do not assume every .wrn or browser API converts to native. Generate the mobile surface, compile it, and inspect supported native capabilities before relying on one. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Use tracking middleware and sinks with redaction, sampling, stable request identifiers, alert ownership, and retention limits. Never capture registry tokens or session secrets. Redact credentials at the sink boundary and attach a stable request identifier. Use tracking middleware and sinks with redaction, sampling, stable request identifiers, alert ownership, and retention limits. Never capture registry tokens or session secrets. Redact credentials at the sink boundary and attach a stable request identifier. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Pages are routable, components are reusable, and layouts provide shared slots. Mount a component with data-component and keep browser state scoped and minimal. Declare the reusable contract in a component, then pass data from the owning page. Pages are routable, components are reusable, and layouts provide shared slots. Mount a component with data-component and keep browser state scoped and minimal. Declare the reusable contract in a component, then pass data from the owning page. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Pages, components, layouts, APIs, middleware, schemas, database files, locales, realtime rooms, and styles live under app. Never edit app/routes.gen.ts, .wrnexus, or dist by hand. Generate files through the CLI so routes and application types stay synchronized. Pages, components, layouts, APIs, middleware, schemas, database files, locales, realtime rooms, and styles live under app. Never edit app/routes.gen.ts, .wrnexus, or dist by hand. Generate files through the CLI so routes and application types stay synchronized. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support The in-process driver cannot cross processes. Use Redis where instances must share events, define channel ownership, and design for reconnects and duplicate delivery. Use Redis when events must cross processes; use a namespaced channel contract. The in-process driver cannot cross processes. Use Redis where instances must share events, define channel ownership, and design for reconnects and duplicate delivery. Use Redis when events must cross processes; use a namespaced channel contract. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Queue behavior is preview-level. Treat in-process work as non-durable, make handlers idempotent, cap retries, record failures, and choose a production persistence strategy. Make jobs idempotent and bound retry behavior before processing external effects. Queue behavior is preview-level. Treat in-process work as non-durable, make handlers idempotent, cap retries, record failures, and choose a production persistence strategy. Make jobs idempotent and bound retry behavior before processing external effects. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support defineRoom handles connection and messages. Validate message shapes, authorize subscriptions, restrict origins, bound payloads, and use pub/sub to scale across processes. Authorize room membership and validate every incoming message before broadcasting. defineRoom handles connection and messages. Validate message shapes, authorize subscriptions, restrict origins, bound payloads, and use pub/sub to scale across processes. Authorize room membership and validate every incoming message before broadcasting. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support A page filename defines its URL; index maps to the directory root and bracket segments are dynamic parameters. API files under app/api expose HTTP method functions and receive a Context. This creates a dynamic, server-rendered account route and verifies that the router discovered it. A page filename defines its URL; index maps to the directory root and bracket segments are dynamic parameters. API files under app/api expose HTTP method functions and receive a Context. This creates a dynamic, server-rendered account route and verifies that the router discovered it. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Use CSP, CSRF, Trusted Types, session hardening, validation, origin checks, upload restrictions, encryption, request limits, and explicit CORS. See the security policy for reporting. Enable the main browser and request protections in application configuration, then audit the resolved production profile. Use CSP, CSRF, Trusted Types, session hardening, validation, origin checks, upload restrictions, encryption, request limits, and explicit CORS. See the security policy for reporting. Enable the main browser and request protections in application configuration, then audit the resolved production profile. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Use an ssr API binding, return the desired response field, and render it with a server #each block. Values are escaped. Avoid fetching private data through a route that lacks authorization. Fetch on the server and render useful HTML before browser JavaScript loads. Use an ssr API binding, return the desired response field, and render it with a server #each block. Values are escaped. Avoid fetching private data through a route that lacks authorization. Fetch on the server and render useful HTML before browser JavaScript loads. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Use Bun tests and @wrnexus/test helpers. Cover server HTML, API status and validation, authorization failures, reactive behavior, and a production startup smoke test. Cover successful output and the denial path, then run the built server smoke check. Use Bun tests and @wrnexus/test helpers. Cover server HTML, API status and validation, authorization failures, reactive behavior, and a production startup smoke test. Cover successful output and the denial path, then run the built server smoke check. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Confirm Bun and package versions, regenerate docs/routes through supported commands, read the first compiler diagnostic, check file naming, validate config, and reproduce under a production build. Collect deterministic diagnostics without exposing application secrets. Confirm Bun and package versions, regenerate docs/routes through supported commands, read the first compiler diagnostic, check file naming, validate config, and reproduce under a production build. Collect deterministic diagnostics without exposing application secrets. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Back up and commit first, then use wrnexus update --latest as documented by the installed CLI. Review migrations and keep every @wrnexus package aligned. Current release: 0.8.8. Preview migrations first, review the report, then update the aligned package set. Back up and commit first, then use wrnexus update --latest as documented by the installed CLI. Review migrations and keep every @wrnexus package aligned. Current release: 0.8.72. Preview migrations first, review the report, then update the aligned package set. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Configure named stores, accepted MIME/extensions, and maxBytes. Random keys avoid path traversal. Private files require an authenticated serving route; v1 buffers each file in memory. Keep size and type policy server-owned and serve private objects through an authorized route. Configure named stores, accepted MIME/extensions, and maxBytes. Random keys avoid path traversal. Private files require an authenticated serving route; v1 buffers each file in memory. Keep size and type policy server-owned and serve private objects through an authorized route. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support A workspace runs isolated applications behind one domain-routing gateway. Add an application from the workspace root; the CLI scaffolds A workspace runs isolated applications behind one domain-routing gateway. Add an application from the workspace root; the CLI scaffolds Point protected applications at a dedicated verifier endpoint. The verifier must return 2xx for an authenticated session, 401/403 to deny access, or an HTTP redirect to begin browser login. Run this against the selected profile, inspect the generated or returned result, and add a test for both the successful path and its most important failure path. Keep configuration in Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.8 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support Start from the exact installed package page, implement the smallest server-owned contract, and add browser behavior only where interaction requires it. Run the production build because development-only success does not prove deployability. This guide describes installed 0.8.72 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed. Browse package APIs · CLI reference · Troubleshooting · Support WRNexusJS v0.8.8 WRNexusJS is an SSR-first, Bun-native full-stack framework. Build typed pages, APIs, validated forms, realtime rooms, secure sessions, workspaces, and optional mobile experiences with the Private developer preview. Request access to the package registry. WRNexusJS v0.8.72 WRNexusJS is an SSR-first, Bun-native full-stack framework. Build typed pages, APIs, validated forms, realtime rooms, secure sessions, workspaces, and optional mobile experiences with the Private developer preview. Request access to the package registry. Public creator/company site and approved WRNexusJS production showcase. This documentation application runs WRNexusJS 0.8.8. Public creator/company site and approved WRNexusJS production showcase. This documentation application runs WRNexusJS 0.8.72. Pages are routes. Components declare default-valued props and may hold state. Layouts provide shared slots. Mount components with Interpolation is HTML-escaped. Use server Text interpolation is escaped by default. Do not construct trusted HTML from user input. Server-only refinements must be repeated at the authoritative mutation boundary. This documentation repository contains no public license file, and the packages are unavailable from the public npm registry. No open-source license or redistribution right should be inferred. Approved preview users must follow the private/commercial terms supplied by WorkRoot. Contact WorkRoot before copying, redistributing, or using WRNexusJS in production. Everything in the framework, organized by responsibility and documented from the published 0.8.8 APIs. Showing {category} packages Server-side Anthropic client with generation and streaming. After WorkRoot approves private registry access, install the release-aligned package: Request preview access. Never put registry tokens in source control. Provider-neutral AI orchestration for OpenAI, Anthropic, Google and local OpenAI-compatible models, with streaming, structured output, tools, embeddings, vector search/RAG, conversation persistence, templates, guardrails, usage events, fallback, rate limits and evaluation reports. Server-side Anthropic client with generation and streaming. After WorkRoot approves private registry access, install the package: Request preview access. Never put registry tokens in source control. Provider-neutral AI orchestration for OpenAI, Anthropic, Google and local OpenAI-compatible models, with streaming, structured output, tools, embeddings, vector search/RAG, conversation persistence, templates, guardrails, usage events, fallback, rate limits and evaluation reports. Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework. Authentication routes, sessions, forms, guards, and account flows. After WorkRoot approves private registry access, install the release-aligned package: Request preview access. Never put registry tokens in source control. Framework-native authentication, identity, account-security, and session management for WRNexusJS. Authentication routes, sessions, forms, guards, and account flows. After WorkRoot approves private registry access, install the package: Request preview access. Never put registry tokens in source control. Enable Use The verification cookie is HttpOnly, SameSite=Lax, Secure on HTTPS, and host-only. Its opaque token is stored hashed in the auth token store, separate from login sessions; it cannot bypass email verification, MFA, or account policy. Use Framework-native authentication, identity, account-security, and session management for WRNexusJS. Server helpers include Generated from the exact installed package declarations. Server helpers include Generated from the exact installed package declarations. Copy-ready examples from the installed package documentation. Copy-ready examples from the installed package documentation. Role, permission, policy, and authorization guards. After WorkRoot approves private registry access, install the release-aligned package: Request preview access. Never put registry tokens in source control. Role, permission, policy, and authorization guards. After WorkRoot approves private registry access, install the package: Request preview access. Never put registry tokens in source control. Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework. Copy-ready examples from the installed package documentation. Framework benchmark scenarios and repeatable performance measurements. After WorkRoot approves private registry access, install the release-aligned package: Request preview access. Never put registry tokens in source control. Deterministic benchmark execution, percentiles, baseline comparisons, and regression budgets for builds, SSR, hydration, stores, and application hot paths. Framework benchmark scenarios and repeatable performance measurements. After WorkRoot approves private registry access, install the package: Request preview access. Never put registry tokens in source control. Deterministic benchmark execution, percentiles, baseline comparisons, and regression budgets for builds, SSR, hydration, stores, and application hot paths. Generated from the exact installed package declarations. Memory and distributed caching with coordination and invalidation. After WorkRoot approves private registry access, install the release-aligned package: Request preview access. Never put registry tokens in source control. 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. Memory and distributed caching with coordination and invalidation. After WorkRoot approves private registry access, install the package: Request preview access. Never put registry tokens in source control. 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. Managed CAPTCHA verification, middleware, and UI integration. After WorkRoot approves private registry access, install the release-aligned package: Request preview access. Never put registry tokens in source control. A first-class CAPTCHA and anti-automation package for WRNexusJS. It supports self-hosted challenges, a managed WRNexus service, external providers, form submission guards, page gates, accessible audio, adaptive risk checks, and a Tailwind-only Managed CAPTCHA verification, middleware, and UI integration. After WorkRoot approves private registry access, install the package: Request preview access. Never put registry tokens in source control. A first-class CAPTCHA and anti-automation package for WRNexusJS. It supports self-hosted challenges, a managed WRNexus service, external providers, form submission guards, page gates, accessible audio, adaptive risk checks, and a Tailwind-only WRNexusJS automatically discovers the package plugin, component, client runtime, styles, and DevToolbar audit. Use The component uses Tailwind utilities and The component uses Tailwind utilities and Create, develop, build, generate, test, and maintain WRNexusJS apps. After WorkRoot approves private registry access, install the release-aligned package: Request preview access. Never put registry tokens in source control. Production parity commands: Create, develop, build, generate, test, and maintain WRNexusJS apps. After WorkRoot approves private registry access, install the package: Request preview access. Never put registry tokens in source control. Production parity commands: Every command accepts an optional Compatibility upgrades never happen implicitly. New applications pin Supervises a child dev-server process (from Browse documentation
Page not found
Browse documentation
Request preview access
Request process
bunx @wrnexus/cli@0.8.8 create my-appRequest preview access
Request process
bunx @wrnexus/cli@0.8.72 create my-appBrowse documentation
Architecture
.wrn declarations into server render functions and small feature runtimes.Request and build lifecycle
Package boundaries
core owns contexts, middleware, sessions and rooms; router discovers routes; compiler parses .wrn; ssr renders documents; csr supplies browser runtimes; dev-server and cli orchestrate development and builds.Security and data flow
Realtime and scale
Workspaces and gateways
Build and deployment
wrnexus build . produces dist/server.js and hashed/static assets. Run the server with Bun, apply migrations before traffic, terminate TLS at a trusted edge, and forward only expected proxy headers.Mobile
Generated files and limits
app/routes.gen.ts, .wrnexus/, and dist/ are generated. The runtime is Bun-only. Preview packages are private. Historical compatibility and long-term support policy are not yet published.Architecture
.wrn declarations into server render functions and small feature runtimes.Request and build lifecycle
Package boundaries
core owns contexts, middleware, sessions and rooms; router discovers routes; compiler parses .wrn; ssr renders documents; csr supplies browser runtimes; dev-server and cli orchestrate development and builds.Security and data flow
Realtime and scale
Workspaces and gateways
Build and deployment
wrnexus build . produces dist/server.js and hashed/static assets. Run the server with Bun, apply migrations before traffic, terminate TLS at a trusted edge, and forward only expected proxy headers.Mobile
Generated files and limits
app/routes.gen.ts, .wrnexus/, and dist/ are generated. The runtime is Bun-only. Preview packages are private. Historical compatibility and long-term support policy are not yet published.Browse documentation
Benchmarks
No publishable benchmark dataset yetBrowse documentation
Changelog
0.8.8 2026-07-13
@wrnexus/helpers, original-request URL helpers, safe login redirects, working wrnexus workspace add, and forward-auth redirect propagation.Migration notes
wrnexus update --latest and keep every @wrnexus/* package on 0.8.8. Existing applications must explicitly add @wrnexus/helpers before importing it; newly scaffolded applications include it automatically.Versioning and support
Changelog
0.8.72 2026-07-13
@wrnexus/helpers, original-request URL helpers, safe login redirects, working wrnexus workspace add, and forward-auth redirect propagation.Migration notes
wrnexus update --latest and keep every @wrnexus/* package on 0.8.72. Existing applications must explicitly add @wrnexus/helpers before importing it; newly scaffolded applications include it automatically.Versioning and support
Browse documentation
Examples
Minimal .wrn page
DocumentedDatabase CRUD
Planned fixtureAuthentication and protected route
Planned fixturePermissions
Planned fixtureForms and validation
DocumentedRealtime dashboard
Planned fixtureFile upload
Planned fixtureBackground queue
Planned fixtureRedis pub/sub
Planned fixtureWorkspace gateway
Planned fixtureDeployment
Planned fixtureExperimental mobile mode
Planned fixtureExamples
Minimal .wrn page
DocumentedDatabase CRUD
Planned fixtureAuthentication and protected route
Planned fixturePermissions
Planned fixtureForms and validation
DocumentedRealtime dashboard
Planned fixtureFile upload
Planned fixtureBackground queue
Planned fixtureRedis pub/sub
Planned fixtureWorkspace gateway
Planned fixtureDeployment
Planned fixtureExperimental mobile mode
Planned fixtureBrowse documentation
Build a contact inbox
1. Create the project
bunx @wrnexus/cli@0.8.8 create my-app
+Build a contact inbox
1. Create the project
bunx @wrnexus/cli@0.8.72 create my-app
cd my-app
bun install
bun run dev2. Know the structure
app/pages/ # file-based .wrn routes
@@ -47,7 +47,7 @@ export const POST = async (ctx) => {
}7. Test and ship
bun run test
bun run build
bun dist/server.jsBrowse documentation
API routes
Practical example
import { v, parseBody } from "@wrnexus/validation";
+API routes
Practical example
import { v, parseBody } from "@wrnexus/validation";
const input = v.object({ name: v.string().trim().min(2).max(80) });
export const POST = async (ctx) => {
const parsed = await parseBody(input, ctx.req);
@@ -25,8 +25,8 @@ export const POST = async (ctx) => {
};What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Authentication
Practical example
export default async function requireSession(ctx, next) {
+Authentication
Practical example
export default async function requireSession(ctx, next) {
const user = await readAuthenticatedUser(ctx);
if (!user) return Response.redirect(new URL("/login", ctx.url), 303);
ctx.state.user = user;
@@ -25,8 +25,8 @@ page Authentication {
}What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Authorization
Practical example
export const DELETE = async (ctx) => {
+Authorization
Practical example
export const DELETE = async (ctx) => {
await requirePermission(ctx, "member:delete");
await deleteMember(ctx.params.id, ctx.state.user.tenantId);
return new Response(null, { status: 204 });
};What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Configuration and profiles
Practical example
export default {
+Configuration and profiles
Practical example
export default {
server: { port: 3000 },
profiles: {
development: { envFiles: [".env", ".env.development"] },
@@ -28,8 +28,8 @@ page Configurationandprofiles {
bunx wrnexus config . --explain --profile=productionWhat to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Database
Practical example
bunx wrnexus db status
+Database
Practical example
bunx wrnexus db status
bunx wrnexus db new create_accounts --from-models
bunx wrnexus db migrate
bunx wrnexus db generateWhat to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Deployment
Practical example
bun install --frozen-lockfile
+Deployment
Practical example
bun install --frozen-lockfile
bunx wrnexus typecheck .
bunx wrnexus db migrate
bunx wrnexus build .
bun dist/server.jsWhat to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Forms and validation
Practical example
page Signup { view {
+Forms and validation
Practical example
page Signup { view {
<form data-schema="signup" action="/api/signup" method="post">
<input name="email" type="email" /><span data-error="email"></span>
<button type="submit">Create account</button>
@@ -25,8 +25,8 @@ page Formsandvalidation {
} }What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Auth and permissions dashboard demo
1. Create the application
bunx @wrnexus/cli@0.8.8 create team-portal
+Auth and permissions dashboard demo
1. Create the application
bunx @wrnexus/cli@0.8.72 create team-portal
cd team-portal
bun install
bun add @wrnexus/auth @wrnexus/authz @wrnexus/db @wrnexus/validation @wrnexus/ui
@@ -150,8 +150,8 @@ bunx wrnexus preview . --port=30009. Demo checklist
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Internationalization and themes
Practical example
export default {
+Internationalization and themes
Practical example
export default {
i18n: { defaultLocale: "en", locales: ["en", "fr"] },
theme: { default: "system", palette: "violet" },
};
@@ -25,8 +25,8 @@ page Internationalizationandthemes {
page Home { view { <h1>{t:home.title}</h1><button data-wire-theme-toggle>Theme</button> } }What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Middleware
Practical example
export default async function requestContext(ctx, next) {
+Middleware
Practical example
export default async function requestContext(ctx, next) {
ctx.state.requestId = crypto.randomUUID();
if (!["GET", "HEAD", "POST"].includes(ctx.req.method))
return new Response("Method not allowed", { status: 405 });
@@ -25,8 +25,8 @@ page Middleware {
}What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Mobile
Practical example
bunx wrnexus generate mobile
+Mobile
Practical example
bunx wrnexus generate mobile
bunx wrnexus mobile compile
bunx wrnexus native listWhat to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Observability
Practical example
const tracking = createTracking({
+Observability
Practical example
const tracking = createTracking({
redact: ["authorization", "cookie", "password", "token"],
sampleRate: 0.1,
});
export default tracking.middleware();What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Pages and components
Practical example
component StatusCard {
+Pages and components
Practical example
component StatusCard {
prop title = "Status"
prop value = "Unknown"
view { <article><h2>{title}</h2><p>{value}</p><slot /></article> }
@@ -26,8 +26,8 @@ page Pagesandcomponents {
page Dashboard { view { <StatusCard title="API" value="Healthy" /> } }What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Project structure
Practical example
bunx wrnexus generate page account/settings
+Project structure
Practical example
bunx wrnexus generate page account/settings
bunx wrnexus generate component account-card
bunx wrnexus generate api account/profile
bunx wrnexus generate routes
bunx wrnexus generate types .What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Pub/sub
Practical example
const bus = createRedisPubSub({ url: env.REDIS_URL });
+Pub/sub
Practical example
const bus = createRedisPubSub({ url: env.REDIS_URL });
await bus.subscribe("team:42:events", (event) => handleTeamEvent(event));
await bus.publish("team:42:events", JSON.stringify({ type: "member.invited" }));What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Queues
Practical example
const emails = queue("emails", { concurrency: 4, retries: 3 });
+Queues
Practical example
const emails = queue("emails", { concurrency: 4, retries: 3 });
emails.process(async (job) => sendInviteOnce(job.data.invitationId));
await emails.add({ invitationId }, { delay: 1_000 });What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Realtime
Practical example
export default defineRoom("team", {
+Realtime
Practical example
export default defineRoom("team", {
async connect(client, ctx) { await requireTeamMember(ctx, ctx.params.teamId); },
async message(client, raw) {
const message = chatMessage.parse(JSON.parse(raw));
@@ -26,8 +26,8 @@ page Realtime {
});What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Routing
Practical example
// app/pages/accounts/[id].wrn
+Routing
Practical example
// app/pages/accounts/[id].wrn
page Account { view { <main><h1>Account {params.id}</h1></main> } }
bunx wrnexus inspect routes .What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Application security
Practical example
// wrnexus.config.ts
+Application security
Practical example
// wrnexus.config.ts
export default {
security: {
contentSecurityPolicy: true,
@@ -34,8 +34,8 @@ bunx wrnexus config . --explain --profile=production
bunx wrnexus security audit .What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Server data
Practical example
page Accounts {
+Server data
Practical example
page Accounts {
ssr { api result GET /api/accounts { return result.accounts } }
view { <ul>{#each result as account}<li>{account.name}</li>{:empty}<li>No accounts</li>{/each}</ul> }
}What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Testing
Practical example
import { describe, expect, test } from "bun:test";
+Testing
Practical example
import { describe, expect, test } from "bun:test";
describe("members API", () => {
test("denies anonymous requests", async () => {
const response = await request("/api/members");
@@ -26,8 +26,8 @@ describe("members API", () => {
});What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Troubleshooting
Practical example
bun --version
+Troubleshooting
Practical example
bun --version
bunx wrnexus doctor .
bunx wrnexus config . --explain
bunx wrnexus inspect routes .
bunx wrnexus report . --file=app/pages/index.wrnWhat to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Upgrading
Practical example
git status --short
+Upgrading
Practical example
git status --short
bunx wrnexus update . --latest --dry-run
bunx wrnexus update . --latest
bunx wrnexus typecheck .
bunx wrnexus build .What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Uploads
Practical example
export default {
+Uploads
Practical example
export default {
uploads: { stores: { avatars: {
driver: "local", directory: "./data/avatars",
maxBytes: 2_000_000, accept: ["image/png", "image/jpeg"],
@@ -25,8 +25,8 @@ page Uploads {
};What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Browse documentation
Workspaces and gateway
apps/reports and registers it in wrnexus.workspace.ts:wrnexus workspace add reports --domain=reports.localhost
+Workspaces and gateway
apps/reports and registers it in wrnexus.workspace.ts:wrnexus workspace add reports --domain=reports.localhost
bun install
bun run devForward authentication
// wrnexus.workspace.ts
{
@@ -42,8 +42,8 @@ bunx wrnexus workspace add admin --domain=admin.localhost
bunx wrnexus gateway --port=3000What to verify
Configuration
wrnexus.config.ts, select an explicit profile, and store secrets only in validated environment variables. Use wrnexus config . --explain to review the resolved non-secret configuration.Implementation workflow
bunx wrnexus doctor .
bunx wrnexus typecheck .
bunx wrnexus inspect routes .
-bunx wrnexus build .Verification checklist
Release scope
Verification checklist
Release scope
Menu
Build from the server.
Ship only what matters..wrn component language.page Dashboard {
+ Build from the server.
Ship only what matters..wrn component language.page Dashboard {
ssr { api tasks GET /api/tasks { return tasks } }
view {
<main>
@@ -35,10 +35,10 @@ export const POST = async (ctx) => {
return result.ok ? Response.json({ ok: true }, { status: 201 }) : result.response;
};Request lifecycle
Production proof
WorkRoot
wrnexusjs.dev
Capability status
Capability Status Details SSR, routing, compiler, APIs Preview Installed in 0.8.8; public support policy pending. Mobile/native Experimental Capacitor compatibility and native generation have platform limitations. Durable queues Experimental Production durability requires an appropriate driver strategy. Production proof
WorkRoot
wrnexusjs.dev
Capability status
Capability Status Details SSR, routing, compiler, APIs Preview Installed in 0.8.72; public support policy pending. Mobile/native Experimental Capacitor compatibility and native generation have platform limitations. Durable queues Experimental Production durability requires an appropriate driver strategy. Continue exploring
Browse documentation
The
.wrn languageFile anatomy
page Account {
+The
.wrn languageFile anatomy
page Account {
layout = "public"
seo { title = "Account" description = "Manage your account." }
state count = 0
view { <button @click="count++">Count {count}</button> }
}Pages, components, layouts, props, and state
data-component; fill default or named slots with data-slot.Interpolation, conditionals, and loops
{#if} and {#each} for SSR data. Use data-show for reactive client visibility.Events and directives
@click and other events execute in the reactive scope. Data attributes opt into forms, i18n, themes, realtime, uploader, browser, and mobile behavior. Consult the exact package page because availability varies.Forms, i18n, themes, and realtime
form[data-schema] connects descriptors to client and server validation. Translation keys use {t:key}. Theme toggles use data-wire-theme-toggle. Realtime pages opt into a named room.Escaping and security
Common compiler errors
view, not JSX or hooks.Browse documentation
License
Owner decision requiredBrowse documentation
Package reference
Find a package
All packages
}
}
diff --git a/app/pages/packages/ai.wrn b/app/pages/packages/ai.wrn
index 26c176ae..ba2b8270 100644
--- a/app/pages/packages/ai.wrn
+++ b/app/pages/packages/ai.wrn
@@ -10,7 +10,7 @@ page wrnexusai {
Browse documentation
@wrnexus/ai
Install the package
bun add @wrnexus/ai@0.8.8@wrnexus/ai
Install the package
bun add @wrnexus/ai@0.8.9A tiny, zero-dependency Claude (Anthropic) client for WRNexusJS apps — generate and stream text with Claude from any server-side code.
Overview
@@ -157,7 +157,7 @@ export const POST = async (ctx) => {
};Browse documentation
@wrnexus/auth
Install the package
bun add @wrnexus/auth@0.8.8@wrnexus/auth
Install the package
bun add @wrnexus/auth@0.8.33New-browser verification and device trust
+requireTrustedDeviceVerification: true to require a verified email or SMS challenge before an untrusted browser receives a sign-in session. The HTTP handlers use a host-only HttpOnly random cookie, ignoring posted fingerprints. Direct engine callers must supply a trusted server-side browser fingerprint. trustSignupDevice: true grants the registration browser one-time trust after required account verification, at its first successful sign-in.trustedDeviceTtlMs: 30 * 86400_000 for 30-day trust. Ordinary logins do not renew it. The verification form offers explicit trust consent; expiry/revocation requires a new email/SMS challenge. Successful login alerts use both verified contact channels when configured. Delivery still requires an application adapter.Signup business logic and verification-only sessions
+
+const auth = createAuthEngine({
+ store: () => new SqlAuthStore(getDb()),
+ secret: process.env.AUTH_SECRET!,
+ requireVerifiedEmail: true,
+ onSignUp(ctx, user) {
+ // Application business logic can run here after successful registration.
+ return { verificationSession: true, redirectTo: "/verify-email" };
+ },
+ delivery: {
+ async send(message) {
+ // message.channel, template, destination, user, expiresAt
+ // Verification uses message.token and message.url; OTP flows use message.code.
+ // Render your branded content here before passing it to your provider.
+ },
+ },
+});onSuccessfulSignUp remains supported; configure only one signup hook. Hooks run from the HTTP registration handler and may return an action or a custom Response. The request origin (or configured auth.baseUrl) supplies signup link URLs; a client-supplied baseUrl is never trusted. Direct engine.register callers may provide a trusted baseUrl explicitly.getVerificationUser(ctx, auth) to guard your verification page and clearVerificationSession(ctx, auth) after verification. Use startVerificationSession(ctx, auth, user.id) only after credential validation when an unverified user signs in again. SQL-backed sessions survive server reloads; memory stores remain development/test-only. No email or SMS provider is configured automatically.Capabilities
-<AuthSecurityNotice />authRoute, authSuccess, authFailure, requireAuthUser, optionalAuthUser, currentAuthSession, and authComponentProps.Complete TypeScript API
import { A as AuthEngine } from './engine-BDu0-aZp.js';
-export { c as createAuthEngine, i as inferIdentityType, n as normalizeEmail, a as normalizeIdentity, b as normalizePhone, d as normalizeUsername, p as publicUser, s as safeAuthReturnTo } from './engine-BDu0-aZp.js';
-import { o as AuthRiskSignals, m as AuthRiskDecision, s as AuthSession, B as AuthUser } from './types-BhwPi3qr.js';
-export { A as AUTH_SECURITY_EVENT_TYPES, a as AuthAccountStatus, b as AuthClock, c as AuthDeliveryMessage, d as AuthDeliveryProvider, e as AuthEngineOptions, f as AuthIdentity, g as AuthIdentityType, h as AuthImpersonationDecision, i as AuthMfaMethod, j as AuthPublicUser, k as AuthRandom, l as AuthResult, n as AuthRiskLevel, p as AuthSecretProtector, q as AuthSecurityEvent, r as AuthSecurityEventType, t as AuthSessionVerificationHandler, u as AuthSignedInHandler, v as AuthSignedOutHandler, U as AuthStore, w as AuthSuccessfulSignUpAction, x as AuthSuccessfulSignUpHandler, y as AuthTokenPurpose, z as AuthTokenUrlInput, C as AuthenticatedContext, K as KnownAuthSecurityEventType, L as LoginAttempt, D as LoginInput, V as MemoryPasskeyChallengeStore, O as OAuthAccount, E as OneTimeToken, F as OtpChallenge, P as PasskeyAuthenticationOptions, W as PasskeyChallengeKind, X as PasskeyChallengeRecord, Y as PasskeyChallengeStore, G as PasskeyCredential, H as PasskeyProvider, I as PasskeyRegistrationOptions, J as PasskeyVerificationResult, M as PasswordBreachProvider, N as PasswordCredential, R as RecoveryCodeRecord, Q as RegisterInput, T as TotpCredential, S as TrustedDevice, Z as assertPasskeyProvider } from './types-BhwPi3qr.js';
+authRoute, authSuccess, authFailure, requireAuthUser, optionalAuthUser, currentAuthSession, and authComponentProps.Complete TypeScript API
import { A as AuthEngine } from './engine-NjrTiSrg.js';
+export { c as createAuthEngine, i as inferIdentityType, n as normalizeEmail, a as normalizeIdentity, b as normalizePhone, d as normalizeUsername, p as publicUser, s as safeAuthReturnTo } from './engine-NjrTiSrg.js';
+export { VERIFICATION_SESSION_COOKIE, clearVerificationSession, getVerificationUser, startVerificationSession } from './server/index.js';
+import { m as AuthRiskSignals, n as AuthRiskDecision, d as AuthSession, b as AuthUser } from './types-CuQWJQV1.js';
+export { o as AUTH_SECURITY_EVENT_TYPES, p as AuthAccountStatus, q as AuthClock, r as AuthDeliveryMessage, s as AuthDeliveryProvider, t as AuthEngineOptions, c as AuthIdentity, u as AuthIdentityType, v as AuthImpersonationDecision, w as AuthMfaMethod, j as AuthPublicUser, x as AuthRandom, y as AuthResult, z as AuthRiskLevel, l as AuthSecretProtector, i as AuthSecurityEvent, B as AuthSecurityEventType, A as AuthSessionVerificationHandler, C as AuthSignedInHandler, D as AuthSignedOutHandler, a as AuthStore, E as AuthSuccessfulSignUpAction, F as AuthSuccessfulSignUpHandler, G as AuthTokenPurpose, H as AuthTokenUrlInput, k as AuthenticatedContext, K as KnownAuthSecurityEventType, L as LoginAttempt, I as LoginInput, M as MemoryPasskeyChallengeStore, h as OAuthAccount, O as OneTimeToken, e as OtpChallenge, J as PasskeyAuthenticationOptions, N as PasskeyChallengeKind, Q as PasskeyChallengeRecord, S as PasskeyChallengeStore, g as PasskeyCredential, U as PasskeyProvider, V as PasskeyRegistrationOptions, W as PasskeyVerificationResult, X as PasswordBreachProvider, P as PasswordCredential, R as RecoveryCodeRecord, Y as RegisterInput, f as TotpCredential, T as TrustedDevice, Z as assertPasskeyProvider } from './types-CuQWJQV1.js';
export { MemoryAuthStore } from './stores/memory.js';
-export { SqlAuthStore } from './stores/sql.js';
-export { AUTH_SESSION_KEY, authSession, clearAuthSession, establishAuthSession, getAuthSession, getAuthUser, isAuthenticatedContext, requireAuth } from './middleware.js';
-export { A as AuthHttpOptions, a as AuthPasskeyHttpOptions, b as AuthSchemaOverrides, c as AuthSchemaSet, d as authBrowserSchemaDescriptors, e as authBrowserSchemaMap, f as authSchemas, g as authenticatorConfirmSchema, h as authenticatorDisableSchema, i as authenticatorSetupSchema, j as changePasswordSchema, k as createAuthHttpHandlers, l as emptyActionSchema, m as impersonationStartSchema, n as invitationAcceptSchema, o as loginSchema, p as magicLinkConsumeSchema, q as magicLinkRequestSchema, r as mfaOtpRequestSchema, s as mfaSchema, t as otpIssueSchema, u as otpLoginCompleteSchema, v as otpLoginRequestSchema, w as otpSchema, x as passkeyAuthenticationOptionsSchema, y as passkeyAuthenticationVerifySchema, z as passkeyRegistrationOptionsSchema, B as passkeyRegistrationVerifySchema, C as passwordResetRequestSchema, D as passwordResetSchema, E as recoveryCodesSchema, F as registerSchema, G as resolveAuthSchemas, H as sessionRevokeSchema, I as signUpSchema, J as verificationRequestSchema, K as verificationTokenSchema } from './index-B4uaD0Z3.js';
-export { AuthAuditIssue, AuthConfig, AuthPluginOptions, AuthRoutesConfig, authComponentsDir, authPlugin } from './plugin.js';
+export { SqlAuthStore, SqlAuthStoreOptions } from './stores/sql.js';
+export { AUTH_SESSION_KEY, AuthRequiredError, authSession, clearAuthSession, establishAuthSession, getAuthSession, getAuthUser, isAuthenticatedContext, requireAuth, requireAuthUser } from './middleware.js';
+export { d as AuthHttpOptions, a as AuthPasskeyHttpOptions, A as AuthSchemaOverrides, b as AuthSchemaSet, e as authBrowserSchemaDescriptors, f as authBrowserSchemaMap, g as authSchemas, h as authenticatorConfirmSchema, i as authenticatorDisableSchema, j as authenticatorSetupSchema, k as changePasswordSchema, c as createAuthHttpHandlers, l as emptyActionSchema, m as impersonationStartSchema, n as invitationAcceptSchema, o as loginSchema, p as magicLinkConsumeSchema, q as magicLinkRequestSchema, r as mfaOtpRequestSchema, s as mfaSchema, t as otpIssueSchema, u as otpLoginCompleteSchema, v as otpLoginRequestSchema, w as otpSchema, x as passkeyAuthenticationOptionsSchema, y as passkeyAuthenticationVerifySchema, z as passkeyRegistrationOptionsSchema, B as passkeyRegistrationVerifySchema, C as passwordResetRequestSchema, D as passwordResetSchema, E as recoveryCodesSchema, F as registerSchema, G as resolveAuthSchemas, H as sessionRevokeSchema, I as signUpSchema, J as verificationRequestSchema, K as verificationTokenSchema } from './index-DuuY2a1R.js';
+export { AuthAuditIssue, AuthConfig, AuthPluginOptions, AuthRoutesConfig, authComponentsDir, authPlugin, configureAuthRuntime, validateProductionAuthConfig } from './plugin.js';
export { DefaultAuthRouteOptions, clearDefaultAuthEngine, getDefaultAuthEngine, getDefaultAuthRouteOptions, getDefaultAuthSchemas, hasDefaultAuthEngine, setDefaultAuthEngine, setDefaultAuthRouteOptions, setDefaultAuthSchemas, tryGetDefaultAuthEngine } from './runtime.js';
export { createAuthSecretProtector } from './protector.js';
export { decodeBase32, encodeBase32, generateTotp, generateTotpSecret, totpUri, verifyTotp } from './totp/index.js';
@@ -319,7 +342,6 @@ declare function authRoute(name: AuthRouteName, options?: {
}): string;
declare function authSuccess<T extends Record<string, unknown>>(data: T, init?: ResponseInit): Response;
declare function authFailure(code: string, message: string, status?: number, details?: Record<string, unknown>): Response;
-declare function requireAuthUser(ctx: Context): AuthUser;
declare function optionalAuthUser(ctx: Context): AuthUser | null;
declare function currentAuthSession(engine: AuthEngine, sessionId: string | undefined): Promise<AuthSession | null>;
declare function authComponentProps(input: Record<string, unknown>, defaults?: {
@@ -328,8 +350,23 @@ declare function authComponentProps(input: Record<string, unknown>, defaul
class?: string;
}): Record<string, unknown>;
-export { AuthEngine, AuthRiskDecision, AuthRiskSignals, type AuthRouteName, AuthSession, AuthUser, type RiskPolicy, authComponentProps, authFailure, authRoute, authSuccess, currentAuthSession, evaluateAuthRisk, optionalAuthUser, requireAuthUser };
-Examples
## Install
bun add @wrnexus/authCreate the engine
// app/lib/auth.ts
+export { AuthEngine, AuthRiskDecision, AuthRiskSignals, type AuthRouteName, AuthSession, AuthUser, type RiskPolicy, authComponentProps, authFailure, authRoute, authSuccess, currentAuthSession, evaluateAuthRisk, optionalAuthUser };
+Examples
Signup business logic and verification-only sessions
const auth = createAuthEngine({
+ store: () => new SqlAuthStore(getDb()),
+ secret: process.env.AUTH_SECRET!,
+ requireVerifiedEmail: true,
+ onSignUp(ctx, user) {
+ // Application business logic can run here after successful registration.
+ return { verificationSession: true, redirectTo: "/verify-email" };
+ },
+ delivery: {
+ async send(message) {
+ // message.channel, template, destination, user, expiresAt
+ // Verification uses message.token and message.url; OTP flows use message.code.
+ // Render your branded content here before passing it to your provider.
+ },
+ },
+});Signup business logic and verification-only sessions
bun add @wrnexus/authSignup business logic and verification-only sessions
// app/lib/auth.ts
import { createAuthEngine, MemoryAuthStore } from "@wrnexus/auth";
export const auth = createAuthEngine({
@@ -379,20 +416,10 @@ import { getDb } from "@wrnexus/db";
export const auth = createAuthEngine({
store: new SqlAuthStore(getDb()),
secret: process.env.AUTH_SECRET!,
-});Successful signup behavior
export default {
- db: {
- // Application database configuration.
- },
- auth: {
- engine: auth,
- routes: true,
- middleware: true,
- migrations: true,
- },
-};Browse documentation
@wrnexus/authz
Install the package
bun add @wrnexus/authz@0.8.8Composable authorization for WRNexusJS — role-based (RBAC), policy-based (PBAC), and attribute-based (ABAC) access control that reduces to a boolean check plus an
+ authorize() guard.@wrnexus/authz
Install the package
bun add @wrnexus/authz@0.8.15Composable authorization for WRNexusJS — role-based (RBAC), policy-based (PBAC), and attribute-based (ABAC) access control that reduces to a boolean check plus an
authorize() guard.Overview
@wrnexus/authz is a small, server-side authorization toolkit. It gives you three interchangeable models — RBAC (roles → permissions), PBAC (policy predicates), and ABAC (attribute matchers) — that all collapse to a boolean | Promise<boolean> decision. Wrap any decision in a Middleware guard (authorize, requireRole, requirePermission) to protect WRNexusJS routes. Reach for it whenever a route or action needs to be gated on who the user is, what roles they hold, or attributes of the user and the resource. It plugs into @wrnexus/core by reading ctx.user as the authorization subject.Examples
RBAC
import { defineRbac, hasRole } from "@wrnexus/authz";
const rbac = defineRbac({
@@ -586,7 +656,7 @@ app.put(
);Browse documentation
@wrnexus/benchmark
Install the package
bun add @wrnexus/benchmark@0.8.8@wrnexus/benchmark
Install the package
bun add @wrnexus/benchmark@0.8.8import { runBenchmark, assertBenchmarkBudget } from "@wrnexus/benchmark";
const result = await runBenchmark("render", render, { iterations: 100 });
assertBenchmarkBudget(result, baseline, { p95Percent: 5 });Complete TypeScript API
interface BenchmarkOptions {
@@ -67,7 +67,7 @@ const result = await runBenchmark("render", render, { iterations:
assertBenchmarkBudget(result, baseline, { p95Percent: 5 });Install @wrnexus/benchmark
bun add @wrnexus/benchmarkBrowse documentation
@wrnexus/cache
Install the package
bun add @wrnexus/cache@0.8.8@wrnexus/cache
Install the package
bun add @wrnexus/cache@0.8.8
@@ -241,7 +241,7 @@ await bus.close();import { connectCacheInvalidation, TagCache, responseCache } from "@wrnexus/cache";
const cache = new TagCache({ ttlMs: 60_000, staleWhileRevalidateMs: 300_000 });
export default responseCache({ cache, tags: ["products"] });Pages
}
Browse documentation
@wrnexus/captcha
Install the package
bun add @wrnexus/captcha@0.8.8.wrn component.@wrnexus/captcha
Install the package
bun add @wrnexus/captcha@0.8.16.wrn component.Install
bun add @wrnexus/captcha<Captcha /> directly after installation. The browser runtime is injected once only on responses that render a CAPTCHA; no script tag, public-file copy, or manual plugin registration is required. Call captchaPlugin(options) explicitly only when an application needs to override the discovered package configuration.--wire-* theme variables. It has no companion component CSS file.--wrn-* theme variables. It has no companion component CSS file.Main props
provider, siteKey, type, action, presentation, difficulty, disturbance, imageStyle, allowedStyles, excludedStyles, randomizeStyle, locale, size, color, class, name, endpoint, verifyEndpoint, responseField, labels/messages, autoLoad, autoVerify, showVerify, showRefresh, showAudio, showListen, showStatus, disabled, required, and the backward-compatible compact alias.Component sizes
@@ -339,7 +339,7 @@ export const HEAD = POST;Browse documentation
@wrnexus/cli
Install the package
bun add @wrnexus/cli@0.8.8@wrnexus/cli
Install the package
bun add @wrnexus/cli@0.8.72
@@ -45,9 +45,8 @@ wrnexus dev . --production-runtime
wrnexus build .
wrnexus preview . --port=3000
wrnexus dev . --production-runtime[app-dir] (defaults to .). Commands that read config or .env also accept --profile=<name> (see [Profiles](#profiles)).
-Command Purpose wrnexus dev [app-dir] [--port=3000]Start the development server with live reload / HMR. wrnexus build [app-dir]Build a self-contained production server bundle + assets into dist/.wrnexus create <app-name>Scaffold a new single app from an inline template. wrnexus workspace <name>Scaffold a monorepo ( apps/* + shared packages/*).wrnexus workspace add <name>Add and register an app in the current workspace. wrnexus gateway [--port=3000]Serve every workspace app behind one port, routed by domain. wrnexus production [workspace-dir]Build, migrate, and serve every workspace app in production. wrnexus generate <type> <name>Scaffold a page \component \api \schema.wrnexus generate routesRegenerate the typed routes file ( app/routes.gen.ts).wrnexus generate dockerScaffold Dockerfile, .dockerignore, and docker-compose.yml.wrnexus generate mobileScaffold a Capacitor shell for iOS and Android. wrnexus mobile add <package...>Install Capacitor plugins and sync native projects. wrnexus eject <name...>Copy Wire UI component .wrn sources into app/components/.wrnexus db <cmd>Database migrations and tooling (see [db](#wrnexus-db)). wrnexus test [app-dir] [--watch]Run the app's tests via bun test (defaults to the test profile).wrnexus profiles [app-dir]List config profiles and their .env files, marking the active one.wrnexus compatibility checkCheck whether behavior defaults are explicitly pinned and current. wrnexus compatibility explainExplain configured, effective, and current compatibility behavior. wrnexus compatibility upgradeBack up config and explicitly opt into reviewed current behavior. wrnexus helpPrint usage. wrnexus dev [app-dir] [--port=3000]Start the development server with live reload / HMR. wrnexus build [app-dir]Build a self-contained production server bundle + assets into dist/.wrnexus create <app-name>Scaffold a new single app from an inline template. wrnexus workspace <name>Scaffold a monorepo ( apps/* + shared packages/*).wrnexus workspace add <name>Add and register an app in the current workspace. wrnexus gateway [--port=3000]Serve every workspace app behind one port, routed by domain. wrnexus production [workspace-dir]Build, migrate, and serve every workspace app in production. wrnexus generate <type> <name>Scaffold a page \component \api \schema.wrnexus generate routesRegenerate the typed routes file ( app/routes.gen.ts).wrnexus generate dockerScaffold Dockerfile, .dockerignore, and docker-compose.yml.wrnexus generate mobileScaffold a Capacitor shell for iOS and Android. wrnexus mobile add <package...>Install Capacitor plugins and sync native projects. wrnexus eject <name...>Copy WRNexusJS UI component .wrn sources into app/components/.wrnexus db <cmd>Database migrations and tooling (see [db](#wrnexus-db)). wrnexus test [app-dir] [--watch]Run the app's tests via bun test (defaults to the test profile).wrnexus profiles [app-dir]List config profiles and their .env files, marking the active one.wrnexus helpPrint usage. wrnexus g is an alias for wrnexus generate.compatibilityDate and frameworkBehaviour; existing applications use wrnexus compatibility explain before the backed-up, idempotent upgrade command.wrnexus dev@wrnexus/dev-server). The child owns file watching and HMR: CSS and client-island edits update the live page over a WebSocket with no restart; when a server module changes, the child exits with a restart code and the supervisor respawns it (the browser reconnects and morphs in the new HTML). On startup it regenerates typed DB queries and typed routes (best effort). Use --port= to change the port (default 3000).
@@ -88,7 +87,7 @@ wrnexus mobile assets # generate native icons from config.mobile.iconBrowser code can access installed plugins through the SSR-safe wrnexus dev . --port=8080@wrnexus/mobile bridge. The command adds each plugin to both the WRNexusJS app (JavaScript proxy) and mobile/ (native synchronization).
wrnexus mobile sync also configures Android so only true network failures use the local connection-error screen. HTTP errors such as 404 and 500 keep their WRNexusJS response pages.
wrnexus ejectCopies a Wire UI component's .wrn source out of @wrnexus/ui into app/components/, so the app owns and can edit it (the app copy shadows the library one by name). Run with no names to list available components. It skips components that already exist in the app.
Copies a WRNexusJS UI component's .wrn source out of @wrnexus/ui into app/components/, so the app owns and can edit it (the app copy shadows the library one by name). Run with no names to list available components. It skips components that already exist in the app.
wrnexus eject button card modal
wrnexus dbDatabase migrations and tooling. Without a flag, commands target the default database (db in wrnexus.config.ts, files under app/db/). Pass --db=<name> to target a named database (databases.<name>, files under app/db/<name>/).
bun test, and the production build uses Bun.build. Node is not supported.@wrnexus/dev-server (dev/prod server + gateway), @wrnexus/router (route + typed-routes codegen), @wrnexus/compiler (.wrn → .ts), @wrnexus/db (migrations, typed queries), @wrnexus/styles (config, profiles, .env, themes, styles), @wrnexus/ui (ejectable Wire UI components), @wrnexus/validation, @wrnexus/csr, and @wrnexus/i18n.@wrnexus/dev-server (dev/prod server + gateway), @wrnexus/router (route + typed-routes codegen), @wrnexus/compiler (.wrn → .ts), @wrnexus/db (migrations, typed queries), @wrnexus/styles (config, profiles, .env, themes, styles), @wrnexus/ui (ejectable WRNexusJS UI components), @wrnexus/validation, @wrnexus/csr, and @wrnexus/i18n.wrnexus.config.ts for db / databases, theme, styles, seo, security, i18n, and profiles, and wrnexus.workspace.ts for the gateway.Generated from the exact installed package declarations.
#!/usr/bin/env bun
Copy-ready examples from the installed package documentation.
bunx @wrnexus/cli create customer-portal
@@ -173,7 +172,7 @@ wrnexus update --latest
wrnexus doctorParser and code generators for the .wrn language.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/compiler@0.8.8Request preview access. Never put registry tokens in source control.
Parser and code generators for the .wrn language.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/compiler@0.8.30Request preview access. Never put registry tokens in source control.
Pages can select render = "partial-static" and divide their view with <Static> and <Dynamic> boundaries. The compiler emits a build-only shell renderer that never evaluates dynamic-boundary children. wrnexus build expands static component mounts into dist/partial-shells.json, records byte/region evidence in build-report.json, and embeds the shell in the production route manifest. At request time the production runtime retains request-aware layouts, locale/theme metadata and security nonces while streaming dynamic regions into stable placeholders.
Compiler for the.wrnlanguage — tokenizes, parses, and lowers.wrnpage and component files to TypeScript.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
@@ -51,7 +51,7 @@ layout PublicLayout {(a read token in ~/.npmrc). Requires Bun (Node is not supported).
All exports come from the package root (@wrnexus/compiler).
compileWireFile(source: string): stringcompileWrnFile(source: string): stringCompile .wrn source to a TypeScript module string. Throws ParseError on invalid input. The output is prefixed with a // compiled from .wrn comment.
compile(source: string): CompileResultRicher entry point that returns the generated code, the AST, and any diagnostics.
@@ -80,7 +80,7 @@ layout PublicLayout {| Class | Thrown by | Meaning |
|---|---|---|
ParseError | parse, compile, compileWireFile, generate | Invalid .wrn grammar or (rewrapped) lex failure. |
LexError | Lexer | Unexpected character / unterminated string / unbalanced braces. |
ParseErrorparse, compile, compileWrnFile, generate.wrn grammar or (rewrapped) lex failure.LexErrorLexerExported type-only symbols describing the parsed tree:
PageAst | Root node including top-level imports, kind, name, types, typed props, typed states, view, styles, functions, data APIs, lifecycle, and routes. | |
ViewNode | { type: "text"; value } or { type: "element"; tag; attrs; children }. | |
Attr | { name; value; event; boolean? } — event marks @event bindings. | |
StateDecl | { name; valueType?; expr } — a typed state x: Type = <expr> declaration. | |
PropDecl | { name; valueType?; required; default } — a typed prop declaration. | |
SeoBlock | Record<string, string> from the seo { ... } block. | |
ApiBlock | { method; path; body } — a top-level api METHOD /path { ... }. | |
DataApiBlock | { mode; name; method; path; body } — an api inside an ssr/client block. | |
DataMode | `"ssr" \ | "client"`. |
ModeFunctionsBlock | { mode; body } — a functions { ... } inside an ssr/client block. | |
RealtimeBlock | { name; handlers } — a realtime <name> { on evt(args) { ... } } block. |
Compile a page:
-import { compileWireFile } from "@wrnexus/compiler";
+import { compileWrnFile } from "@wrnexus/compiler";
-const ts = compileWireFile(`
+const ts = compileWrnFile(`
page Home {
state count = 0
seo { title = "Home" description = "Welcome" }
@@ -143,10 +143,9 @@ lx.next(); // { type: "lbrace", value: "{", pos: 1
Requirements / Notes
- Pure TypeScript with no runtime dependencies; runs under Bun as part of the WRNexusJS toolchain (Node is not supported).
-- Generated modules target WRNexusJS runtime primitives (
data-scope, data-text, data-on-*, data-for, data-component, __wrnexus*/__wire* helpers) — consume the output within a WRNexusJS app, e.g. via @wrnexus/core's dev loader.
-
Complete TypeScript API
Generated from the exact installed package declarations.
import { PageAst as PageAst$1, StructuredImportDecl, WrnDiagnostic } from '@wrnexus/syntax';
+Generated modules target WRNexusJS runtime primitives (data-scope, data-text, data-on-*, data-for, data-component, __wrnexus*/__wrn* helpers) — consume the output within a WRNexusJS app, e.g. via @wrnexus/core's dev loader.
+
Complete TypeScript API
Generated from the exact installed package declarations.
import { PageAst, StructuredImportDecl, WrnDiagnostic } from '@wrnexus/syntax';
export { ActionBlock, ApiBlock, Attr, ComputedDecl, DataApiBlock, DataMode, EffectBlock, EventDecl, FormatWrnOptions, LexError, Lexer, LoadBlock, ModeFunctionsBlock, OutputDecl, PageAst, ParseError, PropDecl, RealtimeBlock, RuntimeFunctionDecl, SeoBlock, StateDecl, StateRuntime, StoreKind, StructuredImportDecl, ViewNode, WrnDiagnostic, assertValidAst, diagnose, diagnosticFromError, eraseFunctionTypes, formatDiagnostic, formatWrn, inferredRuntimeType, parse, runtimeTypeOf } from '@wrnexus/syntax';
-import { PageAst } from '@wrnexus/syntax/parser';
/**
* Code generation: lower a `.wrn` AST to TypeScript that targets the framework's
@@ -165,11 +164,15 @@ import { PageAst } from '@wrnexus/syntax/parser';
* realtime {..} -> export const websocket = { evt(ws, ...args) { b } }
*/
-declare function generate(ast: PageAst): string;
+interface GenerateOptions {
+ /** Local names bound to .tsx island imports in this file. */
+ islands?: ReadonlySet<string>;
+}
+declare function generate(ast: PageAst, options?: GenerateOptions): string;
interface ComponentContractMetadata {
name: string;
- kind: PageAst$1["kind"];
+ kind: PageAst["kind"];
props: Array<{
name: string;
type: string;
@@ -211,7 +214,7 @@ interface ComponentContractMetadata {
namedImports: string[];
}>;
}
-declare function createComponentContract(ast: PageAst$1): ComponentContractMetadata;
+declare function createComponentContract(ast: PageAst): ComponentContractMetadata;
interface RpcManifestEntry {
id: string;
@@ -224,8 +227,8 @@ interface RpcManifestEntry {
}>;
returnType: string;
}
-declare function rpcManifest(ast: PageAst$1): RpcManifestEntry[];
-declare function generateServerFunctionsModule(ast: PageAst$1): string;
+declare function rpcManifest(ast: PageAst): RpcManifestEntry[];
+declare function generateServerFunctionsModule(ast: PageAst): string;
interface CompileTargets {
server: string;
@@ -234,15 +237,30 @@ interface CompileTargets {
contract: ReturnType<typeof createComponentContract>;
rpc: ReturnType<typeof rpcManifest>;
}
-declare function generateTargets(ast: PageAst$1): CompileTargets;
+declare function generateTargets(ast: PageAst): CompileTargets;
-declare function generateBrowserModule(ast: PageAst$1): string;
+declare function generateBrowserModule(ast: PageAst): string;
-declare function generateDeclarations(ast: PageAst$1): string;
+/**
+ * Strip TypeScript from a generated browser module.
+ *
+ * A client function's body is emitted verbatim, so anything TypeScript-only
+ * inside one -- an annotated local, an `as` cast, a local interface -- reaches
+ * the browser module as TypeScript source. Codegen removes the types from the
+ * function's *signature*, which is what made this easy to miss: the emitted
+ * module looked transpiled, and only bodies carried types through.
+ *
+ * The artifact is written as `.mjs` and read back as plain JavaScript, so the
+ * failure surfaced as a syntax error pointing at generated code rather than at
+ * the `.wrn` line responsible.
+ */
+declare function stripBrowserTypes(code: string): string;
-declare function generateStoreModule(ast: PageAst$1): string;
+declare function generateDeclarations(ast: PageAst): string;
+
+declare function generateStoreModule(ast: PageAst): string;
/** Standalone browser artifact for an imported `.wrn` store. */
-declare function generateStoreBrowserModule(ast: PageAst$1): string;
+declare function generateStoreBrowserModule(ast: PageAst): string;
type ImportMode = "legacy" | "compatible" | "explicit";
interface ImportResolverOptions {
@@ -253,6 +271,8 @@ interface ImportResolverOptions {
interface ResolvedImport {
declaration: StructuredImportDecl;
resolved?: string;
+ /** `.tsx` imports are React islands, not `.wrn` components. */
+ kind?: "island";
diagnostic?: {
code: string;
message: string;
@@ -281,6 +301,8 @@ interface RuntimeRequirements {
kind: RouteExecutionKind;
canPrerender: boolean;
needsClientRuntime: boolean;
+ /** True when the route mounts a React island and must ship the island runtime. */
+ needsIslandRuntime: boolean;
needsServerRuntime: boolean;
hydrationStrategy: string | null;
reasons: string[];
@@ -302,12 +324,19 @@ interface OptimizationReport {
serverOnlyModules: string[];
}
/** Safe compile-time folding for literal conditional branches. */
-declare function optimizeAst(ast: PageAst$1): {
- ast: PageAst$1;
+declare function optimizeAst(ast: PageAst): {
+ ast: PageAst;
eliminatedBranches: number;
};
-declare function analyzeOptimizations(ast: PageAst$1): OptimizationReport;
-declare function analyzeRuntimeRequirements(ast: PageAst$1): RuntimeRequirements;
+declare function analyzeOptimizations(ast: PageAst): OptimizationReport;
+/**
+ * A route containing a React island ships JavaScript and can no longer be
+ * classified as zero-JS static, so island presence must reach the classifier.
+ */
+declare function routeNeedsIslands(imports: ResolvedImport[]): boolean;
+declare function analyzeRuntimeRequirements(ast: PageAst, options?: {
+ hasIslands?: boolean;
+}): RuntimeRequirements;
type DeploymentRuntime = "bun" | "node" | "edge" | "worker" | "service-worker" | "browser";
type RuntimeCapability = "filesystem" | "tcp" | "process" | "websocket" | "crypto" | "streams" | "background-tasks";
@@ -360,6 +389,93 @@ declare class DependencyGraph {
affected(file: string): string[];
}
+type IslandStrategy = "only" | "load" | "visible" | "idle";
+interface IslandDiagnostic {
+ code: "WRN-ISLAND-PROPS";
+ message: string;
+ severity: "error";
+}
+declare function parseIslandStrategy(directives: string[]): IslandStrategy;
+/**
+ * Interprets an island attribute value with JSX semantics.
+ *
+ * `title="Revenue"` is a string, `start={3}` is a number, `flag` alone is
+ * `true`. Without this every prop arrives as a string, so `start={3}` would be
+ * `"3"` and arithmetic in the island silently concatenates.
+ *
+ * Returns `dynamic` for a `{…}` value that is not JSON: such expressions are
+ * evaluated at runtime and cannot cross the serialization boundary.
+ */
+declare function islandPropValue(raw: string | undefined): {
+ value: unknown;
+} | {
+ dynamic: string;
+};
+declare function serializeIslandProps(componentName: string, props: Record<string, unknown>): {
+ json: string;
+} | {
+ diagnostic: IslandDiagnostic;
+};
+declare function renderIslandMarker(input: {
+ name: string;
+ strategy: IslandStrategy;
+ propsJson: string;
+}): string;
+/**
+ * Local binding names introduced by island imports.
+ *
+ * Codegen sees only component tag names, so it needs the set of names that came
+ * from `.tsx` imports to tell an island apart from a `.wrn` component.
+ */
+declare function islandNamesFrom(imports: Array<{
+ kind?: "island";
+ declaration: {
+ defaultImport?: string;
+ };
+}>): Set<string>;
+
+interface IslandInput {
+ name: string;
+ sourcePath: string;
+}
+interface IslandBuildResult {
+ assets: Array<{
+ name: string;
+ hash: string;
+ path: string;
+ }>;
+ sharedChunks: string[];
+}
+/**
+ * Generates the per-island browser entry.
+ *
+ * Never imports react-dom/server — islands are client-only.
+ */
+declare function generateIslandEntry(input: IslandInput): string;
+declare function assertReactAvailable(appRoot: string): {
+ code: "WRN-ISLAND-REACT-MISSING";
+ message: string;
+ severity: "error";
+} | null;
+/**
+ * Bundles island entries. `splitting: true` is required so React is emitted
+ * once as a shared chunk rather than duplicated into every island.
+ */
+declare function buildIslands(input: {
+ islands: IslandInput[];
+ outDir: string;
+ /**
+ * App root used to resolve the island mount runtime. When given, the runtime
+ * is emitted as `runtime.js` in the SAME build as the islands.
+ *
+ * This is not a convenience: building the runtime separately gives it its own
+ * copy of React, and a component rendered by one copy while importing hooks
+ * from another fails with "Cannot read properties of null (reading
+ * 'useState')". One build with splitting keeps React in a single shared chunk.
+ */
+ appRoot?: string;
+}): Promise<IslandBuildResult>;
+
/**
* @wrnexus/compiler — the `.wrn` language compiler.
*
@@ -369,26 +485,26 @@ declare class DependencyGraph {
interface CompileResult {
code: string;
- ast: PageAst$1;
+ ast: PageAst;
/** Backward-compatible plain diagnostic messages. */
diagnostics: string[];
/** Structured diagnostics for editors, CI, and the DevToolbar. */
richDiagnostics: WrnDiagnostic[];
}
/** Compile `.wrn` source into an Expo Router React Native screen. */
-declare function compileNativeWireFile(source: string): string;
+declare function compileNativeWrnFile(source: string): string;
/**
* Compile `.wrn` source into TypeScript source. Errors include a stable code,
* source location, code frame, and actionable hint whenever available.
*/
-declare function compileWireFile(source: string, filePath?: string): string;
+declare function compileWrnFile(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, type DeploymentRuntime, NativeCompileError, type OptimizationReport, type RouteExecutionKind, type RuntimeCapability, type RuntimeCapabilityDiagnostic, type RuntimeRequirements, analyzeOptimizations, analyzeRuntimeImports, analyzeRuntimeRequirements, compilationKey, compile, compileNativeWireFile, compileWireFile, createCompilationCache, createComponentContract, createWrnSourceMap, generate, generateBrowserModule, generateDeclarations, generateNative, generateServerFunctionsModule, generateStoreBrowserModule, generateStoreModule, generateTargets, optimizeAst, resolveWrnImport, resolveWrnImports, rpcManifest, runtimeCapabilities };
-
Examples
Copy-ready examples from the installed package documentation.
Compile a page
import { compileWireFile } from "@wrnexus/compiler";
+export { type CompilationCache, type CompilationCacheEntry, type CompilationCacheOptions, type CompileResult, DependencyGraph, type DeploymentRuntime, type IslandBuildResult, type IslandDiagnostic, type IslandInput, type IslandStrategy, NativeCompileError, type OptimizationReport, type RouteExecutionKind, type RuntimeCapability, type RuntimeCapabilityDiagnostic, type RuntimeRequirements, analyzeOptimizations, analyzeRuntimeImports, analyzeRuntimeRequirements, assertReactAvailable, buildIslands, compilationKey, compile, compileNativeWrnFile, compileWrnFile, createCompilationCache, createComponentContract, createWrnSourceMap, generate, generateBrowserModule, generateDeclarations, generateIslandEntry, generateNative, generateServerFunctionsModule, generateStoreBrowserModule, generateStoreModule, generateTargets, islandNamesFrom, islandPropValue, optimizeAst, parseIslandStrategy, renderIslandMarker, resolveWrnImport, resolveWrnImports, routeNeedsIslands, rpcManifest, runtimeCapabilities, serializeIslandProps, stripBrowserTypes };
+
Examples
Copy-ready examples from the installed package documentation.
Compile a page
import { compileWrnFile } from "@wrnexus/compiler";
-const ts = compileWireFile(`
+const ts = compileWrnFile(`
page Home {
state count = 0
seo { title = "Home" description = "Welcome" }
@@ -414,9 +530,9 @@ const lx = new Lexer("page Home {");
lx.next(); // { type: "ident", value: "page", pos: 0 }
lx.next(); // { type: "ident", value: "Home", pos: 5 }
lx.next(); // { type: "lbrace", value: "{", pos: 10 }
-
+
Content collections, validation, querying, and publishing workflows.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/content@0.8.8Request preview access. Never put registry tokens in source control.
Typed content collections for Markdown/MDX-like documents and remote CMS records. Collections validate frontmatter through any { parse(input) } schema, render escaped HTML, and expose draft preview, versions, references, headings, search indexes, pagination, RSS and sitemaps.
Content collections, validation, querying, and publishing workflows.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/content@0.8.9Request preview access. Never put registry tokens in source control.
Typed content collections for Markdown/MDX-like documents and remote CMS records. Collections validate frontmatter through any { parse(input) } schema, render escaped HTML, and expose draft preview, versions, references, headings, search indexes, pagination, RSS and sitemaps.
const posts = defineCollection({
name: "posts",
schema: PostSchema,
@@ -176,7 +176,7 @@ const published = await posts.load();
const preview = await posts.load({ previewToken: request.headers.get("x-preview-token") ?? "" });bun add @wrnexus/contentContexts, middleware, security, sessions, caching, JSX, and realtime.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/core@0.8.8Request preview access. Never put registry tokens in source control.
The framework core: the request Context, middleware contract, and the security, session, caching, streaming, realtime, and JSX primitives every other WRNexusJS package builds on.
+ Contexts, middleware, security, sessions, caching, JSX, and realtime.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/core@0.8.16Request preview access. Never put registry tokens in source control.
The framework core: the request Context, middleware contract, and the security, session, caching, streaming, realtime, and JSX primitives every other WRNexusJS package builds on.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
@wrnexus/core is the shared foundation of WRNexusJS. It defines the Context object that flows through every middleware, page, and API route, plus the Middleware/Next contract they implement. On top of that it ships the building blocks a real app needs: cookie-backed sessions, password auth, CSRF protection, rate limiting, request logging, HTTP + in-memory caching, file uploads, streaming/SSE responses, WebSocket "rooms", security headers/CORS, and a server-side JSX runtime that renders to HTML strings. Everything here is server-side and Bun-native (it uses Bun.password, Bun.write, the web-standard Request/Response, and crypto). You depend on it directly and transitively through the rest of the framework.
The Context (ctx) is the single value passed to middleware and handlers.
| Export | Kind | Description | |
|---|---|---|---|
Context | type | Per-request object: req, url, lang, t, params, locals, user?, ip?, cookies, session, localStorage. | |
Next | type | `() => Promise<Response> \ | Response` — invokes the next middleware/handler. |
Middleware | type | `(ctx, next) => Promise<Response> \ | Response. Return next() to continue, or a Response` to short-circuit. |
createContext(req, url) | fn | Build a fresh Context for an incoming request (wires up cookies, session, localStorage snapshot). | |
withContextHeaders(ctx, res) | fn | Apply accumulated headers (e.g. Set-Cookie) from the context onto a response. | |
PageComponent | type | `(ctx) => string \ | Promise<string>` — a page module's default export. |
PageMeta / SeoConfig | type | <head> metadata: title, description, canonical, robots, image, twitterCard, themeColor, … | |
TFunction | type | (key, params?) => string — translate a key for ctx.lang, interpolating {param} placeholders. |
Contextreq, url, lang, t, params, locals, user?, ip?, cookies, session, localStorage.NextMiddleware. Return next() to continue, or a Response` to short-circuit.createContext(req, url)Context for an incoming request (connects up cookies, session, localStorage snapshot).withContextHeaders(ctx, res)Set-Cookie) from the context onto a response.PageComponentPageMeta / SeoConfig<head> metadata: title, description, canonical, robots, image, twitterCard, themeColor, …TFunction(key, params?) => string — translate a key for ctx.lang, interpolating {param} placeholders.Key Context fields:
ctx.locals — per-request scratch space for passing values between middleware.hashPassword(password)(string) => Promise<string>verifyPassword(password, hash)(string, string) => Promise<boolean>false on bad/empty hash.logIn(ctx, user)(Context, U) => voidctx.user.logOut(ctx)(Context) => voidctx.user.getUser(ctx)ctx.user, falling back to the session.sessionAuth()() => Middlewarectx.user from the session each request. Register early.requireAuth(options?)(RequireAuthOptions?) => Middleware401 JSON, page navigations get 302 to loginPath (default /login) with ?next=.SESSION_USER_KEY"user"RequireAuthOptions: { loginPath?: string }.
@wrnexus/coreDouble-submit cookie pattern: a readable wire-csrf cookie is echoed in an x-csrf-token header on unsafe requests.
Double-submit cookie pattern: a readable wrn-csrf cookie is echoed in an x-csrf-token header on unsafe requests.
| Export | Signature | Notes |
|---|---|---|
csrfToken(ctx) | (Context) => string | Ensures the CSRF cookie exists and returns its token. |
verifyCsrf(ctx) | (Context) => boolean | Safe methods (GET/HEAD/OPTIONS) pass; otherwise header/ctx.locals._csrf must match the cookie (constant-time). |
csrfProtection() | () => Middleware | 403s unsafe requests with a missing/mismatched token. |
CSRF_COOKIE / CSRF_HEADER | "wire-csrf" / "x-csrf-token" | Cookie & header names. |
csrfToken(ctx)(Context) => stringverifyCsrf(ctx)(Context) => booleanctx.locals._csrf must match the cookie (constant-time).csrfProtection()() => MiddlewareCSRF_COOKIE / CSRF_HEADER"wrn-csrf" / "x-csrf-token"@wrnexus/coreFixed-window limiter that returns 429 with Retry-After and emits RateLimit-Limit/-Remaining/-Reset headers.
| Export | Signature | Notes | |
|---|---|---|---|
withSecurityHeaders(req, res, mode, security?, nonce?) | → Response | Applies CORS + CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, COOP, Trusted Types, and extraHeaders. | |
createCorsPreflightResponse(req, security?) | → `Response \ | null` | Builds a 204/403 preflight response for CORS OPTIONS requests. |
isWebSocketOriginAllowed(req, security?) | → boolean | Guards WS upgrades against cross-site hijacking (allows same-origin, configured CORS origins, and non-browser clients). |
Config types: SecurityConfig (top-level), CorsConfig/CorsOrigin, ContentSecurityPolicyConfig/CspDirectiveValue, HstsConfig, TrustedTypesConfig, PermissionsPolicyConfig. WRNexusJS applies sensible defaults (self-only CSP, frame-ancestors 'none', restrictive Permissions-Policy, HSTS in production, Trusted Types in production); each is individually overridable or disable-able via false.
Config types: SecurityConfig (top-level), CorsConfig/CorsOrigin, ContentSecurityPolicyConfig/CspDirectiveValue, HstsConfig, TrustedTypesConfig, PermissionsPolicyConfig. WRNexusJS applies sensible defaults (self-only CSP, frame-ancestors 'self', restrictive Permissions-Policy, HSTS in production, Trusted Types in production); each is individually overridable or disable-able via false.
@wrnexus/coreThese back the ctx.cookies, ctx.session, and ctx.localStorage fields.
| Export | Kind | Purpose |
|---|---|---|
startServer(opts: ServeOptions) | Promise<RunningServer> | Start the dev server on Bun.serve: builds the router, connects/migrates databases, wires assets + HMR, and starts the file watcher. |
createHandlers(deps: RuntimeDeps) | Handlers | The shared request runtime (fetch + websocket handlers). Re-exported from runtime.ts. |
createProductionServer(manifest, opts) | Bun.Server | Start the production server from a precompiled manifest. |
createProductionHandlers(manifest, opts) | Handlers | Build the portable prod fetch/websocket handlers with no server bound (the deployment-adapter seam). |
startGateway(opts: GatewayOptions) | Promise<RunningGateway> | Boot multiple apps as child processes and route by Host. |
toRequest, writeResponse, nodeListener, serveNode | functions | node:http ↔ WinterCG Request/Response adapter. |
RESTART_EXIT_CODE | number (97) | Exit code the dev child uses to ask the supervisor for a fresh process. |
STYLES_HREF, HMR_CLIENT_JS | constants | The global stylesheet URL and the inline HMR client script. |
startServer(opts: ServeOptions)Promise<RunningServer>Bun.serve: builds the router, connects/migrates databases, connects assets + HMR, and starts the file watcher.createHandlers(deps: RuntimeDeps)Handlersruntime.ts.createProductionServer(manifest, opts)Bun.ServercreateProductionHandlers(manifest, opts)HandlersstartGateway(opts: GatewayOptions)Promise<RunningGateway>Host.toRequest, writeResponse, nodeListener, serveNodenode:http ↔ WinterCG Request/Response adapter.RESTART_EXIT_CODEnumber (97)STYLES_HREF, HMR_CLIENT_JSExported types: ServeOptions, RunningServer, RuntimeDeps, AssetServer, WsData, GatewayApp, GatewayOptions, GatewayAuth, GatewaySecurity, RunningGateway, FetchHandler.
startServer(opts)interface ServeOptions {
@@ -60,6 +60,8 @@ interface RunningServer {
stop(): void;
}
In development, startServer also connects app/db/migrations (and app/db/<name>/migrations) and auto-applies migrations, then starts an in-process file watcher. CSS edits hot-swap live. Page, component, layout, API, middleware, realtime, schema, locale, and public-asset edits invalidate only their cached modules, rescan routes where necessary, and morph fresh HTML through the existing HMR WebSocket. The server process and active gateway stay running.
Add app/pages/404.wrn to customize unmatched frontend routes. The rendered page keeps the requested response's HTTP 404 status. Add app/api/404.ts with normal HTTP method exports to customize unmatched backend/API responses; its response body and headers are preserved and its status is normalized to 404.
getWrnCompileMetrics() exposes cumulative content-addressed compiler cache hits, misses, successful compilations, errors, totalDurationMs, and lastDurationMs for the DevToolbar or custom diagnostics. Tests and embedded servers can call resetWrnCompileMetrics() to establish a fresh measurement window.
createHandlers(deps)The core runtime shared by dev and prod. It handles CORS preflight, /healthz and /__wrnexus/health, request-body size limits (413), HMR socket upgrades (/__wrnexus/hmr), realtime WebSocket upgrades (defineRoom default export or a raw websocket export), the middleware pipeline, API routes (/api/*), framework assets (/__wrnexus/*), public assets, and full SSR page rendering (component mounts, layouts, slots, i18n markers, per-page script selection, ETag/304, gzip).
</invoke>
Generated from the exact installed package declarations.
import { Mode, Middleware, SeoConfig, SecurityConfig, HealthRegistry, RealtimeBus, RealtimeConnectMeta } from '@wrnexus/core';
import { Router } from '@wrnexus/router';
-import { ResolvedTheme, MobileConfig, PwaConfig, ObservabilityConfig, TenancyConfig, NavigationConfig, StylesConfig, ThemeConfig } from '@wrnexus/styles';
+import { ResolvedTheme, MobileConfig, PwaConfig, ObservabilityConfig, TenancyConfig, NavigationConfig, StylesConfig, ThemeConfig, BrowserCookiesConfig } from '@wrnexus/styles';
import { ResolvedI18n, I18nConfig } from '@wrnexus/i18n';
+import { QueueStorageConfig } from '@wrnexus/queue';
import { StorageConfig } from '@wrnexus/uploader';
import { DevToolbarConfig, DevToolbarPlatformSnapshot, DevToolbarPanel } from '@wrnexus/dev-toolbar/types';
import { ClientRuntimeDefinition, PluginInput } from '@wrnexus/plugin';
@@ -287,6 +290,31 @@ interface WrnCompileMetrics {
declare function getWrnCompileMetrics(): Readonly<WrnCompileMetrics>;
declare function resetWrnCompileMetrics(): void;
+/**
+ * Shared server-function RPC helpers used by both the dev server (index.ts)
+ * and the production server (prod.ts). Kept in their own module so prod.ts
+ * can import them without creating a circular dependency on index.ts (which
+ * itself re-exports `createProductionServer`/`createProductionHandlers` from
+ * prod.ts).
+ */
+/**
+ * CSRF check for `/__wrnexus/rpc` (the server-function RPC endpoint the
+ * browser runtime calls for `server.fn()`). Requires a same-origin request
+ * carrying a matching CSRF cookie + header pair — the standard double-submit
+ * cookie pattern.
+ */
+declare function validateRpcCsrf(request: Request): boolean;
+/**
+ * Wrap the server-function RPC handler so it runs inside the request's
+ * AsyncLocalStorage context. `/__wrnexus/rpc` is intercepted BEFORE
+ * `handlers.fetch` (fetchHandler) in both dev and production, so a server
+ * function called via `server.fn()` from the browser runs entirely outside
+ * fetchHandler's own context wrap. It runs user code directly, so — like
+ * every other entry point that runs user server code — it needs the request
+ * context too.
+ */
+declare function withServerFnRequestContext(handler: (request: Request) => Promise<Response>): (request: Request) => Promise<Response>;
+
/**
* HMR hub — tracks connected browser HMR sockets and broadcasts update events.
*
@@ -328,8 +356,8 @@ declare class HmrHub {
*
* It owns the HTTP/WebSocket dispatch and the SSR document assembly, but knows
* nothing about *how* modules or assets are produced — those come in via
- * `RuntimeDeps`. Dev wires in dynamic module loading + on-the-fly bundling;
- * prod wires in a static manifest + pre-built chunks on disk.
+ * `RuntimeDeps`. Dev connects in dynamic module loading + on-the-fly bundling;
+ * prod connects in a static manifest + pre-built chunks on disk.
*/
/** A realtime module's `websocket` export: a bag of optional lifecycle hooks. */
@@ -367,7 +395,7 @@ interface RuntimeDeps {
assets: AssetServer;
/** When true, inject the global stylesheet link into every page head. */
hasStyles?: boolean;
- /** When true, inject the Wire UI stylesheet link (`/__wrnexus/ui.css`). */
+ /** When true, inject the WRNexusJS UI stylesheet link (`/__wrnexus/ui.css`). */
hasUi?: boolean;
/** Production build combined theme + UI stylesheet. */
hasFrameworkStyles?: boolean;
@@ -427,6 +455,7 @@ interface RuntimeDeps {
interface UpgradeServer {
upgrade(req: Request, opts: {
data: WsData;
+ headers?: Headers;
}): boolean;
/** Bun's per-request socket peer address (used for the non-spoofable client IP). */
requestIP?(req: Request): {
@@ -441,6 +470,7 @@ interface Ws {
}
interface Handlers {
fetch(req: Request, server: UpgradeServer): Promise<Response | undefined>;
+ shutdown(): Promise<void>;
websocket: {
open(ws: Ws): void;
message(ws: Ws, message: string | Uint8Array): void;
@@ -461,6 +491,7 @@ declare function createHandlers(deps: RuntimeDeps): Handlers;
* reverse proxy for both HTTP and WebSocket. Apps talk to each other at runtime
* via @wrnexus/pubsub (use the Redis driver so messages cross processes).
*/
+
type GatewayForwardAuth = ({
url: string;
app?: never;
@@ -588,6 +619,11 @@ interface ProdManifest {
name: string;
mod: RouteModule;
}[];
+ /** Background queue modules (from app/queues/*.ts). */
+ queues?: {
+ name: string;
+ mod: RouteModule;
+ }[];
}
interface ProductionPluginAsset {
path: string;
@@ -601,7 +637,7 @@ interface ProdOptions {
inlineStyles?: string;
/** `stylesPath` contains theme + UI + app CSS in cascade order. */
stylesIncludeFramework?: boolean;
- /** `stylesPath` already contains the shared Wire UI stylesheet. */
+ /** `stylesPath` already contains the shared WRNexusJS UI stylesheet. */
stylesIncludeUi?: boolean;
/** Absolute path to the pre-built reactive runtime. */
reactivePath?: string;
@@ -609,6 +645,7 @@ interface ProdOptions {
controllersPath?: string;
/** Absolute directory containing bundled per-WRN browser modules. */
clientModulesDir?: string;
+ islandsDir?: string;
/** Absolute path to the pre-built theme stylesheet (`theme.css`). */
themePath?: string;
/** Pre-built active theme/accent stylesheets, loaded on demand. */
@@ -617,11 +654,11 @@ interface ProdOptions {
themeJsPath?: string;
/** Resolved theme config: enables `<html data-theme>` + `theme.css` link. */
theme?: ResolvedTheme;
- /** Absolute path to the pre-built Wire UI stylesheet (`ui.css`). */
+ /** Absolute path to the pre-built WRNexusJS UI stylesheet (`ui.css`). */
uiCssPath?: string;
- /** Combined production theme + Wire UI stylesheet. */
+ /** Combined production theme + WRNexusJS UI stylesheet. */
frameworkCssPath?: string;
- /** Pre-built `window.__wireSchemas = {...}` script for client validation. */
+ /** Pre-built `window.__wrnSchemas = {...}` script for client validation. */
schemasJs?: string;
/**
* Authorization declarations discovered by `wrnexus build` from
@@ -648,6 +685,8 @@ interface ProdOptions {
driver: string;
url: string;
}>;
+ /** Queue persistence; durable SQLite is used when omitted. */
+ queue?: QueueStorageConfig;
/**
* Absolute path to the default db's migrations bundled into the build
* (`dist/migrations`). When set, they are applied on startup — like dev.
@@ -722,13 +761,6 @@ interface AuthzManifestEntry {
* `createProductionHandlers`, ever runs.
*/
declare function applyAuthzManifestEarly(entries: AuthzManifestEntry[]): void;
-/**
- * Build the portable request handler from a precompiled manifest — a
- * WinterCG-style `fetch(request) => Response` plus the websocket handlers, with
- * NO server bound. This is the deployment-adapter seam: `createProductionServer`
- * wraps it in `Bun.serve`, `serveNode` bridges it onto `node:http`, and edge or
- * serverless targets can call `fetch` directly.
- */
declare function createProductionHandlers(manifest: ProdManifest, opts: ProdOptions): ReturnType<typeof createHandlers>;
/** Start the production server on Bun from a precompiled manifest. */
declare function createProductionServer(manifest: ProdManifest, opts: ProdOptions): Promise<Bun.Server<WsData>>;
@@ -784,6 +816,8 @@ interface ServeOptions {
/** Inject the live-reload client (defaults to true in development). */
hmr?: boolean;
appConfig?: Record<string, unknown>;
+ /** Queue persistence; durable SQLite is used when omitted. */
+ queue?: QueueStorageConfig;
/** Resolved absolute path to the global CSS entry, or null. */
styleEntry?: string | null;
/** Custom styles config (e.g. a Tailwind/PostCSS processor). */
@@ -796,6 +830,8 @@ interface ServeOptions {
security?: SecurityConfig;
/** Design-token theme config (merged over the built-in light/dark). */
theme?: ThemeConfig;
+ /** Shared browser-cookie defaults and preference-specific overrides. */
+ cookies?: BrowserCookiesConfig;
/** i18n config (default language + supported locales). */
i18n?: I18nConfig;
/** Default database connection (driver + url). Enables `getDb()` and dev auto-migrate. */
@@ -832,7 +868,7 @@ interface RunningServer {
}
declare function startServer(opts: ServeOptions): Promise<RunningServer>;
-export { type AssetServer, type AuthzManifestEntry, type FetchHandler, type GatewayApp, type GatewayAuth, type GatewayOptions, type GatewaySecurity, RESTART_EXIT_CODE, type RunningGateway, type RunningServer, type RuntimeDeps, type ServeOptions, type WrnCompileMetrics, type WsData, applyAuthzManifestEarly, createHandlers, createProductionHandlers, createProductionServer, expandStaticComponents, getWrnCompileMetrics, nodeListener, precomputePartialStaticShell, resetWrnCompileMetrics, serveNode, startGateway, startServer, toRequest, writeResponse };
+export { type AssetServer, type AuthzManifestEntry, type FetchHandler, type GatewayApp, type GatewayAuth, type GatewayOptions, type GatewaySecurity, RESTART_EXIT_CODE, type RunningGateway, type RunningServer, type RuntimeDeps, type ServeOptions, type WrnCompileMetrics, type WsData, applyAuthzManifestEarly, createHandlers, createProductionHandlers, createProductionServer, expandStaticComponents, getWrnCompileMetrics, nodeListener, precomputePartialStaticShell, resetWrnCompileMetrics, serveNode, startGateway, startServer, toRequest, validateRpcCsrf, withServerFnRequestContext, writeResponse };
Copy-ready examples from the installed package documentation.
import { startServer } from "@wrnexus/dev-server";
const server = await startServer({
@@ -871,9 +907,9 @@ await startGateway({
],
security: { trustedHostsOnly: true, rateLimit: { max: 600 } },
});Development toolbar diagnostics, inspection, and runtime status.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/dev-toolbar@0.8.8Request preview access. Never put registry tokens in source control.
Development-only page quality toolbar for WRNexusJS.
+Development toolbar diagnostics, inspection, and runtime status.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/dev-toolbar@0.8.18Request preview access. Never put registry tokens in source control.
Development-only page quality toolbar for WRNexusJS.
Hashing, HMAC, authenticated encryption, and key derivation.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/encryption@0.8.8Request preview access. Never put registry tokens in source control.
Authenticated encryption, hashing, HMAC, key rotation, and optional encrypted HTTP exchanges for WRNexusJS.
+Hashing, HMAC, authenticated encryption, and key derivation.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/encryption@0.8.10Request preview access. Never put registry tokens in source control.
Authenticated encryption, hashing, HMAC, key rotation, and optional encrypted HTTP exchanges for WRNexusJS.
generateKey() — random 256-bit AES key encoded as base64.Encrypted HTTP bodies do not replace TLS/HTTPS. Always use HTTPS.
This layer is appropriate for service-to-service traffic, native/mobile applications, controlled agents, and selected fields protected with server-managed keys. It cannot conceal data from an end user when browser JavaScript receives the decryption key. Never ship a long-lived server encryption key to a browser.
Use a shared replay store such as Redis in multi-instance deployments. The memory replay store is process-local.
Generated from the exact installed package declarations.
import { Middleware } from '@wrnexus/core';
+import { Db } from '@wrnexus/db';
interface EncryptionKey {
id: string;
@@ -157,6 +158,22 @@ declare function encryptedExchange(options: EncryptedHttpOptions & {
encryptResponses?: boolean;
}): Middleware;
+interface SecretResourceOptions<T extends Record<string, unknown>> {
+ db: () => Db;
+ table: string;
+ key: string | (() => string);
+ encrypted: readonly (keyof T & string)[];
+ hidden?: readonly (keyof T & string)[];
+ id?: string;
+}
+/** Encrypt selected database fields and guarantee hidden fields never leave `safe()`. */
+declare function defineSecretResource<T extends Record<string, unknown>>(options: SecretResourceOptions<T>): {
+ seal(input: T): Promise<T>;
+ open(input: T): Promise<T>;
+ safe(input: T): Partial<T>;
+ find(value: string | number): Promise<T | null>;
+};
+
/**
* @wrnexus/encryption — authenticated symmetric encryption (AES-256-GCM) via
* WebCrypto, dependency-free. Use it to encrypt secrets, tokens, or database
@@ -186,7 +203,7 @@ declare function decrypt(payload: string, key: string): Promise<string>;
/** Derive a base64 AES key from a password + salt (PBKDF2, 100k iterations). */
declare function deriveKey(password: string, salt: string): Promise<string>;
-export { type DecryptedHttpBody, ENCRYPTED_HTTP_CONTENT_TYPE, ENCRYPTED_HTTP_VERSION, type EncryptedHttpEnvelope, type EncryptedHttpOptions, type EncryptionKey, type EncryptionKeyring, type ReplayStore, createEncryptedRequest, createKeyring, createMemoryReplayStore, decrypt, decryptEncryptedResponse, decryptHttpBody, decryptRequest, deriveKey, encrypt, encryptHttpBody, encryptResponse, encryptedBody, encryptedExchange, encryptedFetch, generateKey, hmacSign, hmacVerify, needsRotation, open, seal, sealedKeyId, sha256 };
+export { type DecryptedHttpBody, ENCRYPTED_HTTP_CONTENT_TYPE, ENCRYPTED_HTTP_VERSION, type EncryptedHttpEnvelope, type EncryptedHttpOptions, type EncryptionKey, type EncryptionKeyring, type ReplayStore, type SecretResourceOptions, createEncryptedRequest, createKeyring, createMemoryReplayStore, decrypt, decryptEncryptedResponse, decryptHttpBody, decryptRequest, defineSecretResource, deriveKey, encrypt, encryptHttpBody, encryptResponse, encryptedBody, encryptedExchange, encryptedFetch, generateKey, hmacSign, hmacVerify, needsRotation, open, seal, sealedKeyId, sha256 };
Copy-ready examples from the installed package documentation.
import {
createEncryptedRequest,
createKeyring,
@@ -219,7 +236,7 @@ const response = await fetch(request);
const result = await decryptEncryptedResponse(response, request, { keyring });bun add @wrnexus/encryptionGraphQL schemas, routes, and framework plugin integration.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/graphql@0.8.8Request preview access. Never put registry tokens in source control.
Optional GraphQL endpoint plugin. Supply the executor from GraphQL.js, GraphQL Yoga, Mercurius, or another maintained engine; WRNexus owns bounded HTTP input, depth/alias limits, introspection policy, generic production errors and plugin route integration.
Generated from the exact installed package declarations.
export { G as GraphqlExecutionResult, a as GraphqlOptions, b as GraphqlRequest, c as createGraphqlHandler, default as graphqlPlugin } from './plugin.js';
+ Data · Package reference@wrnexus/graphql
GraphQL schemas, routes, and framework plugin integration.
Install the package
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/graphql@0.8.8
Request preview access. Never put registry tokens in source control.
Optional GraphQL endpoint plugin. Supply the executor from GraphQL.js, GraphQL Yoga, Mercurius, or another maintained engine; WRNexus owns bounded HTTP input, depth/alias limits, introspection policy, generic production errors and plugin route integration.
Complete TypeScript API
Generated from the exact installed package declarations.
export { G as GraphqlExecutionResult, a as GraphqlOptions, b as GraphqlRequest, c as createGraphqlHandler, default as graphqlPlugin } from './plugin.js';
import '@wrnexus/plugin';
Examples
Copy-ready examples from the installed package documentation.
Install @wrnexus/graphql
bun add @wrnexus/graphql
Import @wrnexus/graphql
import * as graphql from "@wrnexus/graphql";
Safe Context URL helpers and forward-auth login redirects.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/helpers@0.8.8Request preview access. Never put registry tokens in source control.
Safe convenience helpers for common WRNexusJS application flows. The package uses standard Context, URL, and Response values and has no runtime dependency beyond @wrnexus/core.
Safe Context URL helpers and forward-auth login redirects.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/helpers@0.8.9Request preview access. Never put registry tokens in source control.
Safe convenience helpers for common WRNexusJS application flows. The package uses standard Context, URL, and Response values and has no runtime dependency beyond @wrnexus/core.
bun add @wrnexus/helpers
The package is private, so the machine must be authenticated to the wrnexus npm organization.
encoded returnTo parameter.
For direct requests without gateway headers, URL helpers use ctx.url.
Generated from the exact installed package declarations.
import { Context } from '@wrnexus/core';
+import { Db } from '@wrnexus/db';
declare function appOrigin(appName: string): string;
declare function appUrl(appName: string, path?: string): string;
@@ -94,6 +95,59 @@ declare function safeJsonParse<T>(value: string, fallback: T): T;
declare function clamp(value: number, min: number, max: number): number;
declare function once<T extends (...args: any[]) => any>(fn: T): T;
+declare class HttpError extends Error {
+ readonly status: number;
+ readonly details?: unknown | undefined;
+ constructor(status: number, message: string, details?: unknown | undefined);
+}
+declare function subjectId(ctx: Pick<Context, "user">): string;
+declare function requireUser(ctx: Pick<Context, "user">): {
+ id: string;
+ user: unknown;
+};
+declare function requireParam(ctx: Pick<Context, "params">, name: string, options?: {
+ integer?: boolean;
+ positive?: boolean;
+}): string | number;
+declare function requireJson<T = Record<string, unknown>>(ctx: Pick<Context, "req">): Promise<T>;
+declare function requirePermission(ctx: Context, permission: string, resource?: unknown): Promise<void>;
+declare const json: {
+ ok: <T>(value: T) => Response;
+ created: <T>(value: T) => Response;
+ noContent: () => Response;
+ error: (status: number, message: string, details?: unknown) => Response;
+};
+type ApiHandler = (ctx: Context) => Response | Promise<Response>;
+/** Convert thrown HttpError values into the framework's standard JSON error shape. */
+declare function defineApiRoute(handler: ApiHandler): ApiHandler;
+declare function authorized(permission: string, handler: ApiHandler, resource?: (ctx: Context) => unknown | Promise<unknown>): ApiHandler;
+
+interface ResourceDefinition<T extends Record<string, unknown>> {
+ name: string;
+ db: () => Db;
+ table: string;
+ id?: string;
+ owner?: string;
+ fields: readonly (keyof T & string)[];
+ permissions?: {
+ read?: string;
+ readAny?: string;
+ write?: string;
+ writeAny?: string;
+ };
+ validate?: (input: unknown, mode: "create" | "update") => T | Promise<T>;
+ serialize?: (row: T) => unknown;
+}
+interface ResourceHandlers {
+ list(ctx: Context): Response | Promise<Response>;
+ create(ctx: Context): Response | Promise<Response>;
+ get(ctx: Context): Response | Promise<Response>;
+ update(ctx: Context): Response | Promise<Response>;
+ remove(ctx: Context): Response | Promise<Response>;
+}
+/** Build conventional owned CRUD handlers from one checked resource declaration. */
+declare function defineResource<T extends Record<string, unknown>>(definition: ResourceDefinition<T>): ResourceHandlers;
+
/**
* @wrnexus/helpers — safe conveniences for common WRNexusJS application flows.
*
@@ -135,7 +189,7 @@ declare function getOriginalRequestOrigin(ctx: RequestContext, options?: Origina
*/
declare function redirectToLogin(ctx: RequestContext, loginUrl: string | URL, options?: LoginRedirectOptions): Response;
-export { type AllowedHosts, type LoginRedirectOptions, type OriginalRequestOptions, type RequestContext, type RetryOptions, appOrigin, appUrl, backoffDelay, clamp, currentAppName, currentAppOrigin, getOriginalRequestMethod, getOriginalRequestOrigin, getOriginalRequestPath, getOriginalRequestUrl, once, redirectToLogin, retry, safeJsonParse, sleep, stableStringify, withTimeout, workspaceAppOrigins, workspaceRootDomain };
+export { type AllowedHosts, type ApiHandler, HttpError, type LoginRedirectOptions, type OriginalRequestOptions, type RequestContext, type ResourceDefinition, type ResourceHandlers, type RetryOptions, appOrigin, appUrl, authorized, backoffDelay, clamp, currentAppName, currentAppOrigin, defineApiRoute, defineResource, getOriginalRequestMethod, getOriginalRequestOrigin, getOriginalRequestPath, getOriginalRequestUrl, json, once, redirectToLogin, requireJson, requireParam, requirePermission, requireUser, retry, safeJsonParse, sleep, stableStringify, subjectId, withTimeout, workspaceAppOrigins, workspaceRootDomain };
Copy-ready examples from the installed package documentation.
import type { Context } from "@wrnexus/core";
import { redirectToLogin } from "@wrnexus/helpers";
@@ -162,7 +216,7 @@ export const GET = async (ctx: Context) => {
};Translation loading, locale resolution, and Intl formatting.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/i18n@0.8.8Request preview access. Never put registry tokens in source control.
Recursive locale loading, fallback resolution, SSR/browser translations, locale formatting, and language UI blocks for WRNexusJS.
+Translation loading, locale resolution, and Intl formatting.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/i18n@0.8.12Request preview access. Never put registry tokens in source control.
Recursive locale loading, fallback resolution, SSR/browser translations, locale formatting, and language UI blocks for WRNexusJS.
Both layouts can be used together:
app/locales/en.json
@@ -34,7 +34,7 @@ const i18n = resolveI18n(loadLocales("app/locales", { strict: tru
default: "en",
locales: ["en", "mr", "hi"],
fallbacks: { "mr-IN": ["mr", "en"] },
- cookie: { name: "wire-lang", sameSite: "Lax", secure: true },
+ cookie: { name: "wrn-lang", sameSite: "Lax", secure: true },
});
const lang = resolveLang(i18n, cookieValue, request.headers.get("accept-language"));
@@ -61,7 +61,7 @@ t("common.hello", { name: "Ajay" });
<LanguageSwitcher /><LocaleStatus />LanguageSwitcher renders a native select[data-wire-lang]. The packaged runtime validates the selection against the configured locales, writes the configured language cookie, updates the document lang/dir attributes, emits wrnexus:language-change, and reloads so the next SSR request uses the same cookie. No application-owned browser script is required.
LanguageSwitcher renders a native select[data-wrn-lang]. The packaged runtime validates the selection against the configured locales, writes the configured language cookie, updates the document lang/dir attributes, emits wrnexus:language-change, and reloads so the next SSR request uses the same cookie. No application-owned browser script is required.
formatNumberCopy-ready examples from the installed package documentation.
import { loadLocales, makeT, resolveI18n, resolveLang } from "@wrnexus/i18n";
const i18n = resolveI18n(loadLocales("app/locales", { strict: true }), {
default: "en",
locales: ["en", "mr", "hi"],
fallbacks: { "mr-IN": ["mr", "en"] },
- cookie: { name: "wire-lang", sameSite: "Lax", secure: true },
+ cookie: { name: "wrn-lang", sameSite: "Lax", secure: true },
});
const lang = resolveLang(i18n, cookieValue, request.headers.get("accept-language"));
@@ -237,7 +250,7 @@ const enXA = createPseudoLocale(messages.en);
const arXB = createPseudoLocale(messages.en, { rtl: true });Portable identity records, claims, and account linking.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/identity@0.8.8Request preview access. Never put registry tokens in source control.
Enterprise identity and governance for WRNexusJS: OIDC discovery, signed SAML adapter flows, LDAP/Active Directory synchronization adapters, SCIM provisioning, scoped API keys, service accounts, approval workflows, consent history, retention, subject export/deletion and audit.
+Portable identity records, claims, and account linking.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/identity@0.8.8Request preview access. Never put registry tokens in source control.
Enterprise identity and governance for WRNexusJS: OIDC discovery, signed SAML adapter flows, LDAP/Active Directory synchronization adapters, SCIM provisioning, scoped API keys, service accounts, approval workflows, consent history, retention, subject export/deletion and audit.
The package complements @wrnexus/auth (passkeys, MFA, devices, sessions, OAuth and audited impersonation) and @wrnexus/authz (RBAC, ABAC and policy decisions). Protocol-specific SAML and directory parsing is supplied through adapters so applications can select a maintained vendor SDK without weakening framework validation, replay protection or governance auditing.
Generated from the exact installed package declarations.
interface OidcMetadata {
issuer: string;
authorization_endpoint: string;
@@ -239,7 +239,7 @@ export { type DirectoryAdapter, type EnterpriseIdentity, type GovernanceEve
Copy-ready examples from the installed package documentation.
bun add @wrnexus/identityimport * as identity from "@wrnexus/identity";Responsive image optimization, loaders, placeholders, and components.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/image@0.8.8Request preview access. Never put registry tokens in source control.
Secure responsive-image planning, loader adapters, picture sources, preload hints, placeholders, and performance auditing for WRNexusJS.
+Responsive image optimization, loaders, placeholders, and components.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/image@0.8.10Request preview access. Never put registry tokens in source control.
Secure responsive-image planning, loader adapters, picture sources, preload hints, placeholders, and performance auditing for WRNexusJS.
Build-time conversion is available through optimizeImage. It normalizes and bounds width/format variants, prevents variant explosions, writes deterministic filenames, and returns a manifest with dimensions and byte sizes:
import { optimizeImage } from "@wrnexus/image";
@@ -225,7 +225,7 @@ const picture = createPicture({
});HS256 JWT signing, verification, and bearer authentication.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/jwt@0.8.8Request preview access. Never put registry tokens in source control.
Dependency-free JSON Web Tokens (HS256) via Web Crypto, plus a bearer-token auth middleware for WRNexusJS.+
HS256 JWT signing, verification, and bearer authentication.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/jwt@0.8.9Request preview access. Never put registry tokens in source control.
Dependency-free JSON Web Tokens (HS256) via Web Crypto, plus a bearer-token auth middleware for WRNexusJS.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
@wrnexus/jwt signs and verifies stateless JSON Web Tokens using the HS256 (HMAC-SHA-256) algorithm. It has no runtime dependencies — signing and verification are implemented directly on the standard Web Crypto API (crypto.subtle), which Bun provides natively. It runs server-side and pairs with the session-based auth in @wrnexus/core, giving you a stateless option for API and mobile clients. Reach for it when you need bearer-token auth rather than cookie sessions.
Editor-neutral language intelligence for WRN files.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/language-server@0.8.8Request preview access. Never put registry tokens in source control.
Editor-neutral Language Server Protocol support for .wrn files. It uses the canonical @wrnexus/syntax parser, diagnostics, accessibility rules, and formatter.
Editor-neutral language intelligence for WRN files.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/language-server@0.8.12Request preview access. Never put registry tokens in source control.
Editor-neutral Language Server Protocol support for .wrn files. It uses the canonical @wrnexus/syntax parser, diagnostics, accessibility rules, and formatter.
bunx wrnexus-language-server --stdio
Capabilities include syntax, accessibility and TypeScript expression diagnostics, formatting, completion, hover, document symbols, go-to-definition, references, rename, and quick fixes. The custom wrnexus/virtualDocument request returns the mapped TypeScript representation of an open .wrn document for editor TypeScript plugins and safe refactoring tools. Any LSP 3.x client can launch the stdio command. Example Neovim configuration:
vim.lsp.start({
@@ -75,7 +75,7 @@ interface TextDocument {
text: string;
version?: number;
}
-declare const WRN_COMPLETIONS: readonly ["page", "component", "layout", "props", "outputs", "state", "computed", "effect", "watch", "lifecycle", "load", "action", "api", "realtime", "view", "style", "runtime", "hydrate"];
+declare const WRN_KEYWORDS: readonly ["page", "component", "layout", "props", "outputs", "state", "computed", "effect", "watch", "lifecycle", "load", "action", "api", "apis", "realtime", "view", "style", "runtime", "hydrate"];
declare function offsetAt(text: string, position: Position): number;
declare function positionAt(text: string, requestedOffset: number): Position;
declare function wordAt(text: string, position: Position): {
@@ -156,7 +156,7 @@ declare function hover(document: TextDocument, position: Position): {
range: Range;
} | null;
declare function completionItems(): {
- label: "page" | "component" | "layout" | "props" | "outputs" | "state" | "computed" | "effect" | "watch" | "lifecycle" | "load" | "action" | "api" | "realtime" | "view" | "style" | "runtime" | "hydrate";
+ label: "page" | "component" | "layout" | "props" | "outputs" | "state" | "computed" | "effect" | "watch" | "lifecycle" | "load" | "action" | "api" | "apis" | "realtime" | "view" | "style" | "runtime" | "hydrate";
kind: number;
detail: string;
}[];
@@ -169,7 +169,7 @@ declare function semanticTokens(document: TextDocument): {
data: number[];
};
-export { type Position, type Range, type TextDocument, WRN_COMPLETIONS, type WorkspaceCompletionItem, clearWorkspaceIndexCache, completionItems, definitionLocation, documentDiagnostics, documentSymbols, extractComponentRefactor, formatDocument, hover, htmlToWrn, offsetAt, positionAt, semanticTokens, semanticTokensLegend, symbolLocations, virtualTypeScriptDocument, wordAt, workspaceCompletionItems, workspaceSymbolLocations };
+export { type Position, type Range, type TextDocument, WRN_KEYWORDS, type WorkspaceCompletionItem, clearWorkspaceIndexCache, completionItems, definitionLocation, documentDiagnostics, documentSymbols, extractComponentRefactor, formatDocument, hover, htmlToWrn, offsetAt, positionAt, semanticTokens, semanticTokensLegend, symbolLocations, virtualTypeScriptDocument, wordAt, workspaceCompletionItems, workspaceSymbolLocations };
Copy-ready examples from the installed package documentation.
bunx wrnexus-language-server --stdiovim.lsp.start({
name = "wrnexus",
cmd = { "bunx", "wrnexus-language-server", "--stdio" },
@@ -177,7 +177,7 @@ export { type Position, type Range, type TextDocument, WRN_COMPLETIONS, typ
})Model Context Protocol tools for WRNexus projects.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/mcp@0.8.8Request preview access. Never put registry tokens in source control.
Editor-neutral Model Context Protocol server for AI development tools.
+Model Context Protocol tools for WRNexus projects.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/mcp@0.8.8Request preview access. Never put registry tokens in source control.
Editor-neutral Model Context Protocol server for AI development tools.
bunx wrnexus-mcp --root=.
It exposes current routes, components with props/events, database schema files, compiler diagnostics, runtime errors, dev-server health, framework documentation and installed packages. Files are resolved inside the configured application root and returned as bounded structured JSON.
Generated from the exact installed package declarations.
interface McpTool {
name: string;
@@ -49,7 +49,7 @@ export { type McpServer, type McpServerOptions, type McpTool, createFramewo
Copy-ready examples from the installed package documentation.
bunx wrnexus-mcp --root=.bun add @wrnexus/mcpSSR-safe compatibility access to Capacitor plugins.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/mobile@0.8.8Request preview access. Never put registry tokens in source control.
SSR-safe access to Capacitor plugins from WRNexusJS browser code.+
SSR-safe compatibility access to Capacitor plugins.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/mobile@0.8.8Request preview access. Never put registry tokens in source control.
SSR-safe access to Capacitor plugins from WRNexusJS browser code.
@wrnexus/mobile keeps optional native imports out of server rendering while giving browser-owned modules one consistent registry for Capacitor plugins. During SSR, mobile.isNative() is false and mobile.platform() is "web".
Install a plugin through the WRNexusJS CLI so the web and native projects stay aligned:
@@ -219,7 +219,7 @@ const network = mobile.plugin<NetworkPlugin>("Network"); const status = network ? await network.getStatus() : { connected: true, connectionType: "unknown" };Cross-platform browser and Capacitor capability registry.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/native@0.8.8Request preview access. Never put registry tokens in source control.
Cross-platform capabilities for browsers, Capacitor WebViews, and compiled native apps.+
Cross-platform browser and Capacitor capability registry.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/native@0.8.8Request preview access. Never put registry tokens in source control.
Cross-platform capabilities for browsers, Capacitor WebViews, and compiled native apps.
@wrnexus/native exposes capabilities by name so application code can ask what the current platform supports before presenting an action. Browser capabilities use Web APIs; mobile capabilities use installed Capacitor plugins. platform() returns "server" during SSR, "browser" on the web, and the Capacitor platform in a native WebView.
bun add @wrnexus/native
@@ -160,7 +160,7 @@ const position = await native.run(
);OAuth 2.0, PKCE, provider presets, and profile mapping.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/oauth@0.8.8Request preview access. Never put registry tokens in source control.
Dependency-free OAuth 2.0 sign-in for any provider, with PKCE and presets for Google, GitHub, and Discord.+
OAuth 2.0, PKCE, provider presets, and profile mapping.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/oauth@0.8.8Request preview access. Never put registry tokens in source control.
Dependency-free OAuth 2.0 sign-in for any provider, with PKCE and presets for Google, GitHub, and Discord.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
@wrnexus/oauth implements the OAuth 2.0 Authorization Code flow (with PKCE) for server-side sign-in. It ships ready-made provider presets and a defineProvider helper for custom providers, then gives you two flow functions — startAuth (build the redirect) and completeAuth (exchange the code and fetch the user's profile). It has no runtime dependencies: it uses the platform fetch and WebCrypto only. Pairs naturally with @wrnexus/core's logIn to establish a session once you have a normalized profile.
Structured logging, tracing, health, and integration adapters.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/observability@0.8.8Request preview access. Never put registry tokens in source control.
Open-standard traces, metrics, logs, health checks, Web Vitals, error reporting and profiling.
+Structured logging, tracing, health, and integration adapters.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/observability@0.8.8Request preview access. Never put registry tokens in source control.
Open-standard traces, metrics, logs, health checks, Web Vitals, error reporting and profiling.
Use createOperationTracer() for database, cache, queue, realtime, server-action or custom application spans. Export through OTLP, Prometheus, Zipkin/Jaeger, or the Sentry-compatible error reporter; Grafana can consume the Prometheus or OTLP signals.
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.
export default {
@@ -132,7 +132,7 @@ export const live = createLivenessHandler();
export const ready = createReadinessHandler(health);Interactive framework examples and executable playground utilities.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/playground@0.8.8Request preview access. Never put registry tokens in source control.
A deployable, shareable .wrn playground with diagnostics, generated JavaScript, safe SSR-shaped HTML, sandboxed preview, reactive/UI examples, and version adapters.
Interactive framework examples and executable playground utilities.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/playground@0.8.8Request preview access. Never put registry tokens in source control.
A deployable, shareable .wrn playground with diagnostics, generated JavaScript, safe SSR-shaped HTML, sandboxed preview, reactive/UI examples, and version adapters.
Run wrnexus playground, or deploy createPlaygroundHandler().
Generated from the exact installed package declarations.
interface PlaygroundCompilation {
source: string;
generated: string;
@@ -65,7 +65,7 @@ export { type PlaygroundCompilation, type PlaygroundVersionAdapter, compare
Copy-ready examples from the installed package documentation.
bun add @wrnexus/playgroundimport * as playground from "@wrnexus/playground";Plugin contracts, lifecycle hooks, composition, and framework integration.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/plugin@0.8.8Request preview access. Never put registry tokens in source control.
Plugin contracts, lifecycle hooks, composition, and framework integration.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/plugin@0.8.9Request preview access. Never put registry tokens in source control.
Package manifests declare every framework capability they register:
{
"wrnexus": {
@@ -85,7 +85,7 @@ export { type PluginCompatibilityResult, type PluginCompatibilityTarget, Pl
};In-process and Redis-backed publish/subscribe.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/pubsub@0.8.8Request preview access. Never put registry tokens in source control.
Topic-based publish/subscribe with a pluggable driver — in-process by default, Redis for cross-process messaging.+
In-process and Redis-backed publish/subscribe.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/pubsub@0.8.9Request preview access. Never put registry tokens in source control.
Topic-based publish/subscribe with a pluggable driver — in-process by default, Redis for cross-process messaging.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
@wrnexus/pubsub is a small server-side pub/sub bus. You publish messages to a topic and subscribe with topic patterns; handlers fire for matching topics. The default driver keeps everything in-process, and you can swap in the Redis driver (@wrnexus/pubsub/redis) to fan messages out across processes or hosts. It also backs @wrnexus/core's realtime bridge for horizontal scaling.
Progressive Web App manifests, service workers, and offline strategies.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/pwa@0.8.8Request preview access. Never put registry tokens in source control.
Official PWA primitives for manifests, service workers, offline pages and precaching, runtime caching, background synchronization, push notifications, install/update events, offline mutation stores, and conflict resolution. createOfflineQueue() accepts a durable IndexedDB-style store and retries requests with stable idempotency headers.
Generated from the exact installed package declarations.
interface IndexedDbMigration {
+ Frontend · Package reference@wrnexus/pwa
Progressive Web App manifests, service workers, and offline strategies.
Install the package
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/pwa@0.8.12
Request preview access. Never put registry tokens in source control.
Official PWA primitives for manifests, service workers, offline pages and precaching, runtime caching, background synchronization, push notifications, install/update events, offline mutation stores, and conflict resolution. createOfflineQueue() accepts a durable IndexedDB-style store and retries requests with stable idempotency headers.
Complete TypeScript API
Generated from the exact installed package declarations.
interface IndexedDbMigration {
version: number;
migrate(db: IDBDatabase, transaction: IDBTransaction): void;
}
@@ -182,7 +182,7 @@ export { type ConflictResolution, type IndexedDbMigration, type OfflineMuta
Examples
Copy-ready examples from the installed package documentation.
Install @wrnexus/pwa
bun add @wrnexus/pwa
Import @wrnexus/pwa
import * as pwa from "@wrnexus/pwa";
Background jobs with delay, concurrency, retry, and repetition.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/queue@0.8.8Request preview access. Never put registry tokens in source control.
A background job queue with delays, retries + exponential backoff, recurring jobs, and concurrent workers.+
Background jobs with delay, concurrency, retry, and repetition.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/queue@0.8.14Request preview access. Never put registry tokens in source control.
A background job queue with delays, retries + exponential backoff, recurring jobs, and concurrent workers.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
@wrnexus/queue is a server-side in-process job queue. You register named workers, enqueue jobs (optionally delayed or recurring), and let the queue poll and run them on a timer — with per-job retry limits and doubling backoff between attempts. The default store lives in memory; the design allows a pluggable driver to back it with Redis/SQL for durability across restarts. Reach for it when you need to defer work (emails, webhooks, cleanup) off the request path without a heavyweight external broker. Tests can drive it deterministically via drain().
@wrnexus/queue is a server-side durable job queue. You register named workers, enqueue jobs (optionally delayed or recurring), and let the queue poll and run them on a timer — with per-job retry limits and doubling backoff between attempts. defineQueue persists to .wrnexus/queue.sqlite by default, while low-level createQueue remains an intentionally in-memory primitive. Reach for it when you need to defer work (emails, webhooks, cleanup) off the request path without a heavyweight external broker. Tests can drive it deterministically via drain().
bun add @wrnexus/queue
Private package — the machine must be authenticated to the wrnexus npm org
(a read token in ~/.npmrc). Requires Bun (Node is not supported).
@@ -35,7 +35,7 @@ page wrnexusqueue {
QueueOptions| Option | Type | Default | Description |
|---|---|---|---|
maxAttempts | number | 3 | Default max attempts per job before it is dead-lettered. |
backoffMs | number | 1000 | Base retry backoff in ms; doubles per attempt. |
pollMs | number | 250 | Poll interval used once start() is called (ms). |
onFailed | (job: Job, error: unknown) => void | — | Called when a job exhausts its attempts. |
concurrency | number | unlimited | Maximum jobs claimed by one drain() call. |
capacity | number | unlimited | Maximum queued plus active jobs before adds reject. |
now | () => number | Date.now | Clock injection for deterministic tests. |
maxAttemptsnumber3backoffMsnumber1000pollMsnumber250start() is called (ms).onFailed(job: Job, error: unknown) => voidconcurrencynumberdrain() call.capacitynumbernow() => numberDate.nowQueueThe object returned by createQueue.
| Export | Type / Signature | Purpose | |
|---|---|---|---|
DEFAULT_THEMES | Record<string, ThemeTokens> | Built-in light and dark token maps. | |
THEME_COOKIE | "wire-theme" | Cookie the resolved theme is read from / persisted to. | |
THEME_CSS_HREF | "/__wrnexus/theme.css" | URL the generated theme stylesheet is served at. | |
THEME_JS_HREF | "/__wrnexus/theme.js" | URL the client theme runtime is served at. | |
resolveThemeConfig | (config?: ThemeConfig) => ResolvedTheme | Deep-merge the user's theme config over the defaults; pick the default theme (config's default if valid, else dark, else the first). | |
resolveThemeName | `(cookieValue: string \ | undefined, theme: ResolvedTheme) => string` | Pick a valid theme name from a cookie, falling back to theme.default. |
renderThemeCss | (theme: ResolvedTheme) => string | Generate the theme stylesheet: a :root{…} default plus one [data-theme="<name>"]{…} block per theme. | |
renderThemeRuntime | (theme: ResolvedTheme) => string | Generate the client runtime (see below). |
Tokens are emitted as --wire-<key> custom properties, except the reserved key color-scheme, which is emitted as the native color-scheme CSS property so form controls and scrollbars match the theme.
DEFAULT_THEMESRecord<string, ThemeTokens>light and dark token maps.THEME_COOKIE"wrn-theme"THEME_CSS_HREF"/__wrnexus/theme.css"THEME_JS_HREF"/__wrnexus/theme.js"resolveThemeConfig(config?: ThemeConfig) => ResolvedThemetheme config over the defaults; pick the default theme (config's default if valid, else dark, else the first).resolveThemeNametheme.default.renderThemeCss(theme: ResolvedTheme) => string:root{…} default plus one [data-theme="<name>"]{…} block per theme.renderThemeRuntime(theme: ResolvedTheme) => stringTokens are emitted as --wrn-<key> custom properties, except the reserved key color-scheme, which is emitted as the native color-scheme CSS property so form controls and scrollbars match the theme.
ThemeConfig / ThemeTokens / ResolvedTheme:
type ThemeTokens = Record<string, string>;
@@ -102,7 +104,26 @@ interface ResolvedTheme {
danger: "#dc2626",
},
}
-The client runtime (renderThemeRuntime) exposes window.wireTheme with { get, set, toggle, bind, themes }, wires up any [data-wire-theme-toggle] and [data-wire-theme-set] elements on load, and persists the choice to the wire-theme cookie (max-age 1 year, samesite=lax). toggle() cycles through the configured theme names in order.
The client runtime (renderThemeRuntime) exposes window.wrnTheme with { get, set, toggle, bind, themes }, connects up any [data-wrn-theme-toggle] and [data-wrn-theme-set] elements on load, and persists the choice to the wrn-theme cookie (max-age 1 year, samesite=lax). toggle() cycles through the configured theme names in order.
Set one cookie policy for theme, accent, language, and application cookies:
+export default {
+ cookies: {
+ defaults: {
+ domain: "example.com",
+ path: "/",
+ maxAge: 31_536_000,
+ sameSite: "Lax",
+ secure: true,
+ },
+ language: { maxAge: 2_592_000 },
+ },
+} satisfies AppConfig;
+The theme, accent, and language switchers use this policy automatically. Client functions can use the same resolved policy for other values:
+window.wrnCookies.set("dashboard-view", "compact");
+window.wrnCookies.set("locale-preview", "hi", "language");
+const value = window.wrnCookies.get("dashboard-view");
+window.wrnCookies.remove("dashboard-view");
wrnexus.config.tsimport type { AppConfig } from "@wrnexus/styles";
@@ -174,20 +195,20 @@ const themeCss = renderThemeCss(theme); // served at THEME_CSS_HREF
const themeJs = renderThemeRuntime(theme); // served at THEME_JS_HREF
In templates, consume tokens via the custom properties:
.card {
- background: var(--wire-color-surface);
- color: var(--wire-color-text);
- border: 1px solid var(--wire-color-border);
- border-radius: var(--wire-radius);
- box-shadow: var(--wire-shadow-1);
+ background: var(--wrn-color-surface);
+ color: var(--wrn-color-text);
+ border: 1px solid var(--wrn-color-border);
+ border-radius: var(--wrn-radius);
+ box-shadow: var(--wrn-shadow-1);
}
-<button data-wire-theme-toggle>Toggle theme</button>
-<button data-wire-theme-set="brand">Brand theme</button>
+<button data-wrn-theme-toggle>Toggle theme</button>
+<button data-wrn-theme-set="brand">Brand theme</button>
bundleCss uses Bun.build's CSS bundler for @import resolution, nesting, and minification. Node is not supported.node:fs / node:path / node:url and read from process.env.@wrnexus/core supplies the SeoConfig and SecurityConfig types referenced by AppConfig.THEME_CSS_HREF), and the theme runtime (THEME_JS_HREF) are wired into pages by the framework's server; this package only produces their contents.THEME_CSS_HREF), and the theme runtime (THEME_JS_HREF) are connected into pages by the framework's server; this package only produces their contents.Generated from the exact installed package declarations.
import { PerformanceBudgets, SeoConfig, SecurityConfig } from '@wrnexus/core';
import { PluginInput, PluginPermission } from '@wrnexus/plugin';
import { StorageConfig } from '@wrnexus/uploader';
@@ -195,7 +216,7 @@ import { StorageConfig } from '@wrnexus/uploader';
/**
* Theme system - design tokens that work SSR and client-side.
*
- * Tokens are plain CSS custom properties (`--wire-<key>`) so they cascade and
+ * Tokens are plain CSS custom properties (`--wrn-<key>`) so they cascade and
* can be overridden by user CSS. Each theme is a flat token map; the framework
* ships default `light`/`dark` sets and the user's config deep-merges over them.
*
@@ -205,7 +226,7 @@ import { StorageConfig } from '@wrnexus/uploader';
* emitted as the native CSS property instead of a custom property.
*/
type ThemeSemanticColor = "primary" | "secondary" | "info" | "success" | "warning" | "danger" | "error";
-type ThemeToken = "color-scheme" | "color-bg" | "color-background" | "color-foreground" | "color-surface" | "color-surface-2" | "color-surface-raised" | "color-surface-muted" | "color-surface-soft" | "color-text" | "color-text-muted" | "color-text-subtle" | "color-muted" | "color-border" | "color-border-strong" | "color-code-background" | "color-code-surface" | "color-code-text" | "color-code-muted" | "color-code-border" | `color-${ThemeSemanticColor}` | `color-${ThemeSemanticColor}-${"hover" | "active" | "contrast" | "soft" | "muted" | "text"}` | `color-on-${"primary" | "secondary"}` | "radius" | "radius-sm" | "shadow-1" | "shadow-sm" | "shadow-md" | "shadow-lg" | "space-section" | "space-section-sm" | "container-max" | "font-sans";
+type ThemeToken = "color-scheme" | "color-bg" | "color-background" | "color-foreground" | "color-surface" | "color-surface-2" | "color-surface-raised" | "color-surface-muted" | "color-surface-soft" | "color-text" | "color-text-muted" | "color-text-subtle" | "color-muted" | "color-border" | "color-border-strong" | "color-code-background" | "color-code-surface" | "color-code-text" | "color-code-muted" | "color-code-border" | `color-${ThemeSemanticColor}` | `color-${ThemeSemanticColor}-${"hover" | "active" | "contrast" | "soft" | "muted" | "text"}` | `color-on-${"primary" | "secondary"}` | "radius" | "radius-sm" | "radius-md" | "radius-lg" | "control-height-sm" | "control-height" | "control-height-lg" | "space-panel" | "font-size-ui" | "shadow-1" | "shadow-2" | "shadow-3" | "shadow-sm" | "shadow-md" | "shadow-lg" | "space-section" | "space-section-sm" | "container-max" | "font-sans";
/** Known tokens get autocomplete while applications may add namespaced custom tokens. */
type ThemeTokens = Partial<Record<ThemeToken, string>> & Record<string, string>;
declare function defineThemeTokens<T extends ThemeTokens>(tokens: T): T;
@@ -227,7 +248,7 @@ interface CustomThemePalette {
}
interface ThemeAccentConfig {
/**
- * Accent used when no `wire-accent` cookie is present.
+ * Accent used when no `wrn-accent` cookie is present.
*
* - Omitted: use the named `palette`, or `blue` when no palette is configured.
* - `false`: keep the configured base palette until the user explicitly picks an accent.
@@ -235,13 +256,49 @@ interface ThemeAccentConfig {
default?: ThemePaletteName | false;
/** Runtime-selectable accent names. Defaults to every built-in THEME_PALETTE. */
options?: ThemePaletteName[];
+ /** Cookie scope used to persist the selected accent across related applications. */
+ cookie?: ThemeCookieConfig;
}
+interface ThemeCookieConfig {
+ /** Parent domain shared by related applications, for example `localhost` or `.example.com`. */
+ domain?: string;
+ /** Cookie path. Defaults to `/`. */
+ path?: string;
+ /** SameSite policy. Defaults to `Lax`. */
+ sameSite?: "Strict" | "Lax" | "None";
+ /** Force or disable Secure. When omitted it follows the current protocol. */
+ secure?: boolean;
+ /** Cookie lifetime in seconds. Defaults to one year. */
+ maxAge?: number;
+}
+type BrowserCookieOptions = ThemeCookieConfig;
+/** Shared browser-cookie policy with optional per-preference overrides. */
+interface BrowserCookiesConfig {
+ defaults?: BrowserCookieOptions;
+ theme?: BrowserCookieOptions;
+ accent?: BrowserCookieOptions;
+ language?: BrowserCookieOptions;
+}
+type BrowserCookiePreference = "theme" | "accent" | "language";
+interface BrowserCookieApi {
+ readonly config: BrowserCookiesConfig;
+ get(name: string): string | null;
+ options(preference?: BrowserCookiePreference | BrowserCookieOptions, override?: BrowserCookieOptions): BrowserCookieOptions;
+ set(name: string, value: string, preference?: BrowserCookiePreference | BrowserCookieOptions, override?: BrowserCookieOptions): void;
+ remove(name: string, preference?: BrowserCookiePreference | BrowserCookieOptions, override?: BrowserCookieOptions): void;
+}
+declare global {
+ interface Window {
+ wrnCookies: BrowserCookieApi;
+ }
+}
+declare function resolveBrowserCookieOptions(config: BrowserCookiesConfig | undefined, preference: BrowserCookiePreference, override?: BrowserCookieOptions): BrowserCookieOptions;
interface ThemeConfig {
/** Built-in palette name, or a complete custom semantic color palette. */
palette?: ThemePaletteName | CustomThemePalette;
/** Runtime accent/palette switcher configuration. */
accent?: ThemeAccentConfig;
- /** Name of the theme used when no `wire-theme` cookie is present. */
+ /** Name of the theme used when no `wrn-theme` cookie is present. */
default?: string;
/** Named token maps. Deep-merged over the framework's built-in light/dark. */
themes?: Record<string, ThemeTokens>;
@@ -252,10 +309,13 @@ interface ResolvedTheme {
themes: Record<string, ThemeTokens>;
defaultAccent?: ThemePaletteName;
accentNames: ThemePaletteName[];
+ accentCookie?: ThemeCookieConfig;
+ themeCookie?: ThemeCookieConfig;
+ cookies?: BrowserCookiesConfig;
}
/** Cookies used by the SSR renderer and client runtime. */
-declare const THEME_COOKIE = "wire-theme";
-declare const ACCENT_COOKIE = "wire-accent";
+declare const THEME_COOKIE = "wrn-theme";
+declare const ACCENT_COOKIE = "wrn-accent";
declare const THEME_CSS_HREF = "/__wrnexus/theme.css";
declare const THEME_CSS_PREFIX = "/__wrnexus/theme/";
declare const THEME_JS_HREF = "/__wrnexus/theme.js";
@@ -267,7 +327,7 @@ declare const THEME_PALETTES: Record<ThemePaletteName, CustomThemePalette>
/** Built-in themes so components have tokens out of the box. */
declare const DEFAULT_THEMES: Record<string, ThemeTokens>;
/** Merge the user's theme config over the built-in defaults. */
-declare function resolveThemeConfig(config?: ThemeConfig): ResolvedTheme;
+declare function resolveThemeConfig(config?: ThemeConfig, cookies?: BrowserCookiesConfig): ResolvedTheme;
/** Pick a valid theme name from a cookie value, falling back to the default. */
declare function resolveThemeName(cookieValue: string | undefined, theme: ResolvedTheme): string;
/** Pick a valid accent name from a cookie value, falling back to the configured default. */
@@ -285,8 +345,8 @@ declare function renderActiveThemeCss(theme: ResolvedTheme, themeName: string, a
*/
declare function renderThemeCss(theme: ResolvedTheme): string;
/**
- * Generate the client theme runtime. It exposes `window.wireTheme` and
- * `window.wireAccent`, and binds theme/accent controls.
+ * Generate the client theme runtime. It exposes `window.wrnTheme` and
+ * `window.wrnAccent`, and binds theme/accent controls.
*
* The runtime changes only data attributes and cookies. It never writes inline
* CSS variables and never uses localStorage, so CSS and SSR remain the single
@@ -368,26 +428,6 @@ declare function fontCspSources(fonts?: FontConfig): {
font: string[];
};
-declare const CURRENT_COMPATIBILITY_DATE = "2026-08-02";
-declare const CURRENT_FRAMEWORK_BEHAVIOUR = 1;
-interface CompatibilityPolicy {
- compatibilityDate?: string;
- frameworkBehaviour?: number;
-}
-interface CompatibilityReport {
- configuredDate?: string;
- effectiveDate: string;
- currentDate: string;
- configuredBehaviour?: number;
- effectiveBehaviour: number;
- currentBehaviour: number;
- needsUpgrade: boolean;
- future: boolean;
- messages: string[];
-}
-declare function isCompatibilityDate(value: string): boolean;
-declare function resolveCompatibility(policy: CompatibilityPolicy): CompatibilityReport;
-
/**
* App configuration loader (`wrnexus.config.ts`).
*
@@ -416,6 +456,8 @@ interface StylesConfig {
entry?: string;
/** Include the complete @wrnexus/ui component catalog stylesheet. Default true. */
includeUi?: boolean;
+ /** Maximum uncompressed production CSS bytes to inline in the document. Default 4096; 0 disables inlining. Larger limits trade repeat HTML bytes for one fewer blocking request. */
+ inlineMaxBytes?: number;
/**
* Optional custom processor. Return the final CSS string. Use this to run
* Tailwind, PostCSS, Sass, etc. When omitted, the built-in Bun CSS bundler is
@@ -589,20 +631,11 @@ interface TypesConfig {
generateDeclarations?: boolean;
globalTypes?: string;
}
-interface FunctionsConfig {
- legacyDefaultRuntime?: "current" | "client" | "server" | "shared";
-}
interface StoresConfig {
strictMutations?: boolean;
persistence?: boolean;
}
-interface CompatibilityConfig {
- legacyEmit?: boolean;
- legacyEventProps?: boolean;
- legacyComponentDiscovery?: boolean;
- stringLayouts?: boolean;
-}
-interface AppConfig extends CompatibilityPolicy {
+interface AppConfig {
/** Ordered reusable configuration layers; the application always has final precedence. */
extends?: string | string[];
/** Compiler/dev/build plugins, resolved in deterministic pre/normal/post order. */
@@ -616,12 +649,8 @@ interface AppConfig extends CompatibilityPolicy {
imports?: ImportsConfig;
/** TypeScript-backed .wrn type checking and declaration generation. */
types?: TypesConfig;
- /** Legacy function runtime behavior for existing applications. */
- functions?: FunctionsConfig;
/** Typed global/page store behavior. */
stores?: StoresConfig;
- /** Temporary v0.5 syntax compatibility switches. */
- compatibility?: CompatibilityConfig;
/** Opt-in APIs that are not yet covered by stable compatibility guarantees. */
experimental?: ExperimentalConfig;
/** Route and asset budgets plus build analyzer behavior. */
@@ -655,6 +684,8 @@ interface AppConfig extends CompatibilityPolicy {
fonts?: FontConfig;
/** Design-token themes (deep-merged over the built-in light/dark). */
theme?: ThemeConfig;
+ /** Shared client cookie policy used by theme, accent, language, and window.wrnCookies. */
+ cookies?: BrowserCookiesConfig;
/** i18n: default language + supported locales (strings live in app/locales/*.json). */
i18n?: {
default?: string;
@@ -665,6 +696,7 @@ interface AppConfig extends CompatibilityPolicy {
cookie?: {
name?: string;
maxAge?: number;
+ domain?: string;
path?: string;
sameSite?: "Strict" | "Lax" | "None";
secure?: boolean;
@@ -676,6 +708,34 @@ interface AppConfig extends CompatibilityPolicy {
driver: "sqlite" | "postgres" | "mysql" | "mongo";
url: string;
};
+ /** Background-job persistence. Defaults to durable `.wrnexus/queue.sqlite`. */
+ queue?: {
+ storage?: "sqlite" | "database" | "memory";
+ databaseName?: string;
+ table?: string;
+ dashboard?: {
+ enabled?: boolean;
+ path?: string;
+ permission?: string;
+ };
+ };
+ /** Driver-neutral mail defaults consumed by @wrnexus/mail/application drivers. */
+ mail?: {
+ from?: string;
+ queue?: string | boolean;
+ sandbox?: {
+ enabled?: boolean;
+ allowlist?: string[];
+ };
+ };
+ /** Payment gateway configuration consumed by @wrnexus/payment. */
+ payment?: {
+ default: string;
+ currency?: string;
+ sandbox?: boolean;
+ databaseName?: string;
+ gateways?: Record<string, Record<string, unknown>>;
+ };
/**
* File-upload storage. Declare named stores (local dir or S3-compatible),
* upload with `handleUpload`/`upload` from `@wrnexus/uploader`, and serve
@@ -711,6 +771,13 @@ interface AppConfig extends CompatibilityPolicy {
*/
profiles?: Record<string, Partial<Omit<AppConfig, "profiles">>>;
}
+/** User-authored configuration; retained as an explicit name for API clarity. */
+type AppConfigInput = AppConfig;
+/** Configuration after profile/layer resolution. Required input fields stay required. */
+type ResolvedAppConfig<T extends AppConfig = AppConfig> = Omit<AppConfig, "extends" | "profiles"> & Omit<T, "extends" | "profiles"> & {
+ readonly extends?: undefined;
+ readonly profiles?: undefined;
+};
/**
* Resolve the active profile name: explicit argument > `WRNEXUS_PROFILE` env var
* > a mode-based default ("production" in prod, else "development").
@@ -727,7 +794,7 @@ declare function resolveConfigLayers(appRoot: string, application: AppConfig): P
/** Load the raw `wrnexus.config.*` (with the `profiles` map intact), or `{}`. */
declare function loadRawConfig(appRoot: string): Promise<AppConfig>;
/** Load `wrnexus.config.*`, applying the active profile's overrides. */
-declare function loadAppConfig(appRoot: string, profile?: string): Promise<AppConfig>;
+declare function loadAppConfig(appRoot: string, profile?: string): Promise<ResolvedAppConfig>;
/**
* Load the `.env` cascade for a profile into `process.env`, WITHOUT clobbering
* variables already set in the real environment (which always win). Order, low
@@ -740,7 +807,7 @@ interface ConfigIssue {
severity: "error" | "warning";
message: string;
}
-declare function defineConfig(config: AppConfig): AppConfig;
+declare function defineConfig<const T extends AppConfig>(config: T): T;
declare function validateAppConfig(config: AppConfig): ConfigIssue[];
interface ExplainedConfig {
profile: string;
@@ -783,7 +850,7 @@ interface CssTokenAudit {
unused: string[];
}
/** Audit framework design-token declarations and var() references. */
-declare function auditWireTokens(css: string): CssTokenAudit;
+declare function auditWrnTokens(css: string): CssTokenAudit;
interface StyleSource {
path: string;
reason?: string;
@@ -823,7 +890,7 @@ declare function auditCssPerformance(source: string): CssPerformanceAuditIssue[]
*/
declare function renderStyles(ctx: StyleProcessContext, styles?: StylesConfig): Promise<string>;
-export { ACCENT_COOKIE, type AppConfig, type BuildConfig, CURRENT_COMPATIBILITY_DATE, CURRENT_FRAMEWORK_BEHAVIOUR, type CompatibilityPolicy, type CompatibilityReport, 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 ResolvedConfigLayers, type ResolvedTheme, type StyleProcessContext, type StyleSource, type StylesConfig, type Mode as StylesMode, THEME_COOKIE, THEME_CSS_HREF, THEME_CSS_PREFIX, THEME_JS_HREF, THEME_PALETTES, THEME_PALETTE_NAMES, type TenancyConfig, type ThemeAccentConfig, type ThemeConfig, type ThemePaletteName, type ThemeSemanticColor, type ThemeToken, type ThemeTokens, activeThemeCssHref, auditCssPerformance, auditWireTokens, bundleCss, contrast, defineConfig, defineThemeTokens, explainAppConfig, findStyleEntry, fontCspSources, headToString, isCompatibilityDate, loadAppConfig, loadEnv, loadRawConfig, normalizeStyleSources, renderActiveThemeCss, renderFontHead, renderProductionFontHead, renderStyles, renderThemeCss, renderThemeRuntime, resolveAccentName, resolveCompatibility, resolveConfigLayers, resolveProfile, resolveThemeConfig, resolveThemeName, tailwindSourceDirectives, themeVar, validateAppConfig };
+export { ACCENT_COOKIE, type AppConfig, type AppConfigInput, type BrowserCookieApi, type BrowserCookieOptions, type BrowserCookiePreference, type BrowserCookiesConfig, 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 ResolvedAppConfig, type ResolvedConfigLayers, type ResolvedTheme, type StyleProcessContext, type StyleSource, type StylesConfig, type Mode as StylesMode, THEME_COOKIE, THEME_CSS_HREF, THEME_CSS_PREFIX, THEME_JS_HREF, THEME_PALETTES, THEME_PALETTE_NAMES, type TenancyConfig, type ThemeAccentConfig, type ThemeConfig, type ThemeCookieConfig, type ThemePaletteName, type ThemeSemanticColor, type ThemeToken, type ThemeTokens, activeThemeCssHref, auditCssPerformance, auditWrnTokens, bundleCss, contrast, defineConfig, defineThemeTokens, explainAppConfig, findStyleEntry, fontCspSources, headToString, loadAppConfig, loadEnv, loadRawConfig, normalizeStyleSources, renderActiveThemeCss, renderFontHead, renderProductionFontHead, renderStyles, renderThemeCss, renderThemeRuntime, resolveAccentName, resolveBrowserCookieOptions, resolveConfigLayers, resolveProfile, resolveThemeConfig, resolveThemeName, tailwindSourceDirectives, themeVar, validateAppConfig };
Copy-ready examples from the installed package documentation.
import type { AppConfig } from "@wrnexus/styles";
export default {
@@ -887,16 +954,16 @@ const active = resolveThemeName(cookies[THEME_COOKIE], theme);
const themeCss = renderThemeCss(theme); // served at THEME_CSS_HREF
const themeJs = renderThemeRuntime(theme); // served at THEME_JS_HREF.card {
- background: var(--wire-color-surface);
- color: var(--wire-color-text);
- border: 1px solid var(--wire-color-border);
- border-radius: var(--wire-radius);
- box-shadow: var(--wire-shadow-1);
-}<button data-wire-theme-toggle>Toggle theme</button>
-<button data-wire-theme-set="brand">Brand theme</button><button data-wrn-theme-toggle>Toggle theme</button>
+<button data-wrn-theme-set="brand">Brand theme</button>Editor syntax definitions and language tooling for .wrn files.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/syntax@0.8.8Request preview access. Never put registry tokens in source control.
Canonical WRN lexer, parser, AST, language metadata, source positions, and stable diagnostics. Framework tooling should import this package instead of implementing a separate .wrn parser.
See docs/WRN-LANGUAGE-SPEC-1.0.md in the WRNexusJS repository.
Generated from the exact installed package declarations.
export { LexError, Lexer } from './tokenizer.js';
+ Frontend · Package reference@wrnexus/syntax
Editor syntax definitions and language tooling for .wrn files.
Install the package
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/syntax@0.8.19
Request preview access. Never put registry tokens in source control.
Canonical WRN lexer, parser, AST, language metadata, source positions, and stable diagnostics. Framework tooling should import this package instead of implementing a separate .wrn parser.
+See docs/WRN-LANGUAGE-SPEC-1.0.md in the WRNexusJS repository.
Complete TypeScript API
Generated from the exact installed package declarations.
export { LexError, Lexer, skipLiteralOrComment } from './tokenizer.js';
export { FormatWrnOptions, formatWrn } from './formatter.js';
-export { A as ActionBlock, a as ApiBlock, b as Attr, C as ComputedDecl, D as DataApiBlock, c as DataMode, E as EffectBlock, d as EventDecl, F as FunctionParameterDecl, e as FunctionRuntime, L as LifecycleBlock, f as LoadBlock, M as ModeFunctionsBlock, O as OutputDecl, P as PageAst, g as ParseError, h as PersistDecl, i as PropDecl, R as RealtimeBlock, j as RealtimeHandler, k as RuntimeFunctionDecl, S as SeoBlock, l as StateDecl, m as StateRuntime, n as StoreKind, o as StoreLifecycleDecl, p as StructuredImportDecl, V as VOID_ELEMENTS, q as ViewNode, W as WatchBlock, r as parse, s as parseComputedDeclarations, t as parseHtmlView, u as parseOutputs, v as parsePersist, w as parseRuntimeFunctions, x as parseStateDeclarations, y as parseStoreLifecycle, z as parseStructuredImports, B as stripRuntimeFunctionModifiers } from './parser-CTLO4mcT.js';
+export { A as ActionBlock, a as ApiBlock, b as Attr, C as ComputedDecl, D as DataApiBlock, c as DataMode, E as EffectBlock, d as EventDecl, F as FunctionParameterDecl, e as FunctionRuntime, L as LifecycleBlock, f as LoadBlock, M as ModeFunctionsBlock, O as OutputDecl, P as PageAst, g as ParseError, h as PersistDecl, i as PropDecl, R as RealtimeBlock, j as RealtimeHandler, k as RuntimeFunctionDecl, S as SeoBlock, l as StateDecl, m as StateRuntime, n as StoreKind, o as StoreLifecycleDecl, p as StructuredImportDecl, V as VOID_ELEMENTS, q as ViewNode, W as WatchBlock, r as parse, s as parseComputedDeclarations, t as parseHtmlView, u as parseOutputs, v as parsePersist, w as parseRuntimeFunctions, x as parseStateDeclarations, y as parseStoreLifecycle, z as parseStructuredImports, B as stripRuntimeFunctionModifiers } from './parser-DI-7cM1V.js';
export { RuntimeType, eraseFunctionTypes, inferredRuntimeType, runtimeTypeOf, validateTypedInitializer } from './types.js';
import { WrnDiagnostic } from './diagnostics.js';
export { DiagnoseOptions, WrnDiagnosticSeverity, WrnSourcePosition, assertValidAst, classifyParseError, containsReadonlyPropMutation, diagnose, diagnosticFromError, formatDiagnostic, isHydrationStrategy, isRuntimeTarget, positionAt } from './diagnostics.js';
export { WRN_DIAGNOSTIC_CODES, WRN_HYDRATION_STRATEGIES, WRN_LANGUAGE_VERSION, WRN_ROOT_KINDS, WRN_ROOT_MEMBERS, WRN_RUNTIME_TARGETS, WrnHydrationStrategy, WrnRootKind, WrnRootMember, WrnRuntimeTarget } from './spec.js';
+interface InterpolationSegment {
+ expression: string;
+ start: number;
+ end: number;
+}
+/** Extract top-level `{...}` expressions while preserving nested object/array literals. */
+declare function extractInterpolations(value: string): InterpolationSegment[];
+
/** Current stable syntax contract. Bump only when parsers/codegen need migration. */
declare const WRN_SYNTAX_VERSION: "0.4";
type WrnSyntaxFeature = "typed-declarations" | "layouts" | "server-client-blocks" | "effects" | "watch" | "lifecycle" | "embedded-api" | "realtime" | "runtime-markers";
@@ -47,7 +55,7 @@ declare function diagnosticSummary(diagnostics: readonly WrnDiagnostic[]): {
};
declare function supportsSyntaxFeature(feature: string): feature is WrnSyntaxFeature;
-export { type SourceRange, WRN_SYNTAX_FEATURES, WRN_SYNTAX_VERSION, WrnDiagnostic, type WrnSyntaxFeature, createSourceRange, diagnosticSummary, sliceSource, supportsSyntaxFeature };
+export { type InterpolationSegment, type SourceRange, WRN_SYNTAX_FEATURES, WRN_SYNTAX_VERSION, WrnDiagnostic, type WrnSyntaxFeature, createSourceRange, diagnosticSummary, extractInterpolations, sliceSource, supportsSyntaxFeature };
Examples
Copy-ready examples from the installed package documentation.
Parse a WRNexusJS document
import { parse } from "@wrnexus/syntax";
const ast = parse('component Greeting { view { <p>Hello</p> } }');
Summarize syntax diagnostics
import { diagnose, diagnosticSummary } from "@wrnexus/syntax";
@@ -55,7 +63,7 @@ const ast = parse('component Greeting { view { <p>Hello</p>
const summary = diagnosticSummary(diagnose(source));
WRNexusJS-aware component, route, and browser testing utilities.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/test@0.8.8Request preview access. Never put registry tokens in source control.
Testing utilities for WRNexusJS apps — component rendering, reactive-DOM mounting, route handler calls, and a full in-process app harness, plus a one-import re-export of bun:test.
+ WRNexusJS-aware component, route, and browser testing utilities.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/test@0.8.16Request preview access. Never put registry tokens in source control.
Testing utilities for WRNexusJS apps — component rendering, reactive-DOM mounting, route handler calls, and a full in-process app harness, plus a one-import re-export of bun:test.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
@wrnexus/test is the server-side test toolkit you reach for when writing tests for a WRNexusJS app. It runs under bun test (invoked via wrnexus test) and gives you a single import surface: the bun:test primitives (test, expect, mock, …) re-exported alongside WRNexusJS-aware helpers that compile .wrn components, hydrate server HTML in a DOM, invoke API route handlers, and boot the real app on an ephemeral port for integration tests.
lazily; it's a dev dependency, not a runtime dependency of this package).
[@wrnexus/compiler](../compiler) (compiles .wrn sources), [@wrnexus/core](../core) (Context / createContext), [@wrnexus/csr](../csr) (reactive runtime for mountHtml), [@wrnexus/dev-server](../dev-server) (startServer behind createHarness), and [@wrnexus/styles](../styles) (config/env/profile loading for the harness).
Generated from the exact installed package declarations.
import { ProblemDetails, Context } from '@wrnexus/core';
+Generated from the exact installed package declarations.
import { Context, ProblemDetails } from '@wrnexus/core';
export { createContext } from '@wrnexus/core';
export { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, mock, spyOn, test } from 'bun:test';
interface TestRequestOptions extends Omit<RequestInit, "body"> {
body?: BodyInit | Record<string, unknown> | URLSearchParams | FormData | null;
baseUrl?: string;
+ params?: Record<string, string>;
+ user?: unknown;
+ locals?: Record<string, unknown>;
}
/** Build a web-standard Request with convenient JSON/FormData handling. */
declare function testRequest(path?: string, options?: TestRequestOptions): Request;
/** Create a complete Context suitable for middleware and route unit tests. */
declare function testContext(path?: string, options?: TestRequestOptions): Context;
+/** Preferred descriptive alias for testContext(). */
+declare const createTestContext: typeof testContext;
+/** Fluent, Bun-compatible fetch mock (including Bun.fetch.preconnect). */
+type FetchMock = typeof fetch & {
+ readonly calls: ReadonlyArray<{
+ input: string | URL | Request;
+ init?: RequestInit;
+ }>;
+ respondOnce(response: Response | (() => Response | Promise<Response>)): FetchMock;
+ reset(): void;
+};
+declare function createFetchMock(): FetchMock;
interface JsonResponse<T> {
response: Response;
body: T;
@@ -185,6 +200,29 @@ declare function captureBrowserArtifacts(page: BrowserArtifactPage, testName: st
trace?: string;
}>;
+interface MutationCase<T> {
+ name: string;
+ value: T;
+}
+interface MutationReport<O> {
+ baseline: O;
+ killed: string[];
+ survived: string[];
+}
+interface DetectMutationsOptions<T, O> {
+ baseline: T;
+ mutations: Array<MutationCase<T>>;
+ exercise(value: T): O | Promise<O>;
+ equivalent?(left: O, right: O): boolean;
+}
+/**
+ * Run the same behavioural probe against a baseline and explicit mutations.
+ * A mutation survives when the observable result is unchanged. The helper
+ * throws with every survivor by default, making it suitable for an ordinary
+ * Bun test and CI without a second runner or source-rewriting process.
+ */
+declare function detectMutations<T, O>(options: DetectMutationsOptions<T, O>): Promise<MutationReport<O>>;
+
/**
* @wrnexus/test — testing utilities for WRNexusJS apps. Runs on `bun test` (via
* `wrnexus test`). Import everything from one place:
@@ -239,8 +277,10 @@ interface HarnessOptions {
* up your test database/env. Remember to `await app.close()`.
*/
declare function createHarness(projectRoot: string, options?: HarnessOptions): Promise<Harness>;
+/** Preferred full-stack name; retained alongside createHarness for compatibility. */
+declare const createTestApp: typeof createHarness;
-export { type BrowserArtifactPage, type Deferred, type Harness, type HarnessOptions, type JsonResponse, MemoryCookieJar, type TestRequestOptions, type TransactionalDatabase, type WaitForOptions, callRoute, captureBrowserArtifacts, createFactory, createHarness, deferred, expectProblem, mountHtml, readJsonResponse, renderComponent, testContext, testRequest, waitFor, withDatabaseRollback };
+export { type BrowserArtifactPage, type Deferred, type DetectMutationsOptions, type FetchMock, type Harness, type HarnessOptions, type JsonResponse, MemoryCookieJar, type MutationCase, type MutationReport, type TestRequestOptions, type TransactionalDatabase, type WaitForOptions, callRoute, captureBrowserArtifacts, createFactory, createFetchMock, createHarness, createTestApp, createTestContext, deferred, detectMutations, expectProblem, mountHtml, readJsonResponse, renderComponent, testContext, testRequest, waitFor, withDatabaseRollback };
Copy-ready examples from the installed package documentation.
wrnexus test unit # *.unit.test.ts or test/unit/**
wrnexus test component # *.component.test.ts or test/component/**
wrnexus test api # *.api.test.ts or test/api/**
@@ -273,7 +313,7 @@ test("health endpoint", async () => {
});Error/event capture, middleware, filtering, and sinks.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/tracking@0.8.8Request preview access. Never put registry tokens in source control.
Error tracking for WRNexusJS apps: capture exceptions manually or via middleware and fan them out to pluggable sinks.+
Error/event capture, middleware, filtering, and sinks.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/tracking@0.8.8Request preview access. Never put registry tokens in source control.
Error tracking for WRNexusJS apps: capture exceptions manually or via middleware and fan them out to pluggable sinks.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
@wrnexus/tracking is a small, server-side error-capture layer. You create a tracker with one or more sinks, then feed it errors — either manually with tracker.capture(err, context) or automatically by mounting tracker.middleware() in your request pipeline. A consoleSink is included; forwarding to Sentry, Datadog, or any other backend is just a matter of writing a tiny sink. Reach for it when you want a single, sink-agnostic place to route application errors. Sinks run best-effort — a throwing sink never breaks the request.
WRN-aware TypeScript diagnostics and virtual documents.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/typecheck@0.8.8Request preview access. Never put registry tokens in source control.
Static type checking for .wrn declarations, props, state, outputs, functions, stores, and generated virtual TypeScript files.
The package is compiler tooling rather than a browser UI package, so its public kit consists of programmatic typecheck helpers and diagnostics.
Generated from the exact installed package declarations.
import { PageAst } from '@wrnexus/syntax';
+ Tooling · Package reference@wrnexus/typecheck
WRN-aware TypeScript diagnostics and virtual documents.
Install the package
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/typecheck@0.8.17
Request preview access. Never put registry tokens in source control.
Static type checking for .wrn declarations, props, state, outputs, functions, stores, and generated virtual TypeScript files.
+The package is compiler tooling rather than a browser UI package, so its public kit consists of programmatic typecheck helpers and diagnostics.
+View attribute {t:key} segments are translation markers, not TypeScript expressions. Ordinary expressions in the same attribute remain typechecked. Inline event bindings accept statement lists, with event.currentTarget typed as the bound HTML/SVG element. Nullable DOM queries still require normal guards.
Complete TypeScript API
Generated from the exact installed package declarations.
import { PageAst } from '@wrnexus/syntax';
export { componentContract, storeContract } from './contracts.js';
export { findAppRoot, loadApplicationTypes } from './project.js';
@@ -71,7 +72,7 @@ export { type TypecheckOptions, type VirtualTypeScriptModule, type WrnTypeD
Examples
Copy-ready examples from the installed package documentation.
Install @wrnexus/typecheck
bun add @wrnexus/typecheck
Import @wrnexus/typecheck
import * as typecheck from "@wrnexus/typecheck";
Themeable server-rendered UI components and CSS.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/ui@0.8.8Request preview access. Never put registry tokens in source control.
First-party Wire UI component library — a set of themeable .wrn components plus a single tokenized stylesheet.
+ Themeable server-rendered UI components and CSS.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/ui@0.8.88Request preview access. Never put registry tokens in source control.
First-party WRNexusJS UI component library — a set of themeable .wrn components plus a single tokenized stylesheet.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
@wrnexus/ui ships a library of server-rendered .wrn components (layout, form controls, and feedback UI) together with one themeable stylesheet, ui.css. The components are auto-discovered by the framework router — you don't import them in code. Once the package's component directory is on the router's scan path, you mount any component in a page with data-component="<name>". Every visual is driven by var(--wire-*) theme tokens, so components restyle instantly when the theme changes. The tiny JS surface (src/index.ts) exists only so the toolchain (CLI build + dev server) can locate the component directory and stylesheet.
The complete PDF-aligned catalog currently contains 85 components. The generated COMPONENTS.md and component-reference.json files document every mount name, prop, inferred type, default/required status, slot, event, category, and source file directly from the packaged .wrn source.
@wrnexus/ui ships a library of server-rendered .wrn components (layout, form controls, and feedback UI) together with one themeable stylesheet, ui.css. The components are auto-discovered by the framework router — you don't import them in code. Once the package's component directory is on the router's scan path, you mount any component in a page with data-component="<name>". Every visual is driven by var(--wrn-*) theme tokens, so components restyle instantly when the theme changes. The tiny JS surface (src/index.ts) exists only so the toolchain (CLI build + dev server) can locate the component directory and stylesheet.
The complete catalog currently contains 102 components. The generated COMPONENTS.md and component-reference.json files document every mount name, prop, inferred type, default/required status, slot, event, category, and source file directly from the packaged .wrn source.
bun add @wrnexus/ui
Private package — the machine must be authenticated to the wrnexus npm org
(a read token in ~/.npmrc). Requires Bun (Node is not supported).
-In practice you rarely install this directly: @wrnexus/cli and @wrnexus/dev-server already depend on it and wire it into the router for you (see [Auto-discovery](#auto-discovery)).
In practice you rarely install this directly: @wrnexus/cli and @wrnexus/dev-server already depend on it and wrn it into the router for you (see [Auto-discovery](#auto-discovery)).
Components live as .wrn files under packages/ui/components/. The canonical mount name comes from the component declaration (for example, component Button mounts as data-component="Button"). Component lookup is case-insensitive, so existing lowercase mounts continue to work. Each component accepts a class prop (appended to its root element), and most render their body from either a named prop or the default slot.
| Name | Purpose | Key props | |||||
|---|---|---|---|---|---|---|---|
button | Button | label, variant (default\ | primary\ | danger\ | ghost), size (sm\ | md\ | lg), type |
input | Text input | see source | |||||
textarea | Multi-line input | see source | |||||
checkbox | Checkbox | see source | |||||
badge | Small status badge | label, variant | |||||
alert | Callout box | variant (info\ | success\ | danger\ | warning), title, message | ||
card | Padded, bordered surface | class | |||||
avatar | User avatar | see source | |||||
spinner | Loading indicator | see source | |||||
disclosure | Expandable details/summary | see source | |||||
theme-toggle | Theme switch button (binds data-wire-theme-toggle) | label |
buttonlabel, variant (default\primary\danger\ghost), size (sm\md\lg), typeinputtextareacheckboxbadgelabel, variantalertvariant (info\success\danger\warning), title, messagecardclassavatarspinnerdisclosuretheme-toggledata-wrn-theme-toggle)labelAlso shipped: select, radio, switch, progress, tag, skeleton, tooltip, table, FAQAccordion, AnnouncementBar, and BackToTop.
The PDF-defined minimum release and essential build-first set also includes typed typography, form primitives, loading actions, combobox and multi-select, time/date-time and recurring schedule controls, confirmation dialogs, data tables, filters, desktop/mobile navigation, mega menus, marketing/product/legal page shells, product and metric cards, FAQ composition, pricing comparison, SDK tabs, legal navigation, and cookie preferences.
Seo and StructuredData remain framework/page concerns rather than body components: use the native page seo { ... } block and document-head APIs so metadata is emitted in <head> instead of invalid component markup.
The authoritative, always-current list is uiComponentNames() (below), which reads the component directory at runtime.
For the full catalog, see [COMPONENTS.md](./COMPONENTS.md). The machine-readable equivalent is exported as @wrnexus/ui/component-reference.json.
Keep navigation data in a shared TypeScript module and validate it with the package contract. NavbarItem is a discriminated union of link, dropdown, and mega; a mega item accepts every MegaMenu layout option.
import type { NavbarItem } from "@wrnexus/ui";
+
+export const navigation = [
+ { type: "link", label: "Pricing", href: "/pricing" },
+ {
+ type: "dropdown",
+ label: "Company",
+ items: [
+ { label: "About", href: "/about" },
+ { label: "Contact", href: "/contact" },
+ ],
+ },
+ {
+ type: "mega",
+ label: "Products",
+ mega: {
+ variant: "icon-grid",
+ panelWidth: "2xl",
+ columnCount: 3,
+ rail: [{ label: "All products", href: "/products" }],
+ columns: [
+ {
+ heading: "Work",
+ items: [
+ {
+ label: "Projects",
+ href: "/products/projects",
+ icon: "icon-[lucide--folders]",
+ description: "Plan and deliver work",
+ badge: "New",
+ },
+ ],
+ },
+ ],
+ featured: {
+ title: "What's new",
+ actionLabel: "Explore",
+ actionHref: "/new",
+ },
+ actionLabel: "View all products",
+ actionHref: "/products",
+ },
+ },
+] satisfies NavbarItem[];
+Importing from @wrnexus/ui/navigation is also supported. Existing untyped Navbar data using children remains accepted at runtime for migration.
The JS module (@wrnexus/ui) exposes five helpers used by the build tooling to locate the component assets. There is no component code to import — the components are .wrn files rendered server-side.
| Export | Signature | Returns |
|---|---|---|
uiComponentsDir | () => string | Absolute path to the .wrn component directory (feed to buildRouter's componentDirs). |
uiCssPath | () => string | Absolute path to ui.css. |
uiCss | () => string | The ui.css file contents (all .wire-* classes, themed via tokens). |
uiComponentNames | () => string[] | Sorted list of declared built-in component names. |
uiComponentPath | (name: string) => string | Absolute source path for a declared component name or case-insensitive alias. |
uiComponentsDir() => string.wrn component directory (feed to buildRouter's componentDirs).uiCssPath() => stringui.css.uiCss() => stringui.css file contents (all .wrn-* classes, themed via tokens).uiComponentNames() => string[]uiComponentPath(name: string) => string./ui.css asset exportpackage.json also exposes the raw stylesheet as a subpath asset:
"exports": {
@@ -59,24 +106,24 @@ page wrnexusui {
The framework serves this stylesheet once at /__wrnexus/ui.css, so pages get all component styles from a single request.
Component styles and motion
Components own their BEM styles in local style {} blocks and do not require a Tailwind scan. ui.css supplies only global tokens, resets, and shared primitives. Applications can still use Tailwind independently in their own source files.
-The shared stylesheet gives all component boundaries consistent, GPU-friendly entry and interaction motion. Override --wire-motion-fast, --wire-motion-base, --wire-motion-slow, --wire-ease-standard, or --wire-ease-emphasized to tune it. Hover lift is limited to precise pointing devices and prefers-reduced-motion is honored automatically.
+The shared stylesheet gives all component boundaries consistent, GPU-friendly entry and interaction motion. Override --wrn-motion-fast, --wrn-motion-base, --wrn-motion-slow, --wrn-ease-standard, or --wrn-ease-emphasized to tune it. Hover lift is limited to precise pointing devices and prefers-reduced-motion is honored automatically.
Using the selected theme in application UI
The active theme and palette are not limited to @wrnexus/ui components. The framework exposes the resolved values as semantic CSS custom properties, so pages and custom .wrn components can use the same contract:
.account-card {
- background: var(--wire-color-surface);
- color: var(--wire-color-text);
- border: 1px solid var(--wire-color-border);
+ background: var(--wrn-color-surface);
+ color: var(--wrn-color-text);
+ border: 1px solid var(--wrn-color-border);
}
.account-card__action {
- background: var(--wire-color-primary);
- color: var(--wire-color-primary-contrast);
+ background: var(--wrn-color-primary);
+ color: var(--wrn-color-primary-contrast);
}
-Stable no-spacing helper classes are also available: wire-bg-page, wire-bg-surface, wire-bg-surface-2, wire-bg-primary, wire-bg-secondary, wire-text, wire-text-muted, wire-text-primary, wire-text-success, wire-text-warning, wire-text-danger, and wire-border.
+Stable no-spacing helper classes are also available: wrn-bg-page, wrn-bg-surface, wrn-bg-surface-2, wrn-bg-primary, wrn-bg-secondary, wrn-text, wrn-text-muted, wrn-text-primary, wrn-text-success, wrn-text-warning, wrn-text-danger, and wrn-border.
Tailwind-authored custom markup can continue using the palette families already used by packaged components. indigo-* and violet-* resolve to primary, blue-* to info, emerald-*/green-* to success, amber-* to warning, and red-*/rose-* to danger. These aliases live at :root, so they work outside a [data-component] boundary too.
Usage
Auto-discovery
-The router scans extra componentDirs (in addition to the app's own app/components) and keys components by name. Library dirs are scanned first and app/components last, so an app component of the same name shadows the library's. The CLI build (@wrnexus/cli) and dev server (@wrnexus/dev-server) both wire the UI directory in for you:
+The router scans extra componentDirs (in addition to the app's own app/components) and keys components by name. Library dirs are scanned first and app/components last, so an app component of the same name shadows the library's. The CLI build (@wrnexus/cli) and dev server (@wrnexus/dev-server) both wrn the UI directory in for you:
import { buildRouter } from "@wrnexus/router";
import { uiComponentsDir } from "@wrnexus/ui";
@@ -90,7 +137,7 @@ const router = buildRouter(appDir, { componentDirs: [uiComponentsDir()]
</div>
Overrides
Ways to customize the components, in increasing order of power:
-1. Theme tokens — override CSS custom properties such as --wire-color-primary, --wire-color-surface, --wire-radius-sm, etc. Every component style resolves through var(--wire-*), so changing a token restyles everything instantly (including across theme switches). 2. App CSS — redefine a .wire-* class in your own stylesheet, which is loaded after ui.css and therefore wins. 3. class prop — pass a class prop to a component; it is appended to the component's root element, letting you add per-instance classes without touching the base styles. 4. wrnexus eject <name> — copy the component's .wrn source into your app/components, where (because app components shadow library ones) you fully own and can edit it. Use uiComponentNames() for the list of ejectable names.
+1. Theme tokens — override CSS custom properties such as --wrn-color-primary, --wrn-color-surface, --wrn-radius-sm, etc. Every component style resolves through var(--wrn-*), so changing a token restyles everything instantly (including across theme switches). 2. App CSS — redefine a .wrn-* class in your own stylesheet, which is loaded after ui.css and therefore wins. 3. class prop — pass a class prop to a component; it is appended to the component's root element, letting you add per-instance classes without touching the base styles. 4. wrnexus eject <name> — copy the component's .wrn source into your app/components, where (because app components shadow library ones) you fully own and can edit it. Use uiComponentNames() for the list of ejectable names.
Requirements / Notes
- Bun-only — the package uses standard fs/path/url APIs but is published and
@@ -99,9 +146,8 @@ const router = buildRouter(appDir, { componentDirs: [uiComponentsDir()]
[@wrnexus/router](../router) (via componentDirs) and served by [@wrnexus/dev-server](../dev-server) / built by [@wrnexus/cli](../cli).
- Depends on [
@wrnexus/core](../core) (dependencies).
theme-toggle relies on the framework's theme runtime, which binds the
-data-wire-theme-toggle attribute — no per-component JS is required.
-
Complete TypeScript API
Generated from the exact installed package declarations.
-export { }
+data-wrn-theme-toggle attribute — no per-component JS is required.
+
Complete TypeScript API
Generated from the exact installed package declarations.
export { MegaMenuColumn, MegaMenuDensity, MegaMenuFeatured, MegaMenuPanelAlign, MegaMenuPanelWidth, MegaMenuRailItem, MegaMenuVariant, NavbarAction, NavbarBrand, NavbarDropdownGroup, NavbarDropdownItem, NavbarItem, NavbarItemType, NavbarLinkItem, NavbarMegaMenuData, NavbarMegaMenuItem, NavigationLink } from './navigation.js';
Examples
Copy-ready examples from the installed package documentation.
Auto-discovery
import { buildRouter } from "@wrnexus/router";
import { uiComponentsDir } from "@wrnexus/ui";
@@ -110,9 +156,9 @@ const router = buildRouter(appDir, { componentDirs: [uiComponentsDir()]
<button data-component="button" label="Save" variant="primary" size="lg"></button>
<div data-component="alert" variant="success" title="Done" message="Saved."></div>
</div>
Explore the component library
Browse interactive examples and complete component usage in the dedicated WRNexusJS component showcase.
-
+
Validated local/S3 uploads and secure file serving.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/uploader@0.8.8Request preview access. Never put registry tokens in source control.
Config-driven file uploads + serving for WRNexusJS. Declare named storage stores (local disk or any S3-compatible backend) in wrnexus.config.ts, upload with one function call, drop a drag-and-drop widget on a page, and serve files back — public or private. Zero external dependencies (S3 is signed with a built-in AWS SigV4 implementation, like the rest of the framework).
Validated local/S3 uploads and secure file serving.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/uploader@0.8.13Request preview access. Never put registry tokens in source control.
Config-driven file uploads + serving for WRNexusJS. Declare named storage stores (local disk or any S3-compatible backend) in wrnexus.config.ts, upload with one function call, drop a drag-and-drop widget on a page, and serve files back — public or private. Zero external dependencies (S3 is signed with a built-in AWS SigV4 implementation, like the rest of the framework).
// wrnexus.config.ts
@@ -316,7 +316,7 @@ declare function serveFromStore(storeName?: string, opts?: {
/**
* Framework asset hook: serve PUBLIC local objects at
* `/__wrnexus/uploads/<store>/<key>`. Returns `null` for anything it doesn't
- * own (unknown/private/S3-backed store) so the caller falls through. Wired into
+ * own (unknown/private/S3-backed store) so the caller falls through. Connected to
* the dev + prod asset servers.
*/
declare function serveStoredFile(pathname: string): Promise<Response | null>;
@@ -326,7 +326,7 @@ declare function serveStoredFile(pathname: string): Promise<Response | null&g
* input, per-file progress bars, and success/failed states. Injected by
* `collectScripts` only on pages that contain `data-uploader` (same mechanism as
* `validate.js`). Self-contained: it injects its own themed stylesheet (using
- * `--wire-*` tokens) and posts each file via XHR so upload progress is live.
+ * `--wrn-*` tokens) and posts each file via XHR so upload progress is live.
*
* Markup it enhances (also a valid no-JS `<form>` fallback if you wrap it):
* <div data-uploader="public" data-endpoint="/api/upload"
@@ -340,7 +340,7 @@ declare function serveStoredFile(pathname: string): Promise<Response | null&g
* backticks and no ${...}, so it embeds safely in the exported template string.
*/
declare const UPLOAD_JS_HREF = "/__wrnexus/uploader.js";
-declare const UPLOAD_RUNTIME = "\n(function () {\n if (typeof document === \"undefined\") return;\n var CSRF_COOKIE = \"wire-csrf\";\n\n var CSS =\n \".wire-uploader{display:block}\" +\n \".wire-uploader-zone{display:flex;align-items:center;justify-content:center;text-align:center;\" +\n \"min-height:8rem;padding:1.25rem;border:2px dashed var(--wire-border,#cbd5e1);border-radius:12px;\" +\n \"background:var(--wire-surface,transparent);color:var(--wire-muted,#64748b);cursor:pointer;\" +\n \"transition:border-color .15s ease,background-color .15s ease;position:relative}\" +\n \".wire-uploader-zone:hover,.wire-uploader-zone:focus-visible{border-color:var(--wire-brand,#3f7dff);outline:none}\" +\n \".wire-uploader-zone.is-drag{border-color:var(--wire-brand,#3f7dff);background:color-mix(in oklab,var(--wire-brand,#3f7dff) 8%,transparent)}\" +\n \".wire-uploader-prompt{font-size:.9rem;pointer-events:none}\" +\n \".wire-uploader-input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}\" +\n \".wire-uploader-list{list-style:none;margin:.75rem 0 0;padding:0;display:flex;flex-direction:column;gap:.5rem}\" +\n \".wire-uploader-item{display:grid;grid-template-columns:1fr auto;gap:.15rem .75rem;align-items:center;\" +\n \"font-size:.82rem;padding:.5rem .7rem;border:1px solid var(--wire-border,#e2e8f0);border-radius:8px}\" +\n \".wire-uploader-name{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--wire-text,#0f172a)}\" +\n \".wire-uploader-meta{color:var(--wire-muted,#94a3b8);font-variant-numeric:tabular-nums}\" +\n \".wire-uploader-bar{grid-column:1/-1;height:5px;border-radius:999px;background:var(--wire-border,#e2e8f0);overflow:hidden}\" +\n \".wire-uploader-fill{height:100%;width:0;border-radius:999px;background:var(--wire-brand,#3f7dff);transition:width .15s ease}\" +\n \".wire-uploader-status{grid-column:1/-1;font-size:.75rem;color:var(--wire-muted,#94a3b8);font-variant-numeric:tabular-nums}\" +\n \".wire-uploader-item.is-done .wire-uploader-fill{background:var(--wire-success,#16a34a)}\" +\n \".wire-uploader-item.is-done .wire-uploader-status{color:var(--wire-success,#16a34a)}\" +\n \".wire-uploader-item.is-error .wire-uploader-fill{background:var(--wire-danger,#dc2626)}\" +\n \".wire-uploader-item.is-error .wire-uploader-status{color:var(--wire-danger,#dc2626)}\";\n\n function injectCss() {\n if (document.getElementById(\"wire-uploader-css\")) return;\n var s = document.createElement(\"style\");\n s.id = \"wire-uploader-css\";\n s.textContent = CSS;\n document.head.appendChild(s);\n }\n\n function cookie(name) {\n var m = document.cookie.match(new RegExp(\"(?:^|; )\" + name + \"=([^;]*)\"));\n return m ? decodeURIComponent(m[1]) : \"\";\n }\n function el(tag, cls, text) {\n var e = document.createElement(tag);\n if (cls) e.className = cls;\n if (text != null) e.textContent = text;\n return e;\n }\n function fmt(n) {\n if (n < 1024) return n + \" B\";\n if (n < 1048576) return (n / 1024).toFixed(1) + \" KB\";\n return (n / 1048576).toFixed(1) + \" MB\";\n }\n function accepts(accept, file) {\n var list = (accept || \"\").split(\",\").map(function (s) { return s.trim().toLowerCase(); }).filter(Boolean);\n if (!list.length) return true;\n var type = (file.type || \"\").toLowerCase();\n var name = (file.name || \"\").toLowerCase();\n var ext = name.indexOf(\".\") >= 0 ? name.slice(name.lastIndexOf(\".\")) : \"\";\n return list.some(function (rule) {\n if (rule.charAt(0) === \".\") return rule === ext;\n if (rule.slice(-2) === \"/*\") return type.indexOf(rule.slice(0, -1)) === 0;\n return rule === type;\n });\n }\n\n function setup(root) {\n if (root.__wrnexusUploader) return;\n root.__wrnexusUploader = true;\n\n var endpoint = root.getAttribute(\"data-endpoint\") || \"/api/upload\";\n var multipleAttr = root.getAttribute(\"data-multiple\");\n var multiple = root.hasAttribute(\"data-multiple\") && multipleAttr !== \"false\";\n var accept = root.getAttribute(\"data-accept\") || \"\";\n var maxBytes = parseInt(root.getAttribute(\"data-max\") || \"0\", 10) || 0;\n var field = root.getAttribute(\"data-field\") || (multiple ? \"files\" : \"file\");\n var invalidate = String(root.getAttribute(\"data-invalidate\") || \"\")\n .split(\",\")\n .map(function (tag) { return tag.trim(); })\n .filter(Boolean);\n var promptText = root.getAttribute(\"data-label\") || \"Drag files here or click to browse\";\n\n root.classList.add(\"wire-uploader\");\n var zone = el(\"div\", \"wire-uploader-zone\");\n zone.setAttribute(\"role\", \"button\");\n zone.setAttribute(\"tabindex\", \"0\");\n zone.appendChild(el(\"div\", \"wire-uploader-prompt\", promptText));\n var input = document.createElement(\"input\");\n input.type = \"file\";\n input.className = \"wire-uploader-input\";\n if (multiple) input.multiple = true;\n if (accept) input.accept = accept;\n zone.appendChild(input);\n var listEl = el(\"ul\", \"wire-uploader-list\");\n root.appendChild(zone);\n root.appendChild(listEl);\n\n zone.addEventListener(\"keydown\", function (e) {\n if (e.key === \"Enter\" || e.key === \" \") { e.preventDefault(); input.click(); }\n });\n [\"dragenter\", \"dragover\"].forEach(function (ev) {\n zone.addEventListener(ev, function (e) { e.preventDefault(); zone.classList.add(\"is-drag\"); });\n });\n [\"dragleave\", \"drop\"].forEach(function (ev) {\n zone.addEventListener(ev, function (e) { e.preventDefault(); zone.classList.remove(\"is-drag\"); });\n });\n zone.addEventListener(\"drop\", function (e) {\n if (e.dataTransfer && e.dataTransfer.files) handle(e.dataTransfer.files);\n });\n input.addEventListener(\"change\", function () {\n if (input.files) handle(input.files);\n input.value = \"\";\n });\n\n function handle(files) {\n var arr = Array.prototype.slice.call(files);\n if (!multiple) arr = arr.slice(0, 1);\n arr.forEach(uploadOne);\n }\n\n function row(file) {\n var li = el(\"li\", \"wire-uploader-item\");\n li.appendChild(el(\"span\", \"wire-uploader-name\", file.name));\n li.appendChild(el(\"span\", \"wire-uploader-meta\", fmt(file.size)));\n var bar = el(\"div\", \"wire-uploader-bar\");\n var fill = el(\"div\", \"wire-uploader-fill\");\n bar.appendChild(fill);\n li.appendChild(bar);\n var status = el(\"span\", \"wire-uploader-status\", \"\");\n li.appendChild(status);\n listEl.appendChild(li);\n return { li: li, fill: fill, status: status };\n }\n\n function uploadOne(file) {\n var ui = row(file);\n if (maxBytes && file.size > maxBytes) return fail(ui, \"Too large (max \" + fmt(maxBytes) + \")\", file);\n if (!accepts(accept, file)) return fail(ui, \"Type not allowed\", file);\n\n var fd = new FormData();\n fd.append(field, file, file.name);\n var xhr = new XMLHttpRequest();\n xhr.open(\"POST\", endpoint, true);\n var token = cookie(CSRF_COOKIE);\n if (token) xhr.setRequestHeader(\"x-csrf-token\", token);\n xhr.upload.addEventListener(\"progress\", function (e) {\n if (e.lengthComputable) {\n var pct = Math.round((e.loaded / e.total) * 100);\n ui.fill.style.width = pct + \"%\";\n ui.status.textContent = pct + \"%\";\n }\n });\n xhr.addEventListener(\"load\", function () {\n var data = null;\n try { data = JSON.parse(xhr.responseText); }\n catch (error) { console.warn(\"[wrnexus:uploader] upload response was not valid JSON\", error); }\n if (xhr.status >= 200 && xhr.status < 300 && data && data.ok) {\n done(ui, (data.files && data.files[0]) || null, file);\n } else {\n fail(ui, (data && data.error) || (\"Upload failed (\" + xhr.status + \")\"), file);\n }\n });\n xhr.addEventListener(\"error\", function () { fail(ui, \"Network error\", file); });\n xhr.send(fd);\n }\n\n function done(ui, info, file) {\n ui.li.classList.remove(\"is-error\");\n ui.li.classList.add(\"is-done\");\n ui.fill.style.width = \"100%\";\n ui.status.textContent = \"\\u2713 Uploaded\";\n root.dispatchEvent(new CustomEvent(\"wrnexus:upload\", { bubbles: true, detail: { file: file, result: info } }));\n if (invalidate.length) {\n window.dispatchEvent(new CustomEvent(\"wrnexus:cache:invalidate\", {\n detail: { tags: invalidate, source: \"uploader\", file: file, result: info }\n }));\n }\n }\n function fail(ui, msg, file) {\n ui.li.classList.add(\"is-error\");\n ui.status.textContent = \"\\u2717 \" + msg;\n root.dispatchEvent(new CustomEvent(\"wrnexus:upload-error\", { bubbles: true, detail: { file: file, error: msg } }));\n }\n }\n\n function init() {\n injectCss();\n var nodes = document.querySelectorAll(\"[data-uploader]\");\n for (var i = 0; i < nodes.length; i++) setup(nodes[i]);\n }\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", init);\n else init();\n})();\n";
+declare const UPLOAD_RUNTIME = "\n(function () {\n if (typeof document === \"undefined\") return;\n var CSRF_COOKIE = \"wrn-csrf\";\n\n var CSS =\n \".wrn-uploader{display:block}\" +\n \".wrn-uploader-zone{display:flex;align-items:center;justify-content:center;text-align:center;\" +\n \"min-height:8rem;padding:1.25rem;border:2px dashed var(--wrn-border,#cbd5e1);border-radius:12px;\" +\n \"background:var(--wrn-surface,transparent);color:var(--wrn-muted,#64748b);cursor:pointer;\" +\n \"transition:border-color .15s ease,background-color .15s ease;position:relative}\" +\n \".wrn-uploader-zone:hover,.wrn-uploader-zone:focus-visible{border-color:var(--wrn-brand,#3f7dff);outline:none}\" +\n \".wrn-uploader-zone.is-drag{border-color:var(--wrn-brand,#3f7dff);background:color-mix(in oklab,var(--wrn-brand,#3f7dff) 8%,transparent)}\" +\n \".wrn-uploader-prompt{font-size:.9rem;pointer-events:none}\" +\n \".wrn-uploader-input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}\" +\n \".wrn-uploader-list{list-style:none;margin:.75rem 0 0;padding:0;display:flex;flex-direction:column;gap:.5rem}\" +\n \".wrn-uploader-item{display:grid;grid-template-columns:1fr auto;gap:.15rem .75rem;align-items:center;\" +\n \"font-size:.82rem;padding:.5rem .7rem;border:1px solid var(--wrn-border,#e2e8f0);border-radius:8px}\" +\n \".wrn-uploader-name{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--wrn-text,#0f172a)}\" +\n \".wrn-uploader-meta{color:var(--wrn-muted,#94a3b8);font-variant-numeric:tabular-nums}\" +\n \".wrn-uploader-bar{grid-column:1/-1;height:5px;border-radius:999px;background:var(--wrn-border,#e2e8f0);overflow:hidden}\" +\n \".wrn-uploader-fill{height:100%;width:0;border-radius:999px;background:var(--wrn-brand,#3f7dff);transition:width .15s ease}\" +\n \".wrn-uploader-status{grid-column:1/-1;font-size:.75rem;color:var(--wrn-muted,#94a3b8);font-variant-numeric:tabular-nums}\" +\n \".wrn-uploader-item.is-done .wrn-uploader-fill{background:var(--wrn-success,#16a34a)}\" +\n \".wrn-uploader-item.is-done .wrn-uploader-status{color:var(--wrn-success,#16a34a)}\" +\n \".wrn-uploader-item.is-error .wrn-uploader-fill{background:var(--wrn-danger,#dc2626)}\" +\n \".wrn-uploader-item.is-error .wrn-uploader-status{color:var(--wrn-danger,#dc2626)}\";\n\n function injectCss() {\n if (document.getElementById(\"wrn-uploader-css\")) return;\n var s = document.createElement(\"style\");\n s.id = \"wrn-uploader-css\";\n s.textContent = CSS;\n document.head.appendChild(s);\n }\n\n function cookie(name) {\n var m = document.cookie.match(new RegExp(\"(?:^|; )\" + name + \"=([^;]*)\"));\n return m ? decodeURIComponent(m[1]) : \"\";\n }\n function el(tag, cls, text) {\n var e = document.createElement(tag);\n if (cls) e.className = cls;\n if (text != null) e.textContent = text;\n return e;\n }\n function fmt(n) {\n if (n < 1024) return n + \" B\";\n if (n < 1048576) return (n / 1024).toFixed(1) + \" KB\";\n return (n / 1048576).toFixed(1) + \" MB\";\n }\n function accepts(accept, file) {\n var list = (accept || \"\").split(\",\").map(function (s) { return s.trim().toLowerCase(); }).filter(Boolean);\n if (!list.length) return true;\n var type = (file.type || \"\").toLowerCase();\n var name = (file.name || \"\").toLowerCase();\n var ext = name.indexOf(\".\") >= 0 ? name.slice(name.lastIndexOf(\".\")) : \"\";\n return list.some(function (rule) {\n if (rule.charAt(0) === \".\") return rule === ext;\n if (rule.slice(-2) === \"/*\") return type.indexOf(rule.slice(0, -1)) === 0;\n return rule === type;\n });\n }\n\n function setup(root) {\n if (root.__wrnexusUploader) return;\n root.__wrnexusUploader = true;\n\n var endpoint = root.getAttribute(\"data-endpoint\") || \"/api/upload\";\n var multipleAttr = root.getAttribute(\"data-multiple\");\n var multiple = root.hasAttribute(\"data-multiple\") && multipleAttr !== \"false\";\n var accept = root.getAttribute(\"data-accept\") || \"\";\n var maxBytes = parseInt(root.getAttribute(\"data-max\") || \"0\", 10) || 0;\n var field = root.getAttribute(\"data-field\") || (multiple ? \"files\" : \"file\");\n var invalidate = String(root.getAttribute(\"data-invalidate\") || \"\")\n .split(\",\")\n .map(function (tag) { return tag.trim(); })\n .filter(Boolean);\n var promptText = root.getAttribute(\"data-label\") || \"Drag files here or click to browse\";\n\n root.classList.add(\"wrn-uploader\");\n var zone = el(\"div\", \"wrn-uploader-zone\");\n zone.setAttribute(\"role\", \"button\");\n zone.setAttribute(\"tabindex\", \"0\");\n zone.appendChild(el(\"div\", \"wrn-uploader-prompt\", promptText));\n var input = document.createElement(\"input\");\n input.type = \"file\";\n input.className = \"wrn-uploader-input\";\n if (multiple) input.multiple = true;\n if (accept) input.accept = accept;\n zone.appendChild(input);\n var listEl = el(\"ul\", \"wrn-uploader-list\");\n root.appendChild(zone);\n root.appendChild(listEl);\n\n zone.addEventListener(\"keydown\", function (e) {\n if (e.key === \"Enter\" || e.key === \" \") { e.preventDefault(); input.click(); }\n });\n [\"dragenter\", \"dragover\"].forEach(function (ev) {\n zone.addEventListener(ev, function (e) { e.preventDefault(); zone.classList.add(\"is-drag\"); });\n });\n [\"dragleave\", \"drop\"].forEach(function (ev) {\n zone.addEventListener(ev, function (e) { e.preventDefault(); zone.classList.remove(\"is-drag\"); });\n });\n zone.addEventListener(\"drop\", function (e) {\n if (e.dataTransfer && e.dataTransfer.files) handle(e.dataTransfer.files);\n });\n input.addEventListener(\"change\", function () {\n if (input.files) handle(input.files);\n input.value = \"\";\n });\n\n function handle(files) {\n var arr = Array.prototype.slice.call(files);\n if (!multiple) arr = arr.slice(0, 1);\n arr.forEach(uploadOne);\n }\n\n function row(file) {\n var li = el(\"li\", \"wrn-uploader-item\");\n li.appendChild(el(\"span\", \"wrn-uploader-name\", file.name));\n li.appendChild(el(\"span\", \"wrn-uploader-meta\", fmt(file.size)));\n var bar = el(\"div\", \"wrn-uploader-bar\");\n var fill = el(\"div\", \"wrn-uploader-fill\");\n bar.appendChild(fill);\n li.appendChild(bar);\n var status = el(\"span\", \"wrn-uploader-status\", \"\");\n li.appendChild(status);\n listEl.appendChild(li);\n return { li: li, fill: fill, status: status };\n }\n\n function uploadOne(file) {\n var ui = row(file);\n if (maxBytes && file.size > maxBytes) return fail(ui, \"Too large (max \" + fmt(maxBytes) + \")\", file);\n if (!accepts(accept, file)) return fail(ui, \"Type not allowed\", file);\n\n var fd = new FormData();\n fd.append(field, file, file.name);\n var xhr = new XMLHttpRequest();\n xhr.open(\"POST\", endpoint, true);\n var token = cookie(CSRF_COOKIE);\n if (token) xhr.setRequestHeader(\"x-csrf-token\", token);\n xhr.upload.addEventListener(\"progress\", function (e) {\n if (e.lengthComputable) {\n var pct = Math.round((e.loaded / e.total) * 100);\n ui.fill.style.width = pct + \"%\";\n ui.status.textContent = pct + \"%\";\n }\n });\n xhr.addEventListener(\"load\", function () {\n var data = null;\n try { data = JSON.parse(xhr.responseText); }\n catch (error) { console.warn(\"[wrnexus:uploader] upload response was not valid JSON\", error); }\n if (xhr.status >= 200 && xhr.status < 300 && data && data.ok) {\n done(ui, (data.files && data.files[0]) || null, file);\n } else {\n fail(ui, (data && data.error) || (\"Upload failed (\" + xhr.status + \")\"), file);\n }\n });\n xhr.addEventListener(\"error\", function () { fail(ui, \"Network error\", file); });\n xhr.send(fd);\n }\n\n function done(ui, info, file) {\n ui.li.classList.remove(\"is-error\");\n ui.li.classList.add(\"is-done\");\n ui.fill.style.width = \"100%\";\n ui.status.textContent = \"\\u2713 Uploaded\";\n root.dispatchEvent(new CustomEvent(\"wrnexus:upload\", { bubbles: true, detail: { file: file, result: info } }));\n if (invalidate.length) {\n window.dispatchEvent(new CustomEvent(\"wrnexus:cache:invalidate\", {\n detail: { tags: invalidate, source: \"uploader\", file: file, result: info }\n }));\n }\n }\n function fail(ui, msg, file) {\n ui.li.classList.add(\"is-error\");\n ui.status.textContent = \"\\u2717 \" + msg;\n root.dispatchEvent(new CustomEvent(\"wrnexus:upload-error\", { bubbles: true, detail: { file: file, error: msg } }));\n }\n }\n\n function init() {\n injectCss();\n var nodes = document.querySelectorAll(\"[data-uploader]\");\n for (var i = 0; i < nodes.length; i++) setup(nodes[i]);\n }\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", init);\n else init();\n})();\n";
/**
* Local-disk storage driver. Files live under a configured directory; keys map
@@ -638,7 +638,7 @@ import { serveFromStore } from "@wrnexus/uploader";
export const GET = serveFromStore("docs"); // your middleware decides who gets inTyped schemas, coercion, validation, and browser descriptors.
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/validation@0.8.8Request preview access. Never put registry tokens in source control.
One fluent schema, validated on the server (API bodies, env vars) and mirrored to an eval-free browser validator for forms.+
Typed schemas, coercion, validation, and browser descriptors.
After WorkRoot approves private registry access, install the package:
bun add @wrnexus/validation@0.8.13Request preview access. Never put registry tokens in source control.
One fluent schema, validated on the server (API bodies, env vars) and mirrored to an eval-free browser validator for forms.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Use ContractRegistry with defineContract or defineEvent to publish the same schema descriptors for APIs, actions, webhooks, realtime, queues, cron, pub/sub, plugins, configuration, and environment variables.
Export the registry from app/contracts.ts, then accept a baseline with wrnexus contracts snapshot. CI can run wrnexus contracts check; removed contracts/fields, required-field additions, type changes, narrowed enums, and tighter validation fail with stable WRN-CONTRACT-* diagnostics and list known consumers. A generated wrnexus.contracts.json can be used instead of a module.
Define a schema once with the fluent v builder, then reuse it in three places: .parse() runs server-side and returns coerced values plus per-field errors; .describe() emits a plain-JSON SchemaDescriptor that the browser runtime interprets (no eval, no bundled validator); and helpers like parseBody and parseEnv wire schemas straight into API routes and startup config. The server rule logic (applyRule/checkField) and the client runtime (VALIDATE_RUNTIME) mirror each other exactly, so a form validates identically in both places. Schemas are conventionally kept in app/schemas/.
Define a schema once with the fluent v builder, then reuse it in three places: .parse() runs server-side and returns coerced values plus per-field errors; .describe() emits a plain-JSON SchemaDescriptor that the browser runtime interprets (no eval, no bundled validator); and helpers like parseBody and parseEnv wrn schemas straight into API routes and startup config. The server rule logic (applyRule/checkField) and the client runtime (VALIDATE_RUNTIME) mirror each other exactly, so a form validates identically in both places. Schemas are conventionally kept in app/schemas/.
bun add @wrnexus/validation
Private package — the machine must be authenticated to the wrnexus npm org
(a read token in ~/.npmrc). Requires Bun (Node is not supported).
@@ -97,8 +97,8 @@ parseBody<T>(schema, req):
renderSchemasScript(descriptors: Record<string, SchemaDescriptor>): string
VALIDATE_RUNTIME: string
renderSchemasScript produces window.__wireSchemas = { name: descriptor, … }; to inline in the page.VALIDATE_RUNTIME is a self-contained, eval-free IIFE string. Injected as a <script>, it binds every form[data-schema] and validates on submit and blur, writing messages into [data-error="<field>"] elements and toggling aria-invalid / .wire-invalid. On a valid submit it fetches the form action as JSON (attaching the wire-csrf cookie as an x-csrf-token header), then follows data-redirect / a redirect in the response, surfaces server-side field errors, and fires wire:success / wire:error events. It exposes window.__wireValidate.init(root) and self-initializes on DOMContentLoaded.renderSchemasScript produces window.__wrnSchemas = { name: descriptor, … }; to inline in the page.VALIDATE_RUNTIME is a self-contained, eval-free IIFE string. Injected as a <script>, it binds every form[data-schema] and validates on submit and blur, writing messages into [data-error="<field>"] elements and toggling aria-invalid / .wrn-invalid. On a valid submit it fetches the form action as JSON (attaching the wrn-csrf cookie as an x-csrf-token header), then follows data-redirect / a redirect in the response, surfaces server-side field errors, and fires wrn:success / wrn:error events. It exposes window.__wrnValidate.init(root) and self-initializes on DOMContentLoaded.Define a schema and validate an API body:
@@ -134,7 +134,7 @@ export const env = parseEnv( }), ); // throws one readable error listing every bad variable if misconfigured -Wire the same schema into the browser:
+WRNexusJS the same schema into the browser:
import { renderSchemasScript, VALIDATE_RUNTIME } from "@wrnexus/validation";
import { signupSchema } from "./app/schemas/signup.ts";
@@ -188,13 +188,13 @@ import '@wrnexus/plugin';
/**
* Client-side validation. `renderSchemasScript` bakes the discovered schema
- * descriptors into `window.__wireSchemas`; `VALIDATE_RUNTIME` is a generic,
+ * descriptors into `window.__wrnSchemas`; `VALIDATE_RUNTIME` is a generic,
* eval-free validator that reads them and validates every `form[data-schema]`
* on submit and blur, writing messages into `[data-error="<field>"]` elements.
* The rule logic mirrors `checkField`/`applyRule` in index.ts.
*/
-/** `window.__wireSchemas = { name: descriptor, ... }` for the client validator. */
+/** `window.__wrnSchemas = { name: descriptor, ... }` for the client validator. */
declare function renderSchemasScript(descriptors: Record<string, SchemaDescriptor>): string;
declare const VALIDATE_RUNTIME: string;
@@ -543,7 +543,7 @@ export const env = parseEnv(
DEBUG: v.boolean().optional(),
}),
);
-// throws one readable error listing every bad variable if misconfiguredimport { renderSchemasScript, VALIDATE_RUNTIME } from "@wrnexus/validation";
+// throws one readable error listing every bad variable if misconfiguredimport { renderSchemasScript, VALIDATE_RUNTIME } from "@wrnexus/validation";
import { signupSchema } from "./app/schemas/signup.ts";
const head = `<script>${renderSchemasScript({ signup: signupSchema.describe() })}</script>
@@ -551,7 +551,7 @@ const head = `<script>${renderSchemasScript({ signup: signupSche
// render a <form data-schema="signup"> with [data-error="email"] etc.Released 2026-07-13. All 47 installed packages are aligned to this version. Highlights include the new helpers package, reliable workspace app addition, and browser SSO redirects through forward authentication. See the changelog, upgrade guide, and package references.
Roadmap items are direction, not delivery commitments. Dates require explicit owner approval.
This build-time index is local and sends no query to a third party. Use your browser’s find command to filter this compact index.
Get started · Packages · Components · Language · Architecture
Project structure · Routing · Pages and components · Server data · API routes · Middleware · Forms and validation · Authentication · Authorization · Application security · Database · Uploads · Realtime · Pub/sub · Queues · Testing · Workspaces and gateway · Deployment · Configuration and profiles · Internationalization and themes · Mobile · Observability · Upgrading · Troubleshooting · Auth and permissions dashboard demo
@wrnexus/ai · @wrnexus/authz · @wrnexus/compiler · @wrnexus/core · @wrnexus/csr · @wrnexus/db · @wrnexus/dev-server · @wrnexus/encryption · @wrnexus/helpers · @wrnexus/i18n · @wrnexus/jwt · @wrnexus/mobile · @wrnexus/native · @wrnexus/oauth · @wrnexus/pubsub · @wrnexus/queue · @wrnexus/reactive · @wrnexus/router · @wrnexus/ssr · @wrnexus/styles · @wrnexus/test · @wrnexus/tracking · @wrnexus/ui · @wrnexus/uploader · @wrnexus/validation · @wrnexus/dev-toolbar · @wrnexus/syntax · @wrnexus/plugin · @wrnexus/captcha · @wrnexus/auth · @wrnexus/store · @wrnexus/typecheck · @wrnexus/security · @wrnexus/cache · @wrnexus/image · @wrnexus/observability · @wrnexus/benchmark · @wrnexus/realtime · @wrnexus/content · @wrnexus/graphql · @wrnexus/identity · @wrnexus/language-server · @wrnexus/mcp · @wrnexus/playground · @wrnexus/pwa · @wrnexus/rpc · @wrnexus/cli
Review the resolved production configuration, then test a valid request, an invalid CSRF token, an oversized body, an unapproved origin, an anonymous protected request, and a permission-denied request. Security configuration is complete only when denial behavior is tested.
Only the current private-preview release 0.8.72 is documented here. A formal old-release support window is not yet published.
Use WorkRoot’s approved private contact path at workroot.in. Do not publish exploit details or secrets. Include affected version, impact, reproduction, and a safe contact method. Response targets, encryption key, bounty, audit, and certification are not currently claimed.
Terminate TLS at a trusted edge, forward only expected proxy headers, store secrets outside source control, apply database migrations before traffic, and monitor rejected requests without logging credentials. Continue with the complete application security guide.
+ } } \ No newline at end of file diff --git a/app/pages/showcase.wrn b/app/pages/showcase.wrn index afafad0d..3a0b1000 100644 --- a/app/pages/showcase.wrn +++ b/app/pages/showcase.wrn @@ -7,7 +7,7 @@ page Showcase { view { Skip to contentOnly confirmed public properties are listed; no customer or traffic claims are made.
Creator/company site demonstrating a public WRNexusJS deployment. Exact deployed version and infrastructure notes await owner confirmation.
This documentation portal, built and verified against WRNexusJS 0.8.8 on Bun.
Screenshots are intentionally deferred until approved assets and alt text are available.
Only confirmed public properties are listed; no customer or traffic claims are made.
Creator/company site demonstrating a public WRNexusJS deployment. Exact deployed version and infrastructure notes await owner confirmation.
This documentation portal, built and verified against WRNexusJS 0.8.72 on Bun.
Screenshots are intentionally deferred until approved assets and alt text are available.
WRNexusJS has no public Discord, public issue tracker, or guaranteed community support channel listed by this repository. Preview access and support begin through WorkRoot’s public contact path.
Include WRNexusJS version, Bun version, OS, a minimal reproduction, expected and actual behavior, and sanitized logs. Never include registry tokens, credentials, session cookies, or private data.
Support scope, service levels, and commercial terms require owner confirmation.
This tutorial connects the installed 0.8.8 APIs into one design. Snippets are limited to declarations and README patterns verified in the installed packages; a CI-compiled standalone fixture remains on the roadmap.
A .wrn page renders tasks from an SSR API binding. A shared validation schema protects mutations. Session middleware identifies users, authorization policies gate updates, and a realtime room broadcasts changes.
import { v, parseBody } from "@wrnexus/validation";
+Preview · runnable-project extraction pendingSecure task board
This tutorial connects the installed 0.8.72 APIs into one design. Snippets are limited to declarations and README patterns verified in the installed packages; a CI-compiled standalone fixture remains on the roadmap.
Application shape
A .wrn page renders tasks from an SSR API binding. A shared validation schema protects mutations. Session middleware identifies users, authorization policies gate updates, and a realtime room broadcasts changes.
Schema and create route
import { v, parseBody } from "@wrnexus/validation";
const task = v.object({ title: v.string().trim().min(3).max(120) });
export const POST = async (ctx) => {
const parsed = await parseBody(task, ctx.req);
@@ -31,7 +31,7 @@ export const POST = async (ctx) => {
</ul></main>
}
}
Production checklist
- Choose SQLite for local development or configure the supported PostgreSQL driver.
- Run migrations before accepting traffic.
- Enable session authentication and enforce authorization on every mutation.
- Validate upload types and sizes; keep private objects behind authenticated routes.
- Use Redis pub/sub when realtime rooms span processes.
- Treat the default queue as non-durable until a production driver is selected.
Follow the focused database, authentication, authorization, realtime, and upload guides.
-
+
= ApiContracts[P][M]["input"]; + type ApiOutput
= ApiContracts[P][M]["output"];
}
diff --git a/bun.lock b/bun.lock
index 701311a0..a45f0a09 100644
--- a/bun.lock
+++ b/bun.lock
@@ -1,5 +1,5 @@
{
- "lockfileVersion": 1,
+ "lockfileVersion": 2,
"configVersion": 1,
"workspaces": {
"": {
@@ -7,59 +7,59 @@
"dependencies": {
"@iconify-json/lucide": "^1.2.118",
"@iconify/tailwind4": "^1.2.3",
- "@wrnexus/ai": "^0.8.8",
- "@wrnexus/auth": "^0.8.8",
- "@wrnexus/authz": "^0.8.8",
+ "@wrnexus/ai": "^0.8.9",
+ "@wrnexus/auth": "^0.8.33",
+ "@wrnexus/authz": "^0.8.15",
"@wrnexus/benchmark": "^0.8.8",
"@wrnexus/cache": "^0.8.8",
- "@wrnexus/captcha": "^0.8.8",
- "@wrnexus/compiler": "^0.8.8",
- "@wrnexus/content": "^0.8.8",
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/csr": "^0.8.8",
- "@wrnexus/db": "^0.8.8",
- "@wrnexus/dev-server": "^0.8.8",
- "@wrnexus/dev-toolbar": "^0.8.8",
- "@wrnexus/encryption": "^0.8.8",
+ "@wrnexus/captcha": "^0.8.16",
+ "@wrnexus/compiler": "^0.8.30",
+ "@wrnexus/content": "^0.8.9",
+ "@wrnexus/core": "^0.8.16",
+ "@wrnexus/csr": "^0.8.43",
+ "@wrnexus/db": "^0.8.23",
+ "@wrnexus/dev-server": "^0.8.66",
+ "@wrnexus/dev-toolbar": "^0.8.18",
+ "@wrnexus/encryption": "^0.8.10",
"@wrnexus/graphql": "^0.8.8",
- "@wrnexus/helpers": "^0.8.8",
- "@wrnexus/i18n": "^0.8.8",
+ "@wrnexus/helpers": "^0.8.9",
+ "@wrnexus/i18n": "^0.8.12",
"@wrnexus/identity": "^0.8.8",
- "@wrnexus/image": "^0.8.8",
- "@wrnexus/jwt": "^0.8.8",
- "@wrnexus/language-server": "^0.8.8",
+ "@wrnexus/image": "^0.8.10",
+ "@wrnexus/jwt": "^0.8.9",
+ "@wrnexus/language-server": "^0.8.12",
"@wrnexus/mcp": "^0.8.8",
"@wrnexus/mobile": "^0.8.8",
"@wrnexus/native": "^0.8.8",
"@wrnexus/oauth": "^0.8.8",
"@wrnexus/observability": "^0.8.8",
"@wrnexus/playground": "^0.8.8",
- "@wrnexus/plugin": "^0.8.8",
- "@wrnexus/pubsub": "^0.8.8",
- "@wrnexus/pwa": "^0.8.8",
- "@wrnexus/queue": "^0.8.8",
- "@wrnexus/reactive": "^0.8.8",
- "@wrnexus/realtime": "^0.8.8",
- "@wrnexus/router": "^0.8.8",
- "@wrnexus/rpc": "^0.8.8",
- "@wrnexus/security": "^0.8.8",
- "@wrnexus/ssr": "^0.8.8",
- "@wrnexus/store": "^0.8.8",
- "@wrnexus/styles": "^0.8.8",
- "@wrnexus/syntax": "^0.8.8",
- "@wrnexus/test": "^0.8.8",
+ "@wrnexus/plugin": "^0.8.9",
+ "@wrnexus/pubsub": "^0.8.9",
+ "@wrnexus/pwa": "^0.8.12",
+ "@wrnexus/queue": "^0.8.14",
+ "@wrnexus/reactive": "^0.8.9",
+ "@wrnexus/realtime": "^0.8.10",
+ "@wrnexus/router": "^0.8.10",
+ "@wrnexus/rpc": "^0.8.10",
+ "@wrnexus/security": "^0.8.9",
+ "@wrnexus/ssr": "^0.8.12",
+ "@wrnexus/store": "^0.8.12",
+ "@wrnexus/styles": "^0.8.26",
+ "@wrnexus/syntax": "^0.8.19",
+ "@wrnexus/test": "^0.8.16",
"@wrnexus/tracking": "^0.8.8",
- "@wrnexus/typecheck": "^0.8.8",
- "@wrnexus/ui": "^0.8.8",
- "@wrnexus/uploader": "^0.8.8",
- "@wrnexus/validation": "^0.8.8",
+ "@wrnexus/typecheck": "^0.8.17",
+ "@wrnexus/ui": "^0.8.88",
+ "@wrnexus/uploader": "^0.8.13",
+ "@wrnexus/validation": "^0.8.13",
},
"devDependencies": {
"@eslint/js": "^9.0.0",
"@tailwindcss/cli": "^4.0.0",
"@types/bun": "latest",
"@types/node": "^26.1.1",
- "@wrnexus/cli": "^0.8.8",
+ "@wrnexus/cli": "^0.8.72",
"eslint": "^9.0.0",
"prettier": "latest",
"tailwindcss": "^4.0.0",
@@ -69,11 +69,11 @@
},
},
"packages": {
- "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="],
+ "@antfu/install-pkg": ["@antfu/install-pkg@2.1.0", "", { "dependencies": { "package-manager-detector": "^1.8.0", "tinyexec": "^1.3.1" } }, "sha512-sdg9NxU3zR4Mnawfbc/x6GB5Wf17WYud5qOuEuxXjaKpYpMkISSJEjItGebXJ2bQ4DIcly4NYH23mtkGJjvKUw=="],
"@cyberalien/svg-utils": ["@cyberalien/svg-utils@1.2.19", "", { "dependencies": { "@iconify/types": "^2.0.0" } }, "sha512-paDJoDu+LhuH5Ma1q0BDqBpg6d16Xk22cZZrlg/s/J9oB8KgnnpU/snaEETJu2G1pwYcWQINUz6WUqu0Wm9k6A=="],
- "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="],
+ "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.10.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg=="],
"@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="],
@@ -83,7 +83,7 @@
"@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="],
- "@eslint/eslintrc": ["@eslint/eslintrc@3.3.6", "", { "dependencies": { "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.3.0", "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" } }, "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA=="],
+ "@eslint/eslintrc": ["@eslint/eslintrc@3.3.7", "", { "dependencies": { "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.3.2", "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" } }, "sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw=="],
"@eslint/js": ["@eslint/js@9.39.5", "", {}, "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A=="],
@@ -101,15 +101,15 @@
"@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="],
- "@iconify-json/lucide": ["@iconify-json/lucide@1.2.118", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-JBnK4YOq6K/lA0JP//27QxFxJ4120TjvfXAzGZZIGjCcXcRRRFxl1rcV7+IWdcVCe90KXdqVaAwLaLf6G3HELw=="],
+ "@iconify-json/lucide": ["@iconify-json/lucide@1.2.137", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-uKz1+tFbv1RFX/mJQNksdnyKJijNfRGSNnxfiyKtr+dLNfA3ERph+IgpXClKGOlV/5GsZwLv2jgJXQ/bjF/JAg=="],
"@iconify/tailwind4": ["@iconify/tailwind4@1.2.3", "", { "dependencies": { "@iconify/tools": "^5.0.5", "@iconify/types": "^2.0.0", "@iconify/utils": "^3.1.0" }, "peerDependencies": { "tailwindcss": ">= 4.0.0" } }, "sha512-z8SKiMHRASJKF/IY//87MF88lcB7ulxh8vlhQXXLWsBkNtOh6ese9R41MyGpQeqXdRvQVt+/fX2glQtHFjQ+MA=="],
- "@iconify/tools": ["@iconify/tools@5.0.12", "", { "dependencies": { "@cyberalien/svg-utils": "^1.2.15", "@iconify/types": "^2.0.0", "@iconify/utils": "^3.1.3", "fflate": "^0.8.3", "modern-tar": "^0.7.6", "pathe": "^2.0.3", "svgo": "^4.0.1" } }, "sha512-aFPwSFmFphUPVjNLUkgxgUPSPVgTEEjv0mE7NgvfoQBuE5TtsMrKa4HTY65cM5oXZ2a1xKQcW/RKhiOKEiAarw=="],
+ "@iconify/tools": ["@iconify/tools@5.0.14", "", { "dependencies": { "@cyberalien/svg-utils": "^1.2.19", "@iconify/types": "^2.0.0", "@iconify/utils": "^3.1.4", "fflate": "^0.8.3", "modern-tar": "^0.8.4", "pathe": "^2.0.3", "svgo": "^4.1.0" } }, "sha512-wJ4ZE3/HZh2iBqLwG+8FOMHe7CMJAJqwSXZSpPwMdj1gZM3Z4t2hbQMVw4Vm45oQ985qn0g89PUIcDEdKTheBA=="],
"@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="],
- "@iconify/utils": ["@iconify/utils@3.1.4", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "import-meta-resolve": "^4.2.0" } }, "sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw=="],
+ "@iconify/utils": ["@iconify/utils@3.1.7", "", { "dependencies": { "@antfu/install-pkg": "^2.0.1", "@iconify/types": "^2.0.0", "import-meta-resolve": "^4.2.0" } }, "sha512-JZHlwdID+dy+lTgbYC8NEC4zeugqeYsc6jewvzb4c58kHauJn+X7rNwQjxz5p2qSjqaEeQoLkCIQ9v/H4PK0/w=="],
"@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
@@ -117,11 +117,11 @@
"@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
- "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
+ "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="],
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
- "@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="],
+ "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
"@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", "@parcel/watcher-linux-arm64-musl": "2.5.1", "@parcel/watcher-linux-x64-glibc": "2.5.1", "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-arm64": "2.5.1", "@parcel/watcher-win32-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="],
@@ -151,183 +151,187 @@
"@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.5.1", "", { "os": "win32", "cpu": "x64" }, "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA=="],
- "@peculiar/asn1-cms": ["@peculiar/asn1-cms@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "@peculiar/asn1-x509-attr": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA=="],
+ "@peculiar/asn1-cms": ["@peculiar/asn1-cms@2.10.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.10.0", "@peculiar/asn1-x509": "^2.10.0", "@peculiar/asn1-x509-attr": "^2.10.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-CkX0H4NCIOMHOU3rh2xXZywinYZ/EnJlaOlJiGI0e5L4XjFqHf4iH30LMbXWChVppdA9ljbanjtzQFOhDNfTWg=="],
- "@peculiar/asn1-csr": ["@peculiar/asn1-csr@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg=="],
+ "@peculiar/asn1-csr": ["@peculiar/asn1-csr@2.10.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.10.0", "@peculiar/asn1-x509": "^2.10.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-jTPTr/9rxKM+niQLMF3jiAMb0lWHUhUHIuSOhdGCIfpB4FAQYf9SoiXOgxP8bS/68IB+bj+1OHvVnDVCQfVUZw=="],
- "@peculiar/asn1-ecc": ["@peculiar/asn1-ecc@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ=="],
+ "@peculiar/asn1-ecc": ["@peculiar/asn1-ecc@2.10.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.10.0", "@peculiar/asn1-x509": "^2.10.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-GFd3iOjFrWX+QWH2R2dO5QSJyyRGv9CIBKtRlGlPNCvb2RvmCbBDexe91MJgV76c69d998Xsa+CvuQ98seoiPg=="],
- "@peculiar/asn1-pfx": ["@peculiar/asn1-pfx@2.8.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.8.0", "@peculiar/asn1-pkcs8": "^2.8.0", "@peculiar/asn1-rsa": "^2.8.0", "@peculiar/asn1-schema": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg=="],
+ "@peculiar/asn1-pfx": ["@peculiar/asn1-pfx@2.10.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.10.0", "@peculiar/asn1-pkcs8": "^2.10.0", "@peculiar/asn1-rsa": "^2.10.0", "@peculiar/asn1-schema": "^2.10.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-1y3QK9ZH1IPleAMmRoJlPS10eGkAWnULETW8zDFNUK1ffqpG7zmDY+kYBMYQgwlcQZ2iitLm2z2EBP0xzRXpaA=="],
- "@peculiar/asn1-pkcs8": ["@peculiar/asn1-pkcs8@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA=="],
+ "@peculiar/asn1-pkcs8": ["@peculiar/asn1-pkcs8@2.10.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.10.0", "@peculiar/asn1-x509": "^2.10.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-Ri+BZT9bnwqlHWmhs7lvWjvJRxKev2hA2+4EbZajgeYWCbR8hyv0znF4DhsFouOhMj2nSDV/iGJ6DMQtwITnCw=="],
- "@peculiar/asn1-pkcs9": ["@peculiar/asn1-pkcs9@2.8.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.8.0", "@peculiar/asn1-pfx": "^2.8.0", "@peculiar/asn1-pkcs8": "^2.8.0", "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "@peculiar/asn1-x509-attr": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ=="],
+ "@peculiar/asn1-pkcs9": ["@peculiar/asn1-pkcs9@2.10.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.10.0", "@peculiar/asn1-pfx": "^2.10.0", "@peculiar/asn1-pkcs8": "^2.10.0", "@peculiar/asn1-schema": "^2.10.0", "@peculiar/asn1-x509": "^2.10.0", "@peculiar/asn1-x509-attr": "^2.10.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-XIXsbDQFezYk6fudczkuvawkRD4GNpISGCqfYhdkJlvcGF/RFknU+0DDJagOaJqBf+PdPzk4J9oMqDGcvfR9HQ=="],
- "@peculiar/asn1-rsa": ["@peculiar/asn1-rsa@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg=="],
+ "@peculiar/asn1-rsa": ["@peculiar/asn1-rsa@2.10.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.10.0", "@peculiar/asn1-x509": "^2.10.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-4Jvmwlh3gZAhNZ4/u7JSyLuce9hofOFZ4o3PYKAccCImGnyaT5CMym/ATgvAvqpOYFNW531oPZvJlEBhJy9VfA=="],
- "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.8.0", "", { "dependencies": { "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q=="],
+ "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.10.0", "", { "dependencies": { "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-GhokD41lV4gQrrLYm3wCkHfBOnJrnhDMgt4XeMW8gzfE1UdJqIuSwsE+ggf82XBjUXRJylcm+KIGQFa4utIVLw=="],
- "@peculiar/asn1-x509": ["@peculiar/asn1-x509@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg=="],
+ "@peculiar/asn1-x509": ["@peculiar/asn1-x509@2.10.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.10.0", "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-ucNVg8+ANveTpMN3fy9lA2alryONdXc2A4cEG2hMniWbvQt+YOZoe8BI80YYNO8FBcuDY1qbDQ4uQGQVraHxGA=="],
- "@peculiar/asn1-x509-attr": ["@peculiar/asn1-x509-attr@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA=="],
+ "@peculiar/asn1-x509-attr": ["@peculiar/asn1-x509-attr@2.10.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.10.0", "@peculiar/asn1-x509": "^2.10.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-/85GtKOKmgvuSJNlaFfwGWNdRSZZ+hpF02NyM01XiCdzpaZONiBltDyfluFPvFx966CR+ZHNSG1jniwpy07oGg=="],
"@peculiar/utils": ["@peculiar/utils@2.0.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ=="],
"@peculiar/x509": ["@peculiar/x509@1.14.3", "", { "dependencies": { "@peculiar/asn1-cms": "^2.6.0", "@peculiar/asn1-csr": "^2.6.0", "@peculiar/asn1-ecc": "^2.6.0", "@peculiar/asn1-pkcs9": "^2.6.0", "@peculiar/asn1-rsa": "^2.6.0", "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "pvtsutils": "^1.3.6", "reflect-metadata": "^0.2.2", "tslib": "^2.8.1", "tsyringe": "^4.10.0" } }, "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA=="],
- "@tailwindcss/cli": ["@tailwindcss/cli@4.3.2", "", { "dependencies": { "@parcel/watcher": "2.5.1", "@tailwindcss/node": "4.3.2", "@tailwindcss/oxide": "4.3.2", "enhanced-resolve": "5.21.6", "mri": "^1.2.0", "picocolors": "^1.1.1", "tailwindcss": "4.3.2" }, "bin": { "tailwindcss": "./dist/index.mjs" } }, "sha512-Fzt+HrIZHDlkRYKdLMBeufaroaPvwCBG70sMLdmurdeadNMO/LxbmT8Sbb+P83ep0iAlAImettb7Y+rO+37rXw=="],
+ "@tailwindcss/cli": ["@tailwindcss/cli@4.3.3", "", { "dependencies": { "@parcel/watcher": "2.5.1", "@tailwindcss/node": "4.3.3", "@tailwindcss/oxide": "4.3.3", "enhanced-resolve": "^5.24.1", "mri": "^1.2.0", "picocolors": "^1.1.1", "tailwindcss": "4.3.3" }, "bin": { "tailwindcss": "./dist/index.mjs" } }, "sha512-ZvS/n1ZHOBKcVlhkt8l5NNr1EDXk1NboYO5CYDOs6NUmvT9z6bzkwsosaJftY57T/3gWNzWMJzIXLodZC8ssdw=="],
- "@tailwindcss/node": ["@tailwindcss/node@4.3.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "5.21.6", "jiti": "^2.7.0", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.2" } }, "sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg=="],
+ "@tailwindcss/node": ["@tailwindcss/node@4.3.3", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.24.1", "jiti": "^2.7.0", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.3" } }, "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg=="],
- "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.2", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.2", "@tailwindcss/oxide-darwin-arm64": "4.3.2", "@tailwindcss/oxide-darwin-x64": "4.3.2", "@tailwindcss/oxide-freebsd-x64": "4.3.2", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.2", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.2", "@tailwindcss/oxide-linux-arm64-musl": "4.3.2", "@tailwindcss/oxide-linux-x64-gnu": "4.3.2", "@tailwindcss/oxide-linux-x64-musl": "4.3.2", "@tailwindcss/oxide-wasm32-wasi": "4.3.2", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.2", "@tailwindcss/oxide-win32-x64-msvc": "4.3.2" } }, "sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag=="],
+ "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.3", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.3", "@tailwindcss/oxide-darwin-arm64": "4.3.3", "@tailwindcss/oxide-darwin-x64": "4.3.3", "@tailwindcss/oxide-freebsd-x64": "4.3.3", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", "@tailwindcss/oxide-linux-x64-musl": "4.3.3", "@tailwindcss/oxide-wasm32-wasi": "4.3.3", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" } }, "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA=="],
- "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.2", "", { "os": "android", "cpu": "arm64" }, "sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA=="],
+ "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.3", "", { "os": "android", "cpu": "arm64" }, "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw=="],
- "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w=="],
+ "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw=="],
- "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ=="],
+ "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw=="],
- "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA=="],
+ "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw=="],
- "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2", "", { "os": "linux", "cpu": "arm" }, "sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w=="],
+ "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3", "", { "os": "linux", "cpu": "arm" }, "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ=="],
- "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw=="],
+ "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w=="],
- "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA=="],
+ "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA=="],
- "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w=="],
+ "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w=="],
- "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw=="],
+ "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img=="],
- "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.2", "", { "dependencies": { "@emnapi/core": "^1.11.1", "@emnapi/runtime": "^1.11.1", "@emnapi/wasi-threads": "^1.2.2", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.2", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw=="],
+ "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.3", "", { "dependencies": { "@emnapi/core": "^1.11.1", "@emnapi/runtime": "^1.11.1", "@emnapi/wasi-threads": "^1.2.2", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.2", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ=="],
- "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ=="],
+ "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ=="],
- "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.2", "", { "os": "win32", "cpu": "x64" }, "sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ=="],
+ "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.3", "", { "os": "win32", "cpu": "x64" }, "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw=="],
- "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="],
+ "@types/bun": ["@types/bun@1.4.2", "", { "dependencies": { "bun-types": "1.4.2" } }, "sha512-GimotNn7+ZV0uVArItBbriZsR1oNf0+WTzPkdcFrzShI7k2norL0uzEaJT8T33dWr7O/c9ZDuAFQrctKCi72oQ=="],
"@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="],
"@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
- "@types/node": ["@types/node@26.1.1", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw=="],
+ "@types/node": ["@types/node@26.6.3", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-dsqMQQoeTLqu9wynDD00q573mNzso3IdQOAfHRJqLCcmCFPoGo9A1bDpUcv/9tnKpErQWv9uKeGfl37EIS02Yg=="],
- "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.63.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.63.0", "@typescript-eslint/type-utils": "8.63.0", "@typescript-eslint/utils": "8.63.0", "@typescript-eslint/visitor-keys": "8.63.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.63.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ=="],
+ "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.71.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.71.0", "@typescript-eslint/type-utils": "8.71.0", "@typescript-eslint/utils": "8.71.0", "@typescript-eslint/visitor-keys": "8.71.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.71.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-pqcS9c1HxZTHt7End4nXqd0s5lJrrFzrgCkKFJrsbUnaL6M3+6oBFZaslg6Gjsl3argl2DDRFROnXARaZ2e4Nw=="],
- "@typescript-eslint/parser": ["@typescript-eslint/parser@8.63.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.63.0", "@typescript-eslint/types": "8.63.0", "@typescript-eslint/typescript-estree": "8.63.0", "@typescript-eslint/visitor-keys": "8.63.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig=="],
+ "@typescript-eslint/parser": ["@typescript-eslint/parser@8.71.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.71.0", "@typescript-eslint/types": "8.71.0", "@typescript-eslint/typescript-estree": "8.71.0", "@typescript-eslint/visitor-keys": "8.71.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-CG4nPk1f2zc8yw4pALqHsFYH2hdo+h1T9daSp21+Hnxi9LOE3GT9hAfTKJCBXVNM2GmYs1eMEP615wPoeOgk3A=="],
- "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.63.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.63.0", "@typescript-eslint/types": "^8.63.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ=="],
+ "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.71.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.71.0", "@typescript-eslint/types": "^8.71.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-aABjw5rjBacYONVPaPiWOCjJu0vEF4a25iQuodlmQYL1trtLZ0X/y+2Vzl3BKI1odM4LnwLE1oUDXYp1wzx1TQ=="],
- "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.63.0", "", { "dependencies": { "@typescript-eslint/types": "8.63.0", "@typescript-eslint/visitor-keys": "8.63.0" } }, "sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A=="],
+ "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.71.0", "", { "dependencies": { "@typescript-eslint/types": "8.71.0", "@typescript-eslint/visitor-keys": "8.71.0" } }, "sha512-gWF0BhUcnjZxSpLE8ngS/59n2SB0J3YqRxvX1+2aoRJk9hNtHSLOV+TcarFiOr5ipXm3yc1QrI4c9YZc8zyCxw=="],
- "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.63.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg=="],
+ "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.71.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Z1UlWHADEK2Mlb9NpWfDeSjqoZ5EyrOv4R3eQpbkzqn/EwaIdOpXXupEA1+0ZIOSJSZZDBHG0BrQyN8zUG6Pwg=="],
- "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.63.0", "", { "dependencies": { "@typescript-eslint/types": "8.63.0", "@typescript-eslint/typescript-estree": "8.63.0", "@typescript-eslint/utils": "8.63.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA=="],
+ "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.71.0", "", { "dependencies": { "@typescript-eslint/types": "8.71.0", "@typescript-eslint/typescript-estree": "8.71.0", "@typescript-eslint/utils": "8.71.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-i8uO1qbdxeKgRnS5sCRt6On3/nfo2d2DwQe3Yvjx543zLy7r8ySqRuPPiIIXAhS03U0v5NfAFx+rUgxFzKKwNw=="],
- "@typescript-eslint/types": ["@typescript-eslint/types@8.63.0", "", {}, "sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q=="],
+ "@typescript-eslint/types": ["@typescript-eslint/types@8.71.0", "", {}, "sha512-cJ4OoxPGWvFnBTnSZyaU+qJzGTqPTGJY+gDchj6cRyLRdmIdt4rcsE4twj+zPfrNiWuVi38wijHzShL++Z9atQ=="],
- "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.63.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.63.0", "@typescript-eslint/tsconfig-utils": "8.63.0", "@typescript-eslint/types": "8.63.0", "@typescript-eslint/visitor-keys": "8.63.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q=="],
+ "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.71.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.71.0", "@typescript-eslint/tsconfig-utils": "8.71.0", "@typescript-eslint/types": "8.71.0", "@typescript-eslint/visitor-keys": "8.71.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-PEEF4G5sLLWAS5BpPrUvms4ySZkiBQQZM4z+3ReI46axK5Vqr/vXBQatJQIZZOYdGyPUAKTtsrWzpqKuU+3DEw=="],
- "@typescript-eslint/utils": ["@typescript-eslint/utils@8.63.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.63.0", "@typescript-eslint/types": "8.63.0", "@typescript-eslint/typescript-estree": "8.63.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA=="],
+ "@typescript-eslint/utils": ["@typescript-eslint/utils@8.71.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.71.0", "@typescript-eslint/types": "8.71.0", "@typescript-eslint/typescript-estree": "8.71.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-pKR/tEMVrXZG23UFKUn5BQf3zfmfk7KQceI2cGzywZ5nxM5Eu3hEJU1utjWzydtzBbcJAQhHN8iPCxobHpPcZQ=="],
- "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.63.0", "", { "dependencies": { "@typescript-eslint/types": "8.63.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw=="],
+ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.71.0", "", { "dependencies": { "@typescript-eslint/types": "8.71.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-8eQ9R218XORK+KLosnf4bu/QsUXvUyVwTbArg7/0NMB1Pu87OJKvj4nhFblkYE8gQV73mW1dx1ptlPCkwRGa7A=="],
- "@wrnexus/ai": ["@wrnexus/ai@0.8.8", "", {}, "sha512-TBSJ9z/+LXP54EIvX1h5uBo3O6gBPXFZwJPPzglpcYW3rj+azzrxA79IrGYvAIKAkwEY4+tAZQqqTKMU0844Pg=="],
+ "@vscode/l10n": ["@vscode/l10n@0.0.18", "", {}, "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="],
- "@wrnexus/auth": ["@wrnexus/auth@0.8.8", "", { "dependencies": { "@wrnexus/authz": "^0.8.8", "@wrnexus/captcha": "^0.8.8", "@wrnexus/core": "^0.8.8", "@wrnexus/db": "^0.8.8", "@wrnexus/encryption": "^0.8.8", "@wrnexus/jwt": "^0.8.8", "@wrnexus/oauth": "^0.8.8", "@wrnexus/plugin": "^0.8.8", "@wrnexus/queue": "^0.8.8", "@wrnexus/ui": "^0.8.8", "@wrnexus/validation": "^0.8.8" } }, "sha512-yUChoGXFFwCiJYUtU4Der7bLDg4pRwWHZG46l0IGI0l48nfoHGz0IywXsfS1EulnGG0dDFKyVR5Fz60u7aVh+g=="],
+ "@wrnexus/ai": ["@wrnexus/ai@0.8.9", "https://registry.workroot.in/repository/npm/@wrnexus/ai/-/ai-0.8.9.tgz", {}, "sha512-vhAJk8qlDSyyfjx6xQCe8xj7/9Yi+qNDY/XCG50Ub77YYaR6f7dMwP9w68dxDfFhR8F4FfXz0SiCr61y2VI7iA=="],
- "@wrnexus/authz": ["@wrnexus/authz@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8", "@wrnexus/db": "^0.8.8" } }, "sha512-PnYddvFOuHyYIHeGts+CrXHl7TjIDB5BlCdUcM/d+ijYUY1+KVtp+oUoBsaR4bZMTFm0x+LACy12OQkx2AU/Ww=="],
+ "@wrnexus/auth": ["@wrnexus/auth@0.8.33", "https://registry.workroot.in/repository/npm/@wrnexus/auth/-/auth-0.8.33.tgz", { "dependencies": { "@wrnexus/authz": "^0.8.15", "@wrnexus/captcha": "^0.8.16", "@wrnexus/core": "^0.8.16", "@wrnexus/db": "^0.8.23", "@wrnexus/encryption": "^0.8.10", "@wrnexus/jwt": "^0.8.9", "@wrnexus/oauth": "^0.8.8", "@wrnexus/plugin": "^0.8.9", "@wrnexus/queue": "^0.8.14", "@wrnexus/ui": "^0.8.84", "@wrnexus/validation": "^0.8.13" } }, "sha512-cYzne54IP7krY7YNT0ieg6CBYo65XxtucpL+A5EYlY73rHTYs/Ci5OjLSOOKx1rZagxDWu9y5fWy7AapafXaZw=="],
- "@wrnexus/benchmark": ["@wrnexus/benchmark@0.8.8", "", {}, "sha512-g0HtpwbcXhw4sch/cdIHPHJV1GqjnhwvEYoIx7HBXWmET6iZe2R9jh35YuxY/rJG892WMk7zgI/jLCnnxwye5w=="],
+ "@wrnexus/authz": ["@wrnexus/authz@0.8.15", "https://registry.workroot.in/repository/npm/@wrnexus/authz/-/authz-0.8.15.tgz", { "dependencies": { "@wrnexus/core": "^0.8.12", "@wrnexus/db": "^0.8.20", "@wrnexus/plugin": "^0.8.8" } }, "sha512-ZV1cvHrOkephfjs/gzzcLkN4HEHSFWJVZVmfsvir/GZs/X7+ZQbPNYUQZV7SsRlyMkUxgTKMCiZ8Ym49eOBSQw=="],
- "@wrnexus/cache": ["@wrnexus/cache@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8" } }, "sha512-gB1UB4PxklgEsBTApWwVi0eVhbGOZcr47dLwjxpLT+3aS9b65kTupE+0BJhEAxa2Qh2aikgdfH40XvTPfjrUrg=="],
+ "@wrnexus/benchmark": ["@wrnexus/benchmark@0.8.8", "https://registry.workroot.in/repository/npm/@wrnexus/benchmark/-/benchmark-0.8.8.tgz", {}, "sha512-o6/El/DceF853XjU4+BPWT1MPhMtZybjv36YQSISYFEy/wU4LrbzDsZeO0w/p8Alkx0KLy/CCphlPQUr4WZjag=="],
- "@wrnexus/captcha": ["@wrnexus/captcha@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8", "@wrnexus/plugin": "^0.8.8", "@wrnexus/ui": "^0.8.8", "@wrnexus/validation": "^0.8.8" } }, "sha512-/fxuTv9KZv6Clci/GsQzOj1NWXop55bSA/ntUJGudqEl6Ss7R7qrvXp5JFvuUTeaqRnBG+dMRMKIoLkAt7LsAw=="],
+ "@wrnexus/cache": ["@wrnexus/cache@0.8.8", "https://registry.workroot.in/repository/npm/@wrnexus/cache/-/cache-0.8.8.tgz", { "dependencies": { "@wrnexus/core": "^0.8.9" } }, "sha512-GSV2myyy8xVeI8LdtJoIffW6fveCqB4WWN0CaodhVpI+4Y2aEmfJ6qwFikf34qI8Fy1+2ca9sKl5t1494kZBvw=="],
- "@wrnexus/cli": ["@wrnexus/cli@0.8.8", "", { "dependencies": { "@wrnexus/authz": "^0.8.8", "@wrnexus/compiler": "^0.8.8", "@wrnexus/core": "^0.8.8", "@wrnexus/csr": "^0.8.8", "@wrnexus/db": "^0.8.8", "@wrnexus/dev-server": "^0.8.8", "@wrnexus/i18n": "^0.8.8", "@wrnexus/mcp": "^0.8.8", "@wrnexus/playground": "^0.8.8", "@wrnexus/plugin": "^0.8.8", "@wrnexus/router": "^0.8.8", "@wrnexus/security": "^0.8.8", "@wrnexus/styles": "^0.8.8", "@wrnexus/syntax": "^0.8.8", "@wrnexus/typecheck": "^0.8.8", "@wrnexus/ui": "^0.8.8", "@wrnexus/validation": "^0.8.8", "selfsigned": "^5.5.0" }, "bin": { "wrnexus": "dist/index.js" } }, "sha512-v4F7iPiSRVw0zUGkGavss1j2uYta7L1zzy80aR2++Dy2C1QEpkf3wIzcQmLDL6RPJqtL3RgeMKu8IZDVsswB3A=="],
+ "@wrnexus/captcha": ["@wrnexus/captcha@0.8.16", "https://registry.workroot.in/repository/npm/@wrnexus/captcha/-/captcha-0.8.16.tgz", { "dependencies": { "@wrnexus/core": "^0.8.12", "@wrnexus/plugin": "^0.8.8", "@wrnexus/ui": "^0.8.76", "@wrnexus/validation": "^0.8.13" } }, "sha512-iBMnhn9RcnsdHOKgHFIwSkZ8NvTZIJ3J+gqbeGQCGpdRAuI+sI87paiUr9QXNgXqH0HlWEhYmaX/850Dsd4XcA=="],
- "@wrnexus/compiler": ["@wrnexus/compiler@0.8.8", "", { "dependencies": { "@wrnexus/csr": "^0.8.8", "@wrnexus/store": "^0.8.8", "@wrnexus/syntax": "^0.8.8", "@wrnexus/validation": "^0.8.8" } }, "sha512-yX6lMLT+ZHxPO7t2EFi3fAPAqMvXPebKZIXt/haE8bKX+Ay5uyAuicMwZn95hXw/X6m0eCRGDaLdEwqU5hMBaw=="],
+ "@wrnexus/cli": ["@wrnexus/cli@0.8.72", "https://registry.workroot.in/repository/npm/@wrnexus/cli/-/cli-0.8.72.tgz", { "dependencies": { "@wrnexus/authz": "^0.8.15", "@wrnexus/compiler": "^0.8.30", "@wrnexus/core": "^0.8.16", "@wrnexus/csr": "^0.8.41", "@wrnexus/db": "^0.8.23", "@wrnexus/dev-server": "^0.8.66", "@wrnexus/i18n": "^0.8.12", "@wrnexus/mcp": "^0.8.8", "@wrnexus/playground": "^0.8.8", "@wrnexus/plugin": "^0.8.9", "@wrnexus/react": "^0.8.9", "@wrnexus/router": "^0.8.10", "@wrnexus/security": "^0.8.9", "@wrnexus/styles": "^0.8.25", "@wrnexus/syntax": "^0.8.19", "@wrnexus/typecheck": "^0.8.17", "@wrnexus/ui": "^0.8.85", "@wrnexus/validation": "^0.8.13", "selfsigned": "^5.5.0" }, "bin": { "wrnexus": "dist/index.js" } }, "sha512-JeFsDMldcjiUFMhal11V/bfg/dNcG+OJh7+Bt6lmU3ojxTajvxV6pjLPp022hYDBZPu83jupiF4WZPwOLy/+Bw=="],
- "@wrnexus/content": ["@wrnexus/content@0.8.8", "", {}, "sha512-Va37m2vxiEZ2pspPUxX9kE/nTQ+4VA9KfZ5kI7umKYV6lWWJoUbMLfTg5PtWN0DBI9vXG4a3yGLlxRx+IqynPg=="],
+ "@wrnexus/compiler": ["@wrnexus/compiler@0.8.30", "https://registry.workroot.in/repository/npm/@wrnexus/compiler/-/compiler-0.8.30.tgz", { "dependencies": { "@wrnexus/csr": "^0.8.41", "@wrnexus/store": "^0.8.12", "@wrnexus/syntax": "^0.8.19", "@wrnexus/validation": "^0.8.13" } }, "sha512-zsxqcIMOzXxX98z6RFffwQUa6VuniOqGZO/vxDdOJiyJ8RTs7gOk8dsBhA6MTLQ1fafPxJPV3zkGotKXOuxhCQ=="],
- "@wrnexus/core": ["@wrnexus/core@0.8.8", "", {}, "sha512-R4ViefmkLIAENYn+HJP/YwlzQaABFqgiEjbk1A1z0ZQdcI/NhrMik/hG+05gfMFQPM1t27kM4jqewAibJEoEMA=="],
+ "@wrnexus/content": ["@wrnexus/content@0.8.9", "https://registry.workroot.in/repository/npm/@wrnexus/content/-/content-0.8.9.tgz", {}, "sha512-8ue55L7FVoKJwQyFVUt5dePEzYzboNUssnzUOIWCoB3BOVnm5D+YYHTaB21AKcAR/oAP+e86zXt2D+l7VFEDFA=="],
- "@wrnexus/csr": ["@wrnexus/csr@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8" } }, "sha512-OooOCDs3HRrLUxBAHoNiDWIRYImK6W917FdntefEMS7YkhBw7bJxOkcOQtPdXP6ndN9BODQiaVik2BGDCUasAg=="],
+ "@wrnexus/core": ["@wrnexus/core@0.8.16", "https://registry.workroot.in/repository/npm/@wrnexus/core/-/core-0.8.16.tgz", {}, "sha512-lTNigmTpJsgQnB95xMhalJ6Xbp/QBUf9J0MM4cuiecZ1DQLpaSgGC12Sn7FIC46rTU4w8878XJXlVWDCabe16Q=="],
- "@wrnexus/db": ["@wrnexus/db@0.8.8", "", {}, "sha512-xlX+vXDj6n7kfqnnrWiSZiqHgb30ZcIvKMR4vppDxbxI6daZ/uVm+jGtWkJL38sqJFLFcEuj0xYjiiYBAeKUwA=="],
+ "@wrnexus/csr": ["@wrnexus/csr@0.8.43", "https://registry.workroot.in/repository/npm/@wrnexus/csr/-/csr-0.8.43.tgz", { "dependencies": { "@wrnexus/core": "^0.8.12" } }, "sha512-czmxeLxvNvD7XjU3TufFBGMzuDWpNB0qpYbmbiARB7l6rslBw3+GuBWf2U5k4DH6oYiN/DGD6Jj+/G3bEh6ARw=="],
- "@wrnexus/dev-server": ["@wrnexus/dev-server@0.8.8", "", { "dependencies": { "@wrnexus/authz": "^0.8.8", "@wrnexus/cache": "^0.8.8", "@wrnexus/compiler": "^0.8.8", "@wrnexus/core": "^0.8.8", "@wrnexus/csr": "^0.8.8", "@wrnexus/db": "^0.8.8", "@wrnexus/dev-toolbar": "^0.8.8", "@wrnexus/i18n": "^0.8.8", "@wrnexus/observability": "^0.8.8", "@wrnexus/plugin": "^0.8.8", "@wrnexus/pubsub": "^0.8.8", "@wrnexus/pwa": "^0.8.8", "@wrnexus/router": "^0.8.8", "@wrnexus/rpc": "^0.8.8", "@wrnexus/security": "^0.8.8", "@wrnexus/ssr": "^0.8.8", "@wrnexus/store": "^0.8.8", "@wrnexus/styles": "^0.8.8", "@wrnexus/ui": "^0.8.8", "@wrnexus/uploader": "^0.8.8", "@wrnexus/validation": "^0.8.8" } }, "sha512-m3Gou8RuWTYTo9qQfQHCFQDzbL4yNRCbRsCrn21umK+1HXx0Efk+Nd7RoA4nPAQP5AaDkwSfd8nb+5YtakTUIA=="],
+ "@wrnexus/db": ["@wrnexus/db@0.8.23", "https://registry.workroot.in/repository/npm/@wrnexus/db/-/db-0.8.23.tgz", {}, "sha512-ncZlvclHW98Enah9wlHOf9+StoVGLrCOCVBAOEFdZKV91vKnYDltcFlmG7i7crndN37kayyb319Wiwol8Hmhyg=="],
- "@wrnexus/dev-toolbar": ["@wrnexus/dev-toolbar@0.8.8", "", {}, "sha512-WrRRXyzAaDfXdxTJsM3p4s9vBc2vVJtGkIkvOHdtvX9S89OqnuqKluqwixlHGedB7m+J+LqCcrbD6OfdNP2VEQ=="],
+ "@wrnexus/dev-server": ["@wrnexus/dev-server@0.8.66", "https://registry.workroot.in/repository/npm/@wrnexus/dev-server/-/dev-server-0.8.66.tgz", { "dependencies": { "@wrnexus/authz": "^0.8.15", "@wrnexus/cache": "^0.8.8", "@wrnexus/compiler": "^0.8.30", "@wrnexus/core": "^0.8.16", "@wrnexus/csr": "^0.8.41", "@wrnexus/db": "^0.8.23", "@wrnexus/dev-toolbar": "^0.8.18", "@wrnexus/i18n": "^0.8.12", "@wrnexus/observability": "^0.8.8", "@wrnexus/plugin": "^0.8.9", "@wrnexus/pubsub": "^0.8.9", "@wrnexus/pwa": "^0.8.12", "@wrnexus/queue": "^0.8.14", "@wrnexus/react": "^0.8.9", "@wrnexus/router": "^0.8.10", "@wrnexus/rpc": "^0.8.10", "@wrnexus/security": "^0.8.9", "@wrnexus/ssr": "^0.8.12", "@wrnexus/store": "^0.8.12", "@wrnexus/styles": "^0.8.23", "@wrnexus/ui": "^0.8.84", "@wrnexus/uploader": "^0.8.13", "@wrnexus/validation": "^0.8.13" } }, "sha512-RBJWyUEGmOS6ZgIm5NvNPB4BVhVIpGFEEf4NSLDKJtp/Z5K2+G44KbRhZaaYvl6F4IEZM2Zg5x+ZAX+o5XB34w=="],
- "@wrnexus/encryption": ["@wrnexus/encryption@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8" } }, "sha512-AKy4kEBIJsbw9OPXlfKqVnidbQqQmglqWnDQuTgtxOdRsDP990KRhdd95pQthpgq1LhzxPdLnkDJKfTA6CFrwQ=="],
+ "@wrnexus/dev-toolbar": ["@wrnexus/dev-toolbar@0.8.18", "https://registry.workroot.in/repository/npm/@wrnexus/dev-toolbar/-/dev-toolbar-0.8.18.tgz", {}, "sha512-7mj/FLIhLjx/DxH/gUlYwZqm63o/rcwH/0K/K6Efxvu9zfM5OyAh2w3L2eDWI9asK5foZkit8cKMUXVgmqHkcA=="],
- "@wrnexus/graphql": ["@wrnexus/graphql@0.8.8", "", { "dependencies": { "@wrnexus/plugin": "^0.8.8" } }, "sha512-37eA5k4WSLN1SIRcqGcCAPYniEwLsnf+NJAuQn7RAtyzRWWVKVJx254r2sa7AuBG9E+zlVG9qzXAuMDEcQLBCw=="],
+ "@wrnexus/encryption": ["@wrnexus/encryption@0.8.10", "https://registry.workroot.in/repository/npm/@wrnexus/encryption/-/encryption-0.8.10.tgz", { "dependencies": { "@wrnexus/core": "^0.8.12", "@wrnexus/db": "^0.8.20" } }, "sha512-4U7X9kzK/JWPoNDXxtVH/D2bVBNQzKGWSUmHgyYWTrNSpsiCLW17te//SVddkQfq7HCSv3cihuyoYl2j03Xf0Q=="],
- "@wrnexus/helpers": ["@wrnexus/helpers@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8" } }, "sha512-ArWU3F3N3EXXENYxID3O8FAbQ0Un/XkA3IkLE1aI8e1enyJ6ubPbhBt9TswKQcuc09+zpdZ4t0IUNld3TXBfog=="],
+ "@wrnexus/graphql": ["@wrnexus/graphql@0.8.8", "https://registry.workroot.in/repository/npm/@wrnexus/graphql/-/graphql-0.8.8.tgz", { "dependencies": { "@wrnexus/plugin": "^0.8.8" } }, "sha512-9rlf85Xa6cWlGrqZb5tyxvODHYb4OXRSsbLJSlNoGI/q/nVohVn98IjeTWWAmXq6Gwjm0fAUA+AlA/m9Fmlu5w=="],
- "@wrnexus/i18n": ["@wrnexus/i18n@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8", "@wrnexus/plugin": "^0.8.8", "@wrnexus/ui": "^0.8.8" } }, "sha512-aTTV8SWwoRN0wzWVenGqu9LVO3y7LlLNXdKQLDrILq13/g4v8lNcBNDsXf+rwERe6VOdI3j5Q8BZZIU0hJfUZg=="],
+ "@wrnexus/helpers": ["@wrnexus/helpers@0.8.9", "https://registry.workroot.in/repository/npm/@wrnexus/helpers/-/helpers-0.8.9.tgz", { "dependencies": { "@wrnexus/authz": "^0.8.14", "@wrnexus/core": "^0.8.12", "@wrnexus/db": "^0.8.20" } }, "sha512-EzT9LSZJXIAIm2fO62BMbPJOnrloC1lujW+5UNsSd4kj44mBt6WMpBwaCSDGUcVy2/b7GKXlgBnUVZtIIGn0gw=="],
- "@wrnexus/identity": ["@wrnexus/identity@0.8.8", "", { "dependencies": { "@wrnexus/auth": "^0.8.8", "@wrnexus/authz": "^0.8.8", "@wrnexus/oauth": "^0.8.8" } }, "sha512-w1Un+b3bc0tZocZLh5W9VsLM7vfQDZD06J04o2iY3Slw//dfJMhQgM7/LV1ciKVLwSG2VTT+/PMWtmPqH2Ku0g=="],
+ "@wrnexus/i18n": ["@wrnexus/i18n@0.8.12", "https://registry.workroot.in/repository/npm/@wrnexus/i18n/-/i18n-0.8.12.tgz", { "dependencies": { "@wrnexus/core": "^0.8.9", "@wrnexus/plugin": "^0.8.8", "@wrnexus/ui": "^0.8.19" } }, "sha512-pgDJZpS8qB3tz+FMY+CNUF7AZXJVRFWbFDSHk+QMeUAwkU7JbNDxwmKioa6QU50F6C0SUMbfVwDR3kBXZKBflQ=="],
- "@wrnexus/image": ["@wrnexus/image@0.8.8", "", { "dependencies": { "@wrnexus/plugin": "^0.8.8", "@wrnexus/security": "^0.8.8", "@wrnexus/ui": "^0.8.8" } }, "sha512-vRRDKjqbrtR1R8XOR/TePQr1m+vti1K8+8ehH8/YuGhjwaG3Qbu/ypUHQL4hGF2zw7u3cD9v1AZe6NKNgxidGw=="],
+ "@wrnexus/identity": ["@wrnexus/identity@0.8.8", "https://registry.workroot.in/repository/npm/@wrnexus/identity/-/identity-0.8.8.tgz", { "dependencies": { "@wrnexus/auth": "^0.8.11", "@wrnexus/authz": "^0.8.9", "@wrnexus/oauth": "^0.8.8" } }, "sha512-fPnZDEZwjLBQ2/2pZ6AeQKkcXvGltTTQ5lgStgweW8oiSPeuheOyl3C0k4jiPEzo+Qt0R8Z41ee2cN8XYVvNOA=="],
- "@wrnexus/jwt": ["@wrnexus/jwt@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8" } }, "sha512-is2SDq8Y8Ltyrh4F48WpUoLHY1QiHl6ZxQ2KKkNDh6ASZoTwvDWklmZe/C27cxJDqE2yhdXBofAO+nHx5+26jA=="],
+ "@wrnexus/image": ["@wrnexus/image@0.8.10", "https://registry.workroot.in/repository/npm/@wrnexus/image/-/image-0.8.10.tgz", { "dependencies": { "@wrnexus/plugin": "^0.8.8", "@wrnexus/security": "^0.8.8", "@wrnexus/ui": "^0.8.19" } }, "sha512-o9Bn6FhHF8oOP4PLnJHKyvPckd+cBxrWGFUqsINT+VStvSEA57gktIZw5f9jiHOMnp6TgVprscaviQMa0NO4pQ=="],
- "@wrnexus/language-server": ["@wrnexus/language-server@0.8.8", "", { "dependencies": { "@wrnexus/syntax": "^0.8.8", "@wrnexus/typecheck": "^0.8.8" }, "bin": { "wrnexus-language-server": "dist/server.js" } }, "sha512-sF91UE9Yo+809t0wU1JjyAqxENxfBsLSoySnLZV9pRyXRXuN1sqeYVPJ0lz5u8ZY6rwuVtUyrB8fJ8OeX3/tPA=="],
+ "@wrnexus/jwt": ["@wrnexus/jwt@0.8.9", "https://registry.workroot.in/repository/npm/@wrnexus/jwt/-/jwt-0.8.9.tgz", { "dependencies": { "@wrnexus/core": "^0.8.9" } }, "sha512-LcjXLdDp8pnJ3F6dDGlB3COlvg7jVBIZe+UnF48i7Hy12gHZu0Rbv/iBn9w203tpzT2EmcpGtMyI/J+uLQUeVg=="],
- "@wrnexus/mcp": ["@wrnexus/mcp@0.8.8", "", { "bin": { "wrnexus-mcp": "dist/stdio.js" } }, "sha512-+vyx5iKyBwl0+uEONwIMrM/sU7gKOpw9AtFqjjJlcoIO0eMTjKnf0FXX2moxV2UjFH4OTRtpjAKG5KhLoEsnRA=="],
+ "@wrnexus/language-server": ["@wrnexus/language-server@0.8.12", "https://registry.workroot.in/repository/npm/@wrnexus/language-server/-/language-server-0.8.12.tgz", { "dependencies": { "@wrnexus/syntax": "^0.8.11", "@wrnexus/typecheck": "^0.8.11", "vscode-html-languageservice": "^5.6.2" }, "bin": { "wrnexus-language-server": "dist/server.js" } }, "sha512-eeJXLzh5tGckAlu2CtuLk0FjiewOtEEfSwGi22e3z4KiGx3KzBjT/kwHyFVureyDAD0HqBYQLshr5FeNQKxIiA=="],
- "@wrnexus/mobile": ["@wrnexus/mobile@0.8.8", "", { "dependencies": { "@wrnexus/native": "^0.8.8" } }, "sha512-fWCKukaRwv/h/NVgpehzMP924IEHe7gqWwGGdQbUewtTDvI/8OCdJSqHbs0HbkKiJIA63wR5K/Dp5w/raV3DmQ=="],
+ "@wrnexus/mcp": ["@wrnexus/mcp@0.8.8", "https://registry.workroot.in/repository/npm/@wrnexus/mcp/-/mcp-0.8.8.tgz", { "bin": { "wrnexus-mcp": "dist/stdio.js" } }, "sha512-E4Rz03RVjzyjTdwL9d2zzMKLIkyTw1DMcwiRrdAcAEk6/HYJr4rnttiIGcw1lu58ptrLM/lUeqYWEWV+SyDXcQ=="],
- "@wrnexus/native": ["@wrnexus/native@0.8.8", "", {}, "sha512-z9cF/NQpYudsrRpUr5e1V1ZNq8YEOftPOR26TkDcqs630oUv5YtzBfBFqsGQyydJKwswKM1scEXgsjyZLT2qyg=="],
+ "@wrnexus/mobile": ["@wrnexus/mobile@0.8.8", "https://registry.workroot.in/repository/npm/@wrnexus/mobile/-/mobile-0.8.8.tgz", { "dependencies": { "@wrnexus/native": "^0.8.8" } }, "sha512-uAxPwTqJ+Gn1SBW7S8B2Xm36FAK5vwgnSztY32xKWIP4LdtVW3TGQPD43dGyWltooJUd0JlGK+7EPF8IZECOsw=="],
- "@wrnexus/oauth": ["@wrnexus/oauth@0.8.8", "", { "dependencies": { "@wrnexus/jwt": "^0.8.8" } }, "sha512-IO03peTZDi6aXfbCaA+i6og9bhdZvV6MC8ow/SL0jISbqPiTcLwVT1lPxmcA0EtRdozXKjrBwoumskVLQjMVOQ=="],
+ "@wrnexus/native": ["@wrnexus/native@0.8.8", "https://registry.workroot.in/repository/npm/@wrnexus/native/-/native-0.8.8.tgz", {}, "sha512-OSQLit1OaVpFlUOzAF9vX9gRKFAxtQkCN8UWnEIMKIfc/b+veSMgCqdcAdtxcbJiOciUg1404k1LwVrFo7a5hQ=="],
- "@wrnexus/observability": ["@wrnexus/observability@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8" } }, "sha512-250hw6aUcJi1gAQ+WUuDNr2Ls7VA0CY4QsTQB8OnGgg5zQ48z1fNAMMjju3CeIK/hVaTLHQ3XYpPbFngGX6XtA=="],
+ "@wrnexus/oauth": ["@wrnexus/oauth@0.8.8", "https://registry.workroot.in/repository/npm/@wrnexus/oauth/-/oauth-0.8.8.tgz", { "dependencies": { "@wrnexus/jwt": "^0.8.8" } }, "sha512-YTTIjUDoUB/x6otZ7HgowbdLVKavsa1koKcvIoHE95tAGAX2thKQ+pUhE/oTZi35V1eJCCduViNos3/LDVrK/g=="],
- "@wrnexus/playground": ["@wrnexus/playground@0.8.8", "", { "dependencies": { "@wrnexus/compiler": "^0.8.8", "@wrnexus/syntax": "^0.8.8" } }, "sha512-CWAZvZIx2vArzcQCEuMhbDJm+ORpUSGic9RwPSPVZ8Vp2CHjZBjoTZ/OsLrYbaBvOMOovECfl+IPXrXgETQoqA=="],
+ "@wrnexus/observability": ["@wrnexus/observability@0.8.8", "https://registry.workroot.in/repository/npm/@wrnexus/observability/-/observability-0.8.8.tgz", { "dependencies": { "@wrnexus/core": "^0.8.9" } }, "sha512-P7R4IYm7o6OfP1TmQ6L537DAOMH5WbC74TP4rw/Stwx8RxS/ORYPWw0mGB8f+1eamOV40Y5U4E04nmf3Tugj0Q=="],
- "@wrnexus/plugin": ["@wrnexus/plugin@0.8.8", "", { "dependencies": { "@wrnexus/syntax": "^0.8.8" } }, "sha512-b1ItR2B1Jkaes1kR1YECpMEnOBMtPw6sVSVcGueF3wOgTPS6zPptwpwLzwQTYH6+sT4eRFMjybEM7An8TscaMw=="],
+ "@wrnexus/playground": ["@wrnexus/playground@0.8.8", "https://registry.workroot.in/repository/npm/@wrnexus/playground/-/playground-0.8.8.tgz", { "dependencies": { "@wrnexus/compiler": "^0.8.10", "@wrnexus/syntax": "^0.8.9" } }, "sha512-FpQ2n81GWSJSc0LccH6zDYm0pfdUk54LdDYma0Y72pyLfRjSY0ymQJcCr6Jp/EE5iBIhRowD6ag7vd26h27pZA=="],
- "@wrnexus/pubsub": ["@wrnexus/pubsub@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8", "@wrnexus/rpc": "^0.8.8" } }, "sha512-X7QH6kecu7gzt0waW+CkaYdDUmEAykoxMwk35GizNTECkUg8SJHjQNf9bgGM9RNIQOkCr12jFSnR+0njn+LqiA=="],
+ "@wrnexus/plugin": ["@wrnexus/plugin@0.8.9", "https://registry.workroot.in/repository/npm/@wrnexus/plugin/-/plugin-0.8.9.tgz", { "dependencies": { "@wrnexus/syntax": "^0.8.19" } }, "sha512-XpkQL4/MpiNxoNcH1l7dL5cYEu8HN54/b5bx6DBXWutU4tMrAjChtbJ+SsE2YrNve4uWVUhF8wPgsdBrJONOQQ=="],
- "@wrnexus/pwa": ["@wrnexus/pwa@0.8.8", "", {}, "sha512-rW4S/xNQ1IC0zDthheLfQNPtDeNuRLbQYictOvoJXiYndrh3HZgKdKAvh9DCare+/HftgSM28Tn8ZqUtd0zpBg=="],
+ "@wrnexus/pubsub": ["@wrnexus/pubsub@0.8.9", "https://registry.workroot.in/repository/npm/@wrnexus/pubsub/-/pubsub-0.8.9.tgz", { "dependencies": { "@wrnexus/core": "^0.8.9", "@wrnexus/rpc": "^0.8.9" } }, "sha512-Z696WHuzJsPJvkvz3aRcifiZEqHXSIzoH3ji/wPqBP+vqmKIiZ/WIzViSQ0j8QJgtHiiq1mo2d4GFxsfdAPbqg=="],
- "@wrnexus/queue": ["@wrnexus/queue@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8", "@wrnexus/rpc": "^0.8.8" } }, "sha512-hsP+e06pJsrEA51tc8vA9dNqKp382EkmyiEUXd1eU37rIgGyU8egeBxnXtJALXBU47ddo8JVawNn2wqaKvLA8g=="],
+ "@wrnexus/pwa": ["@wrnexus/pwa@0.8.12", "https://registry.workroot.in/repository/npm/@wrnexus/pwa/-/pwa-0.8.12.tgz", {}, "sha512-XI5wgn+vbPcSbAt3EsqnrPjkx2cd/Zpo3xy2deawuU5k7irkRImPNUWvtjkTar5GaNedVvuZQAhXLghb9p/GQQ=="],
- "@wrnexus/reactive": ["@wrnexus/reactive@0.8.8", "", {}, "sha512-BjfLB3wwJL/Fqld53TqMY+8ZtUt9hTctRESXUgr41+AWPj8+S6c7oVNV65pEoGN8C+wAQONg8A67JoZP9jQRXw=="],
+ "@wrnexus/queue": ["@wrnexus/queue@0.8.14", "https://registry.workroot.in/repository/npm/@wrnexus/queue/-/queue-0.8.14.tgz", { "dependencies": { "@wrnexus/core": "^0.8.12", "@wrnexus/db": "^0.8.20", "@wrnexus/rpc": "^0.8.10" } }, "sha512-uulbyU1AF3gnfylmlFMIoBjAKgAgHsHg+FfEmLtoYwsaQ+JtMNk5PEZ/GUUBxEmK9ZbEAdgBAxgEX69E7ne9aA=="],
- "@wrnexus/realtime": ["@wrnexus/realtime@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8", "@wrnexus/plugin": "^0.8.8", "@wrnexus/ui": "^0.8.8" } }, "sha512-7arnRMucFz6sYepAIpPLpQtqqEoiPn7YChZ6Ig+wXMeB/3JQRV9PT7usRTtsrKF+eb2IcxguS1V/jzEeHlzdmg=="],
+ "@wrnexus/react": ["@wrnexus/react@0.8.9", "https://registry.workroot.in/repository/npm/@wrnexus/react/-/react-0.8.9.tgz", { "dependencies": { "@wrnexus/store": "^0.8.8" } }, "sha512-031RC/EBF1nzSeiwo2gXhOJ+xMLRtPUniN612ZVzj+pqGdn1J8I8vajZwRYKYC2xAVdCiB/EGoZ3FQaT75h8qw=="],
- "@wrnexus/router": ["@wrnexus/router@0.8.8", "", { "dependencies": { "@wrnexus/compiler": "^0.8.8", "@wrnexus/core": "^0.8.8" } }, "sha512-cO+5X9nHljYA8S44Hf3KTv9jRnN558eynZMer54ODw/Iz+8FXBgmRho66f5EAjvML5APKI+fZyFYekL2WNZXYQ=="],
+ "@wrnexus/reactive": ["@wrnexus/reactive@0.8.9", "https://registry.workroot.in/repository/npm/@wrnexus/reactive/-/reactive-0.8.9.tgz", {}, "sha512-/4+wYx2zwJ2vsHF5VYaQqgTz+WbNsIkC/lFWD2ok/w5VxGC5p2WFj2P+psE22g30bzkAmdEvdiurlKGCSkP8TA=="],
- "@wrnexus/rpc": ["@wrnexus/rpc@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8", "@wrnexus/helpers": "^0.8.8", "@wrnexus/jwt": "^0.8.8", "@wrnexus/validation": "^0.8.8" } }, "sha512-2mmiNnQ1nIhjSzrt75yU0LfW4n7E6teO7mcvqMPbDrMb+hivv4J3HcreoQXGnp1dAJCyYpf5laPbUmZLGAY6Iw=="],
+ "@wrnexus/realtime": ["@wrnexus/realtime@0.8.10", "https://registry.workroot.in/repository/npm/@wrnexus/realtime/-/realtime-0.8.10.tgz", { "dependencies": { "@wrnexus/core": "^0.8.9", "@wrnexus/plugin": "^0.8.8", "@wrnexus/ui": "^0.8.19" } }, "sha512-sU1djUTqIAX8CGJEuyZTmmRaZZ6hEkPsr8B0XERPTJeKPwoExbnB3oFf1iOOJ7ihZ6MM7vrFOgA11WNNDqSjFg=="],
- "@wrnexus/security": ["@wrnexus/security@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8" } }, "sha512-ayctEobZK+6AqpHH6SV9u8DO22IAabew2QkxAzVX+eQp7fuQa3vctx2iI4JPmihXsxcZ/bFYsBgeUpPC6VVbkg=="],
+ "@wrnexus/router": ["@wrnexus/router@0.8.10", "https://registry.workroot.in/repository/npm/@wrnexus/router/-/router-0.8.10.tgz", { "dependencies": { "@wrnexus/compiler": "^0.8.17", "@wrnexus/core": "^0.8.12" } }, "sha512-zh+h+VDNshSsh2iryqbOCWOhcIbKXg58iWkHz3wKNovlWT0uAgLhmea6IHsiApI8RC/VPw4TAmAhfkaK1c4BBA=="],
- "@wrnexus/ssr": ["@wrnexus/ssr@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8", "@wrnexus/security": "^0.8.8", "@wrnexus/store": "^0.8.8" } }, "sha512-vQ8KPfsxtkqF80fjp5FWfyhRw4dI9AgqJ8SlLPLGmMmGQdeHG+qzcMf5JL0yFys/2DAY609mhUO23YZdTCs8BQ=="],
+ "@wrnexus/rpc": ["@wrnexus/rpc@0.8.10", "https://registry.workroot.in/repository/npm/@wrnexus/rpc/-/rpc-0.8.10.tgz", { "dependencies": { "@wrnexus/core": "^0.8.9", "@wrnexus/helpers": "^0.8.8", "@wrnexus/jwt": "^0.8.9", "@wrnexus/validation": "^0.8.10" } }, "sha512-KbfSxEe0D0ZiM1CckxiEVIEBSzYRYb3iEJYyJnT8DqlrEpos1hCwT22XnTMC3ldsCAusoUPO5gTXMBXL9qMKDQ=="],
- "@wrnexus/store": ["@wrnexus/store@0.8.8", "", {}, "sha512-qeIwa8OGq/BUtECJrgXSqleWGI9DY/syikAeaAF6hvGk775rrxh4971zR2tuiVh/0DUWm/s/8Wzj/bN99EYD2A=="],
+ "@wrnexus/security": ["@wrnexus/security@0.8.9", "https://registry.workroot.in/repository/npm/@wrnexus/security/-/security-0.8.9.tgz", { "dependencies": { "@wrnexus/core": "^0.8.11" } }, "sha512-dgz2fYwiw7uhBdsMuLqlPQaqajJx1McTjAhx8Pp1lf8gddsXm+Dnmri/1LXSbPwuSpWB7gsNq326JlVICfipVQ=="],
- "@wrnexus/styles": ["@wrnexus/styles@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8", "@wrnexus/plugin": "^0.8.8", "@wrnexus/uploader": "^0.8.8" } }, "sha512-s7dKF5XrjSxoYfNTefX1FKCimKlv2o9/FEK46RAAtM3p39dpaboj59EcEPFYf1wvcgiUXtH0EWxiKVjyg9wnjA=="],
+ "@wrnexus/ssr": ["@wrnexus/ssr@0.8.12", "https://registry.workroot.in/repository/npm/@wrnexus/ssr/-/ssr-0.8.12.tgz", { "dependencies": { "@wrnexus/core": "^0.8.16", "@wrnexus/security": "^0.8.9", "@wrnexus/store": "^0.8.12" } }, "sha512-fPoxMfnlwuUs6syJ6LMjqzxIKGsghQ3UCKjSFkRXlvdwdPpWRSxW0g0+jJF66/OTyCo2kB0dwMRGVLhICLgvLw=="],
- "@wrnexus/syntax": ["@wrnexus/syntax@0.8.8", "", {}, "sha512-T3Xq4eiTQ6LxMLsbmo5cm76/FCjbLgpsUlS10QiIe0lSdVJQKpGWjc4aNBKo431Vdulw0T+2K62a93gnVI0wIQ=="],
+ "@wrnexus/store": ["@wrnexus/store@0.8.12", "https://registry.workroot.in/repository/npm/@wrnexus/store/-/store-0.8.12.tgz", {}, "sha512-5AiJXZ6AFT2eshp21JEyeHlmBgHuxyeRslN6YZiIvUfoO4Dre3VtR4pI+hN3lOGloLXwXBUfEMm2mgGsXS36Kg=="],
- "@wrnexus/test": ["@wrnexus/test@0.8.8", "", {}, "sha512-RoZidv+0xvkUhfDJGwXy8KqXZ1u2zlDCQez/2RpyTEvkza35KYhWQq0QMySFv7SZJTStQY1ow8yUrFYnasHg1A=="],
+ "@wrnexus/styles": ["@wrnexus/styles@0.8.26", "https://registry.workroot.in/repository/npm/@wrnexus/styles/-/styles-0.8.26.tgz", { "dependencies": { "@wrnexus/core": "^0.8.16", "@wrnexus/plugin": "^0.8.9", "@wrnexus/uploader": "^0.8.13" } }, "sha512-B1FgQYks6S9SohlWjDkRabbzAAW9IIKbR5rHrdXegr6QY3nQMtJYPMG8xUVMTpQ8gRL+GODtuhDYPHD/igHuPg=="],
- "@wrnexus/tracking": ["@wrnexus/tracking@0.8.8", "", {}, "sha512-a3+tpXuIlVFVJJrXFTuTNEB4ZRIcIEjaJUWicT62Sg0yDYga73UHcDfyuYCljt4/WkAeL/muhQN4Y3mMzIAxrg=="],
+ "@wrnexus/syntax": ["@wrnexus/syntax@0.8.19", "https://registry.workroot.in/repository/npm/@wrnexus/syntax/-/syntax-0.8.19.tgz", {}, "sha512-/OZ+Z/cdFmfqKeqCZZpmwN2ZRSITA2ByqmVjGVONtMRfxHBj99T5jB0be6qlxrmoK0cgntRxEe2JCS/d9h54YA=="],
- "@wrnexus/typecheck": ["@wrnexus/typecheck@0.8.8", "", { "dependencies": { "@wrnexus/syntax": "^0.8.8", "typescript": "^5.5.0" } }, "sha512-vFNsQc4k2p5rTrqaKYXj3W74Ebe7MMDMLXftGpZWyBNby4aF8HlsJclFLuFdKpfoDX1fprkZ5xGdVFzd51BSRQ=="],
+ "@wrnexus/test": ["@wrnexus/test@0.8.16", "https://registry.workroot.in/repository/npm/@wrnexus/test/-/test-0.8.16.tgz", { "dependencies": { "@wrnexus/core": "^0.8.16" } }, "sha512-jaeNicouq3Fu6sELzbnSP+XMUMaqZDIwayUSI6PssGyeUFuYm9v7ZoOWc3ljBo1CSvZtTZlT9qAU7jhFmSpV1w=="],
- "@wrnexus/ui": ["@wrnexus/ui@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8" } }, "sha512-Yxjcz950u9BRPPBRce2ug1Tf/rBESYR8gJ9XehBHQgP5kpCq8RGO7F2OFENCw07AFnElt8je0ym9lfBfEfKGrQ=="],
+ "@wrnexus/tracking": ["@wrnexus/tracking@0.8.8", "https://registry.workroot.in/repository/npm/@wrnexus/tracking/-/tracking-0.8.8.tgz", {}, "sha512-7qA4dL9uaPG1DFA/+d0IZ7GX+gkmTFU0JsyABtSoS8DowuZlEFINeS34UVwwjx5e9sZPbgPN+BNoccXUx7xqEw=="],
- "@wrnexus/uploader": ["@wrnexus/uploader@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8", "@wrnexus/plugin": "^0.8.8", "@wrnexus/ui": "^0.8.8" } }, "sha512-OveR+mjsuHrCuyrtADzWh63LahR9n4zVJSIHFHjK4FsiJQo0NmJKxsEfPiHvb2PBk5bubM/KdGX4aqBXLliTcg=="],
+ "@wrnexus/typecheck": ["@wrnexus/typecheck@0.8.17", "https://registry.workroot.in/repository/npm/@wrnexus/typecheck/-/typecheck-0.8.17.tgz", { "dependencies": { "@wrnexus/syntax": "^0.8.19", "typescript": "^6.0.3" } }, "sha512-sEvCraG7qudT61h0SbuccIegi37nVWW2B1+BjmPg6Zrtc0251lUozASOYMW2ntjiizASDXMTSnZvSJ36EJPflA=="],
- "@wrnexus/validation": ["@wrnexus/validation@0.8.8", "", { "dependencies": { "@wrnexus/core": "^0.8.8", "@wrnexus/plugin": "^0.8.8", "@wrnexus/ui": "^0.8.8" } }, "sha512-cEh4VObnwoNLAeKz6OP1PDdYaHPd79i4BPxnJSI7rKJi6GrI6vgmJr0U1wXADMbUwC0Xm6GwjGopnYKTGCZfgg=="],
+ "@wrnexus/ui": ["@wrnexus/ui@0.8.88", "https://registry.workroot.in/repository/npm/@wrnexus/ui/-/ui-0.8.88.tgz", { "dependencies": { "@wrnexus/core": "^0.8.16" } }, "sha512-C6q3c85tJm0Ajhgb8i+DYOWyICNxeXVsR3KbD5yP0rC2XS5Vj9TP72x7NPux798jGLpbOpSPRiIPUff7zAod7w=="],
- "acorn": ["acorn@8.17.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg=="],
+ "@wrnexus/uploader": ["@wrnexus/uploader@0.8.13", "https://registry.workroot.in/repository/npm/@wrnexus/uploader/-/uploader-0.8.13.tgz", { "dependencies": { "@wrnexus/core": "^0.8.12", "@wrnexus/plugin": "^0.8.8", "@wrnexus/ui": "^0.8.23" } }, "sha512-Cfj5Iqtbk/ccXV/YXQ4I8v0GkcE7cFnzMEB33qy3DcWo4fA5ndiWU9CN4Ap1oysA5MWEmcCKuJlcTKdWLhiTvw=="],
+
+ "@wrnexus/validation": ["@wrnexus/validation@0.8.13", "https://registry.workroot.in/repository/npm/@wrnexus/validation/-/validation-0.8.13.tgz", { "dependencies": { "@wrnexus/core": "^0.8.12", "@wrnexus/plugin": "^0.8.8", "@wrnexus/ui": "^0.8.76" } }, "sha512-ud9bzeSaOzbYnmu6pKEr5XbBT25FW+ROOI9iB0YJBc624juurslgHm2lpmpOu2WKUWulgktb/2vl9nsvtI8pSw=="],
+
+ "acorn": ["acorn@8.18.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ=="],
"acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="],
@@ -343,11 +347,11 @@
"boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="],
- "brace-expansion": ["brace-expansion@1.1.16", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw=="],
+ "brace-expansion": ["brace-expansion@1.1.21", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw=="],
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
- "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="],
+ "bun-types": ["bun-types@1.4.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-bxV1FgK7yBIzjRe5zBozIM4Bem11ZJcCXSrjWRG3YWLt8yFDePu4cLjpebO8OvPeIE9trbyPF4fuj3Cia4Fj3w=="],
"bytestreamjs": ["bytestreamjs@2.0.1", "", {}, "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ=="],
@@ -365,15 +369,15 @@
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
- "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="],
+ "css-select": ["css-select@6.0.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^7.0.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "nth-check": "^2.1.1" } }, "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw=="],
"css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="],
- "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="],
+ "css-what": ["css-what@7.0.0", "", {}, "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ=="],
"csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="],
- "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
+ "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
"deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="],
@@ -387,7 +391,7 @@
"domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="],
- "enhanced-resolve": ["enhanced-resolve@5.21.6", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ=="],
+ "enhanced-resolve": ["enhanced-resolve@5.26.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw=="],
"entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
@@ -427,7 +431,7 @@
"flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="],
- "flatted": ["flatted@3.4.2", "", {}, "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA=="],
+ "flatted": ["flatted@3.4.4", "", {}, "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q=="],
"glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
@@ -455,7 +459,7 @@
"jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="],
- "js-yaml": ["js-yaml@4.3.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q=="],
+ "js-yaml": ["js-yaml@4.3.2", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA=="],
"json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="],
@@ -503,7 +507,7 @@
"minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="],
- "modern-tar": ["modern-tar@0.7.7", "", {}, "sha512-t9VmxaqrmANnEOBhpSDI6HD192Ge48k8vmWqQQL7hSFEqHEYwZbbsu49+aKLWZeRvFs3j1pMhXOqqF4kPlvjkQ=="],
+ "modern-tar": ["modern-tar@0.8.5", "", {}, "sha512-snEhs+6G5Tjd4I7tLCDOaoln2RgE0bD19RzEKgvgK2hZ5VKy3MpLhLTZ2fWpXSTg4K2cyPwp+VHATFJhxfnOeA=="],
"mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="],
@@ -521,7 +525,7 @@
"p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="],
- "package-manager-detector": ["package-manager-detector@1.7.0", "", {}, "sha512-xg1eHpwYL/D/HEdWw2goFZP6vV0FH7W+PZ5rFkGjdIDLtxq7EkzBUeT3m+lndYCt8wKbmofUu1MUdMCXkCk9ZQ=="],
+ "package-manager-detector": ["package-manager-detector@1.8.0", "", {}, "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A=="],
"parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
@@ -535,23 +539,23 @@
"picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="],
- "pkijs": ["pkijs@3.4.0", "", { "dependencies": { "@noble/hashes": "1.4.0", "asn1js": "^3.0.6", "bytestreamjs": "^2.0.1", "pvtsutils": "^1.3.6", "pvutils": "^1.1.3", "tslib": "^2.8.1" } }, "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw=="],
+ "pkijs": ["pkijs@3.4.1", "", { "dependencies": { "@noble/hashes": "1.8.0", "asn1js": "^3.0.6", "bytestreamjs": "^2.0.1", "pvtsutils": "^1.3.6", "pvutils": "^1.1.3", "tslib": "^2.8.1" } }, "sha512-Oo/NZcSWccq8KyoG7gLE9fnltgHns+pNCjCAp/WmjsUySi+sX7y4z4Xqu4fVb42CDHzRPl33fjzT15V1wvcyhA=="],
"prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="],
- "prettier": ["prettier@3.9.5", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg=="],
+ "prettier": ["prettier@3.9.9", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg=="],
"punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
"pvtsutils": ["pvtsutils@1.3.6", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg=="],
- "pvutils": ["pvutils@1.1.5", "", {}, "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA=="],
+ "pvutils": ["pvutils@1.2.0", "", {}, "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg=="],
"reflect-metadata": ["reflect-metadata@0.2.2", "", {}, "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="],
"resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="],
- "sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="],
+ "sax": ["sax@1.6.1", "", {}, "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q=="],
"selfsigned": ["selfsigned@5.5.0", "", { "dependencies": { "@peculiar/x509": "^1.14.2", "pkijs": "^3.3.3" } }, "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew=="],
@@ -567,13 +571,13 @@
"supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
- "svgo": ["svgo@4.0.2", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.5.0" }, "bin": "./bin/svgo.js" }, "sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng=="],
+ "svgo": ["svgo@4.1.0", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^6.0.0", "css-tree": "^3.0.1", "css-what": "^7.0.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "1.6.1" }, "bin": { "svgo": "bin/svgo.js" } }, "sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q=="],
- "tailwindcss": ["tailwindcss@4.3.2", "", {}, "sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA=="],
+ "tailwindcss": ["tailwindcss@4.3.3", "", {}, "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ=="],
"tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="],
- "tinyexec": ["tinyexec@1.2.4", "", {}, "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg=="],
+ "tinyexec": ["tinyexec@1.3.1", "", {}, "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA=="],
"tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="],
@@ -589,12 +593,20 @@
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
- "typescript-eslint": ["typescript-eslint@8.63.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.63.0", "@typescript-eslint/parser": "8.63.0", "@typescript-eslint/typescript-estree": "8.63.0", "@typescript-eslint/utils": "8.63.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ=="],
+ "typescript-eslint": ["typescript-eslint@8.71.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.71.0", "@typescript-eslint/parser": "8.71.0", "@typescript-eslint/typescript-estree": "8.71.0", "@typescript-eslint/utils": "8.71.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-fBdHYiqQ14RW6mOMXD14Svn82ZsCYAoQSzGRzyEjR59S5A2Krh/l7fGTOQ7iCr8gGy/mHVXtEF7s5fgjEdV0Pw=="],
- "undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="],
+ "undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
"uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="],
+ "vscode-html-languageservice": ["vscode-html-languageservice@5.6.2", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "^3.17.5", "vscode-uri": "^3.1.0" } }, "sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg=="],
+
+ "vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.15", "", {}, "sha512-Gsfr9S8LU3S6885cS+NaleasJ0n3V5y/SOTqHCifQiXWFw3G9w9/YItDfwHrlCz+dSZWWZ8ilYVMcJe7Sz7Sxw=="],
+
+ "vscode-languageserver-types": ["vscode-languageserver-types@3.18.4", "", {}, "sha512-nQsacoiijvl0fRf2q28uFDrAVwRhdCa3QveiF7/CX0r18mLR5FU/1WskSsCKOjmEbtteKUnY8x8Yzxop+k0zwg=="],
+
+ "vscode-uri": ["vscode-uri@3.2.0", "", {}, "sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg=="],
+
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
"word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
@@ -603,33 +615,35 @@
"@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
- "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.11.2", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" }, "bundled": true }, "sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA=="],
+ "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.11.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.3", "tslib": "^2.4.0" }, "bundled": true }, "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg=="],
- "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.11.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA=="],
+ "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="],
- "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA=="],
+ "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g=="],
- "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg=="],
+ "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" }, "bundled": true }, "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g=="],
- "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="],
+ "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.4", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A=="],
"@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
- "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.6", "", {}, "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw=="],
+ "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.10", "", {}, "sha512-HpbUakT7xp5miBUywCHf36ZEuAJNklBJDDsGpUIjMzOSmM8ELSfA9Sa/QDPeNeqeoN31u+UTCkL4klCOVvRm4Q=="],
- "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="],
+ "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="],
"@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="],
+ "@wrnexus/typecheck/typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="],
+
"csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="],
"lightningcss/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
- "tinyglobby/picomatch": ["picomatch@4.0.5", "", {}, "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A=="],
+ "tinyglobby/picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="],
"tsyringe/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="],
- "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.7", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA=="],
+ "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.12", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ=="],
"csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="],
diff --git a/docs/release-access-status.md b/docs/release-access-status.md
index d6a99ada..b9804c12 100644
--- a/docs/release-access-status.md
+++ b/docs/release-access-status.md
@@ -2,6 +2,6 @@
## Decision: Mode B — Private Developer Preview
-Active version: 0.8.8, derived from package.json#wrnexus.version. All 47 installed @wrnexus packages resolve to 0.8.8 and npm reports restricted access. The repository remote is a private WorkRoot Git service and no public license file exists.
+Active version: 0.8.72, derived from package.json#wrnexus.version. All 47 installed @wrnexus packages resolve to 0.8.72 and npm reports restricted access. The repository remote is a private WorkRoot Git service and no public license file exists.
-External users cannot execute an installation without approved private registry credentials. The truthful CTA is Request preview access. After approval, the canonical command is bunx @wrnexus/cli@0.8.8 create my-app. Tokens must never appear in documentation or source.
+External users cannot execute an installation without approved private registry credentials. The truthful CTA is Request preview access. After approval, the canonical command is bunx @wrnexus/cli@0.8.72 create my-app. Tokens must never appear in documentation or source.
diff --git a/docs/site-audit.md b/docs/site-audit.md
index 626e570d..8bdf4740 100644
--- a/docs/site-audit.md
+++ b/docs/site-audit.md
@@ -1,6 +1,6 @@
# WRNexusJS site audit
-Date: 2026-07-13. Baseline: Bun 1.3.14, framework 0.8.8.
+Date: 2026-07-13. Baseline: Bun 1.3.14, framework 0.8.72.
## Baseline results
@@ -12,7 +12,7 @@ Date: 2026-07-13. Baseline: Bun 1.3.14, framework 0.8.8.
## Findings
-Package documentation, discovery assets, and AI-readable references are generated from the installed release. The 0.8.8 portal includes the helpers package, workspace app addition, and safe forward-auth login redirect guidance.
+Package documentation, discovery assets, and AI-readable references are generated from the installed release. The 0.8.72 portal includes the helpers package, workspace app addition, and safe forward-auth login redirect guidance.
## Audit limitations
diff --git a/package-lock.json b/package-lock.json
index 4a3f42fd..587ad125 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,59 +10,59 @@
"dependencies": {
"@iconify-json/lucide": "^1.2.118",
"@iconify/tailwind4": "^1.2.3",
- "@wrnexus/ai": "^0.8.8",
- "@wrnexus/auth": "^0.8.8",
- "@wrnexus/authz": "^0.8.8",
+ "@wrnexus/ai": "^0.8.9",
+ "@wrnexus/auth": "^0.8.33",
+ "@wrnexus/authz": "^0.8.15",
"@wrnexus/benchmark": "^0.8.8",
"@wrnexus/cache": "^0.8.8",
- "@wrnexus/captcha": "^0.8.8",
- "@wrnexus/compiler": "^0.8.8",
- "@wrnexus/content": "^0.8.8",
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/csr": "^0.8.8",
- "@wrnexus/db": "^0.8.8",
- "@wrnexus/dev-server": "^0.8.8",
- "@wrnexus/dev-toolbar": "^0.8.8",
- "@wrnexus/encryption": "^0.8.8",
+ "@wrnexus/captcha": "^0.8.16",
+ "@wrnexus/compiler": "^0.8.30",
+ "@wrnexus/content": "^0.8.9",
+ "@wrnexus/core": "^0.8.16",
+ "@wrnexus/csr": "^0.8.43",
+ "@wrnexus/db": "^0.8.23",
+ "@wrnexus/dev-server": "^0.8.66",
+ "@wrnexus/dev-toolbar": "^0.8.18",
+ "@wrnexus/encryption": "^0.8.10",
"@wrnexus/graphql": "^0.8.8",
- "@wrnexus/helpers": "^0.8.8",
- "@wrnexus/i18n": "^0.8.8",
+ "@wrnexus/helpers": "^0.8.9",
+ "@wrnexus/i18n": "^0.8.12",
"@wrnexus/identity": "^0.8.8",
- "@wrnexus/image": "^0.8.8",
- "@wrnexus/jwt": "^0.8.8",
- "@wrnexus/language-server": "^0.8.8",
+ "@wrnexus/image": "^0.8.10",
+ "@wrnexus/jwt": "^0.8.9",
+ "@wrnexus/language-server": "^0.8.12",
"@wrnexus/mcp": "^0.8.8",
"@wrnexus/mobile": "^0.8.8",
"@wrnexus/native": "^0.8.8",
"@wrnexus/oauth": "^0.8.8",
"@wrnexus/observability": "^0.8.8",
"@wrnexus/playground": "^0.8.8",
- "@wrnexus/plugin": "^0.8.8",
- "@wrnexus/pubsub": "^0.8.8",
- "@wrnexus/pwa": "^0.8.8",
- "@wrnexus/queue": "^0.8.8",
- "@wrnexus/reactive": "^0.8.8",
- "@wrnexus/realtime": "^0.8.8",
- "@wrnexus/router": "^0.8.8",
- "@wrnexus/rpc": "^0.8.8",
- "@wrnexus/security": "^0.8.8",
- "@wrnexus/ssr": "^0.8.8",
- "@wrnexus/store": "^0.8.8",
- "@wrnexus/styles": "^0.8.8",
- "@wrnexus/syntax": "^0.8.8",
- "@wrnexus/test": "^0.8.8",
+ "@wrnexus/plugin": "^0.8.9",
+ "@wrnexus/pubsub": "^0.8.9",
+ "@wrnexus/pwa": "^0.8.12",
+ "@wrnexus/queue": "^0.8.14",
+ "@wrnexus/reactive": "^0.8.9",
+ "@wrnexus/realtime": "^0.8.10",
+ "@wrnexus/router": "^0.8.10",
+ "@wrnexus/rpc": "^0.8.10",
+ "@wrnexus/security": "^0.8.9",
+ "@wrnexus/ssr": "^0.8.12",
+ "@wrnexus/store": "^0.8.12",
+ "@wrnexus/styles": "^0.8.26",
+ "@wrnexus/syntax": "^0.8.19",
+ "@wrnexus/test": "^0.8.16",
"@wrnexus/tracking": "^0.8.8",
- "@wrnexus/typecheck": "^0.8.8",
- "@wrnexus/ui": "^0.8.8",
- "@wrnexus/uploader": "^0.8.8",
- "@wrnexus/validation": "^0.8.8"
+ "@wrnexus/typecheck": "^0.8.17",
+ "@wrnexus/ui": "^0.8.88",
+ "@wrnexus/uploader": "^0.8.13",
+ "@wrnexus/validation": "^0.8.13"
},
"devDependencies": {
"@eslint/js": "^9.0.0",
"@tailwindcss/cli": "^4.0.0",
"@types/bun": "latest",
"@types/node": "^26.1.1",
- "@wrnexus/cli": "^0.8.8",
+ "@wrnexus/cli": "^0.8.72",
"eslint": "^9.0.0",
"prettier": "latest",
"tailwindcss": "^4.0.0",
@@ -1503,45 +1503,52 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/@vscode/l10n": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
+ "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==",
+ "license": "MIT"
+ },
"node_modules/@wrnexus/ai": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/ai/-/ai-0.8.8.tgz",
- "integrity": "sha512-TBSJ9z/+LXP54EIvX1h5uBo3O6gBPXFZwJPPzglpcYW3rj+azzrxA79IrGYvAIKAkwEY4+tAZQqqTKMU0844Pg==",
+ "version": "0.8.9",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/ai/-/ai-0.8.9.tgz",
+ "integrity": "sha512-vhAJk8qlDSyyfjx6xQCe8xj7/9Yi+qNDY/XCG50Ub77YYaR6f7dMwP9w68dxDfFhR8F4FfXz0SiCr61y2VI7iA==",
"license": "MIT",
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/auth": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/auth/-/auth-0.8.8.tgz",
- "integrity": "sha512-yUChoGXFFwCiJYUtU4Der7bLDg4pRwWHZG46l0IGI0l48nfoHGz0IywXsfS1EulnGG0dDFKyVR5Fz60u7aVh+g==",
+ "version": "0.8.33",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/auth/-/auth-0.8.33.tgz",
+ "integrity": "sha512-cYzne54IP7krY7YNT0ieg6CBYo65XxtucpL+A5EYlY73rHTYs/Ci5OjLSOOKx1rZagxDWu9y5fWy7AapafXaZw==",
"license": "MIT",
"dependencies": {
- "@wrnexus/authz": "^0.8.8",
- "@wrnexus/captcha": "^0.8.8",
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/db": "^0.8.8",
- "@wrnexus/encryption": "^0.8.8",
- "@wrnexus/jwt": "^0.8.8",
+ "@wrnexus/authz": "^0.8.15",
+ "@wrnexus/captcha": "^0.8.16",
+ "@wrnexus/core": "^0.8.16",
+ "@wrnexus/db": "^0.8.23",
+ "@wrnexus/encryption": "^0.8.10",
+ "@wrnexus/jwt": "^0.8.9",
"@wrnexus/oauth": "^0.8.8",
- "@wrnexus/plugin": "^0.8.8",
- "@wrnexus/queue": "^0.8.8",
- "@wrnexus/ui": "^0.8.8",
- "@wrnexus/validation": "^0.8.8"
+ "@wrnexus/plugin": "^0.8.9",
+ "@wrnexus/queue": "^0.8.14",
+ "@wrnexus/ui": "^0.8.84",
+ "@wrnexus/validation": "^0.8.13"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/authz": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/authz/-/authz-0.8.8.tgz",
- "integrity": "sha512-PnYddvFOuHyYIHeGts+CrXHl7TjIDB5BlCdUcM/d+ijYUY1+KVtp+oUoBsaR4bZMTFm0x+LACy12OQkx2AU/Ww==",
+ "version": "0.8.15",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/authz/-/authz-0.8.15.tgz",
+ "integrity": "sha512-ZV1cvHrOkephfjs/gzzcLkN4HEHSFWJVZVmfsvir/GZs/X7+ZQbPNYUQZV7SsRlyMkUxgTKMCiZ8Ym49eOBSQw==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/db": "^0.8.8"
+ "@wrnexus/core": "^0.8.12",
+ "@wrnexus/db": "^0.8.20",
+ "@wrnexus/plugin": "^0.8.8"
},
"engines": {
"bun": ">=1.3.0"
@@ -1569,44 +1576,45 @@
}
},
"node_modules/@wrnexus/captcha": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/captcha/-/captcha-0.8.8.tgz",
- "integrity": "sha512-/fxuTv9KZv6Clci/GsQzOj1NWXop55bSA/ntUJGudqEl6Ss7R7qrvXp5JFvuUTeaqRnBG+dMRMKIoLkAt7LsAw==",
+ "version": "0.8.16",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/captcha/-/captcha-0.8.16.tgz",
+ "integrity": "sha512-iBMnhn9RcnsdHOKgHFIwSkZ8NvTZIJ3J+gqbeGQCGpdRAuI+sI87paiUr9QXNgXqH0HlWEhYmaX/850Dsd4XcA==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8",
+ "@wrnexus/core": "^0.8.12",
"@wrnexus/plugin": "^0.8.8",
- "@wrnexus/ui": "^0.8.8",
- "@wrnexus/validation": "^0.8.8"
+ "@wrnexus/ui": "^0.8.76",
+ "@wrnexus/validation": "^0.8.13"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/cli": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/cli/-/cli-0.8.8.tgz",
- "integrity": "sha512-v4F7iPiSRVw0zUGkGavss1j2uYta7L1zzy80aR2++Dy2C1QEpkf3wIzcQmLDL6RPJqtL3RgeMKu8IZDVsswB3A==",
+ "version": "0.8.72",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/cli/-/cli-0.8.72.tgz",
+ "integrity": "sha512-JeFsDMldcjiUFMhal11V/bfg/dNcG+OJh7+Bt6lmU3ojxTajvxV6pjLPp022hYDBZPu83jupiF4WZPwOLy/+Bw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@wrnexus/authz": "^0.8.8",
- "@wrnexus/compiler": "^0.8.8",
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/csr": "^0.8.8",
- "@wrnexus/db": "^0.8.8",
- "@wrnexus/dev-server": "^0.8.8",
- "@wrnexus/i18n": "^0.8.8",
+ "@wrnexus/authz": "^0.8.15",
+ "@wrnexus/compiler": "^0.8.30",
+ "@wrnexus/core": "^0.8.16",
+ "@wrnexus/csr": "^0.8.41",
+ "@wrnexus/db": "^0.8.23",
+ "@wrnexus/dev-server": "^0.8.66",
+ "@wrnexus/i18n": "^0.8.12",
"@wrnexus/mcp": "^0.8.8",
"@wrnexus/playground": "^0.8.8",
- "@wrnexus/plugin": "^0.8.8",
- "@wrnexus/router": "^0.8.8",
- "@wrnexus/security": "^0.8.8",
- "@wrnexus/styles": "^0.8.8",
- "@wrnexus/syntax": "^0.8.8",
- "@wrnexus/typecheck": "^0.8.8",
- "@wrnexus/ui": "^0.8.8",
- "@wrnexus/validation": "^0.8.8",
+ "@wrnexus/plugin": "^0.8.9",
+ "@wrnexus/react": "^0.8.9",
+ "@wrnexus/router": "^0.8.10",
+ "@wrnexus/security": "^0.8.9",
+ "@wrnexus/styles": "^0.8.25",
+ "@wrnexus/syntax": "^0.8.19",
+ "@wrnexus/typecheck": "^0.8.17",
+ "@wrnexus/ui": "^0.8.85",
+ "@wrnexus/validation": "^0.8.13",
"selfsigned": "^5.5.0"
},
"bin": {
@@ -1617,107 +1625,110 @@
}
},
"node_modules/@wrnexus/compiler": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/compiler/-/compiler-0.8.8.tgz",
- "integrity": "sha512-yX6lMLT+ZHxPO7t2EFi3fAPAqMvXPebKZIXt/haE8bKX+Ay5uyAuicMwZn95hXw/X6m0eCRGDaLdEwqU5hMBaw==",
+ "version": "0.8.30",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/compiler/-/compiler-0.8.30.tgz",
+ "integrity": "sha512-zsxqcIMOzXxX98z6RFffwQUa6VuniOqGZO/vxDdOJiyJ8RTs7gOk8dsBhA6MTLQ1fafPxJPV3zkGotKXOuxhCQ==",
"license": "MIT",
"dependencies": {
- "@wrnexus/csr": "^0.8.8",
- "@wrnexus/store": "^0.8.8",
- "@wrnexus/syntax": "^0.8.8",
- "@wrnexus/validation": "^0.8.8"
+ "@wrnexus/csr": "^0.8.41",
+ "@wrnexus/store": "^0.8.12",
+ "@wrnexus/syntax": "^0.8.19",
+ "@wrnexus/validation": "^0.8.13"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/content": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/content/-/content-0.8.8.tgz",
- "integrity": "sha512-Va37m2vxiEZ2pspPUxX9kE/nTQ+4VA9KfZ5kI7umKYV6lWWJoUbMLfTg5PtWN0DBI9vXG4a3yGLlxRx+IqynPg==",
+ "version": "0.8.9",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/content/-/content-0.8.9.tgz",
+ "integrity": "sha512-8ue55L7FVoKJwQyFVUt5dePEzYzboNUssnzUOIWCoB3BOVnm5D+YYHTaB21AKcAR/oAP+e86zXt2D+l7VFEDFA==",
"license": "MIT",
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/core": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/core/-/core-0.8.8.tgz",
- "integrity": "sha512-R4ViefmkLIAENYn+HJP/YwlzQaABFqgiEjbk1A1z0ZQdcI/NhrMik/hG+05gfMFQPM1t27kM4jqewAibJEoEMA==",
+ "version": "0.8.16",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/core/-/core-0.8.16.tgz",
+ "integrity": "sha512-lTNigmTpJsgQnB95xMhalJ6Xbp/QBUf9J0MM4cuiecZ1DQLpaSgGC12Sn7FIC46rTU4w8878XJXlVWDCabe16Q==",
"license": "MIT",
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/csr": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/csr/-/csr-0.8.8.tgz",
- "integrity": "sha512-OooOCDs3HRrLUxBAHoNiDWIRYImK6W917FdntefEMS7YkhBw7bJxOkcOQtPdXP6ndN9BODQiaVik2BGDCUasAg==",
+ "version": "0.8.43",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/csr/-/csr-0.8.43.tgz",
+ "integrity": "sha512-czmxeLxvNvD7XjU3TufFBGMzuDWpNB0qpYbmbiARB7l6rslBw3+GuBWf2U5k4DH6oYiN/DGD6Jj+/G3bEh6ARw==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8"
+ "@wrnexus/core": "^0.8.12"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/db": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/db/-/db-0.8.8.tgz",
- "integrity": "sha512-xlX+vXDj6n7kfqnnrWiSZiqHgb30ZcIvKMR4vppDxbxI6daZ/uVm+jGtWkJL38sqJFLFcEuj0xYjiiYBAeKUwA==",
+ "version": "0.8.23",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/db/-/db-0.8.23.tgz",
+ "integrity": "sha512-ncZlvclHW98Enah9wlHOf9+StoVGLrCOCVBAOEFdZKV91vKnYDltcFlmG7i7crndN37kayyb319Wiwol8Hmhyg==",
"license": "MIT",
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/dev-server": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/dev-server/-/dev-server-0.8.8.tgz",
- "integrity": "sha512-m3Gou8RuWTYTo9qQfQHCFQDzbL4yNRCbRsCrn21umK+1HXx0Efk+Nd7RoA4nPAQP5AaDkwSfd8nb+5YtakTUIA==",
+ "version": "0.8.66",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/dev-server/-/dev-server-0.8.66.tgz",
+ "integrity": "sha512-RBJWyUEGmOS6ZgIm5NvNPB4BVhVIpGFEEf4NSLDKJtp/Z5K2+G44KbRhZaaYvl6F4IEZM2Zg5x+ZAX+o5XB34w==",
"license": "MIT",
"dependencies": {
- "@wrnexus/authz": "^0.8.8",
+ "@wrnexus/authz": "^0.8.15",
"@wrnexus/cache": "^0.8.8",
- "@wrnexus/compiler": "^0.8.8",
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/csr": "^0.8.8",
- "@wrnexus/db": "^0.8.8",
- "@wrnexus/dev-toolbar": "^0.8.8",
- "@wrnexus/i18n": "^0.8.8",
+ "@wrnexus/compiler": "^0.8.30",
+ "@wrnexus/core": "^0.8.16",
+ "@wrnexus/csr": "^0.8.41",
+ "@wrnexus/db": "^0.8.23",
+ "@wrnexus/dev-toolbar": "^0.8.18",
+ "@wrnexus/i18n": "^0.8.12",
"@wrnexus/observability": "^0.8.8",
- "@wrnexus/plugin": "^0.8.8",
- "@wrnexus/pubsub": "^0.8.8",
- "@wrnexus/pwa": "^0.8.8",
- "@wrnexus/router": "^0.8.8",
- "@wrnexus/rpc": "^0.8.8",
- "@wrnexus/security": "^0.8.8",
- "@wrnexus/ssr": "^0.8.8",
- "@wrnexus/store": "^0.8.8",
- "@wrnexus/styles": "^0.8.8",
- "@wrnexus/ui": "^0.8.8",
- "@wrnexus/uploader": "^0.8.8",
- "@wrnexus/validation": "^0.8.8"
+ "@wrnexus/plugin": "^0.8.9",
+ "@wrnexus/pubsub": "^0.8.9",
+ "@wrnexus/pwa": "^0.8.12",
+ "@wrnexus/queue": "^0.8.14",
+ "@wrnexus/react": "^0.8.9",
+ "@wrnexus/router": "^0.8.10",
+ "@wrnexus/rpc": "^0.8.10",
+ "@wrnexus/security": "^0.8.9",
+ "@wrnexus/ssr": "^0.8.12",
+ "@wrnexus/store": "^0.8.12",
+ "@wrnexus/styles": "^0.8.23",
+ "@wrnexus/ui": "^0.8.84",
+ "@wrnexus/uploader": "^0.8.13",
+ "@wrnexus/validation": "^0.8.13"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/dev-toolbar": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/dev-toolbar/-/dev-toolbar-0.8.8.tgz",
- "integrity": "sha512-WrRRXyzAaDfXdxTJsM3p4s9vBc2vVJtGkIkvOHdtvX9S89OqnuqKluqwixlHGedB7m+J+LqCcrbD6OfdNP2VEQ==",
+ "version": "0.8.18",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/dev-toolbar/-/dev-toolbar-0.8.18.tgz",
+ "integrity": "sha512-7mj/FLIhLjx/DxH/gUlYwZqm63o/rcwH/0K/K6Efxvu9zfM5OyAh2w3L2eDWI9asK5foZkit8cKMUXVgmqHkcA==",
"license": "MIT",
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/encryption": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/encryption/-/encryption-0.8.8.tgz",
- "integrity": "sha512-AKy4kEBIJsbw9OPXlfKqVnidbQqQmglqWnDQuTgtxOdRsDP990KRhdd95pQthpgq1LhzxPdLnkDJKfTA6CFrwQ==",
+ "version": "0.8.10",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/encryption/-/encryption-0.8.10.tgz",
+ "integrity": "sha512-4U7X9kzK/JWPoNDXxtVH/D2bVBNQzKGWSUmHgyYWTrNSpsiCLW17te//SVddkQfq7HCSv3cihuyoYl2j03Xf0Q==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8"
+ "@wrnexus/core": "^0.8.12",
+ "@wrnexus/db": "^0.8.20"
},
"engines": {
"bun": ">=1.3.0"
@@ -1736,26 +1747,28 @@
}
},
"node_modules/@wrnexus/helpers": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/helpers/-/helpers-0.8.8.tgz",
- "integrity": "sha512-ArWU3F3N3EXXENYxID3O8FAbQ0Un/XkA3IkLE1aI8e1enyJ6ubPbhBt9TswKQcuc09+zpdZ4t0IUNld3TXBfog==",
+ "version": "0.8.9",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/helpers/-/helpers-0.8.9.tgz",
+ "integrity": "sha512-EzT9LSZJXIAIm2fO62BMbPJOnrloC1lujW+5UNsSd4kj44mBt6WMpBwaCSDGUcVy2/b7GKXlgBnUVZtIIGn0gw==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8"
+ "@wrnexus/authz": "^0.8.14",
+ "@wrnexus/core": "^0.8.12",
+ "@wrnexus/db": "^0.8.20"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/i18n": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/i18n/-/i18n-0.8.8.tgz",
- "integrity": "sha512-aTTV8SWwoRN0wzWVenGqu9LVO3y7LlLNXdKQLDrILq13/g4v8lNcBNDsXf+rwERe6VOdI3j5Q8BZZIU0hJfUZg==",
+ "version": "0.8.12",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/i18n/-/i18n-0.8.12.tgz",
+ "integrity": "sha512-pgDJZpS8qB3tz+FMY+CNUF7AZXJVRFWbFDSHk+QMeUAwkU7JbNDxwmKioa6QU50F6C0SUMbfVwDR3kBXZKBflQ==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8",
+ "@wrnexus/core": "^0.8.9",
"@wrnexus/plugin": "^0.8.8",
- "@wrnexus/ui": "^0.8.8"
+ "@wrnexus/ui": "^0.8.19"
},
"engines": {
"bun": ">=1.3.0"
@@ -1776,39 +1789,40 @@
}
},
"node_modules/@wrnexus/image": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/image/-/image-0.8.8.tgz",
- "integrity": "sha512-vRRDKjqbrtR1R8XOR/TePQr1m+vti1K8+8ehH8/YuGhjwaG3Qbu/ypUHQL4hGF2zw7u3cD9v1AZe6NKNgxidGw==",
+ "version": "0.8.10",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/image/-/image-0.8.10.tgz",
+ "integrity": "sha512-o9Bn6FhHF8oOP4PLnJHKyvPckd+cBxrWGFUqsINT+VStvSEA57gktIZw5f9jiHOMnp6TgVprscaviQMa0NO4pQ==",
"license": "MIT",
"dependencies": {
"@wrnexus/plugin": "^0.8.8",
"@wrnexus/security": "^0.8.8",
- "@wrnexus/ui": "^0.8.8"
+ "@wrnexus/ui": "^0.8.19"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/jwt": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/jwt/-/jwt-0.8.8.tgz",
- "integrity": "sha512-is2SDq8Y8Ltyrh4F48WpUoLHY1QiHl6ZxQ2KKkNDh6ASZoTwvDWklmZe/C27cxJDqE2yhdXBofAO+nHx5+26jA==",
+ "version": "0.8.9",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/jwt/-/jwt-0.8.9.tgz",
+ "integrity": "sha512-LcjXLdDp8pnJ3F6dDGlB3COlvg7jVBIZe+UnF48i7Hy12gHZu0Rbv/iBn9w203tpzT2EmcpGtMyI/J+uLQUeVg==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8"
+ "@wrnexus/core": "^0.8.9"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/language-server": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/language-server/-/language-server-0.8.8.tgz",
- "integrity": "sha512-sF91UE9Yo+809t0wU1JjyAqxENxfBsLSoySnLZV9pRyXRXuN1sqeYVPJ0lz5u8ZY6rwuVtUyrB8fJ8OeX3/tPA==",
+ "version": "0.8.12",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/language-server/-/language-server-0.8.12.tgz",
+ "integrity": "sha512-eeJXLzh5tGckAlu2CtuLk0FjiewOtEEfSwGi22e3z4KiGx3KzBjT/kwHyFVureyDAD0HqBYQLshr5FeNQKxIiA==",
"license": "MIT",
"dependencies": {
- "@wrnexus/syntax": "^0.8.8",
- "@wrnexus/typecheck": "^0.8.8"
+ "@wrnexus/syntax": "^0.8.11",
+ "@wrnexus/typecheck": "^0.8.11",
+ "vscode-html-languageservice": "^5.6.2"
},
"bin": {
"wrnexus-language-server": "dist/server.js"
@@ -1888,166 +1902,182 @@
}
},
"node_modules/@wrnexus/plugin": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/plugin/-/plugin-0.8.8.tgz",
- "integrity": "sha512-b1ItR2B1Jkaes1kR1YECpMEnOBMtPw6sVSVcGueF3wOgTPS6zPptwpwLzwQTYH6+sT4eRFMjybEM7An8TscaMw==",
+ "version": "0.8.9",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/plugin/-/plugin-0.8.9.tgz",
+ "integrity": "sha512-XpkQL4/MpiNxoNcH1l7dL5cYEu8HN54/b5bx6DBXWutU4tMrAjChtbJ+SsE2YrNve4uWVUhF8wPgsdBrJONOQQ==",
"license": "MIT",
"dependencies": {
- "@wrnexus/syntax": "^0.8.8"
+ "@wrnexus/syntax": "^0.8.19"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/pubsub": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/pubsub/-/pubsub-0.8.8.tgz",
- "integrity": "sha512-X7QH6kecu7gzt0waW+CkaYdDUmEAykoxMwk35GizNTECkUg8SJHjQNf9bgGM9RNIQOkCr12jFSnR+0njn+LqiA==",
+ "version": "0.8.9",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/pubsub/-/pubsub-0.8.9.tgz",
+ "integrity": "sha512-Z696WHuzJsPJvkvz3aRcifiZEqHXSIzoH3ji/wPqBP+vqmKIiZ/WIzViSQ0j8QJgtHiiq1mo2d4GFxsfdAPbqg==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/rpc": "^0.8.8"
+ "@wrnexus/core": "^0.8.9",
+ "@wrnexus/rpc": "^0.8.9"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/pwa": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/pwa/-/pwa-0.8.8.tgz",
- "integrity": "sha512-rW4S/xNQ1IC0zDthheLfQNPtDeNuRLbQYictOvoJXiYndrh3HZgKdKAvh9DCare+/HftgSM28Tn8ZqUtd0zpBg==",
+ "version": "0.8.12",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/pwa/-/pwa-0.8.12.tgz",
+ "integrity": "sha512-XI5wgn+vbPcSbAt3EsqnrPjkx2cd/Zpo3xy2deawuU5k7irkRImPNUWvtjkTar5GaNedVvuZQAhXLghb9p/GQQ==",
"license": "MIT",
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/queue": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/queue/-/queue-0.8.8.tgz",
- "integrity": "sha512-hsP+e06pJsrEA51tc8vA9dNqKp382EkmyiEUXd1eU37rIgGyU8egeBxnXtJALXBU47ddo8JVawNn2wqaKvLA8g==",
+ "version": "0.8.14",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/queue/-/queue-0.8.14.tgz",
+ "integrity": "sha512-uulbyU1AF3gnfylmlFMIoBjAKgAgHsHg+FfEmLtoYwsaQ+JtMNk5PEZ/GUUBxEmK9ZbEAdgBAxgEX69E7ne9aA==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/rpc": "^0.8.8"
+ "@wrnexus/core": "^0.8.12",
+ "@wrnexus/db": "^0.8.20",
+ "@wrnexus/rpc": "^0.8.10"
},
"engines": {
"bun": ">=1.3.0"
}
},
- "node_modules/@wrnexus/reactive": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/reactive/-/reactive-0.8.8.tgz",
- "integrity": "sha512-BjfLB3wwJL/Fqld53TqMY+8ZtUt9hTctRESXUgr41+AWPj8+S6c7oVNV65pEoGN8C+wAQONg8A67JoZP9jQRXw==",
- "license": "MIT",
- "engines": {
- "bun": ">=1.3.0"
- }
- },
- "node_modules/@wrnexus/realtime": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/realtime/-/realtime-0.8.8.tgz",
- "integrity": "sha512-7arnRMucFz6sYepAIpPLpQtqqEoiPn7YChZ6Ig+wXMeB/3JQRV9PT7usRTtsrKF+eb2IcxguS1V/jzEeHlzdmg==",
+ "node_modules/@wrnexus/react": {
+ "version": "0.8.9",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/react/-/react-0.8.9.tgz",
+ "integrity": "sha512-031RC/EBF1nzSeiwo2gXhOJ+xMLRtPUniN612ZVzj+pqGdn1J8I8vajZwRYKYC2xAVdCiB/EGoZ3FQaT75h8qw==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/plugin": "^0.8.8",
- "@wrnexus/ui": "^0.8.8"
- },
- "engines": {
- "bun": ">=1.3.0"
- }
- },
- "node_modules/@wrnexus/router": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/router/-/router-0.8.8.tgz",
- "integrity": "sha512-cO+5X9nHljYA8S44Hf3KTv9jRnN558eynZMer54ODw/Iz+8FXBgmRho66f5EAjvML5APKI+fZyFYekL2WNZXYQ==",
- "license": "MIT",
- "dependencies": {
- "@wrnexus/compiler": "^0.8.8",
- "@wrnexus/core": "^0.8.8"
- },
- "engines": {
- "bun": ">=1.3.0"
- }
- },
- "node_modules/@wrnexus/rpc": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/rpc/-/rpc-0.8.8.tgz",
- "integrity": "sha512-2mmiNnQ1nIhjSzrt75yU0LfW4n7E6teO7mcvqMPbDrMb+hivv4J3HcreoQXGnp1dAJCyYpf5laPbUmZLGAY6Iw==",
- "license": "MIT",
- "dependencies": {
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/helpers": "^0.8.8",
- "@wrnexus/jwt": "^0.8.8",
- "@wrnexus/validation": "^0.8.8"
- },
- "engines": {
- "bun": ">=1.3.0"
- }
- },
- "node_modules/@wrnexus/security": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/security/-/security-0.8.8.tgz",
- "integrity": "sha512-ayctEobZK+6AqpHH6SV9u8DO22IAabew2QkxAzVX+eQp7fuQa3vctx2iI4JPmihXsxcZ/bFYsBgeUpPC6VVbkg==",
- "license": "MIT",
- "dependencies": {
- "@wrnexus/core": "^0.8.8"
- },
- "engines": {
- "bun": ">=1.3.0"
- }
- },
- "node_modules/@wrnexus/ssr": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/ssr/-/ssr-0.8.8.tgz",
- "integrity": "sha512-vQ8KPfsxtkqF80fjp5FWfyhRw4dI9AgqJ8SlLPLGmMmGQdeHG+qzcMf5JL0yFys/2DAY609mhUO23YZdTCs8BQ==",
- "license": "MIT",
- "dependencies": {
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/security": "^0.8.8",
"@wrnexus/store": "^0.8.8"
},
"engines": {
"bun": ">=1.3.0"
}
},
+ "node_modules/@wrnexus/reactive": {
+ "version": "0.8.9",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/reactive/-/reactive-0.8.9.tgz",
+ "integrity": "sha512-/4+wYx2zwJ2vsHF5VYaQqgTz+WbNsIkC/lFWD2ok/w5VxGC5p2WFj2P+psE22g30bzkAmdEvdiurlKGCSkP8TA==",
+ "license": "MIT",
+ "engines": {
+ "bun": ">=1.3.0"
+ }
+ },
+ "node_modules/@wrnexus/realtime": {
+ "version": "0.8.10",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/realtime/-/realtime-0.8.10.tgz",
+ "integrity": "sha512-sU1djUTqIAX8CGJEuyZTmmRaZZ6hEkPsr8B0XERPTJeKPwoExbnB3oFf1iOOJ7ihZ6MM7vrFOgA11WNNDqSjFg==",
+ "license": "MIT",
+ "dependencies": {
+ "@wrnexus/core": "^0.8.9",
+ "@wrnexus/plugin": "^0.8.8",
+ "@wrnexus/ui": "^0.8.19"
+ },
+ "engines": {
+ "bun": ">=1.3.0"
+ }
+ },
+ "node_modules/@wrnexus/router": {
+ "version": "0.8.10",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/router/-/router-0.8.10.tgz",
+ "integrity": "sha512-zh+h+VDNshSsh2iryqbOCWOhcIbKXg58iWkHz3wKNovlWT0uAgLhmea6IHsiApI8RC/VPw4TAmAhfkaK1c4BBA==",
+ "license": "MIT",
+ "dependencies": {
+ "@wrnexus/compiler": "^0.8.17",
+ "@wrnexus/core": "^0.8.12"
+ },
+ "engines": {
+ "bun": ">=1.3.0"
+ }
+ },
+ "node_modules/@wrnexus/rpc": {
+ "version": "0.8.10",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/rpc/-/rpc-0.8.10.tgz",
+ "integrity": "sha512-KbfSxEe0D0ZiM1CckxiEVIEBSzYRYb3iEJYyJnT8DqlrEpos1hCwT22XnTMC3ldsCAusoUPO5gTXMBXL9qMKDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@wrnexus/core": "^0.8.9",
+ "@wrnexus/helpers": "^0.8.8",
+ "@wrnexus/jwt": "^0.8.9",
+ "@wrnexus/validation": "^0.8.10"
+ },
+ "engines": {
+ "bun": ">=1.3.0"
+ }
+ },
+ "node_modules/@wrnexus/security": {
+ "version": "0.8.9",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/security/-/security-0.8.9.tgz",
+ "integrity": "sha512-dgz2fYwiw7uhBdsMuLqlPQaqajJx1McTjAhx8Pp1lf8gddsXm+Dnmri/1LXSbPwuSpWB7gsNq326JlVICfipVQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@wrnexus/core": "^0.8.11"
+ },
+ "engines": {
+ "bun": ">=1.3.0"
+ }
+ },
+ "node_modules/@wrnexus/ssr": {
+ "version": "0.8.12",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/ssr/-/ssr-0.8.12.tgz",
+ "integrity": "sha512-fPoxMfnlwuUs6syJ6LMjqzxIKGsghQ3UCKjSFkRXlvdwdPpWRSxW0g0+jJF66/OTyCo2kB0dwMRGVLhICLgvLw==",
+ "license": "MIT",
+ "dependencies": {
+ "@wrnexus/core": "^0.8.16",
+ "@wrnexus/security": "^0.8.9",
+ "@wrnexus/store": "^0.8.12"
+ },
+ "engines": {
+ "bun": ">=1.3.0"
+ }
+ },
"node_modules/@wrnexus/store": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/store/-/store-0.8.8.tgz",
- "integrity": "sha512-qeIwa8OGq/BUtECJrgXSqleWGI9DY/syikAeaAF6hvGk775rrxh4971zR2tuiVh/0DUWm/s/8Wzj/bN99EYD2A==",
+ "version": "0.8.12",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/store/-/store-0.8.12.tgz",
+ "integrity": "sha512-5AiJXZ6AFT2eshp21JEyeHlmBgHuxyeRslN6YZiIvUfoO4Dre3VtR4pI+hN3lOGloLXwXBUfEMm2mgGsXS36Kg==",
"license": "MIT",
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/styles": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/styles/-/styles-0.8.8.tgz",
- "integrity": "sha512-s7dKF5XrjSxoYfNTefX1FKCimKlv2o9/FEK46RAAtM3p39dpaboj59EcEPFYf1wvcgiUXtH0EWxiKVjyg9wnjA==",
+ "version": "0.8.26",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/styles/-/styles-0.8.26.tgz",
+ "integrity": "sha512-B1FgQYks6S9SohlWjDkRabbzAAW9IIKbR5rHrdXegr6QY3nQMtJYPMG8xUVMTpQ8gRL+GODtuhDYPHD/igHuPg==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/plugin": "^0.8.8",
- "@wrnexus/uploader": "^0.8.8"
+ "@wrnexus/core": "^0.8.16",
+ "@wrnexus/plugin": "^0.8.9",
+ "@wrnexus/uploader": "^0.8.13"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/syntax": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/syntax/-/syntax-0.8.8.tgz",
- "integrity": "sha512-T3Xq4eiTQ6LxMLsbmo5cm76/FCjbLgpsUlS10QiIe0lSdVJQKpGWjc4aNBKo431Vdulw0T+2K62a93gnVI0wIQ==",
+ "version": "0.8.19",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/syntax/-/syntax-0.8.19.tgz",
+ "integrity": "sha512-/OZ+Z/cdFmfqKeqCZZpmwN2ZRSITA2ByqmVjGVONtMRfxHBj99T5jB0be6qlxrmoK0cgntRxEe2JCS/d9h54YA==",
"license": "MIT",
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/test": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/test/-/test-0.8.8.tgz",
- "integrity": "sha512-RoZidv+0xvkUhfDJGwXy8KqXZ1u2zlDCQez/2RpyTEvkza35KYhWQq0QMySFv7SZJTStQY1ow8yUrFYnasHg1A==",
+ "version": "0.8.16",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/test/-/test-0.8.16.tgz",
+ "integrity": "sha512-jaeNicouq3Fu6sELzbnSP+XMUMaqZDIwayUSI6PssGyeUFuYm9v7ZoOWc3ljBo1CSvZtTZlT9qAU7jhFmSpV1w==",
"license": "MIT",
+ "dependencies": {
+ "@wrnexus/core": "^0.8.16"
+ },
"engines": {
"bun": ">=1.3.0"
}
@@ -2062,53 +2092,66 @@
}
},
"node_modules/@wrnexus/typecheck": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/typecheck/-/typecheck-0.8.8.tgz",
- "integrity": "sha512-vFNsQc4k2p5rTrqaKYXj3W74Ebe7MMDMLXftGpZWyBNby4aF8HlsJclFLuFdKpfoDX1fprkZ5xGdVFzd51BSRQ==",
+ "version": "0.8.17",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/typecheck/-/typecheck-0.8.17.tgz",
+ "integrity": "sha512-sEvCraG7qudT61h0SbuccIegi37nVWW2B1+BjmPg6Zrtc0251lUozASOYMW2ntjiizASDXMTSnZvSJ36EJPflA==",
"license": "MIT",
"dependencies": {
- "@wrnexus/syntax": "^0.8.8",
- "typescript": "^5.5.0"
+ "@wrnexus/syntax": "^0.8.19",
+ "typescript": "^6.0.3"
},
"engines": {
"bun": ">=1.3.0"
}
},
+ "node_modules/@wrnexus/typecheck/node_modules/typescript": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz",
+ "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
"node_modules/@wrnexus/ui": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/ui/-/ui-0.8.8.tgz",
- "integrity": "sha512-Yxjcz950u9BRPPBRce2ug1Tf/rBESYR8gJ9XehBHQgP5kpCq8RGO7F2OFENCw07AFnElt8je0ym9lfBfEfKGrQ==",
+ "version": "0.8.88",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/ui/-/ui-0.8.88.tgz",
+ "integrity": "sha512-C6q3c85tJm0Ajhgb8i+DYOWyICNxeXVsR3KbD5yP0rC2XS5Vj9TP72x7NPux798jGLpbOpSPRiIPUff7zAod7w==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8"
+ "@wrnexus/core": "^0.8.16"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/uploader": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/uploader/-/uploader-0.8.8.tgz",
- "integrity": "sha512-OveR+mjsuHrCuyrtADzWh63LahR9n4zVJSIHFHjK4FsiJQo0NmJKxsEfPiHvb2PBk5bubM/KdGX4aqBXLliTcg==",
+ "version": "0.8.13",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/uploader/-/uploader-0.8.13.tgz",
+ "integrity": "sha512-Cfj5Iqtbk/ccXV/YXQ4I8v0GkcE7cFnzMEB33qy3DcWo4fA5ndiWU9CN4Ap1oysA5MWEmcCKuJlcTKdWLhiTvw==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8",
+ "@wrnexus/core": "^0.8.12",
"@wrnexus/plugin": "^0.8.8",
- "@wrnexus/ui": "^0.8.8"
+ "@wrnexus/ui": "^0.8.23"
},
"engines": {
"bun": ">=1.3.0"
}
},
"node_modules/@wrnexus/validation": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@wrnexus/validation/-/validation-0.8.8.tgz",
- "integrity": "sha512-cEh4VObnwoNLAeKz6OP1PDdYaHPd79i4BPxnJSI7rKJi6GrI6vgmJr0U1wXADMbUwC0Xm6GwjGopnYKTGCZfgg==",
+ "version": "0.8.13",
+ "resolved": "https://registry.workroot.in/repository/npm/@wrnexus/validation/-/validation-0.8.13.tgz",
+ "integrity": "sha512-ud9bzeSaOzbYnmu6pKEr5XbBT25FW+ROOI9iB0YJBc624juurslgHm2lpmpOu2WKUWulgktb/2vl9nsvtI8pSw==",
"license": "MIT",
"dependencies": {
- "@wrnexus/core": "^0.8.8",
+ "@wrnexus/core": "^0.8.12",
"@wrnexus/plugin": "^0.8.8",
- "@wrnexus/ui": "^0.8.8"
+ "@wrnexus/ui": "^0.8.76"
},
"engines": {
"bun": ">=1.3.0"
@@ -3678,6 +3721,7 @@
},
"node_modules/typescript": {
"version": "5.9.3",
+ "dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
@@ -3724,6 +3768,36 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/vscode-html-languageservice": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.6.2.tgz",
+ "integrity": "sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vscode/l10n": "^0.0.18",
+ "vscode-languageserver-textdocument": "^1.0.12",
+ "vscode-languageserver-types": "^3.17.5",
+ "vscode-uri": "^3.1.0"
+ }
+ },
+ "node_modules/vscode-languageserver-textdocument": {
+ "version": "1.0.15",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.15.tgz",
+ "integrity": "sha512-Gsfr9S8LU3S6885cS+NaleasJ0n3V5y/SOTqHCifQiXWFw3G9w9/YItDfwHrlCz+dSZWWZ8ilYVMcJe7Sz7Sxw==",
+ "license": "MIT"
+ },
+ "node_modules/vscode-languageserver-types": {
+ "version": "3.18.4",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.18.4.tgz",
+ "integrity": "sha512-nQsacoiijvl0fRf2q28uFDrAVwRhdCa3QveiF7/CX0r18mLR5FU/1WskSsCKOjmEbtteKUnY8x8Yzxop+k0zwg==",
+ "license": "MIT"
+ },
+ "node_modules/vscode-uri": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.2.0.tgz",
+ "integrity": "sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==",
+ "license": "MIT"
+ },
"node_modules/which": {
"version": "2.0.2",
"dev": true,
diff --git a/package.json b/package.json
index 92988167..cb6fc334 100644
--- a/package.json
+++ b/package.json
@@ -27,59 +27,59 @@
"dependencies": {
"@iconify-json/lucide": "^1.2.118",
"@iconify/tailwind4": "^1.2.3",
- "@wrnexus/ai": "^0.8.8",
- "@wrnexus/authz": "^0.8.8",
- "@wrnexus/compiler": "^0.8.8",
- "@wrnexus/core": "^0.8.8",
- "@wrnexus/csr": "^0.8.8",
- "@wrnexus/db": "^0.8.8",
- "@wrnexus/dev-server": "^0.8.8",
- "@wrnexus/encryption": "^0.8.8",
- "@wrnexus/helpers": "^0.8.8",
- "@wrnexus/i18n": "^0.8.8",
- "@wrnexus/jwt": "^0.8.8",
+ "@wrnexus/ai": "^0.8.9",
+ "@wrnexus/authz": "^0.8.15",
+ "@wrnexus/compiler": "^0.8.30",
+ "@wrnexus/core": "^0.8.16",
+ "@wrnexus/csr": "^0.8.43",
+ "@wrnexus/db": "^0.8.23",
+ "@wrnexus/dev-server": "^0.8.66",
+ "@wrnexus/encryption": "^0.8.10",
+ "@wrnexus/helpers": "^0.8.9",
+ "@wrnexus/i18n": "^0.8.12",
+ "@wrnexus/jwt": "^0.8.9",
"@wrnexus/mobile": "^0.8.8",
"@wrnexus/native": "^0.8.8",
"@wrnexus/oauth": "^0.8.8",
- "@wrnexus/pubsub": "^0.8.8",
- "@wrnexus/queue": "^0.8.8",
- "@wrnexus/reactive": "^0.8.8",
- "@wrnexus/router": "^0.8.8",
- "@wrnexus/ssr": "^0.8.8",
- "@wrnexus/styles": "^0.8.8",
- "@wrnexus/test": "^0.8.8",
+ "@wrnexus/pubsub": "^0.8.9",
+ "@wrnexus/queue": "^0.8.14",
+ "@wrnexus/reactive": "^0.8.9",
+ "@wrnexus/router": "^0.8.10",
+ "@wrnexus/ssr": "^0.8.12",
+ "@wrnexus/styles": "^0.8.26",
+ "@wrnexus/test": "^0.8.16",
"@wrnexus/tracking": "^0.8.8",
- "@wrnexus/ui": "^0.8.8",
- "@wrnexus/uploader": "^0.8.8",
- "@wrnexus/validation": "^0.8.8",
- "@wrnexus/dev-toolbar": "^0.8.8",
- "@wrnexus/syntax": "^0.8.8",
- "@wrnexus/plugin": "^0.8.8",
- "@wrnexus/captcha": "^0.8.8",
- "@wrnexus/auth": "^0.8.8",
- "@wrnexus/store": "^0.8.8",
- "@wrnexus/typecheck": "^0.8.8",
- "@wrnexus/security": "^0.8.8",
+ "@wrnexus/ui": "^0.8.88",
+ "@wrnexus/uploader": "^0.8.13",
+ "@wrnexus/validation": "^0.8.13",
+ "@wrnexus/dev-toolbar": "^0.8.18",
+ "@wrnexus/syntax": "^0.8.19",
+ "@wrnexus/plugin": "^0.8.9",
+ "@wrnexus/captcha": "^0.8.16",
+ "@wrnexus/auth": "^0.8.33",
+ "@wrnexus/store": "^0.8.12",
+ "@wrnexus/typecheck": "^0.8.17",
+ "@wrnexus/security": "^0.8.9",
"@wrnexus/cache": "^0.8.8",
- "@wrnexus/image": "^0.8.8",
+ "@wrnexus/image": "^0.8.10",
"@wrnexus/observability": "^0.8.8",
"@wrnexus/benchmark": "^0.8.8",
- "@wrnexus/realtime": "^0.8.8",
- "@wrnexus/content": "^0.8.8",
+ "@wrnexus/realtime": "^0.8.10",
+ "@wrnexus/content": "^0.8.9",
"@wrnexus/graphql": "^0.8.8",
"@wrnexus/identity": "^0.8.8",
- "@wrnexus/language-server": "^0.8.8",
+ "@wrnexus/language-server": "^0.8.12",
"@wrnexus/mcp": "^0.8.8",
"@wrnexus/playground": "^0.8.8",
- "@wrnexus/pwa": "^0.8.8",
- "@wrnexus/rpc": "^0.8.8"
+ "@wrnexus/pwa": "^0.8.12",
+ "@wrnexus/rpc": "^0.8.10"
},
"devDependencies": {
"@eslint/js": "^9.0.0",
"@tailwindcss/cli": "^4.0.0",
"@types/bun": "latest",
"@types/node": "^26.1.1",
- "@wrnexus/cli": "^0.8.8",
+ "@wrnexus/cli": "^0.8.72",
"eslint": "^9.0.0",
"prettier": "latest",
"tailwindcss": "^4.0.0",
@@ -87,6 +87,6 @@
"typescript-eslint": "latest"
},
"wrnexus": {
- "version": "0.8.8"
+ "version": "0.8.72"
}
}
diff --git a/public/docs-index.json b/public/docs-index.json
index f8b79cd8..6f0797e4 100644
--- a/public/docs-index.json
+++ b/public/docs-index.json
@@ -1,5 +1,5 @@
{
- "version": "0.8.8",
+ "version": "0.8.72",
"status": "private-developer-preview",
"generatedAt": "2026-07-13",
"documents": [
@@ -7,630 +7,630 @@
"url": "/",
"title": "WRNexusJS",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/access",
"title": "access",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/getting-started",
"title": "getting started",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/tutorial",
"title": "tutorial",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/architecture",
"title": "architecture",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/language",
"title": "language",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages",
"title": "packages",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/project-structure",
"title": "project structure",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/routing",
"title": "routing",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/pages-and-components",
"title": "pages and components",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/server-data",
"title": "server data",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/api-routes",
"title": "api routes",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/middleware",
"title": "middleware",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/forms-and-validation",
"title": "forms and validation",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/authentication",
"title": "authentication",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/authorization",
"title": "authorization",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/security",
"title": "security",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/database",
"title": "database",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/uploads",
"title": "uploads",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/realtime",
"title": "realtime",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/pubsub",
"title": "pubsub",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/queues",
"title": "queues",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "experimental"
},
{
"url": "/guides/testing",
"title": "testing",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/workspaces-and-gateway",
"title": "workspaces and gateway",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/deployment",
"title": "deployment",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/configuration-and-profiles",
"title": "configuration and profiles",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/i18n-and-themes",
"title": "i18n and themes",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/mobile",
"title": "mobile",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "experimental"
},
{
"url": "/guides/observability",
"title": "observability",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/upgrading",
"title": "upgrading",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/troubleshooting",
"title": "troubleshooting",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/guides/full-stack-auth-demo",
"title": "full stack auth demo",
"section": "guide",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/examples",
"title": "examples",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/showcase",
"title": "showcase",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/benchmarks",
"title": "benchmarks",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/roadmap",
"title": "roadmap",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/changelog",
"title": "changelog",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
- "url": "/releases/0.8.8",
- "title": "0.8.8",
+ "url": "/releases/0.8.72",
+ "title": "0.8.72",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/security",
"title": "security",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/support",
"title": "support",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/license",
"title": "license",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/search",
"title": "search",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/404",
"title": "404",
"section": "portal",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/ai",
"title": "ai",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/auth",
"title": "auth",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/authz",
"title": "authz",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/benchmark",
"title": "benchmark",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/cache",
"title": "cache",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/captcha",
"title": "captcha",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/cli",
"title": "cli",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/compiler",
"title": "compiler",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/content",
"title": "content",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/core",
"title": "core",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/csr",
"title": "csr",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/db",
"title": "db",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/dev-server",
"title": "dev server",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/dev-toolbar",
"title": "dev toolbar",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/encryption",
"title": "encryption",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/graphql",
"title": "graphql",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/helpers",
"title": "helpers",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/i18n",
"title": "i18n",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/identity",
"title": "identity",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/image",
"title": "image",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/jwt",
"title": "jwt",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/language-server",
"title": "language server",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/mcp",
"title": "mcp",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/mobile",
"title": "mobile",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "experimental"
},
{
"url": "/packages/native",
"title": "native",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/oauth",
"title": "oauth",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/observability",
"title": "observability",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/playground",
"title": "playground",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/plugin",
"title": "plugin",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/pubsub",
"title": "pubsub",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/pwa",
"title": "pwa",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/queue",
"title": "queue",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/reactive",
"title": "reactive",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/realtime",
"title": "realtime",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/router",
"title": "router",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/rpc",
"title": "rpc",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/security",
"title": "security",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/ssr",
"title": "ssr",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/store",
"title": "store",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/styles",
"title": "styles",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/syntax",
"title": "syntax",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/test",
"title": "test",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/tracking",
"title": "tracking",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/typecheck",
"title": "typecheck",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/ui",
"title": "ui",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/uploader",
"title": "uploader",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
},
{
"url": "/packages/validation",
"title": "validation",
"section": "package",
- "version": "0.8.8",
+ "version": "0.8.72",
"stability": "preview"
}
]
diff --git a/public/llms-full.txt b/public/llms-full.txt
index 03ffba47..36bf2049 100644
--- a/public/llms-full.txt
+++ b/public/llms-full.txt
@@ -1,4 +1,4 @@
-# WRNexusJS documentation 0.8.8
+# WRNexusJS documentation 0.8.72
Status: Private Developer Preview. This site documents 47 release-aligned packages.
@@ -259,7 +259,7 @@ export const POST = async (ctx) => {
## CLI
-See the generated **Complete CLI command reference** below. It is sourced from the installed 0.8.8 executable so command names and options cannot drift.
+See the generated **Complete CLI command reference** below. It is sourced from the installed 0.8.72 executable so command names and options cannot drift.
## When asked to "create a page/component/feature"
@@ -269,9 +269,11 @@ See the generated **Complete CLI command reference** below. It is sourced from t
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.8.72
+
# Complete CLI command reference
-This section is generated from the installed `@wrnexus/cli@0.8.7` executable. It is the canonical command inventory for this release.
+This section is generated from the installed `@wrnexus/cli@0.8.72` executable. It is the canonical command inventory for this release.
```text
wrnexus — WrNexus CLI
@@ -298,11 +300,12 @@ Usage:
wrnexus generate types [app-dir] Generate application-wide route/component/key types
wrnexus routes [app-dir] Generate typed named routes
wrnexus typecheck [app-dir] Generate types and check TypeScript plus every .wrn file
+ wrnexus check [app-dir] Build/generate, typecheck, lint, test, and format-check
wrnexus mobile add