@async/framework 0.11.2 → 0.11.3
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 +14 -0
- package/README.md +3 -1
- package/browser.js +80 -11
- package/browser.min.js +1 -1
- package/browser.ts +80 -11
- package/browser.umd.js +80 -11
- package/browser.umd.min.js +1 -1
- package/framework.ts +86 -12
- package/package.json +1 -1
- package/server.js +86 -12
package/browser.umd.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e){const t=function(){"use strict";const e=(()=>{const e=Symbol.for("@async/framework.asyncSignal");return{asyncSignal:function(t,r){if("string"!=typeof t||0===t.length)throw new TypeError("asyncSignal(id, fn) requires a non-empty string id.");if("function"!=typeof r)throw new TypeError("asyncSignal(id, fn) requires a function.");let n,o,s,a,i=!1,c=null,u="idle",l=0,f=t;const p=new Set,d=new Set,h={[e]:!0,kind:"async-signal",get id(){return f},get value(){return n},get loading(){return i},get error(){return c},get status(){return u},get version(){return l},set:e=>(n=e,i=!1,c=null,u="ready",m(),n),refresh(){if(!o)throw new Error(`Async signal "${f}" is not registered.`);a&&!a.aborted&&a.cancel(new Error(`Async signal "${f}" refreshed.`));const e=l+1;l=e,i=!0,c=null,u="loading";const t=new AbortController;s=t,a=t.signal,function(e,t){Object.defineProperty(e,"cancel",{configurable:!0,enumerable:!1,value(e){t.abort(e)}})}(a,t),m();const p={signals:o,id:f,get server(){const e=o._context?.()??{},t=e.server;return"function"==typeof t?._withContext?t._withContext({signals:o,router:e.router,loader:e.loader,cache:e.cache,abort:a,scheduler:e.scheduler}):t},get router(){return o._context?.().router},get loader(){return o._context?.().loader},get cache(){return o._context?.().cache},get scheduler(){return o._context?.().scheduler},get version(){return e},get abort(){return a},refresh:()=>h.refresh()};let b;try{b=o._collectDependencies(()=>r.call(p))}catch(t){return y(e,t),Promise.reject(t)}return function(e){for(const e of d)e();d.clear();for(const t of e){const e=String(t).split(".")[0];e&&e!==f&&d.add(o.subscribe(t,()=>w()))}}(b.dependencies),Promise.resolve(b.value).then(t=>g(e)?(n=t,i=!1,c=null,u="ready",m(),n):n,t=>g(e)?a?.aborted?(i=!1,u=void 0===n?"idle":"ready",m(),n):(y(e,t),n):n)},cancel(e){a&&!a.aborted&&a.cancel(e)},subscribe(e){if("function"!=typeof e)throw new TypeError("subscribe(fn) requires a function.");return p.add(e),()=>p.delete(e)},snapshot:()=>({value:n,loading:i,error:c,status:u,version:l}),_restore:(e={})=>function(e){return!(!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)?(a&&!a.aborted&&a.cancel(new Error(`Async signal "${f}" restored from snapshot.`)),n=e.value,i=Boolean(e.loading),c=e.error??null,u="string"==typeof e.status?e.status:function({value:e,loading:t,error:r}){return t?"loading":r?"error":void 0===e?"idle":"ready"}({value:n,loading:i,error:c}),Number.isFinite(e.version)&&(l=e.version),m(),h):h.set(e),_bindRegistry(e,t){o=e,f=t;const r=()=>{o===e&&"idle"===u&&h.refresh()},n=o._context?.().scheduler;n?n.enqueue("async",r,{scope:f,key:`asyncSignal:${f}:initial`}):queueMicrotask(r)},_dispose(){h.cancel(new Error(`Async signal "${f}" disposed.`));for(const e of d)e();d.clear(),p.clear()}};function y(e,t){g(e)&&(i=!1,c=t,u="error",m())}function g(e){return e===l&&s?.signal===a}function w(){a&&!a.aborted&&a.cancel(new Error(`Async signal "${f}" dependency changed.`));const e=o?._context?.().scheduler;e?e.enqueue("async",()=>h.refresh(),{scope:f,key:`asyncSignal:${f}:refresh`}):h.refresh()}function m(){for(const e of[...p])e(h)}return h},isAsyncSignal:function(t){return Boolean(t?.[e])}}})(),t=(()=>{const e=new Set(["handler","component","asyncSignal","partial","route"]);function t(t={}){const r=function(e){if("string"!=typeof e||0===e.length)throw new TypeError("registryAssets.baseUrl must be a non-empty string.");return i(e)||e.startsWith("/")||e.startsWith("./")||e.startsWith("../")?a(e):`/${s(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,c,u){if(!e.has(t))throw new Error(`Registry type "${t}" does not support lazy descriptors.`);if(!r(c))throw new TypeError(`Registry descriptor for "${t}:${n}" requires a url.`);const{path:l,hash:f}=function(e){const t=e.indexOf("#");return-1===t?{path:e,hash:""}:{path:e.slice(0,t),hash:e.slice(t+1)}}(c.url),p=function(e,t,r){if(i(t)||t.startsWith("/")||t.startsWith("./")||t.startsWith("../"))return t;const n=r.paths[e]??e;return function(...e){const[t,...r]=e;return[a(t),...r.map(s)].filter(Boolean).join("/")}(r.baseUrl,n,t)}(t,l,u);return{moduleUrl:p,exportNames:f?[f]:o(n,l),url:f?`${p}#${f}`:p}}function o(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}function s(e){return String(e).replace(/^\/+|\/+$/g,"")}function a(e){return String(e).replace(/\/+$/g,"")}function i(e){return/^[A-Za-z][A-Za-z\d+.-]*:/.test(e)}function c(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:function(e={}){if(!e||"object"!=typeof e||Array.isArray(e))throw new TypeError("defineRegistrySnapshot(snapshot) requires an object.");return e},createLazyRegistry:function(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}: ${d=r,d instanceof Error?d.message:String(d)}`,{cause:r})}var d;const h=function(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,h),h},inspect:()=>({registryAssets:o,modules:[...a.keys()],exports:[...i.keys()]})}},normalizeRegistryAssets:t,isLazyDescriptor:r,sameRegistryValue:function(e,t){return e===t||!(!r(e)||!r(t))&&c(e)===c(t)},publicRegistryValue:function(e,t){return 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 d(e){const t={};for(const[r,n]of e)t[r]=n?.value;return t}function h(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:d(o.cacheEntries.browser),server:"browser"===t?{}:d(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 function(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,h(n));for(const[t,n]of Object.entries(r.server??{}))e.set("cache.server.entries",t,h(n))}(y,t),y},attachRegistryInspection:function(e,t,r){return 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:function(r={},{now:i=()=>Date.now(),registry:c,type:u="cache.browser"}={}){const l=c??t(),f=l._map(u),p=l._map(`${u}.entries`),d=new Map,h=e({register(e,t=o()){s(e);const r=function(e){return 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??{}))h.register(t,r);return h},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??function(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(d.has(e))return d.get(e);let o;return o=Promise.resolve().then(t).then(t=>(d.get(e)===o&&h.set(e,t,r),t)).finally(()=>{d.get(e)===o&&d.delete(e)}),d.set(e,o),o},delete:e=>(a(e),d.delete(e),p.delete(e)),clear(e){if(void 0===e)return p.clear(),d.clear(),h;for(const t of[...p.keys()])t.startsWith(e)&&p.delete(t);for(const t of[...d.keys()])t.startsWith(e)&&d.delete(t);return h},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??{}))h.set(t,r);return h},entryKeys:()=>[...p.keys()],entryEntries:()=>l.entries(`${u}.entries`),_adoptMany:()=>h},l,u);return h.registerMany(r),h;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:function(e={}){return t(e)},normalizeAttributeConfig:t,attributeName:function(e,r,n){return t(e)[r][0]+n},readAttribute:function(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:function(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"),d=[];function h(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,function(){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}}function y(e,t){let r=e;for(const e of t){if(null==r)return;r=r[e]}return r}function g(e,t){return Array.isArray(e)?[...e]:e&&"object"==typeof e?{...e}:(r=t,String(Number(r))===String(r)?[]:{});var r}function w(e,t){const r=e.get(t);if(!r)throw new Error(`Signal "${t}" is not registered.`);return r}function m(e){if("string"!=typeof e||0===e.length)throw new TypeError("Signal id must be a non-empty string.")}return{createSignal:h,computed:function(e){if("function"!=typeof e)throw new TypeError("computed(fn) requires a function.");const t=h(void 0);return{[l]:!0,kind:"computed",get value(){return t.value},set:e=>t.set(e),update:e=>t.update(e),subscribe:e=>t.subscribe(e),snapshot:()=>t.snapshot(),_bindRegistry:(r,n)=>r.effect(()=>{t.set(e.call({signals:r,id:n,server:r._context?.().server,router:r._context?.().router,loader:r._context?.().loader,cache:r._context?.().cache,scheduler:r._context?.().scheduler}))})}},effect:function(e){if("function"!=typeof e)throw new TypeError("effect(fn) requires a function.");return{[f]:!0,kind:"effect",fn:e,_bindRegistry:t=>t.effect(e)}},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),v=new Map,S={},E=new Set;let $=0,A=0;const j=s({register(e,t){if(m(e),l.has(e))throw new Error(`Signal "${e}" is already registered.`);const r=function(e){return t=e,Boolean(t&&"object"==typeof t&&"function"==typeof t.subscribe)?e:h(e);var t}(t);return l.set(e,r),R(e,r),j.ref(e)},registerMany(e){for(const[t,r]of Object.entries(e??{}))j.register(t,r);return j},unregister:e=>(m(e),!!l.has(e)&&(v.get(e)?.(),v.delete(e),l.get(e)?._dispose?.(),l.delete(e),E.delete(e),!0)),ensure:(e,t)=>(m(e),k(e),l.has(e)||j.register(e,h(t)),j.ref(e)),has:e=>l.has(e)||f.has(e),get(e){const t=O(e);return function(e){const t=d.at(-1);t&&t.add(e)}(t.path),function(e,t){if(o(e)&&t[0]?.startsWith("$"))return y(function(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]),t.slice(1));return y(e.value,t)}(w(l,t.id),t.parts)},set(e,t){const r=O(e),n=w(l,r.id);if(0===r.parts.length)return n.set(t);const o=function(e,t,r){const n=g(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]=g(o[r],n),o=o[r]}return o[t.at(-1)]=r,n}(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 j.set(e,t(j.get(e)))},ref:e=>(m(e),k(e),function(e,t){return{[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}}(j,e)),subscribe(e,t,r={}){if("function"!=typeof t)throw new TypeError("subscribe(path, fn) requires a function.");const n=O(e),o=w(l,n.id),s=++$;return o.subscribe(()=>{!function(e,t={}){const r=t.scheduler;r&&"sync"!==t.phase?r.enqueue(t.phase??"effect",e,{scope:t.scope,key:t.key}):e()}(()=>t(j.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)=>(j.register(e,n(e,t)),j.ref(e)),effect(e,t={}){let r,n=[],o=!1;const s=t.scheduler,a=++A,i=()=>{if(o)return;"function"==typeof r&&r();for(const e of n)e();n=[];const t=j._collectDependencies(()=>e.call({signals:j,server:S.server,router:S.router,loader:S.loader,cache:S.cache,scheduler:S.scheduler}));r=t.value,n=t.dependencies.map(e=>j.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 v.values())e();v.clear();for(const e of l.values())e._dispose?.();l.clear()},_collectDependencies(e){const t=new Set;d.push(t);try{return{value:e(),dependencies:[...t]}}finally{d.pop()}},_entry:e=>(k(e),w(l,e)),_setContext:(e={})=>(Object.assign(S,e),j),_context:()=>S,_adoptMany(e={}){for(const t of Object.keys(e??{}))l.has(t)&&R(t,l.get(t));return j}},r,u);for(const[e,t]of l)R(e,t);return j.registerMany(e),j;function R(e,t){if(E.has(e)||"function"!=typeof t?._bindRegistry)return;E.add(e);const r=t._bindRegistry(j,e);"function"==typeof r&&v.set(e,r)}function O(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 k(n),{id:n,parts:t.slice(r),path:e}}const[r,...n]=t;return{id:r,parts:n,path:e}}function k(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),R(e,r)}},isSignalRef:function(e){return Boolean(e?.[p])},signal:h}})(),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:d(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?function(n,o){const s=r(o.attribute.name,o.attributes,"signal"),a=r(o.attribute.name,o.attributes,"class"),i=function(t,r){return e(t)?t.id:"string"==typeof t&&r.signals?.has?.(t)?t:null}(n,o);if("value"===o.attribute.name&&i){const r=function(t,r){return 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`${h(r)}${o.attribute.quote} ${s}=${o.attribute.quote}${h(i)}`}if(null!=s||null!=a){if(i)return h(i);if(function(e){return Boolean(e&&"object"==typeof e)}(n))return h(function(e,t){return"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)?h(n.value):null==n||!1===n?"":h(n)}function f(t,r){return Array.isArray(t)?t.map(e=>f(e,r)).join(""):e(t)?h(t.value):null==t||!1===t?"":h(t)}function p(e={}){return{...e,attributes:n(e.attributes)}}function d(e){const t=e.match(/(?:^|[\s<])([^\s"'=<>`]+)\s*=\s*(["'])$/);return t?{name:t[1],quote:t[2]}:null}function h(e){return String(e).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}return{html:function(e,...t){return{[a]:!0,strings:e,values:t}},isTemplateResult:c,rawHtml:function(e){return{[i]:!0,html:String(e??"")}},renderTemplate:u,escapeHtml:h}})(),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 d=0;function h(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(t,r={},o,a="component"){if(!y(t)&&"function"!=typeof t)throw new TypeError("renderComponent(Component) requires a component function.");const c=`${a}.${m(t)}.${++d}`,u=[],l=[],f=[],p=[],h=[],b={attributes:o.attributes,signals:o.signals,bind(e){const t=o.loader?._registerBinding?.(e);if(!t)throw new Error("Inline template bindings require a Loader.");return h.push(t),t}},v=e=>i(e,b),S=function({runtime:t,scope:r,cleanups:o,attachHooks:a,visibleHooks:i,destroyHooks:c,renderScopedTemplate:u}){const{signals:l,handlers:f,loader:p,server:d,router:h,cache:y,scheduler:m}=t,b=new WeakMap;let v=0,S=0;const E={scope:r,signals:l,handlers:f,loader:p,server:d,router:h,cache:y,scheduler:m,signal(e,t){if(1===arguments.length){const t=w(r,"signal."+ ++S),n=l.ensure(t,e);return o.push(()=>l.unregister?.(t)),n}const n=w(r,e),s=!l.has(n),a=l.ensure(n,t);return s&&o.push(()=>l.unregister?.(n)),a},computed(e,t){const n=w(r,e),s=!l.has(n),a=l.ensure(n,void 0);s&&o.push(()=>l.unregister?.(n));const i=l.effect(()=>{l.set(n,t.call(E))});return o.push(i),a},asyncSignal(e,t){const n=w(r,e),s=!l.has(n);return l.has(n)||l.asyncSignal(n,t),s&&o.push(()=>l.unregister?.(n)),l.ref(n)},effect(e){const t=l.effect(()=>e.call(E),{scheduler:m,phase:"effect",scope:r});return o.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 c=g(e,n,t,r);return o.push(c.cleanup),a.push(e=>c.attach(e)),i.push(e=>c.visible(e,p._observeVisible)),s(c.html)},suspense(r,o){const a=r?.id;if(!a)throw new TypeError("this.suspense(signalRef, views) requires a signal ref.");const i=function(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 l=e(t.attributes,"async",o),f=u(s.call(E,r));c.push(`<template ${l}="${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}".`);c.push(()=>t.call(E))}else i.push(e=>t.call(E,e));else a.push(e=>t.call(E,e))},onMount(e){E.on("attach",e)},onVisible(e){E.on("visible",e)}};return E;function $(e,t){const n=w(r,e);return f.register(n,e=>t.call({...E,...e},e)),o.push(()=>f.unregister?.(n)),n}}({runtime:o,scope:c,cleanups:u,attachHooks:l,visibleHooks:f,destroyHooks:p,renderScopedTemplate:v}),E=t.call(S,r);if(E&&"function"==typeof E.then)throw new TypeError(`Component "${m(t)}" 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<l.length;t+=1){const r=l[t];o.scheduler?.enqueue("lifecycle",()=>{const t=r(e);"function"==typeof t&&u.push(t)},{scope:c,key:`attach:${t}`})??$(r,e)}},mount(e){this.attach(e)},visible(e,t){if(0===f.length)return;const r=t(e,()=>{for(let t=0;t<f.length;t+=1){const r=f[t];o.scheduler?.enqueue("lifecycle",()=>{const t=r(e);"function"==typeof t&&u.push(t)},{scope:c,key:`visible:${t}`})??A(r,e)}});"function"==typeof r&&u.push(r)},cleanup(){for(;p.length>0;)p.pop()?.();for(o.scheduler?.markScopeDestroyed(c);u.length>0;)u.pop()?.();for(;h.length>0;)o.loader?._releaseBinding?.(h.pop())}};function $(e,t){const r=e(t);"function"==typeof r&&u.push(r)}function A(e,t){const r=e(t);"function"==typeof r&&u.push(r)}}function w(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 m(e){return e.displayName||e.name||"anonymous"}return{defineComponent:h,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:()=>i},r,n);return i.registerMany(e),i},isComponent:y,renderComponent:g,component:h}})(),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(!h(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 h(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 d(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(function(e,t=Object.prototype.toString.call(e)){return"[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)d(r,t);t.delete(e)}else{for(const r of Object.values(e))d(r,t);t.delete(e)}}function h(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:function({endpoint:e="/__async/server",transport:t,signals:s,loader:u,router:l,cache:f,scheduler:p,headers:h={}}={}){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)};d(f);const p=await t(function(e,t){return`${String(e).replace(/\/$/,"")}/${encodeURIComponent(t)}`}(e,s),{method:"POST",headers:{"content-type":"application/json",...h},body:JSON.stringify(f),signal:u.abort});if(function(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 function(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),(m=o(w))&&"object"==typeof m&&r.add(m),m;var m}return i(w,{run:w,_setContext(e={}){Object.assign(g,e)}},()=>g)},resolveServerCommandArguments:function(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:function(e){return e&&"function"!=typeof e.get?{get:t=>function(e,t){return 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:d,preventDefault:d,stopPropagation(){this.event?.stopPropagation?.()},stopImmediatePropagation(){this.event?.stopImmediatePropagation?.()}};function d(){this.event?.preventDefault?.()}function h(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 function(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(!function(e){return/^[^.\s();]+(?:\.[^.\s();]+)*$/.test(e)}(r))throw new Error(`Server command "${e}" has an invalid function id.`);return{type:"server",id:r,args:w(e.slice(t+1,-1))}}(e);if(e.includes("(")||e.includes(")"))throw new Error(`Command "${e}" is not supported.`);return{type:"handler",id:e}}function w(e){return 0===e.trim().length?[]:e.split(",").map(e=>e.trim()).filter(Boolean).map(m)}function m(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(),d=r.type??"handler",g=c._map(d),w=r.lazyRegistry??u(r),m=new Map,b=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??{}))b.register(t,r);return b},unregister:e=>(y(e),m.delete(e),g.delete(e)),resolve(e){y(e);const t=g.get(e);return l(t)?(m.has(e)||m.set(e,async function(...r){const n=await w.resolve(d,e,t);if("function"!=typeof n)throw new TypeError(`Handler "${e}" did not resolve to a function.`);return n.apply(this,r)}),m.get(e)):t},async run(t,r={}){const a=h(t),i=[];let c=!1;const u={...r,handlers:b,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=b.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:()=>b},c,d);return function(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)}(b,g),b.registerMany(t),b},parseHandlerRef:h,isHandlerToken:function(e){return 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:function(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 d=!1,h=!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.");A(),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(A(),function(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(j(o))return r;const i=void 0===n.key?void 0:`${e}:${function(e){return 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(A(),h)return;y=!1,h=!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{h=!1,E()&&v()}},async flushScope(e){if(A(),h)return;y=!1,h=!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{h=!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=>j(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:h,scheduled:y}},destroy(){d=!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||d||h||g>0||y||(y=!0,e=()=>{d||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&&!j(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 A(){if(d)throw new Error("Scheduler has been destroyed.")}function j(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,d="__async:inline:";function h({root:o,signals:s,handlers:i,server:u,router:l,cache:h,attributes:E,scheduler:O}={}){const T=o?.ownerDocument??o??globalThis.document,q=o??T,C=s??n(),M=i??t(),x=O??r(),L=!O,B=f(E),P=new Set,D=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:h,scheduler:x,attributes:B,start:()=>(ne(),K.scan(q),K),scan:(e=q)=>(ne(),function(e){for(const t of j(e))x.reviveScope?.(t)}(e),function(e){for(const t of j(e))for(const e of t.getAttributeNames?.()??[]){const r=c(e,B,"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=>A(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),function(e){for(const t of j(e))for(const e of t.getAttributeNames?.()??[]){const r=c(e,B,"class");null!=r&&Y(t,r,t.getAttribute(e))}}(e),function(e){for(const t of j(e))if("function"==typeof t.getAttributeNames)for(const e of t.getAttributeNames()){const r=c(e,B,"on");r&&"attach"!==r&&"mount"!==r&&"visible"!==r&&Z(t,r,t.getAttribute(e))}}(e),function(e){for(const t of j(e)){if(W.has(t))continue;const e=R(t,B);if(null!=e){if(!U.has(t)){const r=S(t,e,B);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),function(e){for(const t of j(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 j(e)){const e=p(t,B,"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=function(e,t,r){for(const n of j(e))if(R(n,r)===String(t))return n;return null}(q,e,B);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:B});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,function(e){for(const t of j(e))x.markScopeDestroyed(t)}(q);for(const e of[...P])se(e);P.clear(),L&&x.destroy()}},_observeVisible:(e,t)=>re(e,t),_registerBinding(e){const t=`${d}${++F}`;return V.set(t,e),t},_releaseBinding(e){V.delete(e)}};function Z(e,t,r){const n=`${t}:${r}`,o=D.get(e)??new Set;if(o.has(n))return;o.add(n),D.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=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=>{!function(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=()=>function(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(function(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})=>{!function(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=U.get(e);if(!t)return;const r=C.get(`${t.id}.$status`),n=function(e,t){return"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,B,"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(P.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&&P.has(e)&&(P.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 j(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(d)}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||O(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 A(e,t,r){e[t]=null!=r?r:""}function j(e){return function(e,t){const r=[];return 1===e?.nodeType&&e.matches?.(t)&&r.push(e),r.push(...e?.querySelectorAll?.(t)??[]),r}(e,"*")}function R(e,t){return O(e)&&e.hasAttribute?.("for")?e.getAttribute("for"):p(e,t,"async","boundary")}function O(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:h,AsyncLoader:h}})(),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,d=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??{}))d.register(t,r);return d},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=d.resolve(e);if(!n)throw new Error(`Partial "${e}" is not registered.`);const o={...r,id:e,props:t,cache:r.cache,partials:d};return u(await n.call(o,t),o)},_adoptMany:()=>d},r,n);return d.registerMany(e),d},normalizePartialResult:u}})(),d=(()=>{const{Loader:e}=f,{createHandlerRegistry:t}=u,{createScheduler:n}=l,{createSignalRegistry:a}=s,{applyServerResult:i}=c,{createRegistryStore:p}=r,{normalizeAttributeConfig:d}=o;function h(e,t={}){return{...t,partial:e}}const y=h,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(A(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){A(e);const t=s.findIndex(t=>t.pattern===e);return-1!==t&&s.splice(t,1),o.delete(e)},match(e){const t=function(e){return 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 of Object.keys(e??{}))i(t,o.get(t));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?h(t):t,{regex:n,keys:o}=function(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 A(e){if("string"!=typeof e||"*"!==e&&!e.startsWith("/"))throw new TypeError('Route pattern must be a path string or "*".')}return{defineRoute:h,createRouteRegistry:w,createRouter:function({mode:r="ssr",root:o,boundary:s="route",routes:c=w(),loader:u,signals:l,handlers:f,server:p,cache:h,partials:y,attributes:m,scheduler:S}={}){!function(e){if(!g.has(e))throw new TypeError(`Unknown router mode "${e}".`)}(r);const E=o?.ownerDocument??o??globalThis.document,$=o??E,A=l??u?.signals??a(),j=f??u?.handlers??t(),R=S??u?.scheduler??n(),O=!S&&!u?.scheduler,k=d(m??u?.attributes),_=u??e({root:$,signals:A,handlers:j,server:p,cache:h,scheduler:R,attributes:k}),T=!u,q=new Set;let C,M=!1,x=0;const L={mode:r,root:$,boundary:s,routes:c,loader:_,signals:A,handlers:j,server:p,cache:h,partials:y,scheduler:R,attributes:k,start:()=>(I(),_.router=L,A._setContext?.({router:L,loader:_,server:p,cache:h,scheduler:R}),T&&_.start(),"mpa"===r||"ssr"===r?(N(),L):(function(){const e=e=>{const t=b(e.target,"a[href]");t&&!function(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||function(e,t,r){return 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(L.navigate(t.href)))},t=e=>{const t=b(e.target,"form");t&&!function(e){return"get"!==String(e.method||"get").toLowerCase()||V(e.action).origin!==W().origin}(t)&&(e.preventDefault(),U(L.navigate(function(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(L.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(L.navigate(W(),{replace:!0,initial:!0,source:"client"})),L):(N(),L))),match:e=>c.match(V(e)),prefetch(e){if(I(),"mpa"===r||"ssr"===r)return Promise.resolve(null);const t=L.match(e);return t?.route?.partial&&y?.resolve?.(t.route.partial)?y.render(t.route.partial,t.params,{...B(t),prefetch:!0}):Promise.resolve(null)},navigate:async(e,t={})=>(I(),"mpa"===r||"ssr"===r?(E.defaultView?.location?.assign?.(e),null):async function(e,t={}){const r=L.match(e);if(!r)return P(e,null),function(e){z(e,null,{pending:!1,error:new Error(`No route matched ${e.pathname}${e.search}`)})}(e),null;const n=P(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 D(n)&&H({pending:!1,error:t}),null}const o=await y.render(r.route.partial,r.params,B(r,n));return D(n)?(await async function(e,t,r,n){D(n)&&(await i(e,{signals:A,loader:_,router:L,cache:h,scheduler:R,abort:n?.abort}),await R.flush(),D(n)&&(null==e?.html||e.boundary||e.redirect||(_.swap(s,e.html),await R.flush()),e?.redirect||!1===r.history||(r.replace?E.defaultView?.history?.replaceState?.({},"",t.href):E.defaultView?.history?.pushState?.({},"",t.href))))}(o,e,t,n),D(n)?(H({pending:!1,error:null}),o):null):null}catch(e){if(!D(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(),O&&R.destroy()}}};return L;function B(e,t){return{params:e.params,route:e.route,router:L,signals:A,handlers:j,loader:_,server:p,cache:h,scheduler:R,abort:t?.abort}}function P(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 D(e){return!M&&e&&C?.id===e.id&&!e.abort.aborted}function N(){const e=W();z(e,L.match(e),{pending:!1,error:null})}function z(e,t,r={}){A.ensure("router",{}),H({url:e.href,path:e.pathname,query:v(e),params:t?.params??{},route:t?.route??null,...r})}function H(e){A.ensure("router",{});for(const[t,r]of Object.entries(e))A.set(`router.${t}`,r)}function U(e){e.catch(e=>{M||(H({pending:!1,error:e}),function(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}})(),h=(()=>{const{createCacheRegistry:e}=n,{createComponentRegistry:a}=i,{createHandlerRegistry:h}=u,{Loader:y}=f,{createPartialRegistry:g}=p,{createRouteRegistry:w,createRouter:m}=d,{createScheduler:b}=l,{createServerNamespace:v}=c,{createSignal:S,createSignalRegistry:E}=s,{createRegistryStore:$}=r,{attributeName:A,normalizeAttributeConfig:j}=o,{createLazyRegistry:R,defineRegistrySnapshot:O,sameRegistryValue:k}=t,_=new Set(["signal","handler","server","partial","route","component","asyncSignal"]);function T(e,t={}){const r=$(void 0,{target:"browser"}),n=new Set,o=t.createRuntime??q,s={registry:r,use(e,t){const o=function(e,t){const r={signal:{},handler:{},server:{},partial:{},route:{},component:{},asyncSignal:{},cache:{browser:{},server:{}}};if("string"==typeof e){if(!_.has(e))throw new Error(`Unknown Async registry type "${e}".`);return r[e]=W(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(!_.has(t))throw new Error(`Unknown Async registry type "${t}".`);r[t]=W(t,n)}else r.cache.browser={...n?.browser??{}},r.cache.server={...n?.server??{}};return r}(e,t);!function(e,t){for(const r of _)L(e,r,t[r]);L(e,"cache.browser",t.cache.browser),L(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=>function(e){return 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):(function(e,t={},r={}){const n=D(t);for(const[t,o]of Object.entries(n.signal))P(e,"signal",t,S(o),r);for(const t of["handler","server","partial","route","component","asyncSignal"])for(const[o,s]of Object.entries(n[t]))P(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 q(t=C,r={}){const n=(q=t,Boolean(q&&"function"==typeof q.use&&"function"==typeof q.snapshot&&q.registry)?t:T(t??{})),o=r.target??"browser",s=r.scheduler??r.loader?.scheduler??b({strategy:"server"===o?"manual":"microtask"}),i=!r.scheduler&&!r.loader?.scheduler,c=j(r.attributes),u=r.lazyRegistry??R({registryAssets:r.registryAssets,importModule:r.importModule}),l=r.registry??n.registry.view({target:o}),f=r.signals??E(void 0,{registry:l,type:"signal",lazyRegistry:u}),p=r.handlers??h(void 0,{registry:l,type:"handler",lazyRegistry:u}),d=e(void 0,{registry:l,type:"cache.server"}),v=e(void 0,{registry:l,type:"cache.browser"}),S=r.serverFactory??U,$=r.server??S(void 0,{registry:l,type:"server"}),A=r.partials??g(void 0,{registry:l,type:"partial",lazyRegistry:u}),O=r.routes??w(void 0,{registry:l,type:"route"}),k=r.components??a(void 0,{registry:l,type:"component",lazyRegistry:u}),_=r.loader||Object.hasOwn(r,"root")?r.root:null;var q;let L=r.loader,P=r.router,N=!1,z=()=>{},W=!1,V=!1;const F=new Map,J=_??globalThis.document,K=r.snapshot??("browser"===o?M(J,{attributes:c}):void 0);!function(e,t){try{e.cache=t}catch{}}($,d);const Z={app:n,registry:l,target:o,signals:f,handlers:p,server:$,partials:A,routes:O,components:k,browser:{cache:v},loader:L,router:P,scheduler:s,attributes:c,start:()=>(ee(),W||(W=!0,"server"!==o?(Q({cache:v}),f._setContext?.({server:$,loader:L,cache:v,scheduler:s}),L?(Y(L.root,L),L.start(),G(L.root)):null!=_&&Z.attachRoot(_)):(Q({cache:d}),f._setContext?.({server:$,cache:d,scheduler:s}))),Z),use:(e,t)=>(n.use(e,t),Z),attachRoot(e){if(ee(),"server"===o)throw new Error("Server runtimes cannot attach DOM roots.");if(!e)throw new TypeError("runtime.attachRoot(root) requires a root.");if(F.has(e))return Z;const t=0===F.size&&L?L:y({root:e,signals:f,handlers:p,server:$,cache:v,scheduler:s,attributes:c});return Y(e,t),t.start(),Q({cache:v}),f._setContext?.({server:$,loader:Z.loader,cache:v,scheduler:s}),G(e),Z},detachRoot(e){if(ee(),"server"===o)return Z;if(null==e){for(const e of new Set(F.values()))e.destroy?.();return F.clear(),P?.destroy?.(),P=void 0,N=!1,L=void 0,Z.loader=void 0,Z.router=void 0,Z}const t=F.get(e);if(!t)return Z;if(t.destroy?.(),F.delete(e),L===t){P?.destroy?.(),P=void 0,N=!1;const e=F.values().next().value;L=e,Z.loader=e,Z.router=void 0,e&&G(e.root)}return Z},inspectRoots:()=>({count:F.size,roots:[...F].map(([e,t])=>({root:e,loader:t,primary:t===L}))}),applySnapshot:(e,t={})=>(function(e,t={},r={}){const n=D(t);for(const[t,r]of Object.entries(n.signal))H(e.signals,t,r);e.browser.cache.restore(n.cache.browser),B(e,"handler",n.handler,e.handlers,r),B(e,"server",n.server,e.server,r),B(e,"partial",n.partial,e.partials,r),B(e,"route",n.route,e.routes,r),B(e,"component",n.component,e.components,r),B(e,"asyncSignal",n.asyncSignal,null,r)}(Z,e,t),Z),async render(e){ee(),Q({cache:d}),f._setContext?.({server:$,cache:d,scheduler:s});const t=O.match(e);if(!t)return await s.flush(),{html:I("",{status:404,signals:f,browserCache:v,boundary:r.boundary??"route",attributes:c}),status:404,signals:f.snapshot(),cache:{browser:v.snapshot()}};const n=t.route.partial,o=n&&A.resolve(n)?await A.render(n,t.params,{params:t.params,route:t.route,signals:f,handlers:p,server:$,cache:d,browserCache:v,partials:A,scheduler:s,...X()}):{html:""};if(o.signals)for(const[e,t]of Object.entries(o.signals))H(f,e,t);o.cache?.browser&&v.restore(o.cache.browser),await s.flush();const a=o.status??200;return{html:I(o.html,{status:a,signals:f,browserCache:v,boundary:o.boundary??r.boundary??"route",attributes:c}),status:a,signals:f.snapshot(),cache:{browser:v.snapshot()}}},destroy(){if(V)return;V=!0,z(),P?.destroy?.();const e=new Set(F.values());for(const t of e)t.destroy?.();F.clear(),L&&!e.has(L)&&L?.destroy?.(),f.destroy?.(),i&&s.destroy()},_applyUse(e){!function(e,t){x(e.signals,e.registry,t.signal),x(e.handlers,e.registry,t.handler),x(e.server,e.registry,t.server),x(e.partials,e.registry,t.partial),x(e.routes,e.registry,t.route),x(e.components,e.registry,t.component),function(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),x(e.browser.cache,e.registry,t.cache.browser),x(e.server.cache,e.registry,t.cache.server)}(Z,e)}};return $.cache=d,Z.server.cache=d,Z.applySnapshot(K,{strict:r.strictSnapshots??!0}),z=n._attach(Z),Z;function Y(e,t){F.set(e,t),L||(L=t,Z.loader=t),t.server=$,t.cache=v,t.scheduler=s}function G(e){!1!==P&&!N&&(P||function(e,t){return Boolean(t.routerOptions||t.mode||e.entries().length>0)}(O,r))&&Z.loader&&(P=P??m({mode:r.mode??"ssr",root:e,boundary:r.boundary??"route",routes:O,loader:Z.loader,signals:f,handlers:p,server:$,cache:v,partials:A,scheduler:s,attributes:c}),Z.router=P,Z.loader.router=P,Q({cache:v,router:P}),P.start(),N=!0)}function Q(e={}){const t=function(e){return"function"==typeof e?.registerMany}($)?d:e.cache;$._setContext?.({signals:f,loader:L,router:P,cache:t,scheduler:s,requestContext:r.requestContext,...X()})}function X(){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 ee(){if(V)throw new Error("Async app runtime has been destroyed.")}}const C=T();function M(e=globalThis.document,{attributes:t}={}){const r=j(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)}`)}N(a,r,{strict:!0})}return a}function x(e,t,r){r&&0!==Object.keys(r).length&&(e?.registry!==t?e?.registerMany?.(r):e._adoptMany?.(r))}function L(e,t,r){for(const[n,o]of Object.entries(r??{}))e.register(t,n,o)}function B(e,t,r,n,o={}){if(r&&0!==Object.keys(r).length){for(const[n,s]of Object.entries(r))P(e.registry,t,n,s,o);n?._adoptMany?.(r)}}function P(e,t,r,n,o={}){const s=o.strict??!0,a=e._map(t);if(a.has(r)){if(k(a.get(r),n)||z(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 D(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 N(e,t,r={}){const n=D(O(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)||z(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 z(e,t){if(e===t)return!0;try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}function H(e,t,r){const n=String(t).split(".")[0];if(e.has?.(n)){if(t===n){const t=e._entry?.(n);if("function"==typeof t?._restore&&function(e){return!(!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))return void t._restore(r)}e.set(t,r)}else e.register(n,S(t===n?r:{})),t!==n&&e.set(t,r)}function U(e={},t={}){const r=t.registry??$(),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 W(e,t={}){if("signal"!==e)return{...t??{}};const r={};for(const[e,n]of Object.entries(t??{}))r[e]=V(n);return r}function V(e){return e&&"object"==typeof e&&"function"==typeof e.subscribe?e:S(e)}function I(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("&","&").replaceAll('"',""").replaceAll("<","<")}">${e??""}</section><script type="application/json" ${i}>${function(e){return JSON.stringify(e).replaceAll("<","\\u003c")}(s)}<\/script>`;var c}return{defineApp:T,createApp:q,readSnapshot:M,Async:C}})(),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:function(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,d="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 h=new Map,y=[];let g=!1;const w={async apply(r){if(g)throw new Error("Boundary receiver has been destroyed.");const c=function(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,h.has(w)||h.set(w,{lastSeq:-1/0,applied:0,ignored:0,errored:0,lastStatus:void 0}),h.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&&d(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 function(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 function(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 h)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 h.clear(),y.length=0,w;e(t),h.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,h.clear(),y.length=0}};return w;function m(e){if(0!==c)for(y.push(function(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:function(t,r){return r?.aborted?Promise.reject(e(r)):new Promise((n,o)=>{let s=setTimeout(function(){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}=h;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:function(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}=h,{createApp:v}=h,{defineApp:S}=h,{readSnapshot:E}=h,{attributeName:$}=o,{defineAttributeConfig:A}=o,{createBoundaryReceiver:j}=y,{createCacheRegistry:R}=n,{defineCache:O}=n,{component:k}=i,{createComponentRegistry:_}=i,{defineComponent:T}=i,{delay:q}=g,{defineAsyncContainerElement:C}=w,{defineAsyncSuspenseElement:M}=w,{createHandlerRegistry:x}=u,{html:L}=a,{createLazyRegistry:B}=t,{defineRegistrySnapshot:P}=t,{Loader:D}=f,{AsyncLoader:N}=f,{createPartialRegistry:z}=p,{createRegistryStore:H}=r,{createRouteRegistry:U}=d,{createRouter:W}=d,{defineRoute:V}=d,{route:I}=d,{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,re={asyncSignal:m,Async:b,createApp:v,defineApp:S,readSnapshot:E,attributeName:$,defineAttributeConfig:A,createBoundaryReceiver:j,createCacheRegistry:R,defineCache:O,component:k,createComponentRegistry:_,defineComponent:T,delay:q,defineAsyncContainerElement:C,defineAsyncSuspenseElement:M,createHandlerRegistry:x,html:L,createLazyRegistry:B,defineRegistrySnapshot:P,Loader:D,AsyncLoader:N,createPartialRegistry:z,createRegistryStore:H,createRouteRegistry:U,createRouter:W,defineRoute:V,route:I,createScheduler:F,applyServerResult:J,createServerProxy:K,resolveServerCommandArguments:Z,unwrapServerResult:Y,computed:G,createSignal:Q,createSignalRegistry:X,effect:ee,signal:te};return function(e,t){const r=Object.keys(e).filter(e=>"Async"!==e&&Object.prototype.hasOwnProperty.call(t,e));if(r.length>0)throw new Error(`UMD Async namespace export conflict: ${r.join(", ")}.`)}(re,b),Object.assign(b,re),b.Async=b,b}();"function"==typeof define&&define.amd?define([],()=>t):"object"==typeof module&&module.exports?module.exports=t:(e.AsyncFramework=t,e.Async=t)}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this);
|
|
1
|
+
!function(e){const t=function(){"use strict";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,c=!1,u=null,l="idle",f=0,p=r;const d=new Set,h=new Set,y={[e]:!0,kind:"async-signal",get id(){return p},get value(){return o},get loading(){return c},get error(){return u},get status(){return l},get version(){return f},set:e=>(o=e,c=!1,u=null,l="ready",b(),o),refresh(){if(!s)throw new Error(`Async signal "${p}" is not registered.`);i&&!i.aborted&&i.cancel(new Error(`Async signal "${p}" refreshed.`));const e=f+1;f=e,c=!0,u=null,l="loading";const t=new AbortController;a=t,i=t.signal,function(e,t){Object.defineProperty(e,"cancel",{configurable:!0,enumerable:!1,value(e){t.abort(e)}})}(i,t),b();const r={signals:s,id:p,get server(){const e=s._context?.()??{},t=e.server;return"function"==typeof t?._withContext?t._withContext({signals:s,router:e.router,loader:e.loader,cache:e.cache,abort:i,scheduler:e.scheduler}):t},get router(){return s._context?.().router},get loader(){return s._context?.().loader},get cache(){return s._context?.().cache},get scheduler(){return s._context?.().scheduler},get version(){return e},get abort(){return i},refresh:()=>y.refresh()};let d;try{d=s._collectDependencies(()=>n.call(r))}catch(t){return g(e,t),Promise.reject(t)}return function(e){for(const e of h)e();h.clear();for(const t of e){const e=String(t).split(".")[0];e&&e!==p&&h.add(s.subscribe(t,()=>m()))}}(d.dependencies),Promise.resolve(d.value).then(t=>w(e)?(o=t,c=!1,u=null,l="ready",b(),o):o,t=>w(e)?i?.aborted?(c=!1,l=void 0===o?"idle":"ready",b(),o):(g(e,t),o):o)},cancel(e){i&&!i.aborted&&i.cancel(e)},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:c,error:u,status:l,version:f}),_cloneSignalDeclaration:()=>t(r,n),_restore:(e={})=>function(e){return!(!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)?(i&&!i.aborted&&i.cancel(new Error(`Async signal "${p}" restored from snapshot.`)),o=e.value,c=Boolean(e.loading),u=e.error??null,l="string"==typeof e.status?e.status:function({value:e,loading:t,error:r}){return t?"loading":r?"error":void 0===e?"idle":"ready"}({value:o,loading:c,error:u}),Number.isFinite(e.version)&&(f=e.version),b(),y):y.set(e),_bindRegistry(e,t){s=e,p=t;const r=()=>{s===e&&"idle"===l&&y.refresh()},n=s._context?.().scheduler;n?n.enqueue("async",r,{scope:p,key:`asyncSignal:${p}:initial`}):queueMicrotask(r)},_dispose(){y.cancel(new Error(`Async signal "${p}" disposed.`));for(const e of h)e();h.clear(),d.clear()}};function g(e,t){w(e)&&(c=!1,u=t,l="error",b())}function w(e){return e===f&&a?.signal===i}function m(){i&&!i.aborted&&i.cancel(new Error(`Async signal "${p}" dependency changed.`));const e=s?._context?.().scheduler;e?e.enqueue("async",()=>y.refresh(),{scope:p,key:`asyncSignal:${p}:refresh`}):y.refresh()}function b(){for(const e of[...d])e(y)}return y},isAsyncSignal:function(t){return Boolean(t?.[e])}}})(),t=(()=>{const e=new Set(["handler","component","asyncSignal","partial","route"]);function t(t={}){const r=function(e){if("string"!=typeof e||0===e.length)throw new TypeError("registryAssets.baseUrl must be a non-empty string.");return i(e)||e.startsWith("/")||e.startsWith("./")||e.startsWith("../")?a(e):`/${s(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,c,u){if(!e.has(t))throw new Error(`Registry type "${t}" does not support lazy descriptors.`);if(!r(c))throw new TypeError(`Registry descriptor for "${t}:${n}" requires a url.`);const{path:l,hash:f}=function(e){const t=e.indexOf("#");return-1===t?{path:e,hash:""}:{path:e.slice(0,t),hash:e.slice(t+1)}}(c.url),p=function(e,t,r){if(i(t)||t.startsWith("/")||t.startsWith("./")||t.startsWith("../"))return t;const n=r.paths[e]??e;return function(...e){const[t,...r]=e;return[a(t),...r.map(s)].filter(Boolean).join("/")}(r.baseUrl,n,t)}(t,l,u);return{moduleUrl:p,exportNames:f?[f]:o(n,l),url:f?`${p}#${f}`:p}}function o(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}function s(e){return String(e).replace(/^\/+|\/+$/g,"")}function a(e){return String(e).replace(/\/+$/g,"")}function i(e){return/^[A-Za-z][A-Za-z\d+.-]*:/.test(e)}function c(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:function(e={}){if(!e||"object"!=typeof e||Array.isArray(e))throw new TypeError("defineRegistrySnapshot(snapshot) requires an object.");return e},createLazyRegistry:function(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}: ${d=r,d instanceof Error?d.message:String(d)}`,{cause:r})}var d;const h=function(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,h),h},inspect:()=>({registryAssets:o,modules:[...a.keys()],exports:[...i.keys()]})}},normalizeRegistryAssets:t,isLazyDescriptor:r,sameRegistryValue:function(e,t){return e===t||!(!r(e)||!r(t))&&c(e)===c(t)},publicRegistryValue:function(e,t){return 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 d(e){const t={};for(const[r,n]of e)t[r]=n?.value;return t}function h(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:d(o.cacheEntries.browser),server:"browser"===t?{}:d(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 function(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,h(n));for(const[t,n]of Object.entries(r.server??{}))e.set("cache.server.entries",t,h(n))}(y,t),y},attachRegistryInspection:function(e,t,r){return 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:function(r={},{now:i=()=>Date.now(),registry:c,type:u="cache.browser"}={}){const l=c??t(),f=l._map(u),p=l._map(`${u}.entries`),d=new Map,h=e({register(e,t=o()){s(e);const r=function(e){return 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??{}))h.register(t,r);return h},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??function(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(d.has(e))return d.get(e);let o;return o=Promise.resolve().then(t).then(t=>(d.get(e)===o&&h.set(e,t,r),t)).finally(()=>{d.get(e)===o&&d.delete(e)}),d.set(e,o),o},delete:e=>(a(e),d.delete(e),p.delete(e)),clear(e){if(void 0===e)return p.clear(),d.clear(),h;for(const t of[...p.keys()])t.startsWith(e)&&p.delete(t);for(const t of[...d.keys()])t.startsWith(e)&&d.delete(t);return h},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??{}))h.set(t,r);return h},entryKeys:()=>[...p.keys()],entryEntries:()=>l.entries(`${u}.entries`),_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))f.has(t)||h.register(t,r);return h}},l,u);return h.registerMany(r),h;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:function(e={}){return t(e)},normalizeAttributeConfig:t,attributeName:function(e,r,n){return t(e)[r][0]+n},readAttribute:function(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:function(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"),d=[];function h(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,function(){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:()=>h(t)}}function y(e){return"function"==typeof e?._cloneSignalDeclaration?e._cloneSignalDeclaration():g(e)?h("function"==typeof e.snapshot?e.snapshot():e.value):h(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){return Array.isArray(e)?[...e]:e&&"object"==typeof e?{...e}:(r=t,String(Number(r))===String(r)?[]:{});var r}function b(e,t){const r=e.get(t);if(!r)throw new Error(`Signal "${t}" is not registered.`);return r}function v(e){if("string"!=typeof e||0===e.length)throw new TypeError("Signal id must be a non-empty string.")}return{createSignal:h,computed:function e(t){if("function"!=typeof t)throw new TypeError("computed(fn) requires a function.");const r=h(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"),S=t.lazyRegistry??i(t),E=new Map,$={},A=new Set;let j=0,R=0;const O=s({register(e,t){if(v(e),l.has(e))throw new Error(`Signal "${e}" is already registered.`);const r=function(e){return g(e)?e:h(e)}(t);return l.set(e,r),k(e,r),O.ref(e)},registerMany(e){for(const[t,r]of Object.entries(e??{}))O.register(t,r);return O},unregister:e=>(v(e),!!l.has(e)&&(E.get(e)?.(),E.delete(e),l.get(e)?._dispose?.(),l.delete(e),A.delete(e),!0)),ensure:(e,t)=>(v(e),T(e),l.has(e)||O.register(e,h(t)),O.ref(e)),has:e=>l.has(e)||f.has(e),get(e){const t=_(e);return function(e){const t=d.at(-1);t&&t.add(e)}(t.path),function(e,t){if(o(e)&&t[0]?.startsWith("$"))return w(function(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]),t.slice(1));return w(e.value,t)}(b(l,t.id),t.parts)},set(e,t){const r=_(e),n=b(l,r.id);if(0===r.parts.length)return n.set(t);const o=function(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}(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 O.set(e,t(O.get(e)))},ref:e=>(v(e),T(e),function(e,t){return{[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}}(O,e)),subscribe(e,t,r={}){if("function"!=typeof t)throw new TypeError("subscribe(path, fn) requires a function.");const n=_(e),o=b(l,n.id),s=++j;return o.subscribe(()=>{!function(e,t={}){const r=t.scheduler;r&&"sync"!==t.phase?r.enqueue(t.phase??"effect",e,{scope:t.scope,key:t.key}):e()}(()=>t(O.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)=>(O.register(e,n(e,t)),O.ref(e)),effect(e,t={}){let r,n=[],o=!1;const s=t.scheduler,a=++R,i=()=>{if(o)return;"function"==typeof r&&r();for(const e of n)e();n=[];const t=O._collectDependencies(()=>e.call({signals:O,server:$.server,router:$.router,loader:$.loader,cache:$.cache,scheduler:$.scheduler}));r=t.value,n=t.dependencies.map(e=>O.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;d.push(t);try{return{value:e(),dependencies:[...t]}}finally{d.pop()}},_entry:e=>(T(e),b(l,e)),_setContext:(e={})=>(Object.assign($,e),O),_context:()=>$,_adoptMany(e={}){for(const[t,r]of Object.entries(e??{})){if(!l.has(t)){const e=y(r);l.set(t,e),k(t,e);continue}k(t,l.get(t))}return O}},r,u);for(const[e,t]of l)k(e,t);return O.registerMany(e),O;function k(e,t){if(A.has(e)||"function"!=typeof t?._bindRegistry)return;A.add(e);const r=t._bindRegistry(O,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 S.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:function(e){return Boolean(e?.[p])},signal:h}})(),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:d(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?function(n,o){const s=r(o.attribute.name,o.attributes,"signal"),a=r(o.attribute.name,o.attributes,"class"),i=function(t,r){return e(t)?t.id:"string"==typeof t&&r.signals?.has?.(t)?t:null}(n,o);if("value"===o.attribute.name&&i){const r=function(t,r){return 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`${h(r)}${o.attribute.quote} ${s}=${o.attribute.quote}${h(i)}`}if(null!=s||null!=a){if(i)return h(i);if(function(e){return Boolean(e&&"object"==typeof e)}(n))return h(function(e,t){return"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)?h(n.value):null==n||!1===n?"":h(n)}function f(t,r){return Array.isArray(t)?t.map(e=>f(e,r)).join(""):e(t)?h(t.value):null==t||!1===t?"":h(t)}function p(e={}){return{...e,attributes:n(e.attributes)}}function d(e){const t=e.match(/(?:^|[\s<])([^\s"'=<>`]+)\s*=\s*(["'])$/);return t?{name:t[1],quote:t[2]}:null}function h(e){return String(e).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}return{html:function(e,...t){return{[a]:!0,strings:e,values:t}},isTemplateResult:c,rawHtml:function(e){return{[i]:!0,html:String(e??"")}},renderTemplate:u,escapeHtml:h}})(),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 d=0;function h(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(t,r={},o,a="component"){if(!y(t)&&"function"!=typeof t)throw new TypeError("renderComponent(Component) requires a component function.");const c=`${a}.${m(t)}.${++d}`,u=[],l=[],f=[],p=[],h=[],b={attributes:o.attributes,signals:o.signals,bind(e){const t=o.loader?._registerBinding?.(e);if(!t)throw new Error("Inline template bindings require a Loader.");return h.push(t),t}},v=e=>i(e,b),S=function({runtime:t,scope:r,cleanups:o,attachHooks:a,visibleHooks:i,destroyHooks:c,renderScopedTemplate:u}){const{signals:l,handlers:f,loader:p,server:d,router:h,cache:y,scheduler:m}=t,b=new WeakMap;let v=0,S=0;const E={scope:r,signals:l,handlers:f,loader:p,server:d,router:h,cache:y,scheduler:m,signal(e,t){if(1===arguments.length){const t=w(r,"signal."+ ++S),n=l.ensure(t,e);return o.push(()=>l.unregister?.(t)),n}const n=w(r,e),s=!l.has(n),a=l.ensure(n,t);return s&&o.push(()=>l.unregister?.(n)),a},computed(e,t){const n=w(r,e),s=!l.has(n),a=l.ensure(n,void 0);s&&o.push(()=>l.unregister?.(n));const i=l.effect(()=>{l.set(n,t.call(E))});return o.push(i),a},asyncSignal(e,t){const n=w(r,e),s=!l.has(n);return l.has(n)||l.asyncSignal(n,t),s&&o.push(()=>l.unregister?.(n)),l.ref(n)},effect(e){const t=l.effect(()=>e.call(E),{scheduler:m,phase:"effect",scope:r});return o.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 c=g(e,n,t,r);return o.push(c.cleanup),a.push(e=>c.attach(e)),i.push(e=>c.visible(e,p._observeVisible)),s(c.html)},suspense(r,o){const a=r?.id;if(!a)throw new TypeError("this.suspense(signalRef, views) requires a signal ref.");const i=function(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 l=e(t.attributes,"async",o),f=u(s.call(E,r));c.push(`<template ${l}="${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}".`);c.push(()=>t.call(E))}else i.push(e=>t.call(E,e));else a.push(e=>t.call(E,e))},onMount(e){E.on("attach",e)},onVisible(e){E.on("visible",e)}};return E;function $(e,t){const n=w(r,e);return f.register(n,e=>t.call({...E,...e},e)),o.push(()=>f.unregister?.(n)),n}}({runtime:o,scope:c,cleanups:u,attachHooks:l,visibleHooks:f,destroyHooks:p,renderScopedTemplate:v}),E=t.call(S,r);if(E&&"function"==typeof E.then)throw new TypeError(`Component "${m(t)}" 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<l.length;t+=1){const r=l[t];o.scheduler?.enqueue("lifecycle",()=>{const t=r(e);"function"==typeof t&&u.push(t)},{scope:c,key:`attach:${t}`})??$(r,e)}},mount(e){this.attach(e)},visible(e,t){if(0===f.length)return;const r=t(e,()=>{for(let t=0;t<f.length;t+=1){const r=f[t];o.scheduler?.enqueue("lifecycle",()=>{const t=r(e);"function"==typeof t&&u.push(t)},{scope:c,key:`visible:${t}`})??A(r,e)}});"function"==typeof r&&u.push(r)},cleanup(){for(;p.length>0;)p.pop()?.();for(o.scheduler?.markScopeDestroyed(c);u.length>0;)u.pop()?.();for(;h.length>0;)o.loader?._releaseBinding?.(h.pop())}};function $(e,t){const r=e(t);"function"==typeof r&&u.push(r)}function A(e,t){const r=e(t);"function"==typeof r&&u.push(r)}}function w(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 m(e){return e.displayName||e.name||"anonymous"}return{defineComponent:h,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:g,component:h}})(),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(!h(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 h(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 d(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(function(e,t=Object.prototype.toString.call(e)){return"[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)d(r,t);t.delete(e)}else{for(const r of Object.values(e))d(r,t);t.delete(e)}}function h(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:function({endpoint:e="/__async/server",transport:t,signals:s,loader:u,router:l,cache:f,scheduler:p,headers:h={}}={}){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)};d(f);const p=await t(function(e,t){return`${String(e).replace(/\/$/,"")}/${encodeURIComponent(t)}`}(e,s),{method:"POST",headers:{"content-type":"application/json",...h},body:JSON.stringify(f),signal:u.abort});if(function(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 function(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),(m=o(w))&&"object"==typeof m&&r.add(m),m;var m}return i(w,{run:w,_setContext(e={}){Object.assign(g,e)}},()=>g)},resolveServerCommandArguments:function(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:function(e){return e&&"function"!=typeof e.get?{get:t=>function(e,t){return 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:d,preventDefault:d,stopPropagation(){this.event?.stopPropagation?.()},stopImmediatePropagation(){this.event?.stopImmediatePropagation?.()}};function d(){this.event?.preventDefault?.()}function h(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 function(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(!function(e){return/^[^.\s();]+(?:\.[^.\s();]+)*$/.test(e)}(r))throw new Error(`Server command "${e}" has an invalid function id.`);return{type:"server",id:r,args:w(e.slice(t+1,-1))}}(e);if(e.includes("(")||e.includes(")"))throw new Error(`Command "${e}" is not supported.`);return{type:"handler",id:e}}function w(e){return 0===e.trim().length?[]:e.split(",").map(e=>e.trim()).filter(Boolean).map(m)}function m(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(),d=r.type??"handler",g=c._map(d),w=r.lazyRegistry??u(r),m=new Map,b=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??{}))b.register(t,r);return b},unregister:e=>(y(e),m.delete(e),g.delete(e)),resolve(e){y(e);const t=g.get(e);return l(t)?(m.has(e)||m.set(e,async function(...r){const n=await w.resolve(d,e,t);if("function"!=typeof n)throw new TypeError(`Handler "${e}" did not resolve to a function.`);return n.apply(this,r)}),m.get(e)):t},async run(t,r={}){const a=h(t),i=[];let c=!1;const u={...r,handlers:b,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=b.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)||b.register(t,r);return b}},c,d);return function(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)}(b,g),b.registerMany(t),b},parseHandlerRef:h,isHandlerToken:function(e){return 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:function(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 d=!1,h=!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.");A(),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(A(),function(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(j(o))return r;const i=void 0===n.key?void 0:`${e}:${function(e){return 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(A(),h)return;y=!1,h=!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{h=!1,E()&&v()}},async flushScope(e){if(A(),h)return;y=!1,h=!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{h=!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=>j(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:h,scheduled:y}},destroy(){d=!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||d||h||g>0||y||(y=!0,e=()=>{d||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&&!j(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 A(){if(d)throw new Error("Scheduler has been destroyed.")}function j(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,d="__async:inline:";function h({root:o,signals:s,handlers:i,server:u,router:l,cache:h,attributes:E,scheduler:O}={}){const T=o?.ownerDocument??o??globalThis.document,q=o??T,C=s??n(),M=i??t(),x=O??r(),L=!O,D=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:h,scheduler:x,attributes:D,start:()=>(ne(),K.scan(q),K),scan:(e=q)=>(ne(),function(e){for(const t of j(e))x.reviveScope?.(t)}(e),function(e){for(const t of j(e))for(const e of t.getAttributeNames?.()??[]){const r=c(e,D,"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=>A(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),function(e){for(const t of j(e))for(const e of t.getAttributeNames?.()??[]){const r=c(e,D,"class");null!=r&&Y(t,r,t.getAttribute(e))}}(e),function(e){for(const t of j(e))if("function"==typeof t.getAttributeNames)for(const e of t.getAttributeNames()){const r=c(e,D,"on");r&&"attach"!==r&&"mount"!==r&&"visible"!==r&&Z(t,r,t.getAttribute(e))}}(e),function(e){for(const t of j(e)){if(W.has(t))continue;const e=R(t,D);if(null!=e){if(!U.has(t)){const r=S(t,e,D);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),function(e){for(const t of j(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 j(e)){const e=p(t,D,"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=function(e,t,r){for(const n of j(e))if(R(n,r)===String(t))return n;return null}(q,e,D);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:D});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,function(e){for(const t of j(e))x.markScopeDestroyed(t)}(q);for(const e of[...B])se(e);B.clear(),L&&x.destroy()}},_observeVisible:(e,t)=>re(e,t),_registerBinding(e){const t=`${d}${++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=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=>{!function(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=()=>function(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(function(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})=>{!function(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=U.get(e);if(!t)return;const r=C.get(`${t.id}.$status`),n=function(e,t){return"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,D,"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 j(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(d)}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||O(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 A(e,t,r){e[t]=null!=r?r:""}function j(e){return function(e,t){const r=[];return 1===e?.nodeType&&e.matches?.(t)&&r.push(e),r.push(...e?.querySelectorAll?.(t)??[]),r}(e,"*")}function R(e,t){return O(e)&&e.hasAttribute?.("for")?e.getAttribute("for"):p(e,t,"async","boundary")}function O(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:h,AsyncLoader:h}})(),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,d=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??{}))d.register(t,r);return d},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=d.resolve(e);if(!n)throw new Error(`Partial "${e}" is not registered.`);const o={...r,id:e,props:t,cache:r.cache,partials:d};return u(await n.call(o,t),o)},_adoptMany(e={}){for(const[t,r]of Object.entries(e??{}))a.has(t)||d.register(t,r);return d}},r,n);return d.registerMany(e),d},normalizePartialResult:u}})(),d=(()=>{const{Loader:e}=f,{createHandlerRegistry:t}=u,{createScheduler:n}=l,{createSignalRegistry:a}=s,{applyServerResult:i}=c,{createRegistryStore:p}=r,{normalizeAttributeConfig:d}=o;function h(e,t={}){return{...t,partial:e}}const y=h,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(A(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){A(e);const t=s.findIndex(t=>t.pattern===e);return-1!==t&&s.splice(t,1),o.delete(e)},match(e){const t=function(e){return 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?h(t):t,{regex:n,keys:o}=function(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 A(e){if("string"!=typeof e||"*"!==e&&!e.startsWith("/"))throw new TypeError('Route pattern must be a path string or "*".')}return{defineRoute:h,createRouteRegistry:w,createRouter:function({mode:r="ssr",root:o,boundary:s="route",routes:c=w(),loader:u,signals:l,handlers:f,server:p,cache:h,partials:y,attributes:m,scheduler:S}={}){!function(e){if(!g.has(e))throw new TypeError(`Unknown router mode "${e}".`)}(r);const E=o?.ownerDocument??o??globalThis.document,$=o??E,A=l??u?.signals??a(),j=f??u?.handlers??t(),R=S??u?.scheduler??n(),O=!S&&!u?.scheduler,k=d(m??u?.attributes),_=u??e({root:$,signals:A,handlers:j,server:p,cache:h,scheduler:R,attributes:k}),T=!u,q=new Set;let C,M=!1,x=0;const L={mode:r,root:$,boundary:s,routes:c,loader:_,signals:A,handlers:j,server:p,cache:h,partials:y,scheduler:R,attributes:k,start:()=>(I(),_.router=L,A._setContext?.({router:L,loader:_,server:p,cache:h,scheduler:R}),T&&_.start(),"mpa"===r||"ssr"===r?(N(),L):(function(){const e=e=>{const t=b(e.target,"a[href]");t&&!function(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||function(e,t,r){return 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(L.navigate(t.href)))},t=e=>{const t=b(e.target,"form");t&&!function(e){return"get"!==String(e.method||"get").toLowerCase()||V(e.action).origin!==W().origin}(t)&&(e.preventDefault(),U(L.navigate(function(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(L.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(L.navigate(W(),{replace:!0,initial:!0,source:"client"})),L):(N(),L))),match:e=>c.match(V(e)),prefetch(e){if(I(),"mpa"===r||"ssr"===r)return Promise.resolve(null);const t=L.match(e);return t?.route?.partial&&y?.resolve?.(t.route.partial)?y.render(t.route.partial,t.params,{...D(t),prefetch:!0}):Promise.resolve(null)},navigate:async(e,t={})=>(I(),"mpa"===r||"ssr"===r?(E.defaultView?.location?.assign?.(e),null):async function(e,t={}){const r=L.match(e);if(!r)return B(e,null),function(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,D(r,n));return P(n)?(await async function(e,t,r,n){P(n)&&(await i(e,{signals:A,loader:_,router:L,cache:h,scheduler:R,abort:n?.abort}),await R.flush(),P(n)&&(null==e?.html||e.boundary||e.redirect||(_.swap(s,e.html),await R.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(),O&&R.destroy()}}};return L;function D(e,t){return{params:e.params,route:e.route,router:L,signals:A,handlers:j,loader:_,server:p,cache:h,scheduler:R,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,L.match(e),{pending:!1,error:null})}function z(e,t,r={}){A.ensure("router",{}),H({url:e.href,path:e.pathname,query:v(e),params:t?.params??{},route:t?.route??null,...r})}function H(e){A.ensure("router",{});for(const[t,r]of Object.entries(e))A.set(`router.${t}`,r)}function U(e){e.catch(e=>{M||(H({pending:!1,error:e}),function(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}})(),h=(()=>{const{createCacheRegistry:e}=n,{createComponentRegistry:a}=i,{createHandlerRegistry:h}=u,{Loader:y}=f,{createPartialRegistry:g}=p,{createRouteRegistry:w,createRouter:m}=d,{createScheduler:b}=l,{createServerNamespace:v}=c,{cloneSignalDeclaration:S,createSignal:E,createSignalRegistry:$}=s,{createRegistryStore:A}=r,{attributeName:j,normalizeAttributeConfig:R}=o,{createLazyRegistry:O,defineRegistrySnapshot:k,sameRegistryValue:_}=t,T=new Set(["signal","handler","server","partial","route","component","asyncSignal"]);function q(e,t={}){const r=A(void 0,{target:"browser"}),n=new Set,o=t.createRuntime??C,s={registry:r,use(e,t){const o=function(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]=I(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]=I(t,n)}else r.cache.browser={...n?.browser??{}},r.cache.server={...n?.server??{}};return r}(e,t);!function(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=>function(e){return 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):(function(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=(C=t,Boolean(C&&"function"==typeof C.use&&"function"==typeof C.snapshot&&C.registry)?t:q(t??{})),o=r.target??"browser",s=r.scheduler??r.loader?.scheduler??b({strategy:"server"===o?"manual":"microtask"}),i=!r.scheduler&&!r.loader?.scheduler,c=R(r.attributes),u=r.lazyRegistry??O({registryAssets:r.registryAssets,importModule:r.importModule}),l=r.registry??function(e,{target:t}={}){const r=e.rawSnapshot();return A({...r,signal:D(r.signal)},{target:t})}(n.registry,{target:o}),f=r.signals??$(void 0,{registry:l,type:"signal",lazyRegistry:u}),p=r.handlers??h(void 0,{registry:l,type:"handler",lazyRegistry:u}),d=e(void 0,{registry:l,type:"cache.server"}),v=e(void 0,{registry:l,type:"cache.browser"}),S=r.serverFactory??V,E=r.server??S(void 0,{registry:l,type:"server"}),j=r.partials??g(void 0,{registry:l,type:"partial",lazyRegistry:u}),k=r.routes??w(void 0,{registry:l,type:"route"}),_=r.components??a(void 0,{registry:l,type:"component",lazyRegistry:u}),T=r.loader||Object.hasOwn(r,"root")?r.root:null;var C;let B=r.loader,N=r.router,H=!1,U=()=>{},I=!1,F=!1;const K=new Map,Z=T??globalThis.document,Y=r.snapshot??("browser"===o?x(Z,{attributes:c}):void 0);!function(e,t){try{e.cache=t}catch{}}(E,d);const G={app:n,registry:l,target:o,signals:f,handlers:p,server:E,partials:j,routes:k,components:_,browser:{cache:v},loader:B,router:N,scheduler:s,attributes:c,start:()=>(re(),I||(I=!0,"server"!==o?(ee({cache:v}),f._setContext?.({server:E,loader:B,cache:v,scheduler:s}),B?(Q(B.root,B),B.start(),X(B.root)):null!=T&&G.attachRoot(T)):(ee({cache:d}),f._setContext?.({server:E,cache:d,scheduler:s}))),G),use:(e,t)=>(n.use(e,t),G),attachRoot(e){if(re(),"server"===o)throw new Error("Server runtimes cannot attach DOM roots.");if(!e)throw new TypeError("runtime.attachRoot(root) requires a root.");if(K.has(e))return G;const t=0===K.size&&B?B:y({root:e,signals:f,handlers:p,server:E,cache:v,scheduler:s,attributes:c});return Q(e,t),t.start(),ee({cache:v}),f._setContext?.({server:E,loader:G.loader,cache:v,scheduler:s}),X(e),G},detachRoot(e){if(re(),"server"===o)return G;if(null==e){for(const e of new Set(K.values()))e.destroy?.();return K.clear(),N?.destroy?.(),N=void 0,H=!1,B=void 0,G.loader=void 0,G.router=void 0,G}const t=K.get(e);if(!t)return G;if(t.destroy?.(),K.delete(e),B===t){N?.destroy?.(),N=void 0,H=!1;const e=K.values().next().value;B=e,G.loader=e,G.router=void 0,e&&X(e.root)}return G},inspectRoots:()=>({count:K.size,roots:[...K].map(([e,t])=>({root:e,loader:t,primary:t===B}))}),applySnapshot:(e,t={})=>(function(e,t={},r={}){const n=z(t);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),P(e,"asyncSignal",n.asyncSignal,null,r)}(G,e,t),G),async render(e){re(),ee({cache:d}),f._setContext?.({server:E,cache:d,scheduler:s});const t=k.match(e);if(!t)return await s.flush(),{html:J("",{status:404,signals:f,browserCache:v,boundary:r.boundary??"route",attributes:c}),status:404,signals:f.snapshot(),cache:{browser:v.snapshot()}};const n=t.route.partial,o=n&&j.resolve(n)?await j.render(n,t.params,{params:t.params,route:t.route,signals:f,handlers:p,server:E,cache:d,browserCache:v,partials:j,scheduler:s,...te()}):{html:""};if(o.signals)for(const[e,t]of Object.entries(o.signals))W(f,e,t);o.cache?.browser&&v.restore(o.cache.browser),await s.flush();const a=o.status??200;return{html:J(o.html,{status:a,signals:f,browserCache:v,boundary:o.boundary??r.boundary??"route",attributes:c}),status:a,signals:f.snapshot(),cache:{browser:v.snapshot()}}},destroy(){if(F)return;F=!0,U(),N?.destroy?.();const e=new Set(K.values());for(const t of e)t.destroy?.();K.clear(),B&&!e.has(B)&&B?.destroy?.(),f.destroy?.(),i&&s.destroy()},_applyUse(e){!function(e,t){L(e.signals,e.registry,t.signal),L(e.handlers,e.registry,t.handler),L(e.server,e.registry,t.server),L(e.partials,e.registry,t.partial),L(e.routes,e.registry,t.route),L(e.components,e.registry,t.component),function(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),L(e.browser.cache,e.registry,t.cache.browser),L(e.server.cache,e.registry,t.cache.server)}(G,e)}};return E.cache=d,G.server.cache=d,G.applySnapshot(Y,{strict:r.strictSnapshots??!0}),U=n._attach(G),G;function Q(e,t){K.set(e,t),B||(B=t,G.loader=t),t.server=E,t.cache=v,t.scheduler=s}function X(e){!1!==N&&!H&&(N||function(e,t){return Boolean(t.routerOptions||t.mode||e.entries().length>0)}(k,r))&&G.loader&&(N=N??m({mode:r.mode??"ssr",root:e,boundary:r.boundary??"route",routes:k,loader:G.loader,signals:f,handlers:p,server:E,cache:v,partials:j,scheduler:s,attributes:c}),G.router=N,G.loader.router=N,ee({cache:v,router:N}),N.start(),H=!0)}function ee(e={}){const t=function(e){return"function"==typeof e?.registerMany}(E)?d:e.cache;E._setContext?.({signals:f,loader:B,router:N,cache:t,scheduler:s,requestContext:r.requestContext,...te()})}function te(){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 re(){if(F)throw new Error("Async app runtime has been destroyed.")}}const M=q();function x(e=globalThis.document,{attributes:t}={}){const r=R(t),n=j(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 L(e,t,r){r&&0!==Object.keys(r).length&&(e?.registry!==t?e?.registerMany?.(r):e._adoptMany?.(r))}function D(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))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){const n=String(t).split(".")[0];if(e.has?.(n)){if(t===n){const t=e._entry?.(n);if("function"==typeof t?._restore&&function(e){return!(!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))return void t._restore(r)}e.set(t,r)}else e.register(n,E(t===n?r:{})),t!==n&&e.set(t,r)}function V(e={},t={}){const r=t.registry??A(),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 I(e,t={}){if("signal"!==e)return{...t??{}};const r={};for(const[e,n]of Object.entries(t??{}))r[e]=F(n);return r}function F(e){return e&&"object"==typeof e&&"function"==typeof e.subscribe?e:E(e)}function J(e,{signals:t,browserCache:r,boundary:n,attributes:o}){const s={signals:t.snapshot(),cache:{browser:r.snapshot()}},a=j(o,"async","boundary"),i=j(o,"async","snapshot");return`<section ${a}="${c=n,String(c).replaceAll("&","&").replaceAll('"',""").replaceAll("<","<")}">${e??""}</section><script type="application/json" ${i}>${function(e){return 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:function(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,d="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 h=new Map,y=[];let g=!1;const w={async apply(r){if(g)throw new Error("Boundary receiver has been destroyed.");const c=function(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,h.has(w)||h.set(w,{lastSeq:-1/0,applied:0,ignored:0,errored:0,lastStatus:void 0}),h.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&&d(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 function(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 function(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 h)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 h.clear(),y.length=0,w;e(t),h.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,h.clear(),y.length=0}};return w;function m(e){if(0!==c)for(y.push(function(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:function(t,r){return r?.aborted?Promise.reject(e(r)):new Promise((n,o)=>{let s=setTimeout(function(){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}=h;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:function(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}=h,{createApp:v}=h,{defineApp:S}=h,{readSnapshot:E}=h,{attributeName:$}=o,{defineAttributeConfig:A}=o,{createBoundaryReceiver:j}=y,{createCacheRegistry:R}=n,{defineCache:O}=n,{component:k}=i,{createComponentRegistry:_}=i,{defineComponent:T}=i,{delay:q}=g,{defineAsyncContainerElement:C}=w,{defineAsyncSuspenseElement:M}=w,{createHandlerRegistry:x}=u,{html:L}=a,{createLazyRegistry:D}=t,{defineRegistrySnapshot:B}=t,{Loader:P}=f,{AsyncLoader:N}=f,{createPartialRegistry:z}=p,{createRegistryStore:H}=r,{createRouteRegistry:U}=d,{createRouter:W}=d,{defineRoute:V}=d,{route:I}=d,{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,re={asyncSignal:m,Async:b,createApp:v,defineApp:S,readSnapshot:E,attributeName:$,defineAttributeConfig:A,createBoundaryReceiver:j,createCacheRegistry:R,defineCache:O,component:k,createComponentRegistry:_,defineComponent:T,delay:q,defineAsyncContainerElement:C,defineAsyncSuspenseElement:M,createHandlerRegistry:x,html:L,createLazyRegistry:D,defineRegistrySnapshot:B,Loader:P,AsyncLoader:N,createPartialRegistry:z,createRegistryStore:H,createRouteRegistry:U,createRouter:W,defineRoute:V,route:I,createScheduler:F,applyServerResult:J,createServerProxy:K,resolveServerCommandArguments:Z,unwrapServerResult:Y,computed:G,createSignal:Q,createSignalRegistry:X,effect:ee,signal:te};return function(e,t){const r=Object.keys(e).filter(e=>"Async"!==e&&Object.prototype.hasOwnProperty.call(t,e));if(r.length>0)throw new Error(`UMD Async namespace export conflict: ${r.join(", ")}.`)}(re,b),Object.assign(b,re),b.Async=b,b}();"function"==typeof define&&define.amd?define([],()=>t):"object"==typeof module&&module.exports?module.exports=t:(e.AsyncFramework=t,e.Async=t)}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this);
|
package/framework.ts
CHANGED
|
@@ -188,6 +188,10 @@ const __asyncSignalModule = (() => {
|
|
|
188
188
|
};
|
|
189
189
|
},
|
|
190
190
|
|
|
191
|
+
_cloneSignalDeclaration() {
|
|
192
|
+
return asyncSignal(id, fn);
|
|
193
|
+
},
|
|
194
|
+
|
|
191
195
|
_restore(snapshot = {}) {
|
|
192
196
|
if (!isAsyncSignalSnapshot(snapshot)) {
|
|
193
197
|
return state.set(snapshot);
|
|
@@ -959,7 +963,12 @@ const __cacheModule = (() => {
|
|
|
959
963
|
return registryStore.entries(`${type}.entries`);
|
|
960
964
|
},
|
|
961
965
|
|
|
962
|
-
_adoptMany() {
|
|
966
|
+
_adoptMany(map = {}) {
|
|
967
|
+
for (const [id, definition] of Object.entries(map ?? {})) {
|
|
968
|
+
if (!definitions.has(id)) {
|
|
969
|
+
registryApi.register(id, definition);
|
|
970
|
+
}
|
|
971
|
+
}
|
|
963
972
|
return registryApi;
|
|
964
973
|
}
|
|
965
974
|
}, registryStore, type);
|
|
@@ -1117,6 +1126,10 @@ const __signalsModule = (() => {
|
|
|
1117
1126
|
|
|
1118
1127
|
snapshot() {
|
|
1119
1128
|
return value;
|
|
1129
|
+
},
|
|
1130
|
+
|
|
1131
|
+
_cloneSignalDeclaration() {
|
|
1132
|
+
return createSignal(value);
|
|
1120
1133
|
}
|
|
1121
1134
|
};
|
|
1122
1135
|
|
|
@@ -1159,6 +1172,10 @@ const __signalsModule = (() => {
|
|
|
1159
1172
|
return backing.snapshot();
|
|
1160
1173
|
},
|
|
1161
1174
|
|
|
1175
|
+
_cloneSignalDeclaration() {
|
|
1176
|
+
return computed(fn);
|
|
1177
|
+
},
|
|
1178
|
+
|
|
1162
1179
|
_bindRegistry(registry, id) {
|
|
1163
1180
|
return registry.effect(() => {
|
|
1164
1181
|
backing.set(fn.call({
|
|
@@ -1183,6 +1200,9 @@ const __signalsModule = (() => {
|
|
|
1183
1200
|
[effectKind]: true,
|
|
1184
1201
|
kind: "effect",
|
|
1185
1202
|
fn,
|
|
1203
|
+
_cloneSignalDeclaration() {
|
|
1204
|
+
return effect(fn);
|
|
1205
|
+
},
|
|
1186
1206
|
_bindRegistry(registry) {
|
|
1187
1207
|
return registry.effect(fn);
|
|
1188
1208
|
}
|
|
@@ -1401,10 +1421,14 @@ const __signalsModule = (() => {
|
|
|
1401
1421
|
},
|
|
1402
1422
|
|
|
1403
1423
|
_adoptMany(map = {}) {
|
|
1404
|
-
for (const id of Object.
|
|
1405
|
-
if (entries.has(id)) {
|
|
1406
|
-
|
|
1424
|
+
for (const [id, signalLike] of Object.entries(map ?? {})) {
|
|
1425
|
+
if (!entries.has(id)) {
|
|
1426
|
+
const entry = cloneSignalDeclaration(signalLike);
|
|
1427
|
+
entries.set(id, entry);
|
|
1428
|
+
bindEntry(id, entry);
|
|
1429
|
+
continue;
|
|
1407
1430
|
}
|
|
1431
|
+
bindEntry(id, entries.get(id));
|
|
1408
1432
|
}
|
|
1409
1433
|
return registry;
|
|
1410
1434
|
}
|
|
@@ -1482,6 +1506,16 @@ const __signalsModule = (() => {
|
|
|
1482
1506
|
return createSignal(signalLike);
|
|
1483
1507
|
}
|
|
1484
1508
|
|
|
1509
|
+
function cloneSignalDeclaration(signalLike) {
|
|
1510
|
+
if (typeof signalLike?._cloneSignalDeclaration === "function") {
|
|
1511
|
+
return signalLike._cloneSignalDeclaration();
|
|
1512
|
+
}
|
|
1513
|
+
if (isSignalLike(signalLike)) {
|
|
1514
|
+
return createSignal(typeof signalLike.snapshot === "function" ? signalLike.snapshot() : signalLike.value);
|
|
1515
|
+
}
|
|
1516
|
+
return createSignal(signalLike);
|
|
1517
|
+
}
|
|
1518
|
+
|
|
1485
1519
|
function isSignalLike(value) {
|
|
1486
1520
|
return Boolean(value && typeof value === "object" && typeof value.subscribe === "function");
|
|
1487
1521
|
}
|
|
@@ -1660,7 +1694,7 @@ const __signalsModule = (() => {
|
|
|
1660
1694
|
frame.add(path);
|
|
1661
1695
|
}
|
|
1662
1696
|
}
|
|
1663
|
-
return { createSignal, computed, effect, createSignalRegistry, isSignalRef, signal };
|
|
1697
|
+
return { createSignal, computed, effect, createSignalRegistry, cloneSignalDeclaration, isSignalRef, signal };
|
|
1664
1698
|
})();
|
|
1665
1699
|
|
|
1666
1700
|
const __htmlModule = (() => {
|
|
@@ -1902,7 +1936,12 @@ const __componentModule = (() => {
|
|
|
1902
1936
|
return lazyComponents.get(id);
|
|
1903
1937
|
},
|
|
1904
1938
|
|
|
1905
|
-
_adoptMany() {
|
|
1939
|
+
_adoptMany(map = {}) {
|
|
1940
|
+
for (const [id, Component] of Object.entries(map ?? {})) {
|
|
1941
|
+
if (!entries.has(id)) {
|
|
1942
|
+
registry.register(id, Component);
|
|
1943
|
+
}
|
|
1944
|
+
}
|
|
1906
1945
|
return registry;
|
|
1907
1946
|
}
|
|
1908
1947
|
}, registryStore, type);
|
|
@@ -2742,7 +2781,12 @@ const __handlersModule = (() => {
|
|
|
2742
2781
|
return results;
|
|
2743
2782
|
},
|
|
2744
2783
|
|
|
2745
|
-
_adoptMany() {
|
|
2784
|
+
_adoptMany(map = {}) {
|
|
2785
|
+
for (const [id, fn] of Object.entries(map ?? {})) {
|
|
2786
|
+
if (!handlers.has(id)) {
|
|
2787
|
+
registry.register(id, fn);
|
|
2788
|
+
}
|
|
2789
|
+
}
|
|
2746
2790
|
return registry;
|
|
2747
2791
|
}
|
|
2748
2792
|
}, registryStore, type);
|
|
@@ -4031,7 +4075,12 @@ const __partialsModule = (() => {
|
|
|
4031
4075
|
return normalizePartialResult(result, partialContext);
|
|
4032
4076
|
},
|
|
4033
4077
|
|
|
4034
|
-
_adoptMany() {
|
|
4078
|
+
_adoptMany(map = {}) {
|
|
4079
|
+
for (const [id, fn] of Object.entries(map ?? {})) {
|
|
4080
|
+
if (!entries.has(id)) {
|
|
4081
|
+
registry.register(id, fn);
|
|
4082
|
+
}
|
|
4083
|
+
}
|
|
4035
4084
|
return registry;
|
|
4036
4085
|
}
|
|
4037
4086
|
}, registryStore, type);
|
|
@@ -4183,7 +4232,11 @@ const __routerModule = (() => {
|
|
|
4183
4232
|
},
|
|
4184
4233
|
|
|
4185
4234
|
_adoptMany(map = {}) {
|
|
4186
|
-
for (const pattern of Object.
|
|
4235
|
+
for (const [pattern, definition] of Object.entries(map ?? {})) {
|
|
4236
|
+
if (!entries.has(pattern)) {
|
|
4237
|
+
registry.register(pattern, definition);
|
|
4238
|
+
continue;
|
|
4239
|
+
}
|
|
4187
4240
|
adoptRoute(pattern, entries.get(pattern));
|
|
4188
4241
|
}
|
|
4189
4242
|
return registry;
|
|
@@ -4679,7 +4732,7 @@ const __appModule = (() => {
|
|
|
4679
4732
|
const { createRouteRegistry, createRouter } = __routerModule;
|
|
4680
4733
|
const { createScheduler } = __schedulerModule;
|
|
4681
4734
|
const { createServerNamespace } = __serverModule;
|
|
4682
|
-
const { createSignal, createSignalRegistry } = __signalsModule;
|
|
4735
|
+
const { cloneSignalDeclaration, createSignal, createSignalRegistry } = __signalsModule;
|
|
4683
4736
|
const { createRegistryStore } = __registryStoreModule;
|
|
4684
4737
|
const { attributeName, normalizeAttributeConfig } = __attributesModule;
|
|
4685
4738
|
const { createLazyRegistry, defineRegistrySnapshot, sameRegistryValue } = __lazyRegistryModule;
|
|
@@ -4762,7 +4815,7 @@ const __appModule = (() => {
|
|
|
4762
4815
|
registryAssets: options.registryAssets,
|
|
4763
4816
|
importModule: options.importModule
|
|
4764
4817
|
});
|
|
4765
|
-
const registry = options.registry ?? app.registry
|
|
4818
|
+
const registry = options.registry ?? createRuntimeRegistry(app.registry, { target });
|
|
4766
4819
|
const signals = options.signals ?? createSignalRegistry(undefined, { registry, type: "signal", lazyRegistry });
|
|
4767
4820
|
const handlers = options.handlers ?? createHandlerRegistry(undefined, { registry, type: "handler", lazyRegistry });
|
|
4768
4821
|
const serverCache = createCacheRegistry(undefined, { registry, type: "cache.server" });
|
|
@@ -5143,6 +5196,22 @@ const __appModule = (() => {
|
|
|
5143
5196
|
registry?.registerMany?.(entries);
|
|
5144
5197
|
}
|
|
5145
5198
|
|
|
5199
|
+
function createRuntimeRegistry(appRegistry, { target } = {}) {
|
|
5200
|
+
const declarations = appRegistry.rawSnapshot();
|
|
5201
|
+
return createRegistryStore({
|
|
5202
|
+
...declarations,
|
|
5203
|
+
signal: cloneSignalDeclarations(declarations.signal)
|
|
5204
|
+
}, { target });
|
|
5205
|
+
}
|
|
5206
|
+
|
|
5207
|
+
function cloneSignalDeclarations(signals = {}) {
|
|
5208
|
+
const cloned = {};
|
|
5209
|
+
for (const [id, signalLike] of Object.entries(signals ?? {})) {
|
|
5210
|
+
cloned[id] = cloneSignalDeclaration(signalLike);
|
|
5211
|
+
}
|
|
5212
|
+
return cloned;
|
|
5213
|
+
}
|
|
5214
|
+
|
|
5146
5215
|
function emptyDeclarations() {
|
|
5147
5216
|
return {
|
|
5148
5217
|
signal: {},
|
|
@@ -5611,7 +5680,12 @@ const __serverRegistryModule = (() => {
|
|
|
5611
5680
|
return registry;
|
|
5612
5681
|
},
|
|
5613
5682
|
|
|
5614
|
-
_adoptMany() {
|
|
5683
|
+
_adoptMany(map = {}) {
|
|
5684
|
+
for (const [id, fn] of Object.entries(map ?? {})) {
|
|
5685
|
+
if (!entries.has(id)) {
|
|
5686
|
+
registry.register(id, fn);
|
|
5687
|
+
}
|
|
5688
|
+
}
|
|
5615
5689
|
return registry;
|
|
5616
5690
|
}
|
|
5617
5691
|
}, registryStore, type);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@async/framework",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.3",
|
|
4
4
|
"description": "No-build Loader app runtime with browser and server entrypoints, signals, command events, route partials, cache split, SSR activation, and streaming boundaries.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./server.js",
|