@async/framework 0.11.6 → 0.11.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.8 - 2026-06-18
4
+
5
+ - Scoped server-result application tracking to each framework invocation so the
6
+ same envelope object can apply effects again for separate calls without
7
+ double-applying inside one nested server call chain.
8
+ - Stopped mutating caller-owned server-result objects to record application
9
+ state, including extensible, sealed, frozen, redirect, and error envelopes.
10
+ - Added regression coverage for repeated shared-envelope invocations,
11
+ frozen/sealed envelopes, original server errors, repeatable redirects, and
12
+ unchanged result-object own keys.
13
+ - Bundle size from bundled TypeScript source: `browser.ts` 183,427 B raw /
14
+ 34,417 B gzip -> `browser.min.js` 77,932 B raw / 23,134 B gzip
15
+ (-105,495 B raw, -11,283 B gzip).
16
+
17
+ ## 0.11.7 - 2026-06-18
18
+
19
+ - Introduced an explicit `__async_server_result__: 1` marker for framework
20
+ server-result envelopes so ordinary domain objects with fields such as
21
+ `value`, `signals`, `cache`, `html`, `boundary`, `redirect`, or `error`
22
+ remain application values.
23
+ - Centralized server-result effect application and unwrapping across local
24
+ registry, remote proxy, and handler command paths so `.run(...)` and
25
+ namespaced calls return equivalent values without double-applying effects.
26
+ - Kept cache-only and other effect-only server envelopes representable through
27
+ the explicit marker and updated server-call, router, partial, and SSR
28
+ examples to use the protocol.
29
+ - Bundle size from bundled TypeScript source: `browser.ts` 183,176 B raw /
30
+ 34,360 B gzip -> `browser.min.js` 77,854 B raw / 23,100 B gzip
31
+ (-105,322 B raw, -11,260 B gzip).
32
+
3
33
  ## 0.11.6 - 2026-06-18
4
34
 
5
35
  - Owned async-signal runs with private execution tokens so canceled, restored,
package/README.md CHANGED
@@ -806,6 +806,7 @@ import {
806
806
  const server = createServerRegistry({
807
807
  "cart.add"(productId, quantity) {
808
808
  return {
809
+ __async_server_result__: 1,
809
810
  value: { ok: true },
810
811
  signals: {
811
812
  cartCount: 3
package/browser.js CHANGED
@@ -2378,9 +2378,10 @@ const __componentModule = (() => {
2378
2378
  })();
2379
2379
 
2380
2380
  const __serverModule = (() => {
2381
- const serverEnvelopeKeys = new Set(["value", "signals", "boundary", "html", "redirect", "error"]);
2382
- const appliedServerResult = Symbol.for("@async/framework.appliedServerResult");
2383
- const appliedServerValues = new WeakSet();
2381
+ const serverEnvelopeKind = Symbol.for("@async/framework.serverResult");
2382
+ const serverEnvelopeWireKey = "__async_server_result__";
2383
+ const serverEnvelopeWireVersion = 1;
2384
+ const serverResultInvocation = Symbol("@async/framework.serverResultInvocation");
2384
2385
 
2385
2386
  function createServerProxy({
2386
2387
  endpoint = "/__async/server",
@@ -2400,7 +2401,7 @@ const __serverModule = (() => {
2400
2401
 
2401
2402
  async function run(id, args = [], context = {}) {
2402
2403
  assertServerId(id);
2403
- const runContext = { ...defaults, ...context };
2404
+ const runContext = createServerResultContext({ ...defaults, ...context });
2404
2405
  const body = {
2405
2406
  args,
2406
2407
  input: context.input ?? defaultInput(runContext),
@@ -2423,9 +2424,7 @@ const __serverModule = (() => {
2423
2424
  throw new Error(`Server function "${id}" failed with ${response.status}.`);
2424
2425
  }
2425
2426
 
2426
- const result = await readServerResponse(id, response);
2427
- await applyServerResult(result, runContext);
2428
- return markAppliedServerValue(unwrapServerResult(result));
2427
+ return consumeServerResult(await readServerResponse(id, response), runContext);
2429
2428
  }
2430
2429
 
2431
2430
  return createServerNamespace(run, {
@@ -2460,12 +2459,13 @@ const __serverModule = (() => {
2460
2459
  if (!isServerEnvelope(result)) {
2461
2460
  return result;
2462
2461
  }
2463
- if (result[appliedServerResult] || appliedServerValues.has(result)) {
2462
+ const invocation = getServerResultInvocation(context);
2463
+ if (invocation.applied.has(result)) {
2464
2464
  return result;
2465
2465
  }
2466
+ invocation.applied.add(result);
2466
2467
 
2467
2468
  if (result.error) {
2468
- markAppliedServerResult(result);
2469
2469
  throw toError(result.error);
2470
2470
  }
2471
2471
 
@@ -2487,32 +2487,35 @@ const __serverModule = (() => {
2487
2487
  await context.router?.navigate?.(result.redirect);
2488
2488
  }
2489
2489
 
2490
- markAppliedServerResult(result);
2491
-
2492
2490
  return result;
2493
2491
  }
2494
2492
 
2493
+ async function consumeServerResult(result, context = {}) {
2494
+ await applyServerResult(result, context);
2495
+ return unwrapServerResult(result);
2496
+ }
2497
+
2495
2498
  function unwrapServerResult(result) {
2496
- if (isServerEnvelope(result) && Object.hasOwn(result, "value")) {
2497
- return result.value;
2499
+ if (isServerEnvelope(result)) {
2500
+ return Object.hasOwn(result, "value") ? result.value : undefined;
2498
2501
  }
2499
2502
  return result;
2500
2503
  }
2501
2504
 
2502
- function markAppliedServerValue(value) {
2503
- if (value && typeof value === "object") {
2504
- appliedServerValues.add(value);
2505
- }
2506
- return value;
2505
+ function createServerResultContext(context = {}) {
2506
+ const invocation = context[serverResultInvocation] ?? {
2507
+ applied: new WeakSet()
2508
+ };
2509
+ return {
2510
+ ...context,
2511
+ [serverResultInvocation]: invocation
2512
+ };
2507
2513
  }
2508
2514
 
2509
- function markAppliedServerResult(result) {
2510
- Object.defineProperty(result, appliedServerResult, {
2511
- configurable: true,
2512
- enumerable: false,
2513
- value: true
2514
- });
2515
- return result;
2515
+ function getServerResultInvocation(context = {}) {
2516
+ return context[serverResultInvocation] ?? {
2517
+ applied: new WeakSet()
2518
+ };
2516
2519
  }
2517
2520
 
2518
2521
  function defaultInput(context = {}) {
@@ -2547,9 +2550,7 @@ const __serverModule = (() => {
2547
2550
  throw new Error("Server namespace is not directly callable.");
2548
2551
  }
2549
2552
  const context = contextProvider() ?? {};
2550
- const result = await run(parts.join("."), args, context);
2551
- await applyServerResult(result, context);
2552
- return unwrapServerResult(result);
2553
+ return run(parts.join("."), args, context);
2553
2554
  };
2554
2555
 
2555
2556
  const proxy = new Proxy(callable, {
@@ -2606,7 +2607,7 @@ const __serverModule = (() => {
2606
2607
 
2607
2608
  async function readServerResponse(id, response) {
2608
2609
  if (response.status === 204) {
2609
- return { value: undefined };
2610
+ return undefined;
2610
2611
  }
2611
2612
  const type = response.headers.get("content-type") ?? "";
2612
2613
  if (type.includes("application/json")) {
@@ -2624,7 +2625,7 @@ const __serverModule = (() => {
2624
2625
  if (typeof response.text !== "function") {
2625
2626
  throw new Error(`Server function "${id}" transport returned an invalid response: missing text().`);
2626
2627
  }
2627
- return { value: await response.text() };
2628
+ return response.text();
2628
2629
  }
2629
2630
 
2630
2631
  function snapshotSignalPaths(paths = [], signals) {
@@ -2769,7 +2770,8 @@ const __serverModule = (() => {
2769
2770
  if (!value || typeof value !== "object" || Array.isArray(value)) {
2770
2771
  return false;
2771
2772
  }
2772
- return Object.keys(value).some((key) => serverEnvelopeKeys.has(key));
2773
+ return value[serverEnvelopeKind] === true
2774
+ || value[serverEnvelopeWireKey] === serverEnvelopeWireVersion;
2773
2775
  }
2774
2776
 
2775
2777
  function toError(value) {
@@ -2791,11 +2793,11 @@ const __serverModule = (() => {
2791
2793
  throw new TypeError("Server function id must be a non-empty string.");
2792
2794
  }
2793
2795
  }
2794
- return { createServerProxy, resolveServerCommandArguments, applyServerResult, unwrapServerResult, defaultInput, createServerNamespace, createSignalReader, assertServerId };
2796
+ return { createServerProxy, resolveServerCommandArguments, applyServerResult, consumeServerResult, unwrapServerResult, createServerResultContext, defaultInput, createServerNamespace, createSignalReader, assertServerId };
2795
2797
  })();
2796
2798
 
2797
2799
  const __handlersModule = (() => {
2798
- const { applyServerResult, defaultInput, resolveServerCommandArguments, unwrapServerResult } = __serverModule;
2800
+ const { defaultInput, resolveServerCommandArguments } = __serverModule;
2799
2801
  const { attachRegistryInspection, createRegistryStore } = __registryStoreModule;
2800
2802
  const { createLazyRegistry, isLazyDescriptor } = __lazyRegistryModule;
2801
2803
  const builtInTokens = new Set(["prevent", "preventDefault", "stopPropagation", "stopImmediatePropagation"]);
@@ -2893,8 +2895,7 @@ const __handlersModule = (() => {
2893
2895
  signalPaths: resolved.signalPaths,
2894
2896
  signalValues: resolved.signalValues
2895
2897
  });
2896
- await applyServerResult(result, runContext);
2897
- results.push(unwrapServerResult(result));
2898
+ results.push(result);
2898
2899
  continue;
2899
2900
  }
2900
2901
 
package/browser.min.js CHANGED
@@ -1 +1 @@
1
- const e=(()=>{const e=Symbol.for("@async/framework.asyncSignal");return{asyncSignal:function t(r,n){if("string"!=typeof r||0===r.length)throw new TypeError("asyncSignal(id, fn) requires a non-empty string id.");if("function"!=typeof n)throw new TypeError("asyncSignal(id, fn) requires a function.");let o,s,a,i=!1,c=null,u="idle",l=0,f=r,p=0,h=!1;const d=new Set,y=new Set,g={[e]:!0,kind:"async-signal",get id(){return f},get value(){return o},get loading(){return i},get error(){return c},get status(){return u},get version(){return l},set:e=>(o=e,i=!1,c=null,u="ready",$(),o),refresh(){if(!s||h)throw new Error(`Async signal "${f}" is not registered.`);v(a,new Error(`Async signal "${f}" refreshed.`));const e=s,t=l+1;l=t,i=!0,c=null,u="loading";const r=((e,t,r)=>{const n=new AbortController,o=n.signal,s=((e,t)=>{const r=e._context?.()??{},n={signals:e,router:r.router,loader:r.loader,cache:r.cache,abort:t,scheduler:r.scheduler};return{signals:e,server:"function"==typeof r.server?._withContext?r.server._withContext(n):r.server,router:r.router,loader:r.loader,cache:r.cache,scheduler:r.scheduler}})(e,o),a={token:++p,version:r,registry:e,id:t,controller:n,abort:o,...s};return((e,t,r)=>{Object.defineProperty(e,"cancel",{configurable:!0,enumerable:!1,value(e){r(e)}})})(o,0,e=>{v(a,e,{settle:!0,notifyChange:!0})}),a})(e,f,t);a=r,$();const d=(e=>({signals:e.signals,id:e.id,get server(){return e.server},get router(){return e.router},get loader(){return e.loader},get cache(){return e.cache},get scheduler(){return e.scheduler},get version(){return e.version},get abort(){return e.abort},refresh:()=>g.refresh()}))(r);let m;try{m=e._collectDependencies(()=>n.call(d))}catch(e){return w(r,e),Promise.reject(e)}return((e,t)=>{if(b(t)){for(const e of y)e();y.clear();for(const r of e){const e=String(r).split(".")[0];e&&e!==f&&y.add(t.registry.subscribe(r,()=>E()))}}})(m.dependencies,r),Promise.resolve(m.value).then(e=>b(r)?(o=e,i=!1,c=null,u="ready",a=void 0,$(),o):o,e=>b(r)?(w(r,e),o):o)},cancel:e=>(m(e,{settle:!0,notifyChange:!0}),o),subscribe(e){if("function"!=typeof e)throw new TypeError("subscribe(fn) requires a function.");return d.add(e),()=>d.delete(e)},snapshot:()=>({value:o,loading:i,error:c,status:u,version:l}),_cloneSignalDeclaration:()=>t(r,n),_restore:(e={})=>(e=>!(!e||"object"!=typeof e||Array.isArray(e))&&(Object.hasOwn(e,"value")&&(Object.hasOwn(e,"loading")||Object.hasOwn(e,"error")||Object.hasOwn(e,"status")||Object.hasOwn(e,"version"))))(e)?(m(new Error(`Async signal "${f}" restored from snapshot.`)),o=e.value,i=Boolean(e.loading),c=e.error??null,u="string"==typeof e.status?e.status:(({value:e,loading:t,error:r})=>t?"loading":r?"error":void 0===e?"idle":"ready")({value:o,loading:i,error:c}),Number.isFinite(e.version)&&(l=e.version),$(),g):g.set(e),_bindRegistry(e,t){s=e,f=t;const r=()=>{h||s!==e||"idle"!==u||g.refresh()},n=s._context?.().scheduler;n?n.enqueue("async",r,{scope:f,key:`asyncSignal:${f}:initial`}):queueMicrotask(r)},_dispose(){if(!h){h=!0,(()=>{const e=s?._context?.().scheduler;e?.cancelScope?.(f)})(),m(new Error(`Async signal "${f}" disposed.`));for(const e of y)e();y.clear(),d.clear(),s=void 0}}};function w(e,t){b(e)&&(i=!1,c=t,u="error",a=void 0,$())}function b(e){return Boolean(e)&&!h&&a===e&&e.token===p&&e.registry===s&&e.id===f&&!e.abort.aborted}function m(e,t={}){const r=a,n=Boolean(r)||i;r?v(r,e):n&&(p+=1),t.settle&&n&&!h&&S(t.notifyChange)}function v(e,t,r={}){if(!e)return;const n=a===e;n&&(p+=1,a=void 0),e.abort.aborted||e.controller.abort(t),n&&r.settle&&!h&&S(r.notifyChange)}function S(e=!1){const t=void 0===o?"idle":"ready",r=i||null!==c||u!==t;i=!1,c=null,u=t,e&&r&&$()}function E(){if(h||!s)return;v(a,new Error(`Async signal "${f}" dependency changed.`));const e=s?._context?.().scheduler;e?e.enqueue("async",()=>g.refresh(),{scope:f,key:`asyncSignal:${f}:refresh`}):g.refresh()}function $(){for(const e of[...d])e(g)}return g},isAsyncSignal:t=>Boolean(t?.[e])}})(),t=(()=>{const e=new Set(["handler","component","asyncSignal","partial","route"]);function t(t={}){const r=(e=>{if("string"!=typeof e||0===e.length)throw new TypeError("registryAssets.baseUrl must be a non-empty string.");return a(e)||e.startsWith("/")||e.startsWith("./")||e.startsWith("../")?s(e):`/${o(e)}`})(t.baseUrl??"_async"),n={component:"component",handler:"handler",asyncSignal:"asyncSignal",partial:"partial",route:"route",...t.paths??{}};for(const[t,r]of Object.entries(n))if(e.has(t)&&("string"!=typeof r||0===r.length))throw new TypeError(`Registry asset path for "${t}" must be a non-empty string.`);return{baseUrl:r,paths:n}}function r(e){return Boolean(e&&"object"==typeof e&&!Array.isArray(e)&&"string"==typeof e.url)}function n(t,n,i,c){if(!e.has(t))throw new Error(`Registry type "${t}" does not support lazy descriptors.`);if(!r(i))throw new TypeError(`Registry descriptor for "${t}:${n}" requires a url.`);const{path:u,hash:l}=(e=>{const t=e.indexOf("#");return-1===t?{path:e,hash:""}:{path:e.slice(0,t),hash:e.slice(t+1)}})(i.url),f=((e,t,r)=>{if(a(t)||t.startsWith("/")||t.startsWith("./")||t.startsWith("../"))return t;const n=r.paths[e]??e;return((...e)=>{const[t,...r]=e;return[s(t),...r.map(o)].filter(Boolean).join("/")})(r.baseUrl,n,t)})(t,u,c),p=l?[l]:((e,t)=>{const r=[],n=e.split(".").filter(Boolean).at(-1),o=t.split("/").filter(Boolean).at(-1)?.replace(/\.[^.]+$/,"");for(const e of[n,o,"default"])e&&!r.includes(e)&&r.push(e);return r})(n,u);return{moduleUrl:f,exportNames:p,url:l?`${f}#${l}`:f}}function o(e){return String(e).replace(/^\/+|\/+$/g,"")}function s(e){return String(e).replace(/\/+$/g,"")}function a(e){return/^[A-Za-z][A-Za-z\d+.-]*:/.test(e)}function i(e){return!e||"object"!=typeof e||Array.isArray(e)?JSON.stringify(e):JSON.stringify(Object.keys(e).sort().map(t=>[t,e[t]]))}return{defineRegistrySnapshot:(e={})=>{if(!e||"object"!=typeof e||Array.isArray(e))throw new TypeError("defineRegistrySnapshot(snapshot) requires an object.");return e},createLazyRegistry:(e={})=>{const o=t(e.registryAssets??e.assets),s=e.importModule??(e=>import(e)),a=new Map,i=new Map;return{registryAssets:o,resolveUrl:(e,t,r)=>n(e,t,r,o),async resolve(e,t,c){if(!r(c))return c;const u=`${e}:${t}`;if(i.has(u))return i.get(u);const l=n(e,t,c,o);let f,p=a.get(l.moduleUrl);p||(p=Promise.resolve().then(()=>s(l.moduleUrl)),a.set(l.moduleUrl,p));try{f=await p}catch(r){throw a.get(l.moduleUrl)===p&&a.delete(l.moduleUrl),new Error(`Lazy ${e} "${t}" failed to import ${l.moduleUrl}: ${h=r,h instanceof Error?h.message:String(h)}`,{cause:r})}var h;const d=((e,t,r,n)=>{for(const r of t)if(r in e)return e[r];throw new Error(`Lazy ${r} "${n}" did not export ${t.map(e=>`"${e}"`).join(", ")}.`)})(f,l.exportNames,e,t);return i.set(u,d),d},inspect:()=>({registryAssets:o,modules:[...a.keys()],exports:[...i.keys()]})}},normalizeRegistryAssets:t,isLazyDescriptor:r,sameRegistryValue:(e,t)=>e===t||!(!r(e)||!r(t))&&i(e)===i(t),publicRegistryValue:(e,t)=>r(e)?{...e}:{id:t}}})(),r=(()=>{const{publicRegistryValue:e}=t,r=new Set(["signal","handler","server","partial","route","component","asyncSignal"]),n=new Set(["cache.browser","cache.server"]),o=new Set(["cache.browser.entries","cache.server.entries"]),s=new Set([...r,...n,...o]);function a(e){if(!s.has(e))throw new Error(`Unknown Async registry type "${e}".`);return e}function i(e,t){if("string"!=typeof t||0===t.length)throw new TypeError(`${e} id must be a non-empty string.`)}function c(t,r,n,s){return"server"===t&&"browser"===s.target?e(n,r):o.has(t)?n?.value:n}function u(e,t){return"cache.server.entries"===e&&"browser"===t}function l(e){const t={};for(const[r,n]of e)t[r]="function"==typeof n?.snapshot?n.snapshot():n?.value??n;return t}function f(t){const r={};for(const[n,o]of t)r[n]=e(o,n);return r}function p(e){return Object.fromEntries(e)}function h(e){const t={};for(const[r,n]of e)t[r]=n?.value;return t}function d(e){return e&&"object"==typeof e&&Object.hasOwn(e,"value")?e:{value:e}}return{createRegistryStore:function e(t={},n={}){const o=n.backing??{signal:new Map,handler:new Map,server:new Map,partial:new Map,route:new Map,component:new Map,asyncSignal:new Map,cache:{browser:new Map,server:new Map},cacheEntries:{browser:new Map,server:new Map}},s=n.target??"server",y={target:s,register(e,t,r){const n=y._map(e);if(i(e,t),n.has(t))throw new Error(`${e} "${t}" is already registered.`);return n.set(t,r),t},registerMany(e,t={}){for(const[r,n]of Object.entries(t??{}))y.register(e,r,n);return y},set(e,t,r){const n=y._map(e);return i(e,t),n.set(t,r),r},unregister:(e,t)=>y.delete(e,t),delete:(e,t)=>y._map(e).delete(t),keys:e=>u(e,s)?[]:[...y._map(e).keys()],entries(e,t={}){const r=a(e);return u(r,t.target??s)?[]:[...y._map(r)].map(([e,n])=>[e,c(r,e,n,{target:s,...t})])},has:(e,t)=>(i(e,t),!u(e,s)&&y._map(e).has(t)),get(e,t,r={}){i(e,t);const n=a(e);if(u(n,r.target??s))return;const o=y._map(n).get(t);return void 0!==o?c(n,t,o,{target:s,...r}):void 0},snapshot(e={}){const t=e.target??s;return{signal:l(o.signal),handler:f(o.handler),server:f(o.server),partial:f(o.partial),route:p(o.route),component:f(o.component),asyncSignal:f(o.asyncSignal),cache:{browser:p(o.cache.browser),server:p(o.cache.server)},entries:{browser:h(o.cacheEntries.browser),server:"browser"===t?{}:h(o.cacheEntries.server)}}},rawSnapshot:()=>({signal:Object.fromEntries(o.signal),handler:Object.fromEntries(o.handler),server:Object.fromEntries(o.server),partial:Object.fromEntries(o.partial),route:Object.fromEntries(o.route),component:Object.fromEntries(o.component),asyncSignal:Object.fromEntries(o.asyncSignal),cache:{browser:Object.fromEntries(o.cache.browser),server:Object.fromEntries(o.cache.server)}}),view:(t={})=>e(void 0,{backing:o,target:t.target??s}),_map(e){const t=a(e);if(r.has(t))return o[t];if("cache.browser"===t)return o.cache.browser;if("cache.server"===t)return o.cache.server;if("cache.browser.entries"===t)return o.cacheEntries.browser;if("cache.server.entries"===t)return o.cacheEntries.server;throw new Error(`Unknown Async registry type "${e}".`)}};return((e,t={})=>{e.registerMany("signal",t.signal),e.registerMany("handler",t.handler),e.registerMany("server",t.server),e.registerMany("partial",t.partial),e.registerMany("route",t.route),e.registerMany("component",t.component),e.registerMany("asyncSignal",t.asyncSignal),e.registerMany("cache.browser",t.cache?.browser),e.registerMany("cache.server",t.cache?.server);const r=t.entries??{};for(const[t,n]of Object.entries(r.browser??{}))e.set("cache.browser.entries",t,d(n));for(const[t,n]of Object.entries(r.server??{}))e.set("cache.server.entries",t,d(n))})(y,t),y},attachRegistryInspection:(e,t,r)=>(Object.defineProperty(e,"registry",{configurable:!0,enumerable:!0,value:t}),e.keys=()=>t.keys(r),e.entries=()=>t.entries(r),e.inspect=()=>t.entries(r),e)}})(),n=(()=>{const{attachRegistryInspection:e,createRegistryStore:t}=r,n=Symbol.for("@async/framework.cacheDefinition");function o(e={}){return{[n]:!0,kind:"cache-definition",store:e.store??"memory",ttl:e.ttl}}function s(e){if("string"!=typeof e||0===e.length)throw new TypeError("Cache id must be a non-empty string.")}function a(e){if("string"!=typeof e||0===e.length)throw new TypeError("Cache key must be a non-empty string.")}return{defineCache:o,createCacheRegistry:(r={},{now:i=()=>Date.now(),registry:c,type:u="cache.browser"}={})=>{const l=c??t(),f=l._map(u),p=l._map(`${u}.entries`),h=new Map,d=e({register(e,t=o()){s(e);const r=(e=>e?.[n]?e:o(e))(t);if(f.has(e))throw new Error(`Cache "${e}" is already registered.`);return f.set(e,r),e},registerMany(e){for(const[t,r]of Object.entries(e??{}))d.register(t,r);return d},unregister:e=>(s(e),f.delete(e)),resolve:e=>(s(e),f.get(e)),get:e=>(a(e),y(e).value),set(e,t,r={}){a(e);const n=r.ttl??((e,t)=>{if(void 0!==t)return f.get(t);if(f.has(e))return f.get(e);const r=e.split(":")[0];return f.get(r)})(e,r.cache)?.ttl;return p.set(e,{value:t,expiresAt:void 0===n?void 0:i()+n}),t},async getOrSet(e,t,r={}){if(a(e),"function"!=typeof t)throw new TypeError("cache.getOrSet(key, fn) requires a function.");const n=y(e);if(n.found)return n.value;if(h.has(e))return h.get(e);let o;return o=Promise.resolve().then(t).then(t=>(h.get(e)===o&&d.set(e,t,r),t)).finally(()=>{h.get(e)===o&&h.delete(e)}),h.set(e,o),o},delete:e=>(a(e),h.delete(e),p.delete(e)),clear(e){if(void 0===e)return p.clear(),h.clear(),d;for(const t of[...p.keys()])t.startsWith(e)&&p.delete(t);for(const t of[...h.keys()])t.startsWith(e)&&h.delete(t);return d},snapshot(){const e={};for(const[t]of p){const{found:r,value:n}=y(t);r&&void 0!==n&&(e[t]=n)}return e},restore(e={}){for(const[t,r]of Object.entries(e??{}))d.set(t,r);return d},entryKeys:()=>[...p.keys()],entryEntries:()=>l.entries(`${u}.entries`),_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))f.has(t)||d.register(t,r);return d}},l,u);return d.registerMany(r),d;function y(e){const t=p.get(e);return t?void 0!==t.expiresAt&&t.expiresAt<=i()?(p.delete(e),{found:!1,value:void 0}):{found:!0,value:t.value}:{found:!1,value:void 0}}}}})(),o=(()=>{const e=Object.freeze({async:["async:"],class:["class:"],signal:["signal:"],on:["on:"]});function t(t={}){return{async:r(t.async,e.async),class:r(t.class,e.class),signal:r(t.signal,e.signal),on:r(t.on,e.on)}}function r(e,t){return(null==e?t:Array.isArray(e)?e:[e]).map(e=>{if("string"!=typeof e||0===e.length)throw new TypeError("Attribute prefixes must be non-empty strings.");return e})}return{defineAttributeConfig:(e={})=>t(e),normalizeAttributeConfig:t,attributeName:(e,r,n)=>t(e)[r][0]+n,readAttribute:(e,r,n,o)=>{for(const s of t(r)[n]){const t=`${s}${o}`;if(e.hasAttribute?.(t))return e.getAttribute(t)}return null},matchAttribute:(e,r,n)=>{for(const o of t(r)[n])if(e.startsWith(o))return e.slice(o.length);return null}}})(),s=(()=>{const{asyncSignal:n,isAsyncSignal:o}=e,{attachRegistryInspection:s,createRegistryStore:a}=r,{createLazyRegistry:i,isLazyDescriptor:c}=t,u=Symbol.for("@async/framework.signal"),l=Symbol.for("@async/framework.computed"),f=Symbol.for("@async/framework.effect"),p=Symbol.for("@async/framework.signalRef"),h=[];function d(e){let t=e;const r=new Set;return{[u]:!0,kind:"signal",get value(){return t},set value(e){this.set(e)},set:e=>(Object.is(t,e)||(t=e,(()=>{for(const e of[...r])e(t)})()),t),update(e){return this.set(e(t))},subscribe(e){if("function"!=typeof e)throw new TypeError("subscribe(fn) requires a function.");return r.add(e),()=>r.delete(e)},snapshot:()=>t,_cloneSignalDeclaration:()=>d(t)}}function y(e){return"function"==typeof e?._cloneSignalDeclaration?e._cloneSignalDeclaration():g(e)?d("function"==typeof e.snapshot?e.snapshot():e.value):d(e)}function g(e){return Boolean(e&&"object"==typeof e&&"function"==typeof e.subscribe)}function w(e,t){let r=e;for(const e of t){if(null==r)return;r=r[e]}return r}function b(e,t,r){const n=m(e,t[0]);let o=n;for(let e=0;e<t.length-1;e+=1){const r=t[e],n=t[e+1];o[r]=m(o[r],n),o=o[r]}return o[t.at(-1)]=r,n}function m(e,t){return Array.isArray(e)?[...e]:e&&"object"==typeof e?{...e}:(r=t,String(Number(r))===String(r)?[]:{});var r}function v(e,t){const r=e.get(t);if(!r)throw new Error(`Signal "${t}" is not registered.`);return r}function S(e){if("string"!=typeof e||0===e.length)throw new TypeError("Signal id must be a non-empty string.")}return{createSignal:d,computed:function e(t){if("function"!=typeof t)throw new TypeError("computed(fn) requires a function.");const r=d(void 0);return{[l]:!0,kind:"computed",get value(){return r.value},set:e=>r.set(e),update:e=>r.update(e),subscribe:e=>r.subscribe(e),snapshot:()=>r.snapshot(),_cloneSignalDeclaration:()=>e(t),_bindRegistry:(e,n)=>e.effect(()=>{r.set(t.call({signals:e,id:n,server:e._context?.().server,router:e._context?.().router,loader:e._context?.().loader,cache:e._context?.().cache,scheduler:e._context?.().scheduler}))})}},effect:function e(t){if("function"!=typeof t)throw new TypeError("effect(fn) requires a function.");return{[f]:!0,kind:"effect",fn:t,_cloneSignalDeclaration:()=>e(t),_bindRegistry:e=>e.effect(t)}},createSignalRegistry:function(e={},t={}){const r=t.registry??a(),u=t.type??"signal",l=r._map(u),f=r._map("asyncSignal"),m=t.lazyRegistry??i(t),E=new Map,$={},j=new Set;let A=0,O=0;for(const e of l.keys())if(f.has(e))throw new Error(`Signal "${e}" is already registered.`);const R=s({register(e,t){if(S(e),l.has(e)||f.has(e))throw new Error(`Signal "${e}" is already registered.`);const r=(e=>g(e)?e:d(e))(t);return l.set(e,r),k(e,r),R.ref(e)},registerMany(e){for(const[t,r]of Object.entries(e??{}))R.register(t,r);return R},unregister(e){S(e);const t=l.has(e),r=f.has(e);return!(!t&&!r||(t&&(E.get(e)?.(),E.delete(e),l.get(e)?._dispose?.(),l.delete(e),j.delete(e)),f.delete(e),0))},ensure:(e,t)=>(S(e),T(e),l.has(e)||R.register(e,d(t)),R.ref(e)),has:e=>l.has(e)||f.has(e),get(e){const t=_(e);return(e=>{const t=h.at(-1);t&&t.add(e)})(t.path),((e,t)=>{if(o(e)&&t[0]?.startsWith("$")){const r=((e,t)=>{switch(t){case"$value":return e.value;case"$loading":return e.loading;case"$error":return e.error;case"$status":return e.status;case"$version":return e.version;default:return}})(e,t[0]);return w(r,t.slice(1))}return w(e.value,t)})(v(l,t.id),t.parts)},set(e,t){const r=_(e),n=v(l,r.id);if(0===r.parts.length)return n.set(t);const o=b(n.value,r.parts,t);return n.set(o),t},update(e,t){if("function"!=typeof t)throw new TypeError("update(path, fn) requires a function.");return R.set(e,t(R.get(e)))},ref:e=>(S(e),T(e),((e,t)=>({[p]:!0,kind:"signal-ref",id:t,get value(){return e.get(t)},set value(r){e.set(t,r)},get loading(){return e._entry(t).loading??!1},get error(){return e._entry(t).error??null},get status(){return e._entry(t).status??"ready"},get version(){return e._entry(t).version??0},get:()=>e.get(t),set:r=>e.set(t,r),update:r=>e.update(t,r),subscribe:r=>e.subscribe(t,r),refresh(){const r=e._entry(t);if("function"!=typeof r.refresh)throw new Error(`Signal "${t}" cannot refresh.`);return r.refresh()},cancel(r){const n=e._entry(t);if("function"!=typeof n.cancel)throw new Error(`Signal "${t}" cannot cancel.`);return n.cancel(r)},toString:()=>t,[Symbol.toPrimitive]:()=>t}))(R,e)),subscribe(e,t,r={}){if("function"!=typeof t)throw new TypeError("subscribe(path, fn) requires a function.");const n=_(e),o=v(l,n.id),s=++A;return o.subscribe(()=>{((e,t={})=>{const r=t.scheduler;if(!r||"sync"===t.phase)return e();r.enqueue(t.phase??"effect",e,{scope:t.scope,key:t.key})})(()=>t(R.get(n.path),{id:n.id,path:n.path,signal:o}),{...r,key:r.key??`signal:${n.path}:${s}`})})},snapshot(){const e={};for(const[t,r]of l)e[t]="function"==typeof r.snapshot?r.snapshot():r.value;return e},asyncSignal:(e,t)=>(R.register(e,n(e,t)),R.ref(e)),effect(e,t={}){let r,n=[],o=!1;const s=t.scheduler,a=++O,i=()=>{if(o)return;"function"==typeof r&&r();for(const e of n)e();n=[];const t=R._collectDependencies(()=>e.call({signals:R,server:$.server,router:$.router,loader:$.loader,cache:$.cache,scheduler:$.scheduler}));r=t.value,n=t.dependencies.map(e=>R.subscribe(e,c))},c=()=>{s?s.enqueue(t.phase??"effect",i,{scope:t.scope,key:t.key??`effect:${a}`}):i()};return i(),()=>{o=!0,"function"==typeof r&&r();for(const e of n)e()}},destroy(){for(const e of E.values())e();E.clear();for(const e of l.values())e._dispose?.();l.clear()},_collectDependencies(e){const t=new Set;h.push(t);try{return{value:e(),dependencies:[...t]}}finally{h.pop()}},_entry:e=>(T(e),v(l,e)),_setPath(e,t){const r=(e=>{if("string"!=typeof e||0===e.length)throw new TypeError("Signal path must be a non-empty string.");const[t,...r]=e.split(".");return{id:t,parts:r,path:e}})(e);l.has(r.id)||(f.has(r.id)?T(r.id):R.register(r.id,d(0===r.parts.length?t:{})));const n=v(l,r.id);if(0===r.parts.length)return n.set(t);const o=b(n.value,r.parts,t);return n.set(o),t},_setContext:(e={})=>(Object.assign($,e),R),_context:()=>$,_adoptMany(e={}){for(const[t,r]of Object.entries(e??{})){if(!l.has(t)){if(f.has(t))throw new Error(`Signal "${t}" is already registered.`);const e=y(r);l.set(t,e),k(t,e);continue}k(t,l.get(t))}return R}},r,u);for(const[e,t]of l)k(e,t);return R.registerMany(e),R;function k(e,t){if(j.has(e)||"function"!=typeof t?._bindRegistry)return;j.add(e);const r=t._bindRegistry(R,e);"function"==typeof r&&E.set(e,r)}function _(e){if("string"!=typeof e||0===e.length)throw new TypeError("Signal path must be a non-empty string.");const t=e.split(".");for(let r=t.length;r>0;r-=1){const n=t.slice(0,r).join(".");if(l.has(n)||f.has(n))return T(n),{id:n,parts:t.slice(r),path:e}}const[r,...n]=t;return{id:r,parts:n,path:e}}function T(e){if(l.has(e)||!f.has(e))return;const t=f.get(e);if(!c(t)&&"function"!=typeof t)throw new TypeError(`Async signal "${e}" must be a function or lazy descriptor.`);const r=n(e,async function(...r){const n=await m.resolve("asyncSignal",e,t);if("function"!=typeof n)throw new TypeError(`Async signal "${e}" did not resolve to a function.`);return n.apply(this,r)});l.set(e,r),k(e,r)}},cloneSignalDeclaration:y,isSignalRef:e=>Boolean(e?.[p]),signal:d}})(),a=(()=>{const{isSignalRef:e}=s,{attributeName:t,matchAttribute:r,normalizeAttributeConfig:n}=o,a=Symbol.for("@async/framework.template"),i=Symbol.for("@async/framework.rawHtml");function c(e){return Boolean(e?.[a])}function u(e,t={}){if(c(e)){const r=p(t);let n="";for(let t=0;t<e.strings.length;t+=1)n+=e.strings[t],t<e.values.length&&(n+=l(e.values[t],{...r,attribute:h(e.strings[t])}));return n}return l(e,p(t))}function l(n,o=p()){return n?.[i]?n.html:c(n)?u(n,o):o.attribute?((n,o)=>{const s=r(o.attribute.name,o.attributes,"signal"),a=r(o.attribute.name,o.attributes,"class"),i=((t,r)=>e(t)?t.id:"string"==typeof t&&r.signals?.has?.(t)?t:null)(n,o);if("value"===o.attribute.name&&i){const r=((t,r)=>e(t)?t.value:"string"==typeof t&&r.signals?.has?.(t)?r.signals.get(t):t)(n,o),s=t(o.attributes,"signal","value");return`${d(r)}${o.attribute.quote} ${s}=${o.attribute.quote}${d(i)}`}if(null!=s||null!=a){if(i)return d(i);if((e=>Boolean(e&&"object"==typeof e))(n))return d(((e,t)=>"function"!=typeof t.bind?e:t.bind(e))(n,o))}return f(n,o)})(n,o):Array.isArray(n)?n.map(e=>l(e,o)).join(""):e(n)?d(n.value):null==n||!1===n?"":d(n)}function f(t,r){return Array.isArray(t)?t.map(e=>f(e,r)).join(""):e(t)?d(t.value):null==t||!1===t?"":d(t)}function p(e={}){return{...e,attributes:n(e.attributes)}}function h(e){const t=e.match(/(?:^|[\s<])([^\s"'=<>`]+)\s*=\s*(["'])$/);return t?{name:t[1],quote:t[2]}:null}function d(e){return String(e).replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}return{html:(e,...t)=>({[a]:!0,strings:e,values:t}),isTemplateResult:c,rawHtml:e=>({[i]:!0,html:String(e??"")}),renderTemplate:u,escapeHtml:d}})(),i=(()=>{const{attributeName:e}=o,{escapeHtml:n,rawHtml:s,renderTemplate:i}=a,{attachRegistryInspection:c,createRegistryStore:u}=r,{createLazyRegistry:l,isLazyDescriptor:f}=t,p=Symbol.for("@async/framework.component");let h=0;function d(e){if("function"!=typeof e)throw new TypeError("defineComponent(fn) requires a function.");return Object.defineProperty(e,p,{configurable:!0,value:!0}),e}function y(e){return Boolean(e?.[p])}function g(e,t){if("string"!=typeof t||0===t.length)throw new TypeError("Scoped signal or handler name must be a non-empty string.");return`${e}.${t}`}function w(e){return e.displayName||e.name||"anonymous"}return{defineComponent:d,createComponentRegistry:function(e={},t={}){const r=t.registry??u(),n=t.type??"component",o=r._map(n),s=t.lazyRegistry??l(t),a=new Map,i=c({register(e,t){if("string"!=typeof e||0===e.length)throw new TypeError("Component id must be a non-empty string.");if(!y(t)&&"function"!=typeof t&&!f(t))throw new TypeError(`Component "${e}" must be a component function.`);if(o.has(e))throw new Error(`Component "${e}" is already registered.`);return o.set(e,t),e},registerMany(e){for(const[t,r]of Object.entries(e??{}))i.register(t,r);return i},unregister(e){if("string"!=typeof e||0===e.length)throw new TypeError("Component id must be a non-empty string.");return a.delete(e),o.delete(e)},resolve(e){if("string"!=typeof e||0===e.length)throw new TypeError("Component id must be a non-empty string.");const t=o.get(e);return f(t)?(a.has(e)||a.set(e,async function(...r){const o=await s.resolve(n,e,t);if("function"!=typeof o)throw new TypeError(`Component "${e}" did not resolve to a function.`);return o.apply(this,r)}),a.get(e)):t},_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))o.has(t)||i.register(t,r);return i}},r,n);return i.registerMany(e),i},isComponent:y,renderComponent:function t(r,o={},a,c="component"){if(!y(r)&&"function"!=typeof r)throw new TypeError("renderComponent(Component) requires a component function.");const u=`${c}.${w(r)}.${++h}`,l=[],f=[],p=[],d=[],b=[],m={attributes:a.attributes,signals:a.signals,bind(e){const t=a.loader?._registerBinding?.(e);if(!t)throw new Error("Inline template bindings require a Loader.");return b.push(t),t}},v=e=>i(e,m),S=(({runtime:r,scope:o,cleanups:a,attachHooks:i,visibleHooks:c,destroyHooks:u,renderScopedTemplate:l})=>{const{signals:f,handlers:p,loader:h,server:d,router:y,cache:w,scheduler:b}=r,m=new WeakMap;let v=0,S=0;const E={scope:o,signals:f,handlers:p,loader:h,server:d,router:y,cache:w,scheduler:b,signal(e,t){if(1===arguments.length){const t=g(o,"signal."+ ++S),r=f.ensure(t,e);return a.push(()=>f.unregister?.(t)),r}const r=g(o,e),n=!f.has(r),s=f.ensure(r,t);return n&&a.push(()=>f.unregister?.(r)),s},computed(e,t){const r=g(o,e),n=!f.has(r),s=f.ensure(r,void 0);n&&a.push(()=>f.unregister?.(r));const i=f.effect(()=>{f.set(r,t.call(E))});return a.push(i),s},asyncSignal(e,t){const r=g(o,e),n=!f.has(r);return f.has(r)||f.asyncSignal(r,t),n&&a.push(()=>f.unregister?.(r)),f.ref(r)},effect(e){const t=f.effect(()=>e.call(E),{scheduler:b,phase:"effect",scope:o});return a.push(t),t},handler(e,t){if("function"==typeof e&&void 0===t){const t=e;if(m.has(t))return m.get(t);const r=$("handler."+ ++v,t);return m.set(t,r),r}if("function"!=typeof t)throw new TypeError("this.handler(name, fn) or this.handler(fn) requires a function.");return $(e,t)},render(e,n={}){const u=t(e,n,r,o);return a.push(u.cleanup),i.push(e=>u.attach(e)),c.push(e=>u.visible(e,h._observeVisible)),s(u.html)},suspense(t,o){const a=t?.id;if(!a)throw new TypeError("this.suspense(signalRef, views) requires a signal ref.");const i=(e=>{const t="function"==typeof e?{ready:e}:e;if(!t||"object"!=typeof t||Array.isArray(t))throw new TypeError("this.suspense(signalRef, views) requires views to be a function or object.");for(const e of["loading","ready","error"])if(Object.hasOwn(t,e)&&void 0!==t[e]&&"function"!=typeof t[e])throw new TypeError(`this.suspense(signalRef, views) view "${e}" must be a function.`);return t})(o),c=[];for(const o of["loading","ready","error"]){const s=i[o];if(!s)continue;const u=e(r.attributes,"async",o),f=l(s.call(E,t));c.push(`<template ${u}="${n(a)}">${f}</template>`)}return s(c.join(""))},on(e,t){if("string"!=typeof e||0===e.length)throw new TypeError("Component lifecycle event must be a non-empty string.");if("function"!=typeof t)throw new TypeError(`Component lifecycle "${e}" requires a function.`);const r="mount"===e?"attach":e;if("attach"!==r)if("visible"!==r){if("destroy"!==r)throw new Error(`Unsupported component lifecycle event "${e}".`);u.push(()=>t.call(E))}else c.push(e=>t.call(E,e));else i.push(e=>t.call(E,e))},onMount(e){E.on("attach",e)},onVisible(e){E.on("visible",e)}};return E;function $(e,t){const r=g(o,e);return p.register(r,e=>t.call({...E,...e},e)),a.push(()=>p.unregister?.(r)),r}})({runtime:a,scope:u,cleanups:l,attachHooks:f,visibleHooks:p,destroyHooks:d,renderScopedTemplate:v}),E=r.call(S,o);if(E&&"function"==typeof E.then)throw new TypeError(`Component "${w(r)}" returned a Promise. Async components are not supported by synchronous renderComponent(). Use an async partial or handler instead.`);return{html:v(E),attach(e){for(let t=0;t<f.length;t+=1){const r=f[t];a.scheduler?.enqueue("lifecycle",()=>{const t=r(e);"function"==typeof t&&l.push(t)},{scope:u,key:`attach:${t}`})??$(r,e)}},mount(e){this.attach(e)},visible(e,t){if(0===p.length)return;const r=t(e,()=>{for(let t=0;t<p.length;t+=1){const r=p[t];a.scheduler?.enqueue("lifecycle",()=>{const t=r(e);"function"==typeof t&&l.push(t)},{scope:u,key:`visible:${t}`})??j(r,e)}});"function"==typeof r&&l.push(r)},cleanup(){for(;d.length>0;)d.pop()?.();for(a.scheduler?.markScopeDestroyed(u);l.length>0;)l.pop()?.();for(;b.length>0;)a.loader?._releaseBinding?.(b.pop())}};function $(e,t){const r=e(t);"function"==typeof r&&l.push(r)}function j(e,t){const r=e(t);"function"==typeof r&&l.push(r)}},component:d}})(),c=(()=>{const e=new Set(["value","signals","boundary","html","redirect","error"]),t=Symbol.for("@async/framework.appliedServerResult"),r=new WeakSet;async function n(e,n={}){if(!d(e))return e;if(e[t]||r.has(e))return e;if(e.error)throw s(e),(o=e.error)instanceof Error?o:o&&"object"==typeof o&&"string"==typeof o.message?Object.assign(new Error(o.message),o):new Error(String(o));var o;if(e.signals&&n.signals)for(const[t,r]of Object.entries(e.signals))n.signals.set?.(t,r);return e.cache?.browser&&n.cache?.restore&&n.cache.restore(e.cache.browser),e.boundary&&Object.hasOwn(e,"html")&&n.loader?.swap?.(e.boundary,e.html),e.redirect&&await(n.router?.navigate?.(e.redirect)),s(e),e}function o(e){return d(e)&&Object.hasOwn(e,"value")?e.value:e}function s(e){return Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:!0}),e}function a(e={}){const t=f(e);if(t)return p(new t.ownerDocument.defaultView.FormData(t));const r=e.element??e.el??e.event?.target;return r?{value:"value"in r?r.value:void 0,checked:"checked"in r?r.checked:void 0,dataset:r.dataset?{...r.dataset}:{}}:{}}function i(e,t={},r=()=>({})){const s=new Map;return function a(c){const u=c.join(".");if(s.has(u))return s.get(u);const l=new Proxy(async(...t)=>{if(0===c.length)throw new Error("Server namespace is not directly callable.");const s=r()??{},a=await e(c.join("."),t,s);return await n(a,s),o(a)},{get(n,o){if("then"!==o)return o in n?n[o]:0===c.length&&"_withContext"===o?(n={})=>i(e,t,()=>({...r()??{},...n})):0===c.length&&"run"===o&&"function"==typeof t.run?(e,n=[],o={})=>t.run(e,n,{...r()??{},...o}):0===c.length&&Object.hasOwn(t,o)?t[o]:o===Symbol.toStringTag?"AsyncServerNamespace":"toString"===o?()=>0===c.length?"server":`server.${c.join(".")}`:a([...c,String(o)])}});return s.set(u,l),l}([])}function c(e=[],t){const r={};for(const n of e)r[n]=u(t,n);return r}function u(e,t){if(!e||"function"!=typeof e.get)throw new Error(`Signal "${t}" cannot be read without a signal registry.`);return e.get(t)}function l(e,t,{forServer:r}={}){if(("$event"===e||"$el"===e)&&r)throw new Error(`${e} cannot be passed to a server command.`);if("$event"===e)return t.event;if("$el"===e)return t.element??t.el;if("$value"===e){const e=t.element??t.el??t.event?.target;return e?.value}if("$checked"===e){const e=t.element??t.el??t.event?.target;return e?.checked}if("$form"===e){const e=f(t);return e?p(new e.ownerDocument.defaultView.FormData(e)):{}}if("$dataset"===e){const e=t.element??t.el??t.event?.target;return e?.dataset?{...e.dataset}:{}}throw new Error(`Event local "${e}" is not supported.`)}function f(e){const t=e.event,r=e.element??e.el??t?.target;return"FORM"===r?.tagName?r:"submit"===t?.type&&"FORM"===t.target?.tagName?t.target:"submit"===t?.type&&r?.form?r.form:null}function p(e){const t={};for(const[r,n]of e.entries())Object.hasOwn(t,r)?t[r]=Array.isArray(t[r])?[...t[r],n]:[t[r],n]:t[r]=n;return t}function h(e,t=new Set){if("bigint"==typeof e)throw new Error("Server proxy JSON transport does not support BigInt values.");if(null==e||"object"!=typeof e)return;if(t.has(e))throw new Error("Server proxy JSON transport does not support circular values.");t.add(e);const r=Object.prototype.toString.call(e);if("[object File]"===r||"[object Blob]"===r||"[object FormData]"===r)throw new Error("Server proxy JSON transport does not support File, Blob, or FormData values yet.");if(((e,t=Object.prototype.toString.call(e))=>"[object URLSearchParams]"===t||"[object Headers]"===t||"[object Request]"===t||"[object Response]"===t||"[object ReadableStream]"===t||"[object ArrayBuffer]"===t||ArrayBuffer.isView(e))(e,r))throw new Error("Server proxy JSON transport does not support URLSearchParams, Headers, Request, Response, ReadableStream, ArrayBuffer, or typed array values yet.");if(Array.isArray(e)){for(const r of e)h(r,t);t.delete(e)}else{for(const r of Object.values(e))h(r,t);t.delete(e)}}function d(t){return!(!t||"object"!=typeof t||Array.isArray(t))&&Object.keys(t).some(t=>e.has(t))}function y(e){if("string"!=typeof e||0===e.length)throw new TypeError("Server function id must be a non-empty string.")}return{createServerProxy:({endpoint:e="/__async/server",transport:t,signals:s,loader:u,router:l,cache:f,scheduler:p,headers:d={}}={})=>{if("function"!=typeof t)throw new TypeError("createServerProxy(...) requires a transport function.");const g={signals:s,loader:u,router:l,cache:f,scheduler:p};async function w(s,i=[],u={}){y(s);const l={...g,...u},f={args:i,input:u.input??a(l),signals:u.signalValues??c(u.signalPaths,l.signals)};h(f);const p=await t(((e,t)=>`${String(e).replace(/\/$/,"")}/${encodeURIComponent(t)}`)(e,s),{method:"POST",headers:{"content-type":"application/json",...d},body:JSON.stringify(f),signal:u.abort});if(((e,t)=>{if(!t||"object"!=typeof t)throw new Error(`Server function "${e}" transport returned an invalid response: expected a fetch Response-like object.`);if("boolean"!=typeof t.ok)throw new Error(`Server function "${e}" transport returned an invalid response: missing boolean ok.`);if(!t.headers||"function"!=typeof t.headers.get)throw new Error(`Server function "${e}" transport returned an invalid response: missing headers.get(name).`)})(s,p),!p.ok)throw new Error(`Server function "${s}" failed with ${p.status}.`);const w=await(async(e,t)=>{if(204===t.status)return{value:void 0};if((t.headers.get("content-type")??"").includes("application/json")){if("function"!=typeof t.json)throw new Error(`Server function "${e}" transport returned an invalid response: missing json().`);try{return await t.json()}catch(t){throw new Error(`Server function "${e}" returned invalid JSON: ${r=t,r instanceof Error?r.message:String(r)}`,{cause:t})}}var r;if("function"!=typeof t.text)throw new Error(`Server function "${e}" transport returned an invalid response: missing text().`);return{value:await t.text()}})(s,p);return await n(w,l),(b=o(w))&&"object"==typeof b&&r.add(b),b;var b}return i(w,{run:w,_setContext(e={}){Object.assign(g,e)}},()=>g)},resolveServerCommandArguments:(e,t={})=>{const r=[],n={},o=[];for(const s of e){if("local"===s.type){r.push(l(s.name,t,{forServer:!0}));continue}const e=u(t.signals,s.path);r.push(e),n[s.path]=e,o.push(s.path)}return{args:r,signalValues:n,signalPaths:o}},applyServerResult:n,unwrapServerResult:o,defaultInput:a,createServerNamespace:i,createSignalReader:e=>e&&"function"!=typeof e.get?{get:t=>((e,t)=>String(t).split(".").reduce((e,t)=>e?.[t],e))(e,t),snapshot:()=>({...e})}:e,assertServerId:y}})(),u=(()=>{const{applyServerResult:e,defaultInput:n,resolveServerCommandArguments:o,unwrapServerResult:s}=c,{attachRegistryInspection:a,createRegistryStore:i}=r,{createLazyRegistry:u,isLazyDescriptor:l}=t,f=new Set(["prevent","preventDefault","stopPropagation","stopImmediatePropagation"]),p={prevent:h,preventDefault:h,stopPropagation(){this.event?.stopPropagation?.()},stopImmediatePropagation(){this.event?.stopImmediatePropagation?.()}};function h(){this.event?.preventDefault?.()}function d(e){if("string"!=typeof e||0===e.trim().length)throw new TypeError("Handler ref must be a non-empty string.");return e.split(";").map(e=>e.trim()).filter(Boolean).map(g)}function y(e){if("string"!=typeof e||0===e.length)throw new TypeError("Handler id must be a non-empty string.")}function g(e){if(e.startsWith("server."))return(e=>{const t=e.indexOf("(");if(-1===t||!e.endsWith(")"))throw new Error(`Server command "${e}" must be called with parentheses.`);const r=e.slice(7,t).trim();if(!(e=>/^[^.\s();]+(?:\.[^.\s();]+)*$/.test(e))(r))throw new Error(`Server command "${e}" has an invalid function id.`);return{type:"server",id:r,args:(n=e.slice(t+1,-1),0===n.trim().length?[]:n.split(",").map(e=>e.trim()).filter(Boolean).map(w))};var n})(e);if(e.includes("(")||e.includes(")"))throw new Error(`Command "${e}" is not supported.`);return{type:"handler",id:e}}function w(e){if(!/^[^\s,();]+$/.test(e))throw new Error(`Argument "${e}" is not supported.`);return e.startsWith("$")?{type:"local",name:e}:{type:"signal",path:e}}return{createHandlerRegistry:function(t={},r={}){const c=r.registry??i(),h=r.type??"handler",g=c._map(h),w=r.lazyRegistry??u(r),b=new Map,m=a({register(e,t){if(y(e),"function"!=typeof t&&!l(t))throw new TypeError(`Handler "${e}" must be a function.`);if(g.has(e))throw new Error(`Handler "${e}" is already registered.`);return g.set(e,t),e},registerMany(e){for(const[t,r]of Object.entries(e??{}))m.register(t,r);return m},unregister:e=>(y(e),b.delete(e),g.delete(e)),resolve(e){y(e);const t=g.get(e);return l(t)?(b.has(e)||b.set(e,async function(...r){const n=await w.resolve(h,e,t);if("function"!=typeof n)throw new TypeError(`Handler "${e}" did not resolve to a function.`);return n.apply(this,r)}),b.get(e)):t},async run(t,r={}){const a=d(t),i=[];let c=!1;const u={...r,handlers:m,input:r.input??n(r),stop(){c=!0}};for(const t of a){if(c)break;if("server"===t.type){if(!u.server||"function"!=typeof u.server.run)throw new Error(`Server command "${t.id}" cannot run without a server registry.`);const r=o(t.args,u),n=await u.server.run(t.id,r.args,{...u,signalPaths:r.signalPaths,signalValues:r.signalValues});await e(n,u),i.push(s(n));continue}const r=m.resolve(t.id);if(!r)throw new Error(`Handler "${t.id}" is not registered.`);const n=await r.call(u,u);f.has(t.id)&&r===p[t.id]||i.push(n)}return i},_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))g.has(t)||m.register(t,r);return m}},c,h);return((e,t)=>{for(const[r,n]of Object.entries(p))if(t.has(r)){if(t.get(r)!==n)throw new Error(`Handler "${r}" is already registered.`)}else e.register(r,n)})(m,g),m.registerMany(t),m},parseHandlerRef:d,isHandlerToken:e=>f.has(e)}})(),l=(()=>{const e=["binding","lifecycle","effect","async","post"];function t(e){return"object"==typeof e&&null!==e||"function"==typeof e}function r(){}return{createScheduler:(n={})=>{const o=[...n.phases??e],s=new Map(o.map(e=>[e,[]])),a=new Map,i=new WeakSet,c=new Set,u=new WeakMap,l="function"==typeof n.onError?n.onError:void 0,f=n.maxDepth??100,p=n.strategy??"microtask";let h=!1,d=!1,y=!1,g=0,w=0,b=0;const m={strategy:p,phases:o,batch(e){if("function"!=typeof e)throw new TypeError("scheduler.batch(fn) requires a function.");j(),g+=1;let t=!1;try{const r=e();return r&&"function"==typeof r.then?(t=!0,r.finally(()=>{g-=1,v()})):r}finally{!t&&g>0&&(g-=1,v())}},enqueue(e,t,n={}){if(j(),(e=>{if(!s.has(e))throw new Error(`Unknown scheduler phase "${e}".`)})(e),"function"!=typeof t)throw new TypeError("scheduler.enqueue(phase, fn) requires a function.");const o=n.scope;if(A(o))return r;const i=void 0===n.key?void 0:`${e}:${(e=>void 0===e?"global":"object"==typeof e&&null!==e||"function"==typeof e?(u.has(e)||u.set(e,"scope:"+ ++b),u.get(e)):String(e))(o)}:${String(n.key)}`;if(i&&a.has(i))return a.get(i).cancel;const c={id:++w,phase:e,fn:t,scope:o,boundary:n.boundary,key:i,canceled:!1,cancel(){c.canceled=!0,c.key&&a.delete(c.key)}};return s.get(e).push(c),c.key&&a.set(c.key,c),v(),c.cancel},afterFlush:(e,t={})=>m.enqueue("post",e,t),async flush(){if(j(),d)return;y=!1,d=!0;let e=0;try{for(;E();){if(e+=1,e>f)throw new Error(`Scheduler exceeded maxDepth ${f}.`);for(const e of o)await S(e)}}finally{d=!1,E()&&v()}},async flushScope(e){if(j(),d)return;y=!1,d=!0;let t=0;try{for(;$(e);){if(t+=1,t>f)throw new Error(`Scheduler exceeded maxDepth ${f}.`);for(const t of o)await S(t,e)}}finally{d=!1,E()&&v()}},cancelScope(e){if(void 0===e)return m;for(const t of s.values())for(const r of t)r.scope===e&&r.cancel();return m},markScopeDestroyed:e=>(void 0!==e&&(t(e)?i.add(e):c.add(e),m.cancelScope(e)),m),reviveScope:e=>(void 0!==e&&(t(e)?i.delete(e):c.delete(e)),m),isScopeDestroyed:e=>A(e),inspect(){const e={};for(const[t,r]of s)e[t]=r.filter(e=>!e.canceled).length;return{strategy:p,phases:[...o],pending:e,scopesDestroyed:c.size,flushing:d,scheduled:y}},destroy(){h=!0;for(const e of s.values()){for(const t of e)t.cancel();e.length=0}a.clear(),c.clear()}};return m;function v(){var e;"manual"===p||h||d||g>0||y||(y=!0,e=()=>{h||m.flush()},"function"!=typeof queueMicrotask?Promise.resolve().then(e):queueMicrotask(e))}async function S(e,t){const r=s.get(e),n=[],o=[];for(const e of r.splice(0))e.canceled||(void 0===t||e.scope===t?o.push(e):n.push(e));r.push(...n);for(const e of o)if(e.key&&a.delete(e.key),!e.canceled&&!A(e.scope))try{await e.fn()}catch(t){if(!l)throw t;l(t,e)}}function E(){for(const e of s.values())if(e.some(e=>!e.canceled))return!0;return!1}function $(e){for(const t of s.values())if(t.some(t=>!t.canceled&&t.scope===e))return!0;return!1}function j(){if(h)throw new Error("Scheduler has been destroyed.")}function A(e){return void 0!==e&&(t(e)?i.has(e):c.has(e))}}}})(),f=(()=>{const{renderComponent:e}=i,{createHandlerRegistry:t}=u,{createScheduler:r}=l,{createSignalRegistry:n,isSignalRef:a}=s,{matchAttribute:c,normalizeAttributeConfig:f,readAttribute:p}=o,h="__async:inline:";function d({root:o,signals:s,handlers:i,server:u,router:l,cache:d,attributes:E,scheduler:R}={}){const T=o?.ownerDocument??o??globalThis.document,q=o??T,C=s??n(),M=i??t(),x=R??r(),D=!R,L=f(E),B=new Set,P=new WeakMap,N=new WeakMap,z=new WeakSet,H=new WeakSet,U=new WeakMap,W=new WeakSet,V=new Map,I=new WeakMap;let F=0,J=!1;const K={root:q,signals:C,handlers:M,server:u,router:l,cache:d,scheduler:x,attributes:L,start:()=>(ne(),K.scan(q),K),scan:(e=q)=>(ne(),(e=>{for(const t of A(e))x.reviveScope?.(t)})(e),(e=>{for(const t of A(e))for(const e of t.getAttributeNames?.()??[]){const r=c(e,L,"signal");if(r){if("text"===r){const r=t.getAttribute(e);G(t,`text:${r}`,r,e=>{t.textContent=e??""});continue}if("value"===r){const r=t.getAttribute(e);G(t,`value:${r}`,r,e=>{"value"in t&&t.value!==String(e??"")?t.value=e??"":"value"in t||t.setAttribute("value",e??"")}),Q(t,r);continue}if(r.startsWith("attr:")){const n=r.slice(5),o=t.getAttribute(e);G(t,`attr:${n}:${o}`,o,e=>$(t,n,e));continue}if(r.startsWith("prop:")){const n=r.slice(5),o=t.getAttribute(e);G(t,`prop:${n}:${o}`,o,e=>j(t,n,e));continue}if(r.startsWith("class:")){const n=r.slice(6),o=t.getAttribute(e);""===n||"{}"===n?Y(t,n,o):G(t,`class:${n}:${o}`,o,e=>{t.classList.toggle(n,Boolean(e))});continue}if("class"===r){const r=t.getAttribute(e);Y(t,"{}",r)}}}})(e),(e=>{for(const t of A(e))for(const e of t.getAttributeNames?.()??[]){const r=c(e,L,"class");null!=r&&Y(t,r,t.getAttribute(e))}})(e),(e=>{for(const t of A(e))if("function"==typeof t.getAttributeNames)for(const e of t.getAttributeNames()){const r=c(e,L,"on");r&&"attach"!==r&&"mount"!==r&&"visible"!==r&&Z(t,r,t.getAttribute(e))}})(e),(e=>{for(const t of A(e)){if(W.has(t))continue;const e=O(t,L);if(null!=e){if(!U.has(t)){const r=S(t,e,L);if(0===Object.keys(r).length||!C.has(e))continue;const n={id:e,templates:r,cleanup:C.subscribe(`${e}.$status`,()=>{x.enqueue("binding",()=>X(t),{scope:t,key:`boundary:${e}`})})};U.set(t,n),oe(n.cleanup,t)}X(t)}}})(e),(e=>{for(const t of A(e)){const e=ee(t,["attach","mount"]);if(0!==e.length&&!z.has(t)){z.add(t);for(const r of e)ue(t,()=>te(t,r),`attach:${r}`)}}for(const t of A(e)){const e=p(t,L,"on","visible");null!=e&&(H.has(t)||(H.add(t),oe(re(t,()=>ue(t,()=>te(t,e),`visible:${e}`)),t)))}})(e),K),swap(e,t){ne();const r=((e,t,r)=>{for(const n of A(e))if(O(n,r)===String(t))return n;return null})(q,e,L);if(!r)throw new Error(`Boundary "${e}" was not found.`);return ae(r),r.replaceChildren(k(t,T)),K.scan(r),r},mount(t,r,n={}){ne();const o=e(r,n,{signals:C,handlers:M,loader:K,server:K.server,router:K.router,cache:K.cache,scheduler:x,attributes:L});return ae(t),t.replaceChildren(k(o.html,t.ownerDocument)),K.scan(t),o.mount(t),o.visible(t,K._observeVisible),oe(o.cleanup,t,"children"),o},destroy(){if(!J){J=!0,(e=>{for(const t of A(e))x.markScopeDestroyed(t)})(q);for(const e of[...B])se(e);B.clear(),D&&x.destroy()}},_observeVisible:(e,t)=>re(e,t),_registerBinding(e){const t=`${h}${++F}`;return V.set(t,e),t},_releaseBinding(e){V.delete(e)}};function Z(e,t,r){const n=`${t}:${r}`,o=P.get(e)??new Set;if(o.has(n))return;o.add(n),P.set(e,o);const s=async t=>{try{await x.batch(()=>M.run(r,{signals:C,handlers:M,loader:K,server:K.server,router:K.router,cache:K.cache,scheduler:x,event:t,element:e,el:e,root:q}))}catch(t){_(e,t)}};e.addEventListener(t,s),oe(()=>e.removeEventListener(t,s),e)}function Y(e,t,r){if(""===t||"{}"===t){const t=m(e);let n=new Set;return void G(e,`class:{}:${r}`,r,r=>{const o=y(r),s=m(e);for(const e of n)o.has(e)||t.has(e)||s.delete(e);for(const e of o)s.add(e);v(e,s),n=o},{rawInline:!0})}G(e,`class:${t}:${r}`,r,r=>{((e,t,r)=>{const n=m(e);for(const e of y(t))r?n.add(e):n.delete(e);v(e,n)})(e,t,Boolean(r))})}function G(e,t,r,n,o={}){const s=N.get(e)??new Set;if(s.has(t))return;s.add(t),N.set(e,s);const a=()=>((e,t={})=>{if(b(e)){const r=V.get(e);return t.rawInline?r:g(r)}return C.get(e)})(r,o);n(a()),oe(((e,t)=>{if(!b(e))return C.subscribe(e,t);const r=w(V.get(e)).map(e=>e.subscribe(t));return()=>{for(const e of r)e()}})(r,()=>{x.enqueue("binding",()=>n(a()),{scope:e,key:t})}),e)}function Q(e,t){Z(e,"input",`__async:set:${t}`),Z(e,"change",`__async:set:${t}`),M.resolve(`__async:set:${t}`)||M.register(`__async:set:${t}`,({element:e})=>{((e,t)=>{if(!b(e))return C.set(e,t);const r=V.get(e);if(a(r))return r.set(t);throw new Error(`Inline binding "${e}" is not writable.`)})(t,e.value)})}function X(e){const t=U.get(e);if(!t)return;const r=C.get(`${t.id}.$status`),n=((e,t)=>"ready"===t?e.ready??e.loading??e.error:"error"===t?e.error??e.ready??e.loading:e.loading??e.ready??e.error)(t.templates,r);if(n){ae(e),e.replaceChildren(n.content.cloneNode(!0)),W.add(e);try{K.scan(e)}finally{W.delete(e)}}}function ee(e,t){const r=[];for(const n of t){const t=p(e,L,"on",n);null!=t&&r.push(t)}return r}async function te(e,t){try{const r=await M.run(t,{signals:C,handlers:M,loader:K,server:K.server,router:K.router,cache:K.cache,scheduler:x,element:e,el:e,root:q});for(const t of r)"function"==typeof t&&oe(t,e)}catch(t){_(e,t)}}function re(e,t){const r=(e.ownerDocument?.defaultView??globalThis).IntersectionObserver??globalThis.IntersectionObserver;if(!r)return x.enqueue("lifecycle",()=>{J||t(e)},{scope:e,key:"visible:fallback"}),()=>{};const n=new r(r=>{r.some(e=>e.isIntersecting)&&(n.disconnect(),t(e))});return n.observe(e),()=>n.disconnect()}function ne(){if(J)throw new Error("Loader has been destroyed.")}function oe(e,t,r="self"){if("function"!=typeof e)return e;if(B.add(e),t){const n=I.get(t)??[];n.push({cleanup:e,mode:r}),I.set(t,n)}return e}function se(e){"function"==typeof e&&B.has(e)&&(B.delete(e),e())}function ae(e){ce(e,"children");for(const t of[...e.childNodes??[]])ie(t)}function ie(e){if(1===e.nodeType)for(const t of A(e))ce(t),x.markScopeDestroyed(t)}function ce(e,t){const r=I.get(e);if(!r)return;const n=[];for(const e of r)t&&e.mode!==t?n.push(e):se(e.cleanup);n.length>0?I.set(e,n):I.delete(e)}function ue(e,t,r){x.enqueue("lifecycle",t,{scope:e,key:r})}return C._setContext?.({server:K.server,router:K.router,loader:K,cache:K.cache,scheduler:x}),K.server?._setContext?.({signals:C,handlers:M,loader:K,router:K.router,cache:K.cache,scheduler:x}),K}function y(e,t=new Set){if(null==e||!1===e)return t;if(a(e)){const r=e.value;return!0===r?(t.add(e.id.split(".").at(-1)),t):y(r,t)}if("string"==typeof e){for(const r of e.split(/\s+/).filter(Boolean))t.add(r);return t}if(Array.isArray(e)){for(const r of e)y(r,t);return t}if("object"==typeof e){for(const[r,n]of Object.entries(e))(a(n)?n.value:n)&&y(r,t);return t}return!0!==e&&t.add(String(e)),t}function g(e){return a(e)?e.value:Array.isArray(e)?e.map(g):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,g(t)])):e}function w(e,t=new Map){if(a(e))return t.set(e.id,e),[...t.values()];if(Array.isArray(e)){for(const r of e)w(r,t);return[...t.values()]}if(e&&"object"==typeof e)for(const r of Object.values(e))w(r,t);return[...t.values()]}function b(e){return"string"==typeof e&&e.startsWith(h)}function m(e){return y(e.getAttribute("class")??"")}function v(e,t){const r=[...t].join(" ");0!==r.length?e.setAttribute("class",r):e.removeAttribute("class")}function S(e,t,r){const n={};for(const o of[...e.children].filter(e=>"TEMPLATE"===e.tagName))E(o,"loading",t,e,r)&&(n.loading=o),E(o,"ready",t,e,r)&&(n.ready=o),E(o,"error",t,e,r)&&(n.error=o);return n}function E(e,t,r,n,o){return p(e,o,"async",t)===r||R(n)&&e.hasAttribute?.(t)}function $(e,t,r){if(!1===r||null==r)return e.removeAttribute(t),void(t in e&&(e[t]=!1));e.setAttribute(t,!0===r?"":String(r)),t in e&&(e[t]=r)}function j(e,t,r){e[t]=null!=r?r:""}function A(e){return(e=>{const t=[];return 1===e?.nodeType&&e.matches?.("*")&&t.push(e),t.push(...e?.querySelectorAll?.("*")??[]),t})(e)}function O(e,t){return R(e)&&e.hasAttribute?.("for")?e.getAttribute("for"):p(e,t,"async","boundary")}function R(e){return"ASYNC-SUSPENSE"===e?.tagName}function k(e,t){if(11===e?.nodeType)return e;if("TEMPLATE"===e?.tagName)return e.content.cloneNode(!0);if(e?.nodeType){const r=t.createDocumentFragment();return r.append(e),r}const r=t.createElement("template");return r.innerHTML=String(e??""),r.content.cloneNode(!0)}function _(e,t){const r=e.ownerDocument?.defaultView?.CustomEvent??globalThis.CustomEvent;e.dispatchEvent(new r("async:error",{bubbles:!0,detail:{error:t}}))}return{Loader:d,AsyncLoader:d}})(),p=(()=>{const{isTemplateResult:e,renderTemplate:n}=a,{attachRegistryInspection:o,createRegistryStore:s}=r,{createLazyRegistry:i,isLazyDescriptor:c}=t;function u(e,t={}){return r=e,Boolean(r&&"object"==typeof r&&!Array.isArray(r)&&(Object.hasOwn(r,"html")||Object.hasOwn(r,"signals")||Object.hasOwn(r,"boundary")||Object.hasOwn(r,"redirect")||Object.hasOwn(r,"status")||Object.hasOwn(r,"cache")))?{...e,html:Object.hasOwn(e,"html")?l(e.html,t):e.html}:{html:l(e,t)};var r}function l(t,r){return t?.nodeType||"string"==typeof t?t:(e(t),n(t,function(e){return{attributes:e.loader?.attributes,signals:e.signals,bind:e.loader?._registerBinding?.bind(e.loader)}}(r)))}function f(e){if("string"!=typeof e||0===e.length)throw new TypeError("Partial id must be a non-empty string.")}return{createPartialRegistry:function(e={},t={}){const r=t.registry??s(),n=t.type??"partial",a=r._map(n),l=t.lazyRegistry??i(t),p=new Map,h=o({register(e,t){if(f(e),"function"!=typeof t&&!c(t))throw new TypeError(`Partial "${e}" must be a function.`);if(a.has(e))throw new Error(`Partial "${e}" is already registered.`);return a.set(e,t),e},registerMany(e){for(const[t,r]of Object.entries(e??{}))h.register(t,r);return h},unregister:e=>(f(e),p.delete(e),a.delete(e)),resolve(e){f(e);const t=a.get(e);return c(t)?(p.has(e)||p.set(e,async function(...r){const o=await l.resolve(n,e,t);if("function"!=typeof o)throw new TypeError(`Partial "${e}" did not resolve to a function.`);return o.apply(this,r)}),p.get(e)):t},async render(e,t={},r={}){f(e);const n=h.resolve(e);if(!n)throw new Error(`Partial "${e}" is not registered.`);const o={...r,id:e,props:t,cache:r.cache,partials:h};return u(await n.call(o,t),o)},_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))a.has(t)||h.register(t,r);return h}},r,n);return h.registerMany(e),h},normalizePartialResult:u}})(),h=(()=>{const{Loader:e}=f,{createHandlerRegistry:t}=u,{createScheduler:n}=l,{createSignalRegistry:a}=s,{applyServerResult:i}=c,{createRegistryStore:p}=r,{normalizeAttributeConfig:h}=o;function d(e,t={}){return{...t,partial:e}}const y=d,g=new Set(["csr","spa","ssr","mpa"]);function w(e={},t={}){const r=t.registry??p(),n=t.type??"route",o=r._map(n),s=[],a={registry:r,register(e,t){if(j(e),s.some(t=>t.pattern===e))throw new Error(`Route "${e}" is already registered.`);const r=b(e,t);return o.set(e,r.definition),s.push(r),E(s),r},registerMany(e){for(const[t,r]of Object.entries(e??{}))a.register(t,r);return a},unregister(e){j(e);const t=s.findIndex(t=>t.pattern===e);return-1!==t&&s.splice(t,1),o.delete(e)},match(e){const t=(e=>e instanceof URL?e:new URL(String(e),globalThis.location?.href??"http://localhost/"))(e).pathname;for(const e of s){const r=e.regex.exec(t);if(!r)continue;const n={};return e.keys.forEach((e,t)=>{n[e]=S(r[t+1]??"")}),{pattern:e.pattern,params:n,route:e.definition}}return null},entries:()=>s.map(({pattern:e,definition:t})=>({pattern:e,route:t})),keys:()=>[...o.keys()],inspect:()=>r.entries(n),_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))o.has(t)?i(t,o.get(t)):a.register(t,r);return a}};for(const[e,t]of o)i(e,t);return a.registerMany(e),a;function i(e,t){if(s.some(t=>t.pattern===e))return;const r=b(e,t);o.set(e,r.definition),s.push(r),E(s)}}function b(e,t){const r="string"==typeof t?d(t):t,{regex:n,keys:o}=(e=>{const t=[];if("*"===e)return{regex:/^.*$/,keys:t};if("/"===e)return{regex:/^\/$/,keys:t};const r=e.split("/").map(e=>e.startsWith(":")?(t.push(e.slice(1)),"([^/]+)"):String(e).replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("/");return{regex:new RegExp(`^${r}$`),keys:t}})(e);return{pattern:e,regex:n,keys:o,score:$(e),definition:r}}function m(e,t){return e?.closest?.(t)}function v(e){return Object.fromEntries(e.searchParams.entries())}function S(e){try{return decodeURIComponent(e)}catch{return e}}function E(e){e.sort((e,t)=>t.score-e.score||t.pattern.length-e.pattern.length)}function $(e){return"*"===e?-1:e.split("/").filter(Boolean).reduce((e,t)=>"*"===t?e:t.startsWith(":")?e+2:e+4,"/"===e?3:0)}function j(e){if("string"!=typeof e||"*"!==e&&!e.startsWith("/"))throw new TypeError('Route pattern must be a path string or "*".')}return{defineRoute:d,createRouteRegistry:w,createRouter:({mode:r="ssr",root:o,boundary:s="route",routes:c=w(),loader:u,signals:l,handlers:f,server:p,cache:d,partials:y,attributes:b,scheduler:S}={})=>{(e=>{if(!g.has(e))throw new TypeError(`Unknown router mode "${e}".`)})(r);const E=o?.ownerDocument??o??globalThis.document,$=o??E,j=l??u?.signals??a(),A=f??u?.handlers??t(),O=S??u?.scheduler??n(),R=!S&&!u?.scheduler,k=h(b??u?.attributes),_=u??e({root:$,signals:j,handlers:A,server:p,cache:d,scheduler:O,attributes:k}),T=!u,q=new Set;let C,M=!1,x=0;const D={mode:r,root:$,boundary:s,routes:c,loader:_,signals:j,handlers:A,server:p,cache:d,partials:y,scheduler:O,attributes:k,start:()=>(I(),_.router=D,j._setContext?.({router:D,loader:_,server:p,cache:d,scheduler:O}),T&&_.start(),"mpa"===r||"ssr"===r?(N(),D):((()=>{const e=e=>{const t=m(e.target,"a[href]");t&&!((e,t)=>{if(e.defaultPrevented||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return!0;if(t.target||t.hasAttribute("download"))return!0;const r=V(t.href),n=W();return r.origin!==n.origin||((e,t,r)=>e.origin===t.origin&&e.pathname===t.pathname&&e.search===t.search&&(e.hash!==t.hash||!0===r.getAttribute?.("href")?.startsWith("#")))(r,n,t)})(e,t)&&(e.preventDefault(),U(D.navigate(t.href)))},t=e=>{const t=m(e.target,"form");t&&!(e=>"get"!==String(e.method||"get").toLowerCase()||V(e.action).origin!==W().origin)(t)&&(e.preventDefault(),U(D.navigate((e=>{const t=V(e.action||e.ownerDocument.defaultView.location.href),r=new e.ownerDocument.defaultView.FormData(e);return t.search=new URLSearchParams(r).toString(),t.href})(t))))},r=()=>U(D.navigate(W(),{history:!1}));$.addEventListener?.("click",e),$.addEventListener?.("submit",t),E.defaultView?.addEventListener?.("popstate",r),q.add(()=>$.removeEventListener?.("click",e)),q.add(()=>$.removeEventListener?.("submit",t)),q.add(()=>E.defaultView?.removeEventListener?.("popstate",r))})(),"csr"===r?(U(D.navigate(W(),{replace:!0,initial:!0,source:"client"})),D):(N(),D))),match:e=>c.match(V(e)),prefetch(e){if(I(),"mpa"===r||"ssr"===r)return Promise.resolve(null);const t=D.match(e);return t?.route?.partial&&y?.resolve?.(t.route.partial)?y.render(t.route.partial,t.params,{...L(t),prefetch:!0}):Promise.resolve(null)},navigate:async(e,t={})=>(I(),"mpa"===r||"ssr"===r?(E.defaultView?.location?.assign?.(e),null):(async(e,t={})=>{const r=D.match(e);if(!r)return B(e,null),(e=>{z(e,null,{pending:!1,error:new Error(`No route matched ${e.pathname}${e.search}`)})})(e),null;const n=B(e,r);z(e,r,{pending:!0,error:null});try{if(!r.route?.partial||!y?.resolve?.(r.route.partial)){const t=new Error(`Route "${e.pathname}" does not have a registered partial.`);return P(n)&&H({pending:!1,error:t}),null}const o=await y.render(r.route.partial,r.params,L(r,n));return P(n)?(await(async(e,t,r,n)=>{P(n)&&(await i(e,{signals:j,loader:_,router:D,cache:d,scheduler:O,abort:n?.abort}),await O.flush(),P(n)&&(null==e?.html||e.boundary||e.redirect||(_.swap(s,e.html),await O.flush()),e?.redirect||!1===r.history||(r.replace?E.defaultView?.history?.replaceState?.({},"",t.href):E.defaultView?.history?.pushState?.({},"",t.href))))})(o,e,t,n),P(n)?(H({pending:!1,error:null}),o):null):null}catch(e){if(!P(n))return null;throw H({pending:!1,error:e}),e}})(V(e),t)),destroy(){if(!M){M=!0,C?.controller.abort(new Error("Router has been destroyed."));for(const e of q)e();q.clear(),R&&O.destroy()}}};return D;function L(e,t){return{params:e.params,route:e.route,router:D,signals:j,handlers:A,loader:_,server:p,cache:d,scheduler:O,abort:t?.abort}}function B(e,t){C?.controller.abort(new Error(`Router navigation superseded by ${e.pathname}${e.search}.`));const r=new AbortController,n={id:++x,controller:r,abort:r.signal,target:e,matched:t};return C=n,n}function P(e){return!M&&e&&C?.id===e.id&&!e.abort.aborted}function N(){const e=W();z(e,D.match(e),{pending:!1,error:null})}function z(e,t,r={}){j.ensure("router",{}),H({url:e.href,path:e.pathname,query:v(e),params:t?.params??{},route:t?.route??null,...r})}function H(e){j.ensure("router",{});for(const[t,r]of Object.entries(e))j.set(`router.${t}`,r)}function U(e){e.catch(e=>{M||(H({pending:!1,error:e}),((e,t)=>{const r=e.ownerDocument?.defaultView?.CustomEvent??globalThis.CustomEvent;"function"==typeof r&&e.dispatchEvent?.(new r("async:error",{bubbles:!0,detail:{error:t}}))})($,e))})}function W(){return V(E.defaultView?.location?.href??"http://localhost/")}function V(e){return e instanceof URL?e:new URL(String(e),E.defaultView?.location?.href??"http://localhost/")}function I(){if(M)throw new Error("Router has been destroyed.")}},route:y}})(),d=(()=>{const{createCacheRegistry:e}=n,{createComponentRegistry:a}=i,{createHandlerRegistry:d}=u,{Loader:y}=f,{createPartialRegistry:g}=p,{createRouteRegistry:w,createRouter:b}=h,{createScheduler:m}=l,{createServerNamespace:v}=c,{cloneSignalDeclaration:S,createSignal:E,createSignalRegistry:$}=s,{createRegistryStore:j}=r,{attributeName:A,normalizeAttributeConfig:O}=o,{createLazyRegistry:R,defineRegistrySnapshot:k,sameRegistryValue:_}=t,T=new Set(["signal","handler","server","partial","route","component","asyncSignal"]);function q(e,t={}){const r=j(void 0,{target:"browser"}),n=new Set,o=t.createRuntime??C,s={registry:r,use(e,t){const o=((e,t)=>{const r={signal:{},handler:{},server:{},partial:{},route:{},component:{},asyncSignal:{},cache:{browser:{},server:{}}};if("string"==typeof e){if(!T.has(e))throw new Error(`Unknown Async registry type "${e}".`);return r[e]=F(e,t),r}if(!e||"object"!=typeof e)throw new TypeError("Async.use(...) requires a registry type or module object.");for(const[t,n]of Object.entries(e))if("cache"!==t){if(!T.has(t))throw new Error(`Unknown Async registry type "${t}".`);r[t]=F(t,n)}else r.cache.browser={...n?.browser??{}},r.cache.server={...n?.server??{}};return r})(e,t);((e,t)=>{for(const r of T)B(e,r,t[r]);B(e,"cache.browser",t.cache.browser),B(e,"cache.server",t.cache.server)})(r,o);for(const e of n)e._applyUse(o);return s},snapshot:()=>r.rawSnapshot(),start(e={}){const t=o(s,e).start();return s.runtime=t,t},attachRoot:e=>(e=>(e.runtime||e.start(),e.runtime))(s).attachRoot(e),detachRoot:e=>s.runtime?.detachRoot(e)??s,applySnapshot:(e,t={})=>s.runtime?(s.runtime.applySnapshot(e,t),s):(((e,t={},r={})=>{const n=z(t);for(const[t,o]of Object.entries(n.signal))N(e,"signal",t,E(o),r);for(const t of["handler","server","partial","route","component","asyncSignal"])for(const[o,s]of Object.entries(n[t]))N(e,t,o,s,r)})(r,e,t),s),inspectRoots:()=>s.runtime?.inspectRoots()??{count:0,roots:[]},_attach:e=>(n.add(e),()=>s._detach(e)),_detach(e){n.delete(e)}};return e&&s.use(e),s}function C(t=M,r={}){const n=(o=t,Boolean(o&&"function"==typeof o.use&&"function"==typeof o.snapshot&&o.registry)?t:q(t??{}));var o;const s=r.target??"browser",i=r.scheduler??r.loader?.scheduler??m({strategy:"server"===s?"manual":"microtask"}),c=!r.scheduler&&!r.loader?.scheduler,u=O(r.attributes),l=r.lazyRegistry??R({registryAssets:r.registryAssets,importModule:r.importModule}),f=r.registry??((e,{target:t}={})=>{const r=e.rawSnapshot();return j({...r,signal:L(r.signal)},{target:t})})(n.registry,{target:s}),p=r.signals??$(void 0,{registry:f,type:"signal",lazyRegistry:l}),h=r.handlers??d(void 0,{registry:f,type:"handler",lazyRegistry:l}),v=e(void 0,{registry:f,type:"cache.server"}),S=e(void 0,{registry:f,type:"cache.browser"}),E=r.serverFactory??I,A=r.server??E(void 0,{registry:f,type:"server"}),k=r.partials??g(void 0,{registry:f,type:"partial",lazyRegistry:l}),_=r.routes??w(void 0,{registry:f,type:"route"}),T=r.components??a(void 0,{registry:f,type:"component",lazyRegistry:l}),C=r.loader||Object.hasOwn(r,"root")?r.root:null;let B=r.loader,N=r.router,H=!1,U=()=>{},F=!1,J=!1;const Z=new Map,Y=C??globalThis.document,G=r.snapshot??("browser"===s?x(Y,{attributes:u}):void 0);((e,t)=>{try{e.cache=t}catch{}})(A,v);const Q={app:n,registry:f,target:s,signals:p,handlers:h,server:A,partials:k,routes:_,components:T,browser:{cache:S},loader:B,router:N,scheduler:i,attributes:u,start:()=>(ne(),F||(F=!0,"server"!==s?(te({cache:S}),p._setContext?.({server:A,loader:B,cache:S,scheduler:i}),B?(X(B.root,B),B.start(),ee(B.root)):null!=C&&Q.attachRoot(C)):(te({cache:v}),p._setContext?.({server:A,cache:v,scheduler:i}))),Q),use:(e,t)=>(n.use(e,t),Q),attachRoot(e){if(ne(),"server"===s)throw new Error("Server runtimes cannot attach DOM roots.");if(!e)throw new TypeError("runtime.attachRoot(root) requires a root.");if(Z.has(e))return Q;const t=0===Z.size&&B?B:y({root:e,signals:p,handlers:h,server:A,cache:S,scheduler:i,attributes:u});return X(e,t),t.start(),te({cache:S}),p._setContext?.({server:A,loader:Q.loader,cache:S,scheduler:i}),ee(e),Q},detachRoot(e){if(ne(),"server"===s)return Q;if(null==e){for(const e of new Set(Z.values()))e.destroy?.();return Z.clear(),N?.destroy?.(),N=void 0,H=!1,B=void 0,Q.loader=void 0,Q.router=void 0,Q}const t=Z.get(e);if(!t)return Q;if(t.destroy?.(),Z.delete(e),B===t){N?.destroy?.(),N=void 0,H=!1;const e=Z.values().next().value;B=e,Q.loader=e,Q.router=void 0,e&&ee(e.root)}return Q},inspectRoots:()=>({count:Z.size,roots:[...Z].map(([e,t])=>({root:e,loader:t,primary:t===B}))}),applySnapshot:(e,t={})=>(((e,t={},r={})=>{const n=z(t);P(e,"asyncSignal",n.asyncSignal,null,r);for(const[t,r]of Object.entries(n.signal))W(e.signals,t,r);e.browser.cache.restore(n.cache.browser),P(e,"handler",n.handler,e.handlers,r),P(e,"server",n.server,e.server,r),P(e,"partial",n.partial,e.partials,r),P(e,"route",n.route,e.routes,r),P(e,"component",n.component,e.components,r)})(Q,e,t),Q),async render(e){ne(),te({cache:v}),p._setContext?.({server:A,cache:v,scheduler:i});const t=_.match(e);if(!t)return await i.flush(),{html:K("",{status:404,signals:p,browserCache:S,boundary:r.boundary??"route",attributes:u}),status:404,signals:p.snapshot(),cache:{browser:S.snapshot()}};const n=t.route.partial,o=n&&k.resolve(n)?await k.render(n,t.params,{params:t.params,route:t.route,signals:p,handlers:h,server:A,cache:v,browserCache:S,partials:k,scheduler:i,...re()}):{html:""};if(o.signals)for(const[e,t]of Object.entries(o.signals))V(p,e,t);o.cache?.browser&&S.restore(o.cache.browser),await i.flush();const s=o.status??200;return{html:K(o.html,{status:s,signals:p,browserCache:S,boundary:o.boundary??r.boundary??"route",attributes:u}),status:s,signals:p.snapshot(),cache:{browser:S.snapshot()}}},destroy(){if(J)return;J=!0,U(),N?.destroy?.();const e=new Set(Z.values());for(const t of e)t.destroy?.();Z.clear(),B&&!e.has(B)&&B?.destroy?.(),p.destroy?.(),c&&i.destroy()},_applyUse(e){((e,t)=>{D(e.signals,e.registry,t.signal),D(e.handlers,e.registry,t.handler),D(e.server,e.registry,t.server),D(e.partials,e.registry,t.partial),D(e.routes,e.registry,t.route),D(e.components,e.registry,t.component),((e,t,r)=>{if(r&&0!==Object.keys(r).length)for(const[n,o]of Object.entries(r))e.has(t,n)||e.register(t,n,o)})(e.registry,"asyncSignal",t.asyncSignal),D(e.browser.cache,e.registry,t.cache.browser),D(e.server.cache,e.registry,t.cache.server)})(Q,e)}};return A.cache=v,Q.server.cache=v,Q.applySnapshot(G,{strict:r.strictSnapshots??!0}),U=n._attach(Q),Q;function X(e,t){Z.set(e,t),B||(B=t,Q.loader=t),t.server=A,t.cache=S,t.scheduler=i}function ee(e){!1!==N&&!H&&(N||((e,t)=>Boolean(t.routerOptions||t.mode||e.entries().length>0))(_,r))&&Q.loader&&(N=N??b({mode:r.mode??"ssr",root:e,boundary:r.boundary??"route",routes:_,loader:Q.loader,signals:p,handlers:h,server:A,cache:S,partials:k,scheduler:i,attributes:u}),Q.router=N,Q.loader.router=N,te({cache:S,router:N}),N.start(),H=!0)}function te(e={}){const t=(e=>"function"==typeof e?.registerMany)(A)?v:e.cache;A._setContext?.({signals:p,loader:B,router:N,cache:t,scheduler:i,requestContext:r.requestContext,...re()})}function re(){const e=(t=r.requestContext)?"function"==typeof t.get?t.get()??{}:"function"==typeof t.getStore?t.getStore()??{}:{}:{};var t;return{requestContext:e,request:e.request??r.request,headers:e.headers??r.headers,cookies:e.cookies??r.cookies,locals:e.locals??r.locals}}function ne(){if(J)throw new Error("Async app runtime has been destroyed.")}}const M=q();function x(e=globalThis.document,{attributes:t}={}){const r=O(t),n=A(r,"async","snapshot"),o=e?.ownerDocument??e??globalThis.document,s=e??o;if(!s?.querySelectorAll&&!o?.querySelectorAll)return{};const a={};for(const e of new Set([s,o]))if(e?.querySelectorAll)for(const t of e.querySelectorAll("script[type='application/json'], script")){if(!t.hasAttribute?.(n))continue;const e=t.textContent?.trim()??"";if(!e)continue;let r;try{r=JSON.parse(e)}catch(e){throw new Error(`Could not parse Async snapshot: ${e instanceof Error?e.message:String(e)}`)}H(a,r,{strict:!0})}return a}function D(e,t,r){r&&0!==Object.keys(r).length&&(e?.registry!==t?e?.registerMany?.(r):e._adoptMany?.(r))}function L(e={}){const t={};for(const[r,n]of Object.entries(e??{}))t[r]=S(n);return t}function B(e,t,r){for(const[n,o]of Object.entries(r??{}))e.register(t,n,o)}function P(e,t,r,n,o={}){if(r&&0!==Object.keys(r).length){for(const[n,s]of Object.entries(r)){if("asyncSignal"===t&&e.signals?.has?.(n)&&!e.registry.has(t,n))throw new Error(`Signal "${n}" is already registered.`);N(e.registry,t,n,s,o)}n?._adoptMany?.(r)}}function N(e,t,r,n,o={}){const s=o.strict??!0,a=e._map(t);if(a.has(r)){if(_(a.get(r),n)||U(a.get(r),n))return;if(s)throw new Error(`${t} "${r}" is already registered with a different value.`)}else e.set(t,r,n)}function z(e={}){return{signal:{...e.signals??{},...e.signal??{}},handler:{...e.handler??{}},server:{...e.server??{}},partial:{...e.partial??{}},route:{...e.route??{}},component:{...e.component??{}},asyncSignal:{...e.asyncSignal??{}},cache:{browser:{...e.entries?.browser??{},...e.cache?.browser??{}}}}}function H(e,t,r={}){const n=z(k(t));e.signal={...e.signal??e.signals??{},...n.signal},e.signals=e.signal,e.cache={...e.cache??{},browser:{...e.cache?.browser??{},...n.cache.browser}};for(const t of["handler","server","partial","route","component","asyncSignal"]){e[t]=e[t]??{};for(const[o,s]of Object.entries(n[t]))if(Object.hasOwn(e[t],o)){if(_(e[t][o],s)||U(e[t][o],s))continue;if(r.strict??1)throw new Error(`${t} "${o}" is already declared with a different value.`)}else e[t][o]=s}return e}function U(e,t){if(e===t)return!0;try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}function W(e,t,r){if(e.has?.(t)){const n=e._entry?.(t);return"function"==typeof n?._restore&&(e=>!(!e||"object"!=typeof e||Array.isArray(e))&&(Object.hasOwn(e,"value")&&(Object.hasOwn(e,"loading")||Object.hasOwn(e,"error")||Object.hasOwn(e,"status")||Object.hasOwn(e,"version"))))(r)?void n._restore(r):void e.set(t,r)}e.register(t,E(r))}function V(e,t,r){if("function"==typeof e._setPath)return void e._setPath(t,r);const n=String(t).split(".")[0];e.has?.(n)?e.set(t,r):(e.register(n,E(t===n?r:{})),t!==n&&e.set(t,r))}function I(e={},t={}){const r=t.registry??j(),n=t.type??"server",o={},s={registry:r,register:(e,t)=>(r.register(n,e,t),e),registerMany(e){for(const[t,r]of Object.entries(e??{}))s.register(t,r);return s},unregister:e=>r.unregister(n,e),resolve(){},async run(e){throw new Error(`Server command "${e}" cannot run without a server proxy or server registry.`)},keys:()=>r.keys(n),entries:()=>r.entries(n),inspect:()=>r.entries(n),_setContext:(e={})=>(Object.assign(o,e),s),_adoptMany:()=>s};return s.registerMany(e),v((e,t,r)=>s.run(e,t,r),s,()=>o)}function F(e,t={}){if("signal"!==e)return{...t??{}};const r={};for(const[e,n]of Object.entries(t??{}))r[e]=J(n);return r}function J(e){return e&&"object"==typeof e&&"function"==typeof e.subscribe?e:E(e)}function K(e,{signals:t,browserCache:r,boundary:n,attributes:o}){const s={signals:t.snapshot(),cache:{browser:r.snapshot()}},a=A(o,"async","boundary"),i=A(o,"async","snapshot");return`<section ${a}="${c=n,String(c).replaceAll("&","&amp;").replaceAll('"',"&quot;").replaceAll("<","&lt;")}">${e??""}</section><script type="application/json" ${i}>${(e=>JSON.stringify(e).replaceAll("<","\\u003c"))(s)}<\/script>`;var c}return{defineApp:q,createApp:C,readSnapshot:x,Async:M}})(),y=(()=>{function e(e){if("string"!=typeof e||0===e.length)throw new TypeError("Boundary patch boundary must be a non-empty string.")}function t(e){return Boolean(e&&"object"==typeof e&&!Array.isArray(e))}return{createBoundaryReceiver:(r={})=>{const n=r.loader,o=r.signals??n?.signals,s=r.cache??n?.cache,a=r.scheduler??n?.scheduler,i=r.router??n?.router,c=r.recentLimit??50,u=!0===r.throwOnError,l="function"==typeof r.onApply?r.onApply:void 0,f="function"==typeof r.onIgnore?r.onIgnore:void 0,p="function"==typeof r.onError?r.onError:void 0,h="function"==typeof r.isScopeDestroyed?r.isScopeDestroyed:e=>a?.isScopeDestroyed?.(e)??a?.inspectDestroyed?.(e)??!1;if(!n||"function"!=typeof n.swap)throw new TypeError("createBoundaryReceiver(...) requires a loader with swap(boundary, html).");if(!Number.isInteger(c)||c<0)throw new TypeError("createBoundaryReceiver(...) recentLimit must be a non-negative integer.");const d=new Map,y=[];let g=!1;const w={async apply(r){if(g)throw new Error("Boundary receiver has been destroyed.");const c=(r=>{if(!r||"object"!=typeof r||Array.isArray(r))throw new TypeError("receiver.apply(patch) requires a boundary patch object.");if(e(r.boundary),"number"!=typeof r.seq||!Number.isFinite(r.seq))throw new TypeError("Boundary patch seq must be a finite number.");if(void 0!==r.signals&&!t(r.signals))throw new TypeError("Boundary patch signals must be an object.");if(void 0!==r.cache&&!t(r.cache))throw new TypeError("Boundary patch cache must be an object.");if(void 0!==r.cache?.browser&&!t(r.cache.browser))throw new TypeError("Boundary patch cache.browser must be an object.");if(void 0!==r.redirect&&("string"!=typeof r.redirect||0===r.redirect.length))throw new TypeError("Boundary patch redirect must be a non-empty string.");if(void 0!==r.parentScope&&"string"!=typeof r.parentScope)throw new TypeError("Boundary patch parentScope must be a string.");if(void 0!==r.scope&&"string"!=typeof r.scope)throw new TypeError("Boundary patch scope must be a string.");const n=Object.hasOwn(r,"html")&&null!=r.html,o=r.signals&&Object.keys(r.signals).length>0,s=r.cache?.browser&&Object.keys(r.cache.browser).length>0,a=Boolean(r.redirect),i=Object.hasOwn(r,"error");if(!(n||o||s||a||i))throw new TypeError("Boundary patch must include html, signals, cache.browser, redirect, or error.");return r})(r),y=(w=c.boundary,d.has(w)||d.set(w,{lastSeq:-1/0,applied:0,ignored:0,errored:0,lastStatus:void 0}),d.get(w));var w,m;if(c.seq<=y.lastSeq){const e={status:"ignored-stale",boundary:c.boundary,seq:c.seq,lastSeq:y.lastSeq};return y.ignored+=1,y.lastStatus=e.status,b(e),f?.(e,r),e}if(void 0!==c.parentScope&&h(c.parentScope)){const e={status:"ignored-destroyed",boundary:c.boundary,seq:c.seq,parentScope:c.parentScope};return y.ignored+=1,y.lastStatus=e.status,b(e),f?.(e,r),e}if(y.lastSeq=c.seq,Object.hasOwn(c,"error")){const e=(m=c.error)instanceof Error?m:m&&"object"==typeof m&&"string"==typeof m.message?Object.assign(new Error(m.message),m):new Error(String(m)),t={status:"errored",boundary:c.boundary,seq:c.seq,error:e};if(y.errored+=1,y.lastStatus=t.status,b(t),p?.(e,t,r),u)throw e;return t}if(c.signals){if(!o||"function"!=typeof o.set)throw new Error("Boundary patch includes signals, but no signal registry is available.");for(const[e,t]of Object.entries(c.signals))o.set(e,t)}if(c.cache?.browser){if(!s||"function"!=typeof s.restore)throw new Error("Boundary patch includes browser cache, but no cache registry is available.");s.restore(c.cache.browser)}if(null!=c.html&&n.swap(c.boundary,c.html),await(async(e,t)=>{e&&(void 0===t||"function"!=typeof e.flushScope?"function"==typeof e.flush&&await e.flush():await e.flushScope(t))})(a,c.scope),c.redirect){await(async(e,t,r)=>{if(t&&"function"==typeof t.navigate)return void await t.navigate(e);const n=r?.root?.ownerDocument?.defaultView?.location??globalThis.location;n?.assign?.(e)})(c.redirect,i,n);const e={status:"redirected",boundary:c.boundary,seq:c.seq,redirect:c.redirect};return y.applied+=1,y.lastStatus=e.status,b(e),l?.(e,r),e}const v={status:"applied",boundary:c.boundary,seq:c.seq};return y.applied+=1,y.lastStatus=v.status,b(v),l?.(v,r),v},inspect(){const e={};for(const[t,r]of d)e[t]={lastSeq:r.lastSeq,applied:r.applied,ignored:r.ignored,lastStatus:r.lastStatus},r.errored>0&&(e[t].errored=r.errored);return{destroyed:g,boundaries:e,recent:y.map(e=>({...e}))}},reset(t){if(void 0===t)return d.clear(),y.length=0,w;e(t),d.delete(t);for(let e=y.length-1;e>=0;e-=1)y[e].boundary===t&&y.splice(e,1);return w},destroy(){g=!0,d.clear(),y.length=0}};return w;function b(e){if(0!==c)for(y.push((e=>{const t={boundary:e.boundary,seq:e.seq,status:e.status};return"ignored-stale"===e.status&&(t.lastSeq=e.lastSeq),"ignored-destroyed"===e.status&&void 0!==e.parentScope&&(t.parentScope=e.parentScope),"redirected"===e.status&&(t.redirect=e.redirect),t})(e));y.length>c;)y.shift()}}}})(),g=(()=>{function e(e){return e?.reason??new Error("Operation aborted")}return{delay:(t,r)=>r?.aborted?Promise.reject(e(r)):new Promise((n,o)=>{let s=setTimeout(()=>{s=void 0,r?.removeEventListener?.("abort",a),n()},t);function a(){void 0!==s&&clearTimeout(s),s=void 0,r?.removeEventListener?.("abort",a),o(e(r))}r?.addEventListener?.("abort",a,{once:!0})})}})(),w=(()=>{const{Async:e}=d;return{defineAsyncContainerElement:function(t={}){const r=t.tagName??"async-container",n=t.customElements??globalThis.customElements;if(!n)throw new Error("defineAsyncContainerElement(...) requires customElements.");const o=n.get(r);if(o)return o;const s=t.app??t.Async??e,a=t.HTMLElement??t.window?.HTMLElement??globalThis.HTMLElement;if(!a)throw new Error("defineAsyncContainerElement(...) requires HTMLElement.");class i extends a{connectedCallback(){if(this.__asyncAttached)return;const e=s.runtime??s.start?.();e?.attachRoot?.(this),this.__asyncRuntime=e,this.__asyncAttached=!0}disconnectedCallback(){this.__asyncAttached&&(this.__asyncRuntime?.detachRoot?.(this),this.__asyncRuntime=void 0,this.__asyncAttached=!1)}}return n.define(r,i),i},defineAsyncSuspenseElement:(e={})=>{const t=e.tagName??"async-suspense",r=e.customElements??globalThis.customElements;if(!r)throw new Error("defineAsyncSuspenseElement(...) requires customElements.");const n=r.get(t);if(n)return n;const o=e.HTMLElement??e.window?.HTMLElement??globalThis.HTMLElement;if(!o)throw new Error("defineAsyncSuspenseElement(...) requires HTMLElement.");class s extends o{}return r.define(t,s),s}}})(),{asyncSignal:b}=e,{Async:m}=d,{createApp:v}=d,{defineApp:S}=d,{readSnapshot:E}=d,{attributeName:$}=o,{defineAttributeConfig:j}=o,{createBoundaryReceiver:A}=y,{createCacheRegistry:O}=n,{defineCache:R}=n,{component:k}=i,{createComponentRegistry:_}=i,{defineComponent:T}=i,{delay:q}=g,{defineAsyncContainerElement:C}=w,{defineAsyncSuspenseElement:M}=w,{createHandlerRegistry:x}=u,{html:D}=a,{createLazyRegistry:L}=t,{defineRegistrySnapshot:B}=t,{Loader:P}=f,{AsyncLoader:N}=f,{createPartialRegistry:z}=p,{createRegistryStore:H}=r,{createRouteRegistry:U}=h,{createRouter:W}=h,{defineRoute:V}=h,{route:I}=h,{createScheduler:F}=l,{applyServerResult:J}=c,{createServerProxy:K}=c,{resolveServerCommandArguments:Z}=c,{unwrapServerResult:Y}=c,{computed:G}=s,{createSignal:Q}=s,{createSignalRegistry:X}=s,{effect:ee}=s,{signal:te}=s;export{b as asyncSignal,m as Async,v as createApp,S as defineApp,E as readSnapshot,$ as attributeName,j as defineAttributeConfig,A as createBoundaryReceiver,O as createCacheRegistry,R as defineCache,k as component,_ as createComponentRegistry,T as defineComponent,q as delay,C as defineAsyncContainerElement,M as defineAsyncSuspenseElement,x as createHandlerRegistry,D as html,L as createLazyRegistry,B as defineRegistrySnapshot,P as Loader,N as AsyncLoader,z as createPartialRegistry,H as createRegistryStore,U as createRouteRegistry,W as createRouter,V as defineRoute,I as route,F as createScheduler,J as applyServerResult,K as createServerProxy,Z as resolveServerCommandArguments,Y as unwrapServerResult,G as computed,Q as createSignal,X as createSignalRegistry,ee as effect,te as signal};
1
+ const e=(()=>{const e=Symbol.for("@async/framework.asyncSignal");return{asyncSignal:function t(r,n){if("string"!=typeof r||0===r.length)throw new TypeError("asyncSignal(id, fn) requires a non-empty string id.");if("function"!=typeof n)throw new TypeError("asyncSignal(id, fn) requires a function.");let o,s,a,i=!1,c=null,u="idle",l=0,f=r,p=0,h=!1;const d=new Set,y=new Set,g={[e]:!0,kind:"async-signal",get id(){return f},get value(){return o},get loading(){return i},get error(){return c},get status(){return u},get version(){return l},set:e=>(o=e,i=!1,c=null,u="ready",$(),o),refresh(){if(!s||h)throw new Error(`Async signal "${f}" is not registered.`);v(a,new Error(`Async signal "${f}" refreshed.`));const e=s,t=l+1;l=t,i=!0,c=null,u="loading";const r=((e,t,r)=>{const n=new AbortController,o=n.signal,s=((e,t)=>{const r=e._context?.()??{},n={signals:e,router:r.router,loader:r.loader,cache:r.cache,abort:t,scheduler:r.scheduler};return{signals:e,server:"function"==typeof r.server?._withContext?r.server._withContext(n):r.server,router:r.router,loader:r.loader,cache:r.cache,scheduler:r.scheduler}})(e,o),a={token:++p,version:r,registry:e,id:t,controller:n,abort:o,...s};return((e,t,r)=>{Object.defineProperty(e,"cancel",{configurable:!0,enumerable:!1,value(e){r(e)}})})(o,0,e=>{v(a,e,{settle:!0,notifyChange:!0})}),a})(e,f,t);a=r,$();const d=(e=>({signals:e.signals,id:e.id,get server(){return e.server},get router(){return e.router},get loader(){return e.loader},get cache(){return e.cache},get scheduler(){return e.scheduler},get version(){return e.version},get abort(){return e.abort},refresh:()=>g.refresh()}))(r);let b;try{b=e._collectDependencies(()=>n.call(d))}catch(e){return w(r,e),Promise.reject(e)}return((e,t)=>{if(m(t)){for(const e of y)e();y.clear();for(const r of e){const e=String(r).split(".")[0];e&&e!==f&&y.add(t.registry.subscribe(r,()=>E()))}}})(b.dependencies,r),Promise.resolve(b.value).then(e=>m(r)?(o=e,i=!1,c=null,u="ready",a=void 0,$(),o):o,e=>m(r)?(w(r,e),o):o)},cancel:e=>(b(e,{settle:!0,notifyChange:!0}),o),subscribe(e){if("function"!=typeof e)throw new TypeError("subscribe(fn) requires a function.");return d.add(e),()=>d.delete(e)},snapshot:()=>({value:o,loading:i,error:c,status:u,version:l}),_cloneSignalDeclaration:()=>t(r,n),_restore:(e={})=>(e=>!(!e||"object"!=typeof e||Array.isArray(e))&&(Object.hasOwn(e,"value")&&(Object.hasOwn(e,"loading")||Object.hasOwn(e,"error")||Object.hasOwn(e,"status")||Object.hasOwn(e,"version"))))(e)?(b(new Error(`Async signal "${f}" restored from snapshot.`)),o=e.value,i=Boolean(e.loading),c=e.error??null,u="string"==typeof e.status?e.status:(({value:e,loading:t,error:r})=>t?"loading":r?"error":void 0===e?"idle":"ready")({value:o,loading:i,error:c}),Number.isFinite(e.version)&&(l=e.version),$(),g):g.set(e),_bindRegistry(e,t){s=e,f=t;const r=()=>{h||s!==e||"idle"!==u||g.refresh()},n=s._context?.().scheduler;n?n.enqueue("async",r,{scope:f,key:`asyncSignal:${f}:initial`}):queueMicrotask(r)},_dispose(){if(!h){h=!0,(()=>{const e=s?._context?.().scheduler;e?.cancelScope?.(f)})(),b(new Error(`Async signal "${f}" disposed.`));for(const e of y)e();y.clear(),d.clear(),s=void 0}}};function w(e,t){m(e)&&(i=!1,c=t,u="error",a=void 0,$())}function m(e){return Boolean(e)&&!h&&a===e&&e.token===p&&e.registry===s&&e.id===f&&!e.abort.aborted}function b(e,t={}){const r=a,n=Boolean(r)||i;r?v(r,e):n&&(p+=1),t.settle&&n&&!h&&S(t.notifyChange)}function v(e,t,r={}){if(!e)return;const n=a===e;n&&(p+=1,a=void 0),e.abort.aborted||e.controller.abort(t),n&&r.settle&&!h&&S(r.notifyChange)}function S(e=!1){const t=void 0===o?"idle":"ready",r=i||null!==c||u!==t;i=!1,c=null,u=t,e&&r&&$()}function E(){if(h||!s)return;v(a,new Error(`Async signal "${f}" dependency changed.`));const e=s?._context?.().scheduler;e?e.enqueue("async",()=>g.refresh(),{scope:f,key:`asyncSignal:${f}:refresh`}):g.refresh()}function $(){for(const e of[...d])e(g)}return g},isAsyncSignal:t=>Boolean(t?.[e])}})(),t=(()=>{const e=new Set(["handler","component","asyncSignal","partial","route"]);function t(t={}){const r=(e=>{if("string"!=typeof e||0===e.length)throw new TypeError("registryAssets.baseUrl must be a non-empty string.");return a(e)||e.startsWith("/")||e.startsWith("./")||e.startsWith("../")?s(e):`/${o(e)}`})(t.baseUrl??"_async"),n={component:"component",handler:"handler",asyncSignal:"asyncSignal",partial:"partial",route:"route",...t.paths??{}};for(const[t,r]of Object.entries(n))if(e.has(t)&&("string"!=typeof r||0===r.length))throw new TypeError(`Registry asset path for "${t}" must be a non-empty string.`);return{baseUrl:r,paths:n}}function r(e){return Boolean(e&&"object"==typeof e&&!Array.isArray(e)&&"string"==typeof e.url)}function n(t,n,i,c){if(!e.has(t))throw new Error(`Registry type "${t}" does not support lazy descriptors.`);if(!r(i))throw new TypeError(`Registry descriptor for "${t}:${n}" requires a url.`);const{path:u,hash:l}=(e=>{const t=e.indexOf("#");return-1===t?{path:e,hash:""}:{path:e.slice(0,t),hash:e.slice(t+1)}})(i.url),f=((e,t,r)=>{if(a(t)||t.startsWith("/")||t.startsWith("./")||t.startsWith("../"))return t;const n=r.paths[e]??e;return((...e)=>{const[t,...r]=e;return[s(t),...r.map(o)].filter(Boolean).join("/")})(r.baseUrl,n,t)})(t,u,c),p=l?[l]:((e,t)=>{const r=[],n=e.split(".").filter(Boolean).at(-1),o=t.split("/").filter(Boolean).at(-1)?.replace(/\.[^.]+$/,"");for(const e of[n,o,"default"])e&&!r.includes(e)&&r.push(e);return r})(n,u);return{moduleUrl:f,exportNames:p,url:l?`${f}#${l}`:f}}function o(e){return String(e).replace(/^\/+|\/+$/g,"")}function s(e){return String(e).replace(/\/+$/g,"")}function a(e){return/^[A-Za-z][A-Za-z\d+.-]*:/.test(e)}function i(e){return!e||"object"!=typeof e||Array.isArray(e)?JSON.stringify(e):JSON.stringify(Object.keys(e).sort().map(t=>[t,e[t]]))}return{defineRegistrySnapshot:(e={})=>{if(!e||"object"!=typeof e||Array.isArray(e))throw new TypeError("defineRegistrySnapshot(snapshot) requires an object.");return e},createLazyRegistry:(e={})=>{const o=t(e.registryAssets??e.assets),s=e.importModule??(e=>import(e)),a=new Map,i=new Map;return{registryAssets:o,resolveUrl:(e,t,r)=>n(e,t,r,o),async resolve(e,t,c){if(!r(c))return c;const u=`${e}:${t}`;if(i.has(u))return i.get(u);const l=n(e,t,c,o);let f,p=a.get(l.moduleUrl);p||(p=Promise.resolve().then(()=>s(l.moduleUrl)),a.set(l.moduleUrl,p));try{f=await p}catch(r){throw a.get(l.moduleUrl)===p&&a.delete(l.moduleUrl),new Error(`Lazy ${e} "${t}" failed to import ${l.moduleUrl}: ${h=r,h instanceof Error?h.message:String(h)}`,{cause:r})}var h;const d=((e,t,r,n)=>{for(const r of t)if(r in e)return e[r];throw new Error(`Lazy ${r} "${n}" did not export ${t.map(e=>`"${e}"`).join(", ")}.`)})(f,l.exportNames,e,t);return i.set(u,d),d},inspect:()=>({registryAssets:o,modules:[...a.keys()],exports:[...i.keys()]})}},normalizeRegistryAssets:t,isLazyDescriptor:r,sameRegistryValue:(e,t)=>e===t||!(!r(e)||!r(t))&&i(e)===i(t),publicRegistryValue:(e,t)=>r(e)?{...e}:{id:t}}})(),r=(()=>{const{publicRegistryValue:e}=t,r=new Set(["signal","handler","server","partial","route","component","asyncSignal"]),n=new Set(["cache.browser","cache.server"]),o=new Set(["cache.browser.entries","cache.server.entries"]),s=new Set([...r,...n,...o]);function a(e){if(!s.has(e))throw new Error(`Unknown Async registry type "${e}".`);return e}function i(e,t){if("string"!=typeof t||0===t.length)throw new TypeError(`${e} id must be a non-empty string.`)}function c(t,r,n,s){return"server"===t&&"browser"===s.target?e(n,r):o.has(t)?n?.value:n}function u(e,t){return"cache.server.entries"===e&&"browser"===t}function l(e){const t={};for(const[r,n]of e)t[r]="function"==typeof n?.snapshot?n.snapshot():n?.value??n;return t}function f(t){const r={};for(const[n,o]of t)r[n]=e(o,n);return r}function p(e){return Object.fromEntries(e)}function h(e){const t={};for(const[r,n]of e)t[r]=n?.value;return t}function d(e){return e&&"object"==typeof e&&Object.hasOwn(e,"value")?e:{value:e}}return{createRegistryStore:function e(t={},n={}){const o=n.backing??{signal:new Map,handler:new Map,server:new Map,partial:new Map,route:new Map,component:new Map,asyncSignal:new Map,cache:{browser:new Map,server:new Map},cacheEntries:{browser:new Map,server:new Map}},s=n.target??"server",y={target:s,register(e,t,r){const n=y._map(e);if(i(e,t),n.has(t))throw new Error(`${e} "${t}" is already registered.`);return n.set(t,r),t},registerMany(e,t={}){for(const[r,n]of Object.entries(t??{}))y.register(e,r,n);return y},set(e,t,r){const n=y._map(e);return i(e,t),n.set(t,r),r},unregister:(e,t)=>y.delete(e,t),delete:(e,t)=>y._map(e).delete(t),keys:e=>u(e,s)?[]:[...y._map(e).keys()],entries(e,t={}){const r=a(e);return u(r,t.target??s)?[]:[...y._map(r)].map(([e,n])=>[e,c(r,e,n,{target:s,...t})])},has:(e,t)=>(i(e,t),!u(e,s)&&y._map(e).has(t)),get(e,t,r={}){i(e,t);const n=a(e);if(u(n,r.target??s))return;const o=y._map(n).get(t);return void 0!==o?c(n,t,o,{target:s,...r}):void 0},snapshot(e={}){const t=e.target??s;return{signal:l(o.signal),handler:f(o.handler),server:f(o.server),partial:f(o.partial),route:p(o.route),component:f(o.component),asyncSignal:f(o.asyncSignal),cache:{browser:p(o.cache.browser),server:p(o.cache.server)},entries:{browser:h(o.cacheEntries.browser),server:"browser"===t?{}:h(o.cacheEntries.server)}}},rawSnapshot:()=>({signal:Object.fromEntries(o.signal),handler:Object.fromEntries(o.handler),server:Object.fromEntries(o.server),partial:Object.fromEntries(o.partial),route:Object.fromEntries(o.route),component:Object.fromEntries(o.component),asyncSignal:Object.fromEntries(o.asyncSignal),cache:{browser:Object.fromEntries(o.cache.browser),server:Object.fromEntries(o.cache.server)}}),view:(t={})=>e(void 0,{backing:o,target:t.target??s}),_map(e){const t=a(e);if(r.has(t))return o[t];if("cache.browser"===t)return o.cache.browser;if("cache.server"===t)return o.cache.server;if("cache.browser.entries"===t)return o.cacheEntries.browser;if("cache.server.entries"===t)return o.cacheEntries.server;throw new Error(`Unknown Async registry type "${e}".`)}};return((e,t={})=>{e.registerMany("signal",t.signal),e.registerMany("handler",t.handler),e.registerMany("server",t.server),e.registerMany("partial",t.partial),e.registerMany("route",t.route),e.registerMany("component",t.component),e.registerMany("asyncSignal",t.asyncSignal),e.registerMany("cache.browser",t.cache?.browser),e.registerMany("cache.server",t.cache?.server);const r=t.entries??{};for(const[t,n]of Object.entries(r.browser??{}))e.set("cache.browser.entries",t,d(n));for(const[t,n]of Object.entries(r.server??{}))e.set("cache.server.entries",t,d(n))})(y,t),y},attachRegistryInspection:(e,t,r)=>(Object.defineProperty(e,"registry",{configurable:!0,enumerable:!0,value:t}),e.keys=()=>t.keys(r),e.entries=()=>t.entries(r),e.inspect=()=>t.entries(r),e)}})(),n=(()=>{const{attachRegistryInspection:e,createRegistryStore:t}=r,n=Symbol.for("@async/framework.cacheDefinition");function o(e={}){return{[n]:!0,kind:"cache-definition",store:e.store??"memory",ttl:e.ttl}}function s(e){if("string"!=typeof e||0===e.length)throw new TypeError("Cache id must be a non-empty string.")}function a(e){if("string"!=typeof e||0===e.length)throw new TypeError("Cache key must be a non-empty string.")}return{defineCache:o,createCacheRegistry:(r={},{now:i=()=>Date.now(),registry:c,type:u="cache.browser"}={})=>{const l=c??t(),f=l._map(u),p=l._map(`${u}.entries`),h=new Map,d=e({register(e,t=o()){s(e);const r=(e=>e?.[n]?e:o(e))(t);if(f.has(e))throw new Error(`Cache "${e}" is already registered.`);return f.set(e,r),e},registerMany(e){for(const[t,r]of Object.entries(e??{}))d.register(t,r);return d},unregister:e=>(s(e),f.delete(e)),resolve:e=>(s(e),f.get(e)),get:e=>(a(e),y(e).value),set(e,t,r={}){a(e);const n=r.ttl??((e,t)=>{if(void 0!==t)return f.get(t);if(f.has(e))return f.get(e);const r=e.split(":")[0];return f.get(r)})(e,r.cache)?.ttl;return p.set(e,{value:t,expiresAt:void 0===n?void 0:i()+n}),t},async getOrSet(e,t,r={}){if(a(e),"function"!=typeof t)throw new TypeError("cache.getOrSet(key, fn) requires a function.");const n=y(e);if(n.found)return n.value;if(h.has(e))return h.get(e);let o;return o=Promise.resolve().then(t).then(t=>(h.get(e)===o&&d.set(e,t,r),t)).finally(()=>{h.get(e)===o&&h.delete(e)}),h.set(e,o),o},delete:e=>(a(e),h.delete(e),p.delete(e)),clear(e){if(void 0===e)return p.clear(),h.clear(),d;for(const t of[...p.keys()])t.startsWith(e)&&p.delete(t);for(const t of[...h.keys()])t.startsWith(e)&&h.delete(t);return d},snapshot(){const e={};for(const[t]of p){const{found:r,value:n}=y(t);r&&void 0!==n&&(e[t]=n)}return e},restore(e={}){for(const[t,r]of Object.entries(e??{}))d.set(t,r);return d},entryKeys:()=>[...p.keys()],entryEntries:()=>l.entries(`${u}.entries`),_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))f.has(t)||d.register(t,r);return d}},l,u);return d.registerMany(r),d;function y(e){const t=p.get(e);return t?void 0!==t.expiresAt&&t.expiresAt<=i()?(p.delete(e),{found:!1,value:void 0}):{found:!0,value:t.value}:{found:!1,value:void 0}}}}})(),o=(()=>{const e=Object.freeze({async:["async:"],class:["class:"],signal:["signal:"],on:["on:"]});function t(t={}){return{async:r(t.async,e.async),class:r(t.class,e.class),signal:r(t.signal,e.signal),on:r(t.on,e.on)}}function r(e,t){return(null==e?t:Array.isArray(e)?e:[e]).map(e=>{if("string"!=typeof e||0===e.length)throw new TypeError("Attribute prefixes must be non-empty strings.");return e})}return{defineAttributeConfig:(e={})=>t(e),normalizeAttributeConfig:t,attributeName:(e,r,n)=>t(e)[r][0]+n,readAttribute:(e,r,n,o)=>{for(const s of t(r)[n]){const t=`${s}${o}`;if(e.hasAttribute?.(t))return e.getAttribute(t)}return null},matchAttribute:(e,r,n)=>{for(const o of t(r)[n])if(e.startsWith(o))return e.slice(o.length);return null}}})(),s=(()=>{const{asyncSignal:n,isAsyncSignal:o}=e,{attachRegistryInspection:s,createRegistryStore:a}=r,{createLazyRegistry:i,isLazyDescriptor:c}=t,u=Symbol.for("@async/framework.signal"),l=Symbol.for("@async/framework.computed"),f=Symbol.for("@async/framework.effect"),p=Symbol.for("@async/framework.signalRef"),h=[];function d(e){let t=e;const r=new Set;return{[u]:!0,kind:"signal",get value(){return t},set value(e){this.set(e)},set:e=>(Object.is(t,e)||(t=e,(()=>{for(const e of[...r])e(t)})()),t),update(e){return this.set(e(t))},subscribe(e){if("function"!=typeof e)throw new TypeError("subscribe(fn) requires a function.");return r.add(e),()=>r.delete(e)},snapshot:()=>t,_cloneSignalDeclaration:()=>d(t)}}function y(e){return"function"==typeof e?._cloneSignalDeclaration?e._cloneSignalDeclaration():g(e)?d("function"==typeof e.snapshot?e.snapshot():e.value):d(e)}function g(e){return Boolean(e&&"object"==typeof e&&"function"==typeof e.subscribe)}function w(e,t){let r=e;for(const e of t){if(null==r)return;r=r[e]}return r}function m(e,t,r){const n=b(e,t[0]);let o=n;for(let e=0;e<t.length-1;e+=1){const r=t[e],n=t[e+1];o[r]=b(o[r],n),o=o[r]}return o[t.at(-1)]=r,n}function b(e,t){return Array.isArray(e)?[...e]:e&&"object"==typeof e?{...e}:(r=t,String(Number(r))===String(r)?[]:{});var r}function v(e,t){const r=e.get(t);if(!r)throw new Error(`Signal "${t}" is not registered.`);return r}function S(e){if("string"!=typeof e||0===e.length)throw new TypeError("Signal id must be a non-empty string.")}return{createSignal:d,computed:function e(t){if("function"!=typeof t)throw new TypeError("computed(fn) requires a function.");const r=d(void 0);return{[l]:!0,kind:"computed",get value(){return r.value},set:e=>r.set(e),update:e=>r.update(e),subscribe:e=>r.subscribe(e),snapshot:()=>r.snapshot(),_cloneSignalDeclaration:()=>e(t),_bindRegistry:(e,n)=>e.effect(()=>{r.set(t.call({signals:e,id:n,server:e._context?.().server,router:e._context?.().router,loader:e._context?.().loader,cache:e._context?.().cache,scheduler:e._context?.().scheduler}))})}},effect:function e(t){if("function"!=typeof t)throw new TypeError("effect(fn) requires a function.");return{[f]:!0,kind:"effect",fn:t,_cloneSignalDeclaration:()=>e(t),_bindRegistry:e=>e.effect(t)}},createSignalRegistry:function(e={},t={}){const r=t.registry??a(),u=t.type??"signal",l=r._map(u),f=r._map("asyncSignal"),b=t.lazyRegistry??i(t),E=new Map,$={},j=new Set;let A=0,O=0;for(const e of l.keys())if(f.has(e))throw new Error(`Signal "${e}" is already registered.`);const R=s({register(e,t){if(S(e),l.has(e)||f.has(e))throw new Error(`Signal "${e}" is already registered.`);const r=(e=>g(e)?e:d(e))(t);return l.set(e,r),_(e,r),R.ref(e)},registerMany(e){for(const[t,r]of Object.entries(e??{}))R.register(t,r);return R},unregister(e){S(e);const t=l.has(e),r=f.has(e);return!(!t&&!r||(t&&(E.get(e)?.(),E.delete(e),l.get(e)?._dispose?.(),l.delete(e),j.delete(e)),f.delete(e),0))},ensure:(e,t)=>(S(e),T(e),l.has(e)||R.register(e,d(t)),R.ref(e)),has:e=>l.has(e)||f.has(e),get(e){const t=k(e);return(e=>{const t=h.at(-1);t&&t.add(e)})(t.path),((e,t)=>{if(o(e)&&t[0]?.startsWith("$")){const r=((e,t)=>{switch(t){case"$value":return e.value;case"$loading":return e.loading;case"$error":return e.error;case"$status":return e.status;case"$version":return e.version;default:return}})(e,t[0]);return w(r,t.slice(1))}return w(e.value,t)})(v(l,t.id),t.parts)},set(e,t){const r=k(e),n=v(l,r.id);if(0===r.parts.length)return n.set(t);const o=m(n.value,r.parts,t);return n.set(o),t},update(e,t){if("function"!=typeof t)throw new TypeError("update(path, fn) requires a function.");return R.set(e,t(R.get(e)))},ref:e=>(S(e),T(e),((e,t)=>({[p]:!0,kind:"signal-ref",id:t,get value(){return e.get(t)},set value(r){e.set(t,r)},get loading(){return e._entry(t).loading??!1},get error(){return e._entry(t).error??null},get status(){return e._entry(t).status??"ready"},get version(){return e._entry(t).version??0},get:()=>e.get(t),set:r=>e.set(t,r),update:r=>e.update(t,r),subscribe:r=>e.subscribe(t,r),refresh(){const r=e._entry(t);if("function"!=typeof r.refresh)throw new Error(`Signal "${t}" cannot refresh.`);return r.refresh()},cancel(r){const n=e._entry(t);if("function"!=typeof n.cancel)throw new Error(`Signal "${t}" cannot cancel.`);return n.cancel(r)},toString:()=>t,[Symbol.toPrimitive]:()=>t}))(R,e)),subscribe(e,t,r={}){if("function"!=typeof t)throw new TypeError("subscribe(path, fn) requires a function.");const n=k(e),o=v(l,n.id),s=++A;return o.subscribe(()=>{((e,t={})=>{const r=t.scheduler;if(!r||"sync"===t.phase)return e();r.enqueue(t.phase??"effect",e,{scope:t.scope,key:t.key})})(()=>t(R.get(n.path),{id:n.id,path:n.path,signal:o}),{...r,key:r.key??`signal:${n.path}:${s}`})})},snapshot(){const e={};for(const[t,r]of l)e[t]="function"==typeof r.snapshot?r.snapshot():r.value;return e},asyncSignal:(e,t)=>(R.register(e,n(e,t)),R.ref(e)),effect(e,t={}){let r,n=[],o=!1;const s=t.scheduler,a=++O,i=()=>{if(o)return;"function"==typeof r&&r();for(const e of n)e();n=[];const t=R._collectDependencies(()=>e.call({signals:R,server:$.server,router:$.router,loader:$.loader,cache:$.cache,scheduler:$.scheduler}));r=t.value,n=t.dependencies.map(e=>R.subscribe(e,c))},c=()=>{s?s.enqueue(t.phase??"effect",i,{scope:t.scope,key:t.key??`effect:${a}`}):i()};return i(),()=>{o=!0,"function"==typeof r&&r();for(const e of n)e()}},destroy(){for(const e of E.values())e();E.clear();for(const e of l.values())e._dispose?.();l.clear()},_collectDependencies(e){const t=new Set;h.push(t);try{return{value:e(),dependencies:[...t]}}finally{h.pop()}},_entry:e=>(T(e),v(l,e)),_setPath(e,t){const r=(e=>{if("string"!=typeof e||0===e.length)throw new TypeError("Signal path must be a non-empty string.");const[t,...r]=e.split(".");return{id:t,parts:r,path:e}})(e);l.has(r.id)||(f.has(r.id)?T(r.id):R.register(r.id,d(0===r.parts.length?t:{})));const n=v(l,r.id);if(0===r.parts.length)return n.set(t);const o=m(n.value,r.parts,t);return n.set(o),t},_setContext:(e={})=>(Object.assign($,e),R),_context:()=>$,_adoptMany(e={}){for(const[t,r]of Object.entries(e??{})){if(!l.has(t)){if(f.has(t))throw new Error(`Signal "${t}" is already registered.`);const e=y(r);l.set(t,e),_(t,e);continue}_(t,l.get(t))}return R}},r,u);for(const[e,t]of l)_(e,t);return R.registerMany(e),R;function _(e,t){if(j.has(e)||"function"!=typeof t?._bindRegistry)return;j.add(e);const r=t._bindRegistry(R,e);"function"==typeof r&&E.set(e,r)}function k(e){if("string"!=typeof e||0===e.length)throw new TypeError("Signal path must be a non-empty string.");const t=e.split(".");for(let r=t.length;r>0;r-=1){const n=t.slice(0,r).join(".");if(l.has(n)||f.has(n))return T(n),{id:n,parts:t.slice(r),path:e}}const[r,...n]=t;return{id:r,parts:n,path:e}}function T(e){if(l.has(e)||!f.has(e))return;const t=f.get(e);if(!c(t)&&"function"!=typeof t)throw new TypeError(`Async signal "${e}" must be a function or lazy descriptor.`);const r=n(e,async function(...r){const n=await b.resolve("asyncSignal",e,t);if("function"!=typeof n)throw new TypeError(`Async signal "${e}" did not resolve to a function.`);return n.apply(this,r)});l.set(e,r),_(e,r)}},cloneSignalDeclaration:y,isSignalRef:e=>Boolean(e?.[p]),signal:d}})(),a=(()=>{const{isSignalRef:e}=s,{attributeName:t,matchAttribute:r,normalizeAttributeConfig:n}=o,a=Symbol.for("@async/framework.template"),i=Symbol.for("@async/framework.rawHtml");function c(e){return Boolean(e?.[a])}function u(e,t={}){if(c(e)){const r=p(t);let n="";for(let t=0;t<e.strings.length;t+=1)n+=e.strings[t],t<e.values.length&&(n+=l(e.values[t],{...r,attribute:h(e.strings[t])}));return n}return l(e,p(t))}function l(n,o=p()){return n?.[i]?n.html:c(n)?u(n,o):o.attribute?((n,o)=>{const s=r(o.attribute.name,o.attributes,"signal"),a=r(o.attribute.name,o.attributes,"class"),i=((t,r)=>e(t)?t.id:"string"==typeof t&&r.signals?.has?.(t)?t:null)(n,o);if("value"===o.attribute.name&&i){const r=((t,r)=>e(t)?t.value:"string"==typeof t&&r.signals?.has?.(t)?r.signals.get(t):t)(n,o),s=t(o.attributes,"signal","value");return`${d(r)}${o.attribute.quote} ${s}=${o.attribute.quote}${d(i)}`}if(null!=s||null!=a){if(i)return d(i);if((e=>Boolean(e&&"object"==typeof e))(n))return d(((e,t)=>"function"!=typeof t.bind?e:t.bind(e))(n,o))}return f(n,o)})(n,o):Array.isArray(n)?n.map(e=>l(e,o)).join(""):e(n)?d(n.value):null==n||!1===n?"":d(n)}function f(t,r){return Array.isArray(t)?t.map(e=>f(e,r)).join(""):e(t)?d(t.value):null==t||!1===t?"":d(t)}function p(e={}){return{...e,attributes:n(e.attributes)}}function h(e){const t=e.match(/(?:^|[\s<])([^\s"'=<>`]+)\s*=\s*(["'])$/);return t?{name:t[1],quote:t[2]}:null}function d(e){return String(e).replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}return{html:(e,...t)=>({[a]:!0,strings:e,values:t}),isTemplateResult:c,rawHtml:e=>({[i]:!0,html:String(e??"")}),renderTemplate:u,escapeHtml:d}})(),i=(()=>{const{attributeName:e}=o,{escapeHtml:n,rawHtml:s,renderTemplate:i}=a,{attachRegistryInspection:c,createRegistryStore:u}=r,{createLazyRegistry:l,isLazyDescriptor:f}=t,p=Symbol.for("@async/framework.component");let h=0;function d(e){if("function"!=typeof e)throw new TypeError("defineComponent(fn) requires a function.");return Object.defineProperty(e,p,{configurable:!0,value:!0}),e}function y(e){return Boolean(e?.[p])}function g(e,t){if("string"!=typeof t||0===t.length)throw new TypeError("Scoped signal or handler name must be a non-empty string.");return`${e}.${t}`}function w(e){return e.displayName||e.name||"anonymous"}return{defineComponent:d,createComponentRegistry:function(e={},t={}){const r=t.registry??u(),n=t.type??"component",o=r._map(n),s=t.lazyRegistry??l(t),a=new Map,i=c({register(e,t){if("string"!=typeof e||0===e.length)throw new TypeError("Component id must be a non-empty string.");if(!y(t)&&"function"!=typeof t&&!f(t))throw new TypeError(`Component "${e}" must be a component function.`);if(o.has(e))throw new Error(`Component "${e}" is already registered.`);return o.set(e,t),e},registerMany(e){for(const[t,r]of Object.entries(e??{}))i.register(t,r);return i},unregister(e){if("string"!=typeof e||0===e.length)throw new TypeError("Component id must be a non-empty string.");return a.delete(e),o.delete(e)},resolve(e){if("string"!=typeof e||0===e.length)throw new TypeError("Component id must be a non-empty string.");const t=o.get(e);return f(t)?(a.has(e)||a.set(e,async function(...r){const o=await s.resolve(n,e,t);if("function"!=typeof o)throw new TypeError(`Component "${e}" did not resolve to a function.`);return o.apply(this,r)}),a.get(e)):t},_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))o.has(t)||i.register(t,r);return i}},r,n);return i.registerMany(e),i},isComponent:y,renderComponent:function t(r,o={},a,c="component"){if(!y(r)&&"function"!=typeof r)throw new TypeError("renderComponent(Component) requires a component function.");const u=`${c}.${w(r)}.${++h}`,l=[],f=[],p=[],d=[],m=[],b={attributes:a.attributes,signals:a.signals,bind(e){const t=a.loader?._registerBinding?.(e);if(!t)throw new Error("Inline template bindings require a Loader.");return m.push(t),t}},v=e=>i(e,b),S=(({runtime:r,scope:o,cleanups:a,attachHooks:i,visibleHooks:c,destroyHooks:u,renderScopedTemplate:l})=>{const{signals:f,handlers:p,loader:h,server:d,router:y,cache:w,scheduler:m}=r,b=new WeakMap;let v=0,S=0;const E={scope:o,signals:f,handlers:p,loader:h,server:d,router:y,cache:w,scheduler:m,signal(e,t){if(1===arguments.length){const t=g(o,"signal."+ ++S),r=f.ensure(t,e);return a.push(()=>f.unregister?.(t)),r}const r=g(o,e),n=!f.has(r),s=f.ensure(r,t);return n&&a.push(()=>f.unregister?.(r)),s},computed(e,t){const r=g(o,e),n=!f.has(r),s=f.ensure(r,void 0);n&&a.push(()=>f.unregister?.(r));const i=f.effect(()=>{f.set(r,t.call(E))});return a.push(i),s},asyncSignal(e,t){const r=g(o,e),n=!f.has(r);return f.has(r)||f.asyncSignal(r,t),n&&a.push(()=>f.unregister?.(r)),f.ref(r)},effect(e){const t=f.effect(()=>e.call(E),{scheduler:m,phase:"effect",scope:o});return a.push(t),t},handler(e,t){if("function"==typeof e&&void 0===t){const t=e;if(b.has(t))return b.get(t);const r=$("handler."+ ++v,t);return b.set(t,r),r}if("function"!=typeof t)throw new TypeError("this.handler(name, fn) or this.handler(fn) requires a function.");return $(e,t)},render(e,n={}){const u=t(e,n,r,o);return a.push(u.cleanup),i.push(e=>u.attach(e)),c.push(e=>u.visible(e,h._observeVisible)),s(u.html)},suspense(t,o){const a=t?.id;if(!a)throw new TypeError("this.suspense(signalRef, views) requires a signal ref.");const i=(e=>{const t="function"==typeof e?{ready:e}:e;if(!t||"object"!=typeof t||Array.isArray(t))throw new TypeError("this.suspense(signalRef, views) requires views to be a function or object.");for(const e of["loading","ready","error"])if(Object.hasOwn(t,e)&&void 0!==t[e]&&"function"!=typeof t[e])throw new TypeError(`this.suspense(signalRef, views) view "${e}" must be a function.`);return t})(o),c=[];for(const o of["loading","ready","error"]){const s=i[o];if(!s)continue;const u=e(r.attributes,"async",o),f=l(s.call(E,t));c.push(`<template ${u}="${n(a)}">${f}</template>`)}return s(c.join(""))},on(e,t){if("string"!=typeof e||0===e.length)throw new TypeError("Component lifecycle event must be a non-empty string.");if("function"!=typeof t)throw new TypeError(`Component lifecycle "${e}" requires a function.`);const r="mount"===e?"attach":e;if("attach"!==r)if("visible"!==r){if("destroy"!==r)throw new Error(`Unsupported component lifecycle event "${e}".`);u.push(()=>t.call(E))}else c.push(e=>t.call(E,e));else i.push(e=>t.call(E,e))},onMount(e){E.on("attach",e)},onVisible(e){E.on("visible",e)}};return E;function $(e,t){const r=g(o,e);return p.register(r,e=>t.call({...E,...e},e)),a.push(()=>p.unregister?.(r)),r}})({runtime:a,scope:u,cleanups:l,attachHooks:f,visibleHooks:p,destroyHooks:d,renderScopedTemplate:v}),E=r.call(S,o);if(E&&"function"==typeof E.then)throw new TypeError(`Component "${w(r)}" returned a Promise. Async components are not supported by synchronous renderComponent(). Use an async partial or handler instead.`);return{html:v(E),attach(e){for(let t=0;t<f.length;t+=1){const r=f[t];a.scheduler?.enqueue("lifecycle",()=>{const t=r(e);"function"==typeof t&&l.push(t)},{scope:u,key:`attach:${t}`})??$(r,e)}},mount(e){this.attach(e)},visible(e,t){if(0===p.length)return;const r=t(e,()=>{for(let t=0;t<p.length;t+=1){const r=p[t];a.scheduler?.enqueue("lifecycle",()=>{const t=r(e);"function"==typeof t&&l.push(t)},{scope:u,key:`visible:${t}`})??j(r,e)}});"function"==typeof r&&l.push(r)},cleanup(){for(;d.length>0;)d.pop()?.();for(a.scheduler?.markScopeDestroyed(u);l.length>0;)l.pop()?.();for(;m.length>0;)a.loader?._releaseBinding?.(m.pop())}};function $(e,t){const r=e(t);"function"==typeof r&&l.push(r)}function j(e,t){const r=e(t);"function"==typeof r&&l.push(r)}},component:d}})(),c=(()=>{const e=Symbol.for("@async/framework.serverResult"),t=Symbol("@async/framework.serverResultInvocation");async function r(e,r={}){if(!d(e))return e;const n=((e={})=>e[t]??{applied:new WeakSet})(r);if(n.applied.has(e))return e;if(n.applied.add(e),e.error)throw(o=e.error)instanceof Error?o:o&&"object"==typeof o&&"string"==typeof o.message?Object.assign(new Error(o.message),o):new Error(String(o));var o;if(e.signals&&r.signals)for(const[t,n]of Object.entries(e.signals))r.signals.set?.(t,n);return e.cache?.browser&&r.cache?.restore&&r.cache.restore(e.cache.browser),e.boundary&&Object.hasOwn(e,"html")&&r.loader?.swap?.(e.boundary,e.html),e.redirect&&await(r.router?.navigate?.(e.redirect)),e}async function n(e,t={}){return await r(e,t),o(e)}function o(e){return d(e)?Object.hasOwn(e,"value")?e.value:void 0:e}function s(e={}){const r=e[t]??{applied:new WeakSet};return{...e,[t]:r}}function a(e={}){const t=f(e);if(t)return p(new t.ownerDocument.defaultView.FormData(t));const r=e.element??e.el??e.event?.target;return r?{value:"value"in r?r.value:void 0,checked:"checked"in r?r.checked:void 0,dataset:r.dataset?{...r.dataset}:{}}:{}}function i(e,t={},r=()=>({})){const n=new Map;return function o(s){const a=s.join(".");if(n.has(a))return n.get(a);const c=new Proxy(async(...t)=>{if(0===s.length)throw new Error("Server namespace is not directly callable.");const n=r()??{};return e(s.join("."),t,n)},{get(n,a){if("then"!==a)return a in n?n[a]:0===s.length&&"_withContext"===a?(n={})=>i(e,t,()=>({...r()??{},...n})):0===s.length&&"run"===a&&"function"==typeof t.run?(e,n=[],o={})=>t.run(e,n,{...r()??{},...o}):0===s.length&&Object.hasOwn(t,a)?t[a]:a===Symbol.toStringTag?"AsyncServerNamespace":"toString"===a?()=>0===s.length?"server":`server.${s.join(".")}`:o([...s,String(a)])}});return n.set(a,c),c}([])}function c(e=[],t){const r={};for(const n of e)r[n]=u(t,n);return r}function u(e,t){if(!e||"function"!=typeof e.get)throw new Error(`Signal "${t}" cannot be read without a signal registry.`);return e.get(t)}function l(e,t,{forServer:r}={}){if(("$event"===e||"$el"===e)&&r)throw new Error(`${e} cannot be passed to a server command.`);if("$event"===e)return t.event;if("$el"===e)return t.element??t.el;if("$value"===e){const e=t.element??t.el??t.event?.target;return e?.value}if("$checked"===e){const e=t.element??t.el??t.event?.target;return e?.checked}if("$form"===e){const e=f(t);return e?p(new e.ownerDocument.defaultView.FormData(e)):{}}if("$dataset"===e){const e=t.element??t.el??t.event?.target;return e?.dataset?{...e.dataset}:{}}throw new Error(`Event local "${e}" is not supported.`)}function f(e){const t=e.event,r=e.element??e.el??t?.target;return"FORM"===r?.tagName?r:"submit"===t?.type&&"FORM"===t.target?.tagName?t.target:"submit"===t?.type&&r?.form?r.form:null}function p(e){const t={};for(const[r,n]of e.entries())Object.hasOwn(t,r)?t[r]=Array.isArray(t[r])?[...t[r],n]:[t[r],n]:t[r]=n;return t}function h(e,t=new Set){if("bigint"==typeof e)throw new Error("Server proxy JSON transport does not support BigInt values.");if(null==e||"object"!=typeof e)return;if(t.has(e))throw new Error("Server proxy JSON transport does not support circular values.");t.add(e);const r=Object.prototype.toString.call(e);if("[object File]"===r||"[object Blob]"===r||"[object FormData]"===r)throw new Error("Server proxy JSON transport does not support File, Blob, or FormData values yet.");if(((e,t=Object.prototype.toString.call(e))=>"[object URLSearchParams]"===t||"[object Headers]"===t||"[object Request]"===t||"[object Response]"===t||"[object ReadableStream]"===t||"[object ArrayBuffer]"===t||ArrayBuffer.isView(e))(e,r))throw new Error("Server proxy JSON transport does not support URLSearchParams, Headers, Request, Response, ReadableStream, ArrayBuffer, or typed array values yet.");if(Array.isArray(e)){for(const r of e)h(r,t);t.delete(e)}else{for(const r of Object.values(e))h(r,t);t.delete(e)}}function d(t){return!(!t||"object"!=typeof t||Array.isArray(t)||!0!==t[e]&&1!==t.__async_server_result__)}function y(e){if("string"!=typeof e||0===e.length)throw new TypeError("Server function id must be a non-empty string.")}return{createServerProxy:({endpoint:e="/__async/server",transport:t,signals:r,loader:o,router:u,cache:l,scheduler:f,headers:p={}}={})=>{if("function"!=typeof t)throw new TypeError("createServerProxy(...) requires a transport function.");const d={signals:r,loader:o,router:u,cache:l,scheduler:f};async function g(r,o=[],i={}){y(r);const u=s({...d,...i}),l={args:o,input:i.input??a(u),signals:i.signalValues??c(i.signalPaths,u.signals)};h(l);const f=await t(((e,t)=>`${String(e).replace(/\/$/,"")}/${encodeURIComponent(t)}`)(e,r),{method:"POST",headers:{"content-type":"application/json",...p},body:JSON.stringify(l),signal:i.abort});if(((e,t)=>{if(!t||"object"!=typeof t)throw new Error(`Server function "${e}" transport returned an invalid response: expected a fetch Response-like object.`);if("boolean"!=typeof t.ok)throw new Error(`Server function "${e}" transport returned an invalid response: missing boolean ok.`);if(!t.headers||"function"!=typeof t.headers.get)throw new Error(`Server function "${e}" transport returned an invalid response: missing headers.get(name).`)})(r,f),!f.ok)throw new Error(`Server function "${r}" failed with ${f.status}.`);return n(await(async(e,t)=>{if(204===t.status)return;if((t.headers.get("content-type")??"").includes("application/json")){if("function"!=typeof t.json)throw new Error(`Server function "${e}" transport returned an invalid response: missing json().`);try{return await t.json()}catch(t){throw new Error(`Server function "${e}" returned invalid JSON: ${r=t,r instanceof Error?r.message:String(r)}`,{cause:t})}}var r;if("function"!=typeof t.text)throw new Error(`Server function "${e}" transport returned an invalid response: missing text().`);return t.text()})(r,f),u)}return i(g,{run:g,_setContext(e={}){Object.assign(d,e)}},()=>d)},resolveServerCommandArguments:(e,t={})=>{const r=[],n={},o=[];for(const s of e){if("local"===s.type){r.push(l(s.name,t,{forServer:!0}));continue}const e=u(t.signals,s.path);r.push(e),n[s.path]=e,o.push(s.path)}return{args:r,signalValues:n,signalPaths:o}},applyServerResult:r,consumeServerResult:n,unwrapServerResult:o,createServerResultContext:s,defaultInput:a,createServerNamespace:i,createSignalReader:e=>e&&"function"!=typeof e.get?{get:t=>((e,t)=>String(t).split(".").reduce((e,t)=>e?.[t],e))(e,t),snapshot:()=>({...e})}:e,assertServerId:y}})(),u=(()=>{const{defaultInput:e,resolveServerCommandArguments:n}=c,{attachRegistryInspection:o,createRegistryStore:s}=r,{createLazyRegistry:a,isLazyDescriptor:i}=t,u=new Set(["prevent","preventDefault","stopPropagation","stopImmediatePropagation"]),l={prevent:f,preventDefault:f,stopPropagation(){this.event?.stopPropagation?.()},stopImmediatePropagation(){this.event?.stopImmediatePropagation?.()}};function f(){this.event?.preventDefault?.()}function p(e){if("string"!=typeof e||0===e.trim().length)throw new TypeError("Handler ref must be a non-empty string.");return e.split(";").map(e=>e.trim()).filter(Boolean).map(d)}function h(e){if("string"!=typeof e||0===e.length)throw new TypeError("Handler id must be a non-empty string.")}function d(e){if(e.startsWith("server."))return(e=>{const t=e.indexOf("(");if(-1===t||!e.endsWith(")"))throw new Error(`Server command "${e}" must be called with parentheses.`);const r=e.slice(7,t).trim();if(!(e=>/^[^.\s();]+(?:\.[^.\s();]+)*$/.test(e))(r))throw new Error(`Server command "${e}" has an invalid function id.`);return{type:"server",id:r,args:(n=e.slice(t+1,-1),0===n.trim().length?[]:n.split(",").map(e=>e.trim()).filter(Boolean).map(y))};var n})(e);if(e.includes("(")||e.includes(")"))throw new Error(`Command "${e}" is not supported.`);return{type:"handler",id:e}}function y(e){if(!/^[^\s,();]+$/.test(e))throw new Error(`Argument "${e}" is not supported.`);return e.startsWith("$")?{type:"local",name:e}:{type:"signal",path:e}}return{createHandlerRegistry:function(t={},r={}){const c=r.registry??s(),f=r.type??"handler",d=c._map(f),y=r.lazyRegistry??a(r),g=new Map,w=o({register(e,t){if(h(e),"function"!=typeof t&&!i(t))throw new TypeError(`Handler "${e}" must be a function.`);if(d.has(e))throw new Error(`Handler "${e}" is already registered.`);return d.set(e,t),e},registerMany(e){for(const[t,r]of Object.entries(e??{}))w.register(t,r);return w},unregister:e=>(h(e),g.delete(e),d.delete(e)),resolve(e){h(e);const t=d.get(e);return i(t)?(g.has(e)||g.set(e,async function(...r){const n=await y.resolve(f,e,t);if("function"!=typeof n)throw new TypeError(`Handler "${e}" did not resolve to a function.`);return n.apply(this,r)}),g.get(e)):t},async run(t,r={}){const o=p(t),s=[];let a=!1;const i={...r,handlers:w,input:r.input??e(r),stop(){a=!0}};for(const e of o){if(a)break;if("server"===e.type){if(!i.server||"function"!=typeof i.server.run)throw new Error(`Server command "${e.id}" cannot run without a server registry.`);const t=n(e.args,i),r=await i.server.run(e.id,t.args,{...i,signalPaths:t.signalPaths,signalValues:t.signalValues});s.push(r);continue}const t=w.resolve(e.id);if(!t)throw new Error(`Handler "${e.id}" is not registered.`);const r=await t.call(i,i);u.has(e.id)&&t===l[e.id]||s.push(r)}return s},_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))d.has(t)||w.register(t,r);return w}},c,f);return((e,t)=>{for(const[r,n]of Object.entries(l))if(t.has(r)){if(t.get(r)!==n)throw new Error(`Handler "${r}" is already registered.`)}else e.register(r,n)})(w,d),w.registerMany(t),w},parseHandlerRef:p,isHandlerToken:e=>u.has(e)}})(),l=(()=>{const e=["binding","lifecycle","effect","async","post"];function t(e){return"object"==typeof e&&null!==e||"function"==typeof e}function r(){}return{createScheduler:(n={})=>{const o=[...n.phases??e],s=new Map(o.map(e=>[e,[]])),a=new Map,i=new WeakSet,c=new Set,u=new WeakMap,l="function"==typeof n.onError?n.onError:void 0,f=n.maxDepth??100,p=n.strategy??"microtask";let h=!1,d=!1,y=!1,g=0,w=0,m=0;const b={strategy:p,phases:o,batch(e){if("function"!=typeof e)throw new TypeError("scheduler.batch(fn) requires a function.");j(),g+=1;let t=!1;try{const r=e();return r&&"function"==typeof r.then?(t=!0,r.finally(()=>{g-=1,v()})):r}finally{!t&&g>0&&(g-=1,v())}},enqueue(e,t,n={}){if(j(),(e=>{if(!s.has(e))throw new Error(`Unknown scheduler phase "${e}".`)})(e),"function"!=typeof t)throw new TypeError("scheduler.enqueue(phase, fn) requires a function.");const o=n.scope;if(A(o))return r;const i=void 0===n.key?void 0:`${e}:${(e=>void 0===e?"global":"object"==typeof e&&null!==e||"function"==typeof e?(u.has(e)||u.set(e,"scope:"+ ++m),u.get(e)):String(e))(o)}:${String(n.key)}`;if(i&&a.has(i))return a.get(i).cancel;const c={id:++w,phase:e,fn:t,scope:o,boundary:n.boundary,key:i,canceled:!1,cancel(){c.canceled=!0,c.key&&a.delete(c.key)}};return s.get(e).push(c),c.key&&a.set(c.key,c),v(),c.cancel},afterFlush:(e,t={})=>b.enqueue("post",e,t),async flush(){if(j(),d)return;y=!1,d=!0;let e=0;try{for(;E();){if(e+=1,e>f)throw new Error(`Scheduler exceeded maxDepth ${f}.`);for(const e of o)await S(e)}}finally{d=!1,E()&&v()}},async flushScope(e){if(j(),d)return;y=!1,d=!0;let t=0;try{for(;$(e);){if(t+=1,t>f)throw new Error(`Scheduler exceeded maxDepth ${f}.`);for(const t of o)await S(t,e)}}finally{d=!1,E()&&v()}},cancelScope(e){if(void 0===e)return b;for(const t of s.values())for(const r of t)r.scope===e&&r.cancel();return b},markScopeDestroyed:e=>(void 0!==e&&(t(e)?i.add(e):c.add(e),b.cancelScope(e)),b),reviveScope:e=>(void 0!==e&&(t(e)?i.delete(e):c.delete(e)),b),isScopeDestroyed:e=>A(e),inspect(){const e={};for(const[t,r]of s)e[t]=r.filter(e=>!e.canceled).length;return{strategy:p,phases:[...o],pending:e,scopesDestroyed:c.size,flushing:d,scheduled:y}},destroy(){h=!0;for(const e of s.values()){for(const t of e)t.cancel();e.length=0}a.clear(),c.clear()}};return b;function v(){var e;"manual"===p||h||d||g>0||y||(y=!0,e=()=>{h||b.flush()},"function"!=typeof queueMicrotask?Promise.resolve().then(e):queueMicrotask(e))}async function S(e,t){const r=s.get(e),n=[],o=[];for(const e of r.splice(0))e.canceled||(void 0===t||e.scope===t?o.push(e):n.push(e));r.push(...n);for(const e of o)if(e.key&&a.delete(e.key),!e.canceled&&!A(e.scope))try{await e.fn()}catch(t){if(!l)throw t;l(t,e)}}function E(){for(const e of s.values())if(e.some(e=>!e.canceled))return!0;return!1}function $(e){for(const t of s.values())if(t.some(t=>!t.canceled&&t.scope===e))return!0;return!1}function j(){if(h)throw new Error("Scheduler has been destroyed.")}function A(e){return void 0!==e&&(t(e)?i.has(e):c.has(e))}}}})(),f=(()=>{const{renderComponent:e}=i,{createHandlerRegistry:t}=u,{createScheduler:r}=l,{createSignalRegistry:n,isSignalRef:a}=s,{matchAttribute:c,normalizeAttributeConfig:f,readAttribute:p}=o,h="__async:inline:";function d({root:o,signals:s,handlers:i,server:u,router:l,cache:d,attributes:E,scheduler:R}={}){const T=o?.ownerDocument??o??globalThis.document,q=o??T,C=s??n(),M=i??t(),x=R??r(),D=!R,L=f(E),B=new Set,P=new WeakMap,N=new WeakMap,z=new WeakSet,H=new WeakSet,W=new WeakMap,U=new WeakSet,V=new Map,I=new WeakMap;let F=0,J=!1;const K={root:q,signals:C,handlers:M,server:u,router:l,cache:d,scheduler:x,attributes:L,start:()=>(ne(),K.scan(q),K),scan:(e=q)=>(ne(),(e=>{for(const t of A(e))x.reviveScope?.(t)})(e),(e=>{for(const t of A(e))for(const e of t.getAttributeNames?.()??[]){const r=c(e,L,"signal");if(r){if("text"===r){const r=t.getAttribute(e);G(t,`text:${r}`,r,e=>{t.textContent=e??""});continue}if("value"===r){const r=t.getAttribute(e);G(t,`value:${r}`,r,e=>{"value"in t&&t.value!==String(e??"")?t.value=e??"":"value"in t||t.setAttribute("value",e??"")}),Q(t,r);continue}if(r.startsWith("attr:")){const n=r.slice(5),o=t.getAttribute(e);G(t,`attr:${n}:${o}`,o,e=>$(t,n,e));continue}if(r.startsWith("prop:")){const n=r.slice(5),o=t.getAttribute(e);G(t,`prop:${n}:${o}`,o,e=>j(t,n,e));continue}if(r.startsWith("class:")){const n=r.slice(6),o=t.getAttribute(e);""===n||"{}"===n?Y(t,n,o):G(t,`class:${n}:${o}`,o,e=>{t.classList.toggle(n,Boolean(e))});continue}if("class"===r){const r=t.getAttribute(e);Y(t,"{}",r)}}}})(e),(e=>{for(const t of A(e))for(const e of t.getAttributeNames?.()??[]){const r=c(e,L,"class");null!=r&&Y(t,r,t.getAttribute(e))}})(e),(e=>{for(const t of A(e))if("function"==typeof t.getAttributeNames)for(const e of t.getAttributeNames()){const r=c(e,L,"on");r&&"attach"!==r&&"mount"!==r&&"visible"!==r&&Z(t,r,t.getAttribute(e))}})(e),(e=>{for(const t of A(e)){if(U.has(t))continue;const e=O(t,L);if(null!=e){if(!W.has(t)){const r=S(t,e,L);if(0===Object.keys(r).length||!C.has(e))continue;const n={id:e,templates:r,cleanup:C.subscribe(`${e}.$status`,()=>{x.enqueue("binding",()=>X(t),{scope:t,key:`boundary:${e}`})})};W.set(t,n),oe(n.cleanup,t)}X(t)}}})(e),(e=>{for(const t of A(e)){const e=ee(t,["attach","mount"]);if(0!==e.length&&!z.has(t)){z.add(t);for(const r of e)ue(t,()=>te(t,r),`attach:${r}`)}}for(const t of A(e)){const e=p(t,L,"on","visible");null!=e&&(H.has(t)||(H.add(t),oe(re(t,()=>ue(t,()=>te(t,e),`visible:${e}`)),t)))}})(e),K),swap(e,t){ne();const r=((e,t,r)=>{for(const n of A(e))if(O(n,r)===String(t))return n;return null})(q,e,L);if(!r)throw new Error(`Boundary "${e}" was not found.`);return ae(r),r.replaceChildren(_(t,T)),K.scan(r),r},mount(t,r,n={}){ne();const o=e(r,n,{signals:C,handlers:M,loader:K,server:K.server,router:K.router,cache:K.cache,scheduler:x,attributes:L});return ae(t),t.replaceChildren(_(o.html,t.ownerDocument)),K.scan(t),o.mount(t),o.visible(t,K._observeVisible),oe(o.cleanup,t,"children"),o},destroy(){if(!J){J=!0,(e=>{for(const t of A(e))x.markScopeDestroyed(t)})(q);for(const e of[...B])se(e);B.clear(),D&&x.destroy()}},_observeVisible:(e,t)=>re(e,t),_registerBinding(e){const t=`${h}${++F}`;return V.set(t,e),t},_releaseBinding(e){V.delete(e)}};function Z(e,t,r){const n=`${t}:${r}`,o=P.get(e)??new Set;if(o.has(n))return;o.add(n),P.set(e,o);const s=async t=>{try{await x.batch(()=>M.run(r,{signals:C,handlers:M,loader:K,server:K.server,router:K.router,cache:K.cache,scheduler:x,event:t,element:e,el:e,root:q}))}catch(t){k(e,t)}};e.addEventListener(t,s),oe(()=>e.removeEventListener(t,s),e)}function Y(e,t,r){if(""===t||"{}"===t){const t=b(e);let n=new Set;return void G(e,`class:{}:${r}`,r,r=>{const o=y(r),s=b(e);for(const e of n)o.has(e)||t.has(e)||s.delete(e);for(const e of o)s.add(e);v(e,s),n=o},{rawInline:!0})}G(e,`class:${t}:${r}`,r,r=>{((e,t,r)=>{const n=b(e);for(const e of y(t))r?n.add(e):n.delete(e);v(e,n)})(e,t,Boolean(r))})}function G(e,t,r,n,o={}){const s=N.get(e)??new Set;if(s.has(t))return;s.add(t),N.set(e,s);const a=()=>((e,t={})=>{if(m(e)){const r=V.get(e);return t.rawInline?r:g(r)}return C.get(e)})(r,o);n(a()),oe(((e,t)=>{if(!m(e))return C.subscribe(e,t);const r=w(V.get(e)).map(e=>e.subscribe(t));return()=>{for(const e of r)e()}})(r,()=>{x.enqueue("binding",()=>n(a()),{scope:e,key:t})}),e)}function Q(e,t){Z(e,"input",`__async:set:${t}`),Z(e,"change",`__async:set:${t}`),M.resolve(`__async:set:${t}`)||M.register(`__async:set:${t}`,({element:e})=>{((e,t)=>{if(!m(e))return C.set(e,t);const r=V.get(e);if(a(r))return r.set(t);throw new Error(`Inline binding "${e}" is not writable.`)})(t,e.value)})}function X(e){const t=W.get(e);if(!t)return;const r=C.get(`${t.id}.$status`),n=((e,t)=>"ready"===t?e.ready??e.loading??e.error:"error"===t?e.error??e.ready??e.loading:e.loading??e.ready??e.error)(t.templates,r);if(n){ae(e),e.replaceChildren(n.content.cloneNode(!0)),U.add(e);try{K.scan(e)}finally{U.delete(e)}}}function ee(e,t){const r=[];for(const n of t){const t=p(e,L,"on",n);null!=t&&r.push(t)}return r}async function te(e,t){try{const r=await M.run(t,{signals:C,handlers:M,loader:K,server:K.server,router:K.router,cache:K.cache,scheduler:x,element:e,el:e,root:q});for(const t of r)"function"==typeof t&&oe(t,e)}catch(t){k(e,t)}}function re(e,t){const r=(e.ownerDocument?.defaultView??globalThis).IntersectionObserver??globalThis.IntersectionObserver;if(!r)return x.enqueue("lifecycle",()=>{J||t(e)},{scope:e,key:"visible:fallback"}),()=>{};const n=new r(r=>{r.some(e=>e.isIntersecting)&&(n.disconnect(),t(e))});return n.observe(e),()=>n.disconnect()}function ne(){if(J)throw new Error("Loader has been destroyed.")}function oe(e,t,r="self"){if("function"!=typeof e)return e;if(B.add(e),t){const n=I.get(t)??[];n.push({cleanup:e,mode:r}),I.set(t,n)}return e}function se(e){"function"==typeof e&&B.has(e)&&(B.delete(e),e())}function ae(e){ce(e,"children");for(const t of[...e.childNodes??[]])ie(t)}function ie(e){if(1===e.nodeType)for(const t of A(e))ce(t),x.markScopeDestroyed(t)}function ce(e,t){const r=I.get(e);if(!r)return;const n=[];for(const e of r)t&&e.mode!==t?n.push(e):se(e.cleanup);n.length>0?I.set(e,n):I.delete(e)}function ue(e,t,r){x.enqueue("lifecycle",t,{scope:e,key:r})}return C._setContext?.({server:K.server,router:K.router,loader:K,cache:K.cache,scheduler:x}),K.server?._setContext?.({signals:C,handlers:M,loader:K,router:K.router,cache:K.cache,scheduler:x}),K}function y(e,t=new Set){if(null==e||!1===e)return t;if(a(e)){const r=e.value;return!0===r?(t.add(e.id.split(".").at(-1)),t):y(r,t)}if("string"==typeof e){for(const r of e.split(/\s+/).filter(Boolean))t.add(r);return t}if(Array.isArray(e)){for(const r of e)y(r,t);return t}if("object"==typeof e){for(const[r,n]of Object.entries(e))(a(n)?n.value:n)&&y(r,t);return t}return!0!==e&&t.add(String(e)),t}function g(e){return a(e)?e.value:Array.isArray(e)?e.map(g):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,g(t)])):e}function w(e,t=new Map){if(a(e))return t.set(e.id,e),[...t.values()];if(Array.isArray(e)){for(const r of e)w(r,t);return[...t.values()]}if(e&&"object"==typeof e)for(const r of Object.values(e))w(r,t);return[...t.values()]}function m(e){return"string"==typeof e&&e.startsWith(h)}function b(e){return y(e.getAttribute("class")??"")}function v(e,t){const r=[...t].join(" ");0!==r.length?e.setAttribute("class",r):e.removeAttribute("class")}function S(e,t,r){const n={};for(const o of[...e.children].filter(e=>"TEMPLATE"===e.tagName))E(o,"loading",t,e,r)&&(n.loading=o),E(o,"ready",t,e,r)&&(n.ready=o),E(o,"error",t,e,r)&&(n.error=o);return n}function E(e,t,r,n,o){return p(e,o,"async",t)===r||R(n)&&e.hasAttribute?.(t)}function $(e,t,r){if(!1===r||null==r)return e.removeAttribute(t),void(t in e&&(e[t]=!1));e.setAttribute(t,!0===r?"":String(r)),t in e&&(e[t]=r)}function j(e,t,r){e[t]=null!=r?r:""}function A(e){return(e=>{const t=[];return 1===e?.nodeType&&e.matches?.("*")&&t.push(e),t.push(...e?.querySelectorAll?.("*")??[]),t})(e)}function O(e,t){return R(e)&&e.hasAttribute?.("for")?e.getAttribute("for"):p(e,t,"async","boundary")}function R(e){return"ASYNC-SUSPENSE"===e?.tagName}function _(e,t){if(11===e?.nodeType)return e;if("TEMPLATE"===e?.tagName)return e.content.cloneNode(!0);if(e?.nodeType){const r=t.createDocumentFragment();return r.append(e),r}const r=t.createElement("template");return r.innerHTML=String(e??""),r.content.cloneNode(!0)}function k(e,t){const r=e.ownerDocument?.defaultView?.CustomEvent??globalThis.CustomEvent;e.dispatchEvent(new r("async:error",{bubbles:!0,detail:{error:t}}))}return{Loader:d,AsyncLoader:d}})(),p=(()=>{const{isTemplateResult:e,renderTemplate:n}=a,{attachRegistryInspection:o,createRegistryStore:s}=r,{createLazyRegistry:i,isLazyDescriptor:c}=t;function u(e,t={}){return r=e,Boolean(r&&"object"==typeof r&&!Array.isArray(r)&&(Object.hasOwn(r,"html")||Object.hasOwn(r,"signals")||Object.hasOwn(r,"boundary")||Object.hasOwn(r,"redirect")||Object.hasOwn(r,"status")||Object.hasOwn(r,"cache")))?{...e,html:Object.hasOwn(e,"html")?l(e.html,t):e.html}:{html:l(e,t)};var r}function l(t,r){return t?.nodeType||"string"==typeof t?t:(e(t),n(t,function(e){return{attributes:e.loader?.attributes,signals:e.signals,bind:e.loader?._registerBinding?.bind(e.loader)}}(r)))}function f(e){if("string"!=typeof e||0===e.length)throw new TypeError("Partial id must be a non-empty string.")}return{createPartialRegistry:function(e={},t={}){const r=t.registry??s(),n=t.type??"partial",a=r._map(n),l=t.lazyRegistry??i(t),p=new Map,h=o({register(e,t){if(f(e),"function"!=typeof t&&!c(t))throw new TypeError(`Partial "${e}" must be a function.`);if(a.has(e))throw new Error(`Partial "${e}" is already registered.`);return a.set(e,t),e},registerMany(e){for(const[t,r]of Object.entries(e??{}))h.register(t,r);return h},unregister:e=>(f(e),p.delete(e),a.delete(e)),resolve(e){f(e);const t=a.get(e);return c(t)?(p.has(e)||p.set(e,async function(...r){const o=await l.resolve(n,e,t);if("function"!=typeof o)throw new TypeError(`Partial "${e}" did not resolve to a function.`);return o.apply(this,r)}),p.get(e)):t},async render(e,t={},r={}){f(e);const n=h.resolve(e);if(!n)throw new Error(`Partial "${e}" is not registered.`);const o={...r,id:e,props:t,cache:r.cache,partials:h};return u(await n.call(o,t),o)},_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))a.has(t)||h.register(t,r);return h}},r,n);return h.registerMany(e),h},normalizePartialResult:u}})(),h=(()=>{const{Loader:e}=f,{createHandlerRegistry:t}=u,{createScheduler:n}=l,{createSignalRegistry:a}=s,{applyServerResult:i}=c,{createRegistryStore:p}=r,{normalizeAttributeConfig:h}=o;function d(e,t={}){return{...t,partial:e}}const y=d,g=new Set(["csr","spa","ssr","mpa"]);function w(e={},t={}){const r=t.registry??p(),n=t.type??"route",o=r._map(n),s=[],a={registry:r,register(e,t){if(j(e),s.some(t=>t.pattern===e))throw new Error(`Route "${e}" is already registered.`);const r=m(e,t);return o.set(e,r.definition),s.push(r),E(s),r},registerMany(e){for(const[t,r]of Object.entries(e??{}))a.register(t,r);return a},unregister(e){j(e);const t=s.findIndex(t=>t.pattern===e);return-1!==t&&s.splice(t,1),o.delete(e)},match(e){const t=(e=>e instanceof URL?e:new URL(String(e),globalThis.location?.href??"http://localhost/"))(e).pathname;for(const e of s){const r=e.regex.exec(t);if(!r)continue;const n={};return e.keys.forEach((e,t)=>{n[e]=S(r[t+1]??"")}),{pattern:e.pattern,params:n,route:e.definition}}return null},entries:()=>s.map(({pattern:e,definition:t})=>({pattern:e,route:t})),keys:()=>[...o.keys()],inspect:()=>r.entries(n),_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))o.has(t)?i(t,o.get(t)):a.register(t,r);return a}};for(const[e,t]of o)i(e,t);return a.registerMany(e),a;function i(e,t){if(s.some(t=>t.pattern===e))return;const r=m(e,t);o.set(e,r.definition),s.push(r),E(s)}}function m(e,t){const r="string"==typeof t?d(t):t,{regex:n,keys:o}=(e=>{const t=[];if("*"===e)return{regex:/^.*$/,keys:t};if("/"===e)return{regex:/^\/$/,keys:t};const r=e.split("/").map(e=>e.startsWith(":")?(t.push(e.slice(1)),"([^/]+)"):String(e).replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("/");return{regex:new RegExp(`^${r}$`),keys:t}})(e);return{pattern:e,regex:n,keys:o,score:$(e),definition:r}}function b(e,t){return e?.closest?.(t)}function v(e){return Object.fromEntries(e.searchParams.entries())}function S(e){try{return decodeURIComponent(e)}catch{return e}}function E(e){e.sort((e,t)=>t.score-e.score||t.pattern.length-e.pattern.length)}function $(e){return"*"===e?-1:e.split("/").filter(Boolean).reduce((e,t)=>"*"===t?e:t.startsWith(":")?e+2:e+4,"/"===e?3:0)}function j(e){if("string"!=typeof e||"*"!==e&&!e.startsWith("/"))throw new TypeError('Route pattern must be a path string or "*".')}return{defineRoute:d,createRouteRegistry:w,createRouter:({mode:r="ssr",root:o,boundary:s="route",routes:c=w(),loader:u,signals:l,handlers:f,server:p,cache:d,partials:y,attributes:m,scheduler:S}={})=>{(e=>{if(!g.has(e))throw new TypeError(`Unknown router mode "${e}".`)})(r);const E=o?.ownerDocument??o??globalThis.document,$=o??E,j=l??u?.signals??a(),A=f??u?.handlers??t(),O=S??u?.scheduler??n(),R=!S&&!u?.scheduler,_=h(m??u?.attributes),k=u??e({root:$,signals:j,handlers:A,server:p,cache:d,scheduler:O,attributes:_}),T=!u,q=new Set;let C,M=!1,x=0;const D={mode:r,root:$,boundary:s,routes:c,loader:k,signals:j,handlers:A,server:p,cache:d,partials:y,scheduler:O,attributes:_,start:()=>(I(),k.router=D,j._setContext?.({router:D,loader:k,server:p,cache:d,scheduler:O}),T&&k.start(),"mpa"===r||"ssr"===r?(N(),D):((()=>{const e=e=>{const t=b(e.target,"a[href]");t&&!((e,t)=>{if(e.defaultPrevented||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return!0;if(t.target||t.hasAttribute("download"))return!0;const r=V(t.href),n=U();return r.origin!==n.origin||((e,t,r)=>e.origin===t.origin&&e.pathname===t.pathname&&e.search===t.search&&(e.hash!==t.hash||!0===r.getAttribute?.("href")?.startsWith("#")))(r,n,t)})(e,t)&&(e.preventDefault(),W(D.navigate(t.href)))},t=e=>{const t=b(e.target,"form");t&&!(e=>"get"!==String(e.method||"get").toLowerCase()||V(e.action).origin!==U().origin)(t)&&(e.preventDefault(),W(D.navigate((e=>{const t=V(e.action||e.ownerDocument.defaultView.location.href),r=new e.ownerDocument.defaultView.FormData(e);return t.search=new URLSearchParams(r).toString(),t.href})(t))))},r=()=>W(D.navigate(U(),{history:!1}));$.addEventListener?.("click",e),$.addEventListener?.("submit",t),E.defaultView?.addEventListener?.("popstate",r),q.add(()=>$.removeEventListener?.("click",e)),q.add(()=>$.removeEventListener?.("submit",t)),q.add(()=>E.defaultView?.removeEventListener?.("popstate",r))})(),"csr"===r?(W(D.navigate(U(),{replace:!0,initial:!0,source:"client"})),D):(N(),D))),match:e=>c.match(V(e)),prefetch(e){if(I(),"mpa"===r||"ssr"===r)return Promise.resolve(null);const t=D.match(e);return t?.route?.partial&&y?.resolve?.(t.route.partial)?y.render(t.route.partial,t.params,{...L(t),prefetch:!0}):Promise.resolve(null)},navigate:async(e,t={})=>(I(),"mpa"===r||"ssr"===r?(E.defaultView?.location?.assign?.(e),null):(async(e,t={})=>{const r=D.match(e);if(!r)return B(e,null),(e=>{z(e,null,{pending:!1,error:new Error(`No route matched ${e.pathname}${e.search}`)})})(e),null;const n=B(e,r);z(e,r,{pending:!0,error:null});try{if(!r.route?.partial||!y?.resolve?.(r.route.partial)){const t=new Error(`Route "${e.pathname}" does not have a registered partial.`);return P(n)&&H({pending:!1,error:t}),null}const o=await y.render(r.route.partial,r.params,L(r,n));return P(n)?(await(async(e,t,r,n)=>{P(n)&&(await i(e,{signals:j,loader:k,router:D,cache:d,scheduler:O,abort:n?.abort}),await O.flush(),P(n)&&(null==e?.html||e.boundary||e.redirect||(k.swap(s,e.html),await O.flush()),e?.redirect||!1===r.history||(r.replace?E.defaultView?.history?.replaceState?.({},"",t.href):E.defaultView?.history?.pushState?.({},"",t.href))))})(o,e,t,n),P(n)?(H({pending:!1,error:null}),o):null):null}catch(e){if(!P(n))return null;throw H({pending:!1,error:e}),e}})(V(e),t)),destroy(){if(!M){M=!0,C?.controller.abort(new Error("Router has been destroyed."));for(const e of q)e();q.clear(),R&&O.destroy()}}};return D;function L(e,t){return{params:e.params,route:e.route,router:D,signals:j,handlers:A,loader:k,server:p,cache:d,scheduler:O,abort:t?.abort}}function B(e,t){C?.controller.abort(new Error(`Router navigation superseded by ${e.pathname}${e.search}.`));const r=new AbortController,n={id:++x,controller:r,abort:r.signal,target:e,matched:t};return C=n,n}function P(e){return!M&&e&&C?.id===e.id&&!e.abort.aborted}function N(){const e=U();z(e,D.match(e),{pending:!1,error:null})}function z(e,t,r={}){j.ensure("router",{}),H({url:e.href,path:e.pathname,query:v(e),params:t?.params??{},route:t?.route??null,...r})}function H(e){j.ensure("router",{});for(const[t,r]of Object.entries(e))j.set(`router.${t}`,r)}function W(e){e.catch(e=>{M||(H({pending:!1,error:e}),((e,t)=>{const r=e.ownerDocument?.defaultView?.CustomEvent??globalThis.CustomEvent;"function"==typeof r&&e.dispatchEvent?.(new r("async:error",{bubbles:!0,detail:{error:t}}))})($,e))})}function U(){return V(E.defaultView?.location?.href??"http://localhost/")}function V(e){return e instanceof URL?e:new URL(String(e),E.defaultView?.location?.href??"http://localhost/")}function I(){if(M)throw new Error("Router has been destroyed.")}},route:y}})(),d=(()=>{const{createCacheRegistry:e}=n,{createComponentRegistry:a}=i,{createHandlerRegistry:d}=u,{Loader:y}=f,{createPartialRegistry:g}=p,{createRouteRegistry:w,createRouter:m}=h,{createScheduler:b}=l,{createServerNamespace:v}=c,{cloneSignalDeclaration:S,createSignal:E,createSignalRegistry:$}=s,{createRegistryStore:j}=r,{attributeName:A,normalizeAttributeConfig:O}=o,{createLazyRegistry:R,defineRegistrySnapshot:_,sameRegistryValue:k}=t,T=new Set(["signal","handler","server","partial","route","component","asyncSignal"]);function q(e,t={}){const r=j(void 0,{target:"browser"}),n=new Set,o=t.createRuntime??C,s={registry:r,use(e,t){const o=((e,t)=>{const r={signal:{},handler:{},server:{},partial:{},route:{},component:{},asyncSignal:{},cache:{browser:{},server:{}}};if("string"==typeof e){if(!T.has(e))throw new Error(`Unknown Async registry type "${e}".`);return r[e]=F(e,t),r}if(!e||"object"!=typeof e)throw new TypeError("Async.use(...) requires a registry type or module object.");for(const[t,n]of Object.entries(e))if("cache"!==t){if(!T.has(t))throw new Error(`Unknown Async registry type "${t}".`);r[t]=F(t,n)}else r.cache.browser={...n?.browser??{}},r.cache.server={...n?.server??{}};return r})(e,t);((e,t)=>{for(const r of T)B(e,r,t[r]);B(e,"cache.browser",t.cache.browser),B(e,"cache.server",t.cache.server)})(r,o);for(const e of n)e._applyUse(o);return s},snapshot:()=>r.rawSnapshot(),start(e={}){const t=o(s,e).start();return s.runtime=t,t},attachRoot:e=>(e=>(e.runtime||e.start(),e.runtime))(s).attachRoot(e),detachRoot:e=>s.runtime?.detachRoot(e)??s,applySnapshot:(e,t={})=>s.runtime?(s.runtime.applySnapshot(e,t),s):(((e,t={},r={})=>{const n=z(t);for(const[t,o]of Object.entries(n.signal))N(e,"signal",t,E(o),r);for(const t of["handler","server","partial","route","component","asyncSignal"])for(const[o,s]of Object.entries(n[t]))N(e,t,o,s,r)})(r,e,t),s),inspectRoots:()=>s.runtime?.inspectRoots()??{count:0,roots:[]},_attach:e=>(n.add(e),()=>s._detach(e)),_detach(e){n.delete(e)}};return e&&s.use(e),s}function C(t=M,r={}){const n=(o=t,Boolean(o&&"function"==typeof o.use&&"function"==typeof o.snapshot&&o.registry)?t:q(t??{}));var o;const s=r.target??"browser",i=r.scheduler??r.loader?.scheduler??b({strategy:"server"===s?"manual":"microtask"}),c=!r.scheduler&&!r.loader?.scheduler,u=O(r.attributes),l=r.lazyRegistry??R({registryAssets:r.registryAssets,importModule:r.importModule}),f=r.registry??((e,{target:t}={})=>{const r=e.rawSnapshot();return j({...r,signal:L(r.signal)},{target:t})})(n.registry,{target:s}),p=r.signals??$(void 0,{registry:f,type:"signal",lazyRegistry:l}),h=r.handlers??d(void 0,{registry:f,type:"handler",lazyRegistry:l}),v=e(void 0,{registry:f,type:"cache.server"}),S=e(void 0,{registry:f,type:"cache.browser"}),E=r.serverFactory??I,A=r.server??E(void 0,{registry:f,type:"server"}),_=r.partials??g(void 0,{registry:f,type:"partial",lazyRegistry:l}),k=r.routes??w(void 0,{registry:f,type:"route"}),T=r.components??a(void 0,{registry:f,type:"component",lazyRegistry:l}),C=r.loader||Object.hasOwn(r,"root")?r.root:null;let B=r.loader,N=r.router,H=!1,W=()=>{},F=!1,J=!1;const Z=new Map,Y=C??globalThis.document,G=r.snapshot??("browser"===s?x(Y,{attributes:u}):void 0);((e,t)=>{try{e.cache=t}catch{}})(A,v);const Q={app:n,registry:f,target:s,signals:p,handlers:h,server:A,partials:_,routes:k,components:T,browser:{cache:S},loader:B,router:N,scheduler:i,attributes:u,start:()=>(ne(),F||(F=!0,"server"!==s?(te({cache:S}),p._setContext?.({server:A,loader:B,cache:S,scheduler:i}),B?(X(B.root,B),B.start(),ee(B.root)):null!=C&&Q.attachRoot(C)):(te({cache:v}),p._setContext?.({server:A,cache:v,scheduler:i}))),Q),use:(e,t)=>(n.use(e,t),Q),attachRoot(e){if(ne(),"server"===s)throw new Error("Server runtimes cannot attach DOM roots.");if(!e)throw new TypeError("runtime.attachRoot(root) requires a root.");if(Z.has(e))return Q;const t=0===Z.size&&B?B:y({root:e,signals:p,handlers:h,server:A,cache:S,scheduler:i,attributes:u});return X(e,t),t.start(),te({cache:S}),p._setContext?.({server:A,loader:Q.loader,cache:S,scheduler:i}),ee(e),Q},detachRoot(e){if(ne(),"server"===s)return Q;if(null==e){for(const e of new Set(Z.values()))e.destroy?.();return Z.clear(),N?.destroy?.(),N=void 0,H=!1,B=void 0,Q.loader=void 0,Q.router=void 0,Q}const t=Z.get(e);if(!t)return Q;if(t.destroy?.(),Z.delete(e),B===t){N?.destroy?.(),N=void 0,H=!1;const e=Z.values().next().value;B=e,Q.loader=e,Q.router=void 0,e&&ee(e.root)}return Q},inspectRoots:()=>({count:Z.size,roots:[...Z].map(([e,t])=>({root:e,loader:t,primary:t===B}))}),applySnapshot:(e,t={})=>(((e,t={},r={})=>{const n=z(t);P(e,"asyncSignal",n.asyncSignal,null,r);for(const[t,r]of Object.entries(n.signal))U(e.signals,t,r);e.browser.cache.restore(n.cache.browser),P(e,"handler",n.handler,e.handlers,r),P(e,"server",n.server,e.server,r),P(e,"partial",n.partial,e.partials,r),P(e,"route",n.route,e.routes,r),P(e,"component",n.component,e.components,r)})(Q,e,t),Q),async render(e){ne(),te({cache:v}),p._setContext?.({server:A,cache:v,scheduler:i});const t=k.match(e);if(!t)return await i.flush(),{html:K("",{status:404,signals:p,browserCache:S,boundary:r.boundary??"route",attributes:u}),status:404,signals:p.snapshot(),cache:{browser:S.snapshot()}};const n=t.route.partial,o=n&&_.resolve(n)?await _.render(n,t.params,{params:t.params,route:t.route,signals:p,handlers:h,server:A,cache:v,browserCache:S,partials:_,scheduler:i,...re()}):{html:""};if(o.signals)for(const[e,t]of Object.entries(o.signals))V(p,e,t);o.cache?.browser&&S.restore(o.cache.browser),await i.flush();const s=o.status??200;return{html:K(o.html,{status:s,signals:p,browserCache:S,boundary:o.boundary??r.boundary??"route",attributes:u}),status:s,signals:p.snapshot(),cache:{browser:S.snapshot()}}},destroy(){if(J)return;J=!0,W(),N?.destroy?.();const e=new Set(Z.values());for(const t of e)t.destroy?.();Z.clear(),B&&!e.has(B)&&B?.destroy?.(),p.destroy?.(),c&&i.destroy()},_applyUse(e){((e,t)=>{D(e.signals,e.registry,t.signal),D(e.handlers,e.registry,t.handler),D(e.server,e.registry,t.server),D(e.partials,e.registry,t.partial),D(e.routes,e.registry,t.route),D(e.components,e.registry,t.component),((e,t,r)=>{if(r&&0!==Object.keys(r).length)for(const[n,o]of Object.entries(r))e.has(t,n)||e.register(t,n,o)})(e.registry,"asyncSignal",t.asyncSignal),D(e.browser.cache,e.registry,t.cache.browser),D(e.server.cache,e.registry,t.cache.server)})(Q,e)}};return A.cache=v,Q.server.cache=v,Q.applySnapshot(G,{strict:r.strictSnapshots??!0}),W=n._attach(Q),Q;function X(e,t){Z.set(e,t),B||(B=t,Q.loader=t),t.server=A,t.cache=S,t.scheduler=i}function ee(e){!1!==N&&!H&&(N||((e,t)=>Boolean(t.routerOptions||t.mode||e.entries().length>0))(k,r))&&Q.loader&&(N=N??m({mode:r.mode??"ssr",root:e,boundary:r.boundary??"route",routes:k,loader:Q.loader,signals:p,handlers:h,server:A,cache:S,partials:_,scheduler:i,attributes:u}),Q.router=N,Q.loader.router=N,te({cache:S,router:N}),N.start(),H=!0)}function te(e={}){const t=(e=>"function"==typeof e?.registerMany)(A)?v:e.cache;A._setContext?.({signals:p,loader:B,router:N,cache:t,scheduler:i,requestContext:r.requestContext,...re()})}function re(){const e=(t=r.requestContext)?"function"==typeof t.get?t.get()??{}:"function"==typeof t.getStore?t.getStore()??{}:{}:{};var t;return{requestContext:e,request:e.request??r.request,headers:e.headers??r.headers,cookies:e.cookies??r.cookies,locals:e.locals??r.locals}}function ne(){if(J)throw new Error("Async app runtime has been destroyed.")}}const M=q();function x(e=globalThis.document,{attributes:t}={}){const r=O(t),n=A(r,"async","snapshot"),o=e?.ownerDocument??e??globalThis.document,s=e??o;if(!s?.querySelectorAll&&!o?.querySelectorAll)return{};const a={};for(const e of new Set([s,o]))if(e?.querySelectorAll)for(const t of e.querySelectorAll("script[type='application/json'], script")){if(!t.hasAttribute?.(n))continue;const e=t.textContent?.trim()??"";if(!e)continue;let r;try{r=JSON.parse(e)}catch(e){throw new Error(`Could not parse Async snapshot: ${e instanceof Error?e.message:String(e)}`)}H(a,r,{strict:!0})}return a}function D(e,t,r){r&&0!==Object.keys(r).length&&(e?.registry!==t?e?.registerMany?.(r):e._adoptMany?.(r))}function L(e={}){const t={};for(const[r,n]of Object.entries(e??{}))t[r]=S(n);return t}function B(e,t,r){for(const[n,o]of Object.entries(r??{}))e.register(t,n,o)}function P(e,t,r,n,o={}){if(r&&0!==Object.keys(r).length){for(const[n,s]of Object.entries(r)){if("asyncSignal"===t&&e.signals?.has?.(n)&&!e.registry.has(t,n))throw new Error(`Signal "${n}" is already registered.`);N(e.registry,t,n,s,o)}n?._adoptMany?.(r)}}function N(e,t,r,n,o={}){const s=o.strict??!0,a=e._map(t);if(a.has(r)){if(k(a.get(r),n)||W(a.get(r),n))return;if(s)throw new Error(`${t} "${r}" is already registered with a different value.`)}else e.set(t,r,n)}function z(e={}){return{signal:{...e.signals??{},...e.signal??{}},handler:{...e.handler??{}},server:{...e.server??{}},partial:{...e.partial??{}},route:{...e.route??{}},component:{...e.component??{}},asyncSignal:{...e.asyncSignal??{}},cache:{browser:{...e.entries?.browser??{},...e.cache?.browser??{}}}}}function H(e,t,r={}){const n=z(_(t));e.signal={...e.signal??e.signals??{},...n.signal},e.signals=e.signal,e.cache={...e.cache??{},browser:{...e.cache?.browser??{},...n.cache.browser}};for(const t of["handler","server","partial","route","component","asyncSignal"]){e[t]=e[t]??{};for(const[o,s]of Object.entries(n[t]))if(Object.hasOwn(e[t],o)){if(k(e[t][o],s)||W(e[t][o],s))continue;if(r.strict??1)throw new Error(`${t} "${o}" is already declared with a different value.`)}else e[t][o]=s}return e}function W(e,t){if(e===t)return!0;try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}function U(e,t,r){if(e.has?.(t)){const n=e._entry?.(t);return"function"==typeof n?._restore&&(e=>!(!e||"object"!=typeof e||Array.isArray(e))&&(Object.hasOwn(e,"value")&&(Object.hasOwn(e,"loading")||Object.hasOwn(e,"error")||Object.hasOwn(e,"status")||Object.hasOwn(e,"version"))))(r)?void n._restore(r):void e.set(t,r)}e.register(t,E(r))}function V(e,t,r){if("function"==typeof e._setPath)return void e._setPath(t,r);const n=String(t).split(".")[0];e.has?.(n)?e.set(t,r):(e.register(n,E(t===n?r:{})),t!==n&&e.set(t,r))}function I(e={},t={}){const r=t.registry??j(),n=t.type??"server",o={},s={registry:r,register:(e,t)=>(r.register(n,e,t),e),registerMany(e){for(const[t,r]of Object.entries(e??{}))s.register(t,r);return s},unregister:e=>r.unregister(n,e),resolve(){},async run(e){throw new Error(`Server command "${e}" cannot run without a server proxy or server registry.`)},keys:()=>r.keys(n),entries:()=>r.entries(n),inspect:()=>r.entries(n),_setContext:(e={})=>(Object.assign(o,e),s),_adoptMany:()=>s};return s.registerMany(e),v((e,t,r)=>s.run(e,t,r),s,()=>o)}function F(e,t={}){if("signal"!==e)return{...t??{}};const r={};for(const[e,n]of Object.entries(t??{}))r[e]=J(n);return r}function J(e){return e&&"object"==typeof e&&"function"==typeof e.subscribe?e:E(e)}function K(e,{signals:t,browserCache:r,boundary:n,attributes:o}){const s={signals:t.snapshot(),cache:{browser:r.snapshot()}},a=A(o,"async","boundary"),i=A(o,"async","snapshot");return`<section ${a}="${c=n,String(c).replaceAll("&","&amp;").replaceAll('"',"&quot;").replaceAll("<","&lt;")}">${e??""}</section><script type="application/json" ${i}>${(e=>JSON.stringify(e).replaceAll("<","\\u003c"))(s)}<\/script>`;var c}return{defineApp:q,createApp:C,readSnapshot:x,Async:M}})(),y=(()=>{function e(e){if("string"!=typeof e||0===e.length)throw new TypeError("Boundary patch boundary must be a non-empty string.")}function t(e){return Boolean(e&&"object"==typeof e&&!Array.isArray(e))}return{createBoundaryReceiver:(r={})=>{const n=r.loader,o=r.signals??n?.signals,s=r.cache??n?.cache,a=r.scheduler??n?.scheduler,i=r.router??n?.router,c=r.recentLimit??50,u=!0===r.throwOnError,l="function"==typeof r.onApply?r.onApply:void 0,f="function"==typeof r.onIgnore?r.onIgnore:void 0,p="function"==typeof r.onError?r.onError:void 0,h="function"==typeof r.isScopeDestroyed?r.isScopeDestroyed:e=>a?.isScopeDestroyed?.(e)??a?.inspectDestroyed?.(e)??!1;if(!n||"function"!=typeof n.swap)throw new TypeError("createBoundaryReceiver(...) requires a loader with swap(boundary, html).");if(!Number.isInteger(c)||c<0)throw new TypeError("createBoundaryReceiver(...) recentLimit must be a non-negative integer.");const d=new Map,y=[];let g=!1;const w={async apply(r){if(g)throw new Error("Boundary receiver has been destroyed.");const c=(r=>{if(!r||"object"!=typeof r||Array.isArray(r))throw new TypeError("receiver.apply(patch) requires a boundary patch object.");if(e(r.boundary),"number"!=typeof r.seq||!Number.isFinite(r.seq))throw new TypeError("Boundary patch seq must be a finite number.");if(void 0!==r.signals&&!t(r.signals))throw new TypeError("Boundary patch signals must be an object.");if(void 0!==r.cache&&!t(r.cache))throw new TypeError("Boundary patch cache must be an object.");if(void 0!==r.cache?.browser&&!t(r.cache.browser))throw new TypeError("Boundary patch cache.browser must be an object.");if(void 0!==r.redirect&&("string"!=typeof r.redirect||0===r.redirect.length))throw new TypeError("Boundary patch redirect must be a non-empty string.");if(void 0!==r.parentScope&&"string"!=typeof r.parentScope)throw new TypeError("Boundary patch parentScope must be a string.");if(void 0!==r.scope&&"string"!=typeof r.scope)throw new TypeError("Boundary patch scope must be a string.");const n=Object.hasOwn(r,"html")&&null!=r.html,o=r.signals&&Object.keys(r.signals).length>0,s=r.cache?.browser&&Object.keys(r.cache.browser).length>0,a=Boolean(r.redirect),i=Object.hasOwn(r,"error");if(!(n||o||s||a||i))throw new TypeError("Boundary patch must include html, signals, cache.browser, redirect, or error.");return r})(r),y=(w=c.boundary,d.has(w)||d.set(w,{lastSeq:-1/0,applied:0,ignored:0,errored:0,lastStatus:void 0}),d.get(w));var w,b;if(c.seq<=y.lastSeq){const e={status:"ignored-stale",boundary:c.boundary,seq:c.seq,lastSeq:y.lastSeq};return y.ignored+=1,y.lastStatus=e.status,m(e),f?.(e,r),e}if(void 0!==c.parentScope&&h(c.parentScope)){const e={status:"ignored-destroyed",boundary:c.boundary,seq:c.seq,parentScope:c.parentScope};return y.ignored+=1,y.lastStatus=e.status,m(e),f?.(e,r),e}if(y.lastSeq=c.seq,Object.hasOwn(c,"error")){const e=(b=c.error)instanceof Error?b:b&&"object"==typeof b&&"string"==typeof b.message?Object.assign(new Error(b.message),b):new Error(String(b)),t={status:"errored",boundary:c.boundary,seq:c.seq,error:e};if(y.errored+=1,y.lastStatus=t.status,m(t),p?.(e,t,r),u)throw e;return t}if(c.signals){if(!o||"function"!=typeof o.set)throw new Error("Boundary patch includes signals, but no signal registry is available.");for(const[e,t]of Object.entries(c.signals))o.set(e,t)}if(c.cache?.browser){if(!s||"function"!=typeof s.restore)throw new Error("Boundary patch includes browser cache, but no cache registry is available.");s.restore(c.cache.browser)}if(null!=c.html&&n.swap(c.boundary,c.html),await(async(e,t)=>{e&&(void 0===t||"function"!=typeof e.flushScope?"function"==typeof e.flush&&await e.flush():await e.flushScope(t))})(a,c.scope),c.redirect){await(async(e,t,r)=>{if(t&&"function"==typeof t.navigate)return void await t.navigate(e);const n=r?.root?.ownerDocument?.defaultView?.location??globalThis.location;n?.assign?.(e)})(c.redirect,i,n);const e={status:"redirected",boundary:c.boundary,seq:c.seq,redirect:c.redirect};return y.applied+=1,y.lastStatus=e.status,m(e),l?.(e,r),e}const v={status:"applied",boundary:c.boundary,seq:c.seq};return y.applied+=1,y.lastStatus=v.status,m(v),l?.(v,r),v},inspect(){const e={};for(const[t,r]of d)e[t]={lastSeq:r.lastSeq,applied:r.applied,ignored:r.ignored,lastStatus:r.lastStatus},r.errored>0&&(e[t].errored=r.errored);return{destroyed:g,boundaries:e,recent:y.map(e=>({...e}))}},reset(t){if(void 0===t)return d.clear(),y.length=0,w;e(t),d.delete(t);for(let e=y.length-1;e>=0;e-=1)y[e].boundary===t&&y.splice(e,1);return w},destroy(){g=!0,d.clear(),y.length=0}};return w;function m(e){if(0!==c)for(y.push((e=>{const t={boundary:e.boundary,seq:e.seq,status:e.status};return"ignored-stale"===e.status&&(t.lastSeq=e.lastSeq),"ignored-destroyed"===e.status&&void 0!==e.parentScope&&(t.parentScope=e.parentScope),"redirected"===e.status&&(t.redirect=e.redirect),t})(e));y.length>c;)y.shift()}}}})(),g=(()=>{function e(e){return e?.reason??new Error("Operation aborted")}return{delay:(t,r)=>r?.aborted?Promise.reject(e(r)):new Promise((n,o)=>{let s=setTimeout(()=>{s=void 0,r?.removeEventListener?.("abort",a),n()},t);function a(){void 0!==s&&clearTimeout(s),s=void 0,r?.removeEventListener?.("abort",a),o(e(r))}r?.addEventListener?.("abort",a,{once:!0})})}})(),w=(()=>{const{Async:e}=d;return{defineAsyncContainerElement:function(t={}){const r=t.tagName??"async-container",n=t.customElements??globalThis.customElements;if(!n)throw new Error("defineAsyncContainerElement(...) requires customElements.");const o=n.get(r);if(o)return o;const s=t.app??t.Async??e,a=t.HTMLElement??t.window?.HTMLElement??globalThis.HTMLElement;if(!a)throw new Error("defineAsyncContainerElement(...) requires HTMLElement.");class i extends a{connectedCallback(){if(this.__asyncAttached)return;const e=s.runtime??s.start?.();e?.attachRoot?.(this),this.__asyncRuntime=e,this.__asyncAttached=!0}disconnectedCallback(){this.__asyncAttached&&(this.__asyncRuntime?.detachRoot?.(this),this.__asyncRuntime=void 0,this.__asyncAttached=!1)}}return n.define(r,i),i},defineAsyncSuspenseElement:(e={})=>{const t=e.tagName??"async-suspense",r=e.customElements??globalThis.customElements;if(!r)throw new Error("defineAsyncSuspenseElement(...) requires customElements.");const n=r.get(t);if(n)return n;const o=e.HTMLElement??e.window?.HTMLElement??globalThis.HTMLElement;if(!o)throw new Error("defineAsyncSuspenseElement(...) requires HTMLElement.");class s extends o{}return r.define(t,s),s}}})(),{asyncSignal:m}=e,{Async:b}=d,{createApp:v}=d,{defineApp:S}=d,{readSnapshot:E}=d,{attributeName:$}=o,{defineAttributeConfig:j}=o,{createBoundaryReceiver:A}=y,{createCacheRegistry:O}=n,{defineCache:R}=n,{component:_}=i,{createComponentRegistry:k}=i,{defineComponent:T}=i,{delay:q}=g,{defineAsyncContainerElement:C}=w,{defineAsyncSuspenseElement:M}=w,{createHandlerRegistry:x}=u,{html:D}=a,{createLazyRegistry:L}=t,{defineRegistrySnapshot:B}=t,{Loader:P}=f,{AsyncLoader:N}=f,{createPartialRegistry:z}=p,{createRegistryStore:H}=r,{createRouteRegistry:W}=h,{createRouter:U}=h,{defineRoute:V}=h,{route:I}=h,{createScheduler:F}=l,{applyServerResult:J}=c,{createServerProxy:K}=c,{resolveServerCommandArguments:Z}=c,{unwrapServerResult:Y}=c,{computed:G}=s,{createSignal:Q}=s,{createSignalRegistry:X}=s,{effect:ee}=s,{signal:te}=s;export{m as asyncSignal,b as Async,v as createApp,S as defineApp,E as readSnapshot,$ as attributeName,j as defineAttributeConfig,A as createBoundaryReceiver,O as createCacheRegistry,R as defineCache,_ as component,k as createComponentRegistry,T as defineComponent,q as delay,C as defineAsyncContainerElement,M as defineAsyncSuspenseElement,x as createHandlerRegistry,D as html,L as createLazyRegistry,B as defineRegistrySnapshot,P as Loader,N as AsyncLoader,z as createPartialRegistry,H as createRegistryStore,W as createRouteRegistry,U as createRouter,V as defineRoute,I as route,F as createScheduler,J as applyServerResult,K as createServerProxy,Z as resolveServerCommandArguments,Y as unwrapServerResult,G as computed,Q as createSignal,X as createSignalRegistry,ee as effect,te as signal};