@hozu/runtime-client 0.9.0 → 0.11.0
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/dist/browser/chunk-CE5MSQHF.js +1 -0
- package/dist/browser/client.js +1 -1
- package/dist/browser-dev/client.js +232 -41
- package/dist/fetch.d.ts +30 -0
- package/dist/fetch.d.ts.map +1 -0
- package/dist/fetch.js +177 -0
- package/dist/fetch.js.map +1 -0
- package/dist/files.js +1 -1
- package/dist/hydrate.d.ts +29 -2
- package/dist/hydrate.d.ts.map +1 -1
- package/dist/hydrate.js +27 -4
- package/dist/hydrate.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mount.d.ts +2 -0
- package/dist/mount.d.ts.map +1 -1
- package/dist/mount.js +5 -1
- package/dist/mount.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var I=function(f,t){return typeof f=="string"&&/^\.\.?\//.test(f)?f.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(d,a,o,i,e){return a?t?".jsx":".js":o&&(!i||!e)?d:o+i+"."+e.toLowerCase()+"js"}):f},O=Symbol.for("hozu.fetchFail");function j(f,t,d=f,a=""){let o=[],i=a||"(root)",e=f;typeof e.$ref=="string"&&(e=e.$ref.split("/").slice(1).reduce((r,p)=>r?.[p],d)??{});let h=e.anyOf??e.oneOf;if(Array.isArray(h)){for(let r of h){let p=j(r,t,d,a);if(!p.issues.length)return p}return{issues:[`${i}: matches none of the allowed shapes`],value:t}}"const"in e&&t!==e.const&&o.push(`${i}: expected ${JSON.stringify(e.const)}`),Array.isArray(e.enum)&&!e.enum.includes(t)&&o.push(`${i}: expected one of ${e.enum.join(", ")}`);let b=e.type===void 0?[]:Array.isArray(e.type)?e.type:[e.type],k=r=>r==="null"?t===null:r==="array"?Array.isArray(t):r==="integer"?Number.isInteger(t):r==="object"?typeof t=="object"&&t!==null&&!Array.isArray(t):typeof t===r;if(b.length&&!b.some(k))return{issues:[`${i}: expected ${b.join(" or ")}`],value:t};if(typeof t=="string"&&(e.minLength!==void 0&&t.length<e.minLength&&o.push(`${i}: too short`),e.maxLength!==void 0&&t.length>e.maxLength&&o.push(`${i}: too long`),e.pattern&&!new RegExp(e.pattern).test(t)&&o.push(`${i}: does not match ${e.pattern}`)),typeof t=="number"&&(e.minimum!==void 0&&t<e.minimum&&o.push(`${i}: below ${e.minimum}`),e.maximum!==void 0&&t>e.maximum&&o.push(`${i}: above ${e.maximum}`)),Array.isArray(t)){if(!e.items)return{issues:o,value:t};let r=t.map((p,c)=>{let g=j(e.items,p,d,`${a}${a?".":""}${c}`);return o.push(...g.issues),g.value});return{issues:o,value:r}}if(typeof t=="object"&&t!==null&&e.properties){let r=t,p={};for(let c of e.required??[])c in r||o.push(`${a}${a?".":""}${c}: required`);for(let[c,g]of Object.entries(e.properties))if(c in r){let n=j(g,r[c],d,`${a}${a?".":""}${c}`);o.push(...n.issues),p[c]=n.value}if(e.additionalProperties&&typeof e.additionalProperties=="object")for(let c of Object.keys(r))c in p||(p[c]=r[c]);return{issues:o,value:p}}return{issues:o,value:t}}var x=f=>({ok:!1,error:"Unexpected",data:{message:f}});function S(f,t,d,a,o=i=>import(I(i))){let i=f.effects??{},e=new Map,h=new Set;globalThis.addEventListener?.("pagehide",()=>{for(let n of h)n.abort()});let b=n=>{let u=e.get(n);if(!u){let s=f.fetches?.[n];u=s?o(s):Promise.reject(new Error(`No fetch bundle for ${n}`)),e.set(n,u)}return u},k=(n,u)=>(i[n]?.tags??[]).map(s=>s.param?`${s.tag}(${a.stringify(a.compile(s.param,t)({input:u}))})`:s.tag);async function r(n,u){let s=i[n];if(!s)return x(`${n} does not run in the browser`);let l=j(s.input,u);if(l.issues.length)return s.kind==="mutation"?{ok:!1,error:"Invalid",data:{message:l.issues.join("; "),fields:{}}}:x(`Invalid input: ${l.issues.join("; ")}`);let $=n.indexOf("."),m=new AbortController;h.add(m);try{let y=(await b(n.slice(0,$)))[n.slice($+1)];if(typeof y!="function")return x(`fetch.ts exports no ${n.slice($+1)}`);let w=await y(l.value,{fail:(E,L)=>{throw{[O]:{error:E,data:L}}},signal:m.signal,env:f.env??{}}),A=j(s.output,w);return A.issues.length?x(`${n} returned a value that does not match its output: ${A.issues.join("; ")}`):{ok:!0,value:A.value}}catch(y){let w=y?.[O];return w?{ok:!1,error:w.error,data:w.data??null}:x(y instanceof Error?y.message:String(y))}finally{h.delete(m)}}let p=n=>i[n]?.kind==="query";async function c(n){let u=!1;for(let s of[...d.data.keys()]){let l=Object.keys(i).find(m=>p(m)&&s.startsWith(m)&&'{["tfn0123456789-'.includes(s[m.length]??""));if(!l)continue;let $=JSON.parse(s.slice(l.length));k(l,$).some(m=>n.includes(m))&&(d.data.set(s,await r(l,$)),d.versions.set(s,(d.versions.get(s)??0)+1),u=!0)}return u}async function g(n,u){let s=await r(n,u);return{result:s,changed:s.ok?await c(k(n,u)):!1}}return{run:r,mutate:g,reread:c,runs:n=>n in i}}export{j as checked,S as createRunner};
|
package/dist/browser/client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function D(t,e){let n=t;for(let o of e){if(typeof n=="string"&&o==="length")return n.length;if(n===null||typeof n!="object")return null;n=n[o]}return n===void 0?null:n}function W(t,e,n,o=0){if(o===e.length)return n;let s=e[o];if(Array.isArray(t)){let f=t.slice();return f[Number(s)]=W(t[Number(s)]??null,e,n,o+1),f}let a=t!==null&&typeof t=="object"?t:{};return{...a,[s]:W(a[s]??null,e,n,o+1)}}function H(t,e){if(t===e)return!0;if(t===null||e===null||typeof t!="object"||typeof e!="object")return!1;if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(let o=0;o<t.length;o++)if(!H(t[o],e[o]))return!1;return!0}if(Array.isArray(e))return!1;let n=Object.keys(t);if(n.length!==Object.keys(e).length)return!1;for(let o of n)if(!Object.hasOwn(e,o)||!H(t[o],e[o]))return!1;return!0}var ft=(t,e,n)=>{let[o="",s=""]=t.split("?"),a=o.replace(/\/:([A-Za-z]\w*)[?*+]?/g,(y,O)=>[D(e,[O])??[]].flat().map(j=>`/${encodeURIComponent(String(j))}`).join(""))||"/",f=s.split("&"),d="";if(n&&typeof n=="object")for(let y of Object.keys(n).sort()){let O=n[y],h=`${encodeURIComponent(y)}=${encodeURIComponent(String(O))}`;O!==null&&typeof O!="object"&&!f.includes(h)&&(d+=`${d&&"&"}${h}`)}return d?`${a}?${d}`:a};var et=class extends Error{name="CompileError"};function V(t,e){if("literal"in t||"formRef"in t){let a="literal"in t?t.literal:t.formRef;return()=>a}if("object"in t){let a=Object.entries(t.object).map(([f,d])=>[f,V(d,e)]);return f=>{let d={};for(let[y,O]of a)d[y]=O(f);return d}}if("fn"in t){let a=e[t.fn];if(!a)throw new et(`No implementation bound for fn ${t.fn}`);let f=V(t.arg,e);return d=>a(f(d))}if("link"in t){let a=t.link,f=V(t.params,e),d=V(t.search,e);return y=>ft(y.routes?.[a]??"",f(y),d(y))}if("test"in t){let a=st(t.test,e);return f=>a(f)}if("endpoint"in t){let a=t.endpoint,f=V(t.input??{literal:null},e);return d=>ft(d.routes?.[a]??"",null,f(d))}let n=t,{path:o}=n;if(n.ref==="binding"){let a=n.depth;return o.length?f=>D(f.bindings?.[a],o):f=>f.bindings?.[a]??null}if(n.ref==="dom"){let[a,...f]=o;return d=>d.dom&&a?D(d.dom(a),f)??(a==="formAll"?[]:null):null}let s=n.ref;return o.length===0?a=>a[s]??null:a=>D(a[s],o)}var Z=t=>typeof t=="number"||typeof t=="string"?t:Number.NaN;function st(t,e){switch(t.op){case"and":{let n=t.args.map(o=>st(o,e));return o=>n.every(s=>s(o))}case"or":{let n=t.args.map(o=>st(o,e));return o=>n.some(s=>s(o))}case"not":{let n=st(t.arg,e);return o=>!n(o)}case"fn":{let n=V({fn:t.fn,arg:t.arg},e);return o=>n(o)===!0}default:{let n=V(t.left,e),o=V(t.right,e);switch(t.op){case"eq":return s=>H(n(s),o(s));case"neq":return s=>!H(n(s),o(s));case"lt":return s=>Z(n(s))<Z(o(s));case"lte":return s=>Z(n(s))<=Z(o(s));case"gt":return s=>Z(n(s))>Z(o(s));default:return s=>Z(n(s))>=Z(o(s))}}}}function Ut(t,e){let{path:n}=t,o=V(t.value,e);switch(t.op){case"set":return(s,a)=>W(s,n,o({...a,context:s}));case"append":return(s,a)=>{let f=D(s,n);return W(s,n,[...Array.isArray(f)?f:[],o({...a,context:s})])};case"inc":return(s,a)=>W(s,n,Number(D(s,n)??0)+Number(o({...a,context:s})));case"removeWhere":{let s=t.key;return(a,f)=>{let d=D(a,n),y=o({...f,context:a}),O=Array.isArray(d)?d:[];return W(a,n,O.filter(h=>!H(s===null?h:h!==null&&typeof h=="object"&&!Array.isArray(h)?h[s]:null,y)))}}}}var qt=(t,e)=>n=>t({...n,routes:e});function gt(t,e={},n={}){let o=t.machine;if(!o)throw new et(`Feature ${t.id} has no machine`);let s=Object.keys(o.states),a=new Map(s.map((h,j)=>[h,j])),f=h=>{let j=a.get(h);if(j===void 0)throw new et(`Unknown state "${h}" in ${t.id}`);return j},d=[],y=(h,j)=>(d.push(j),{id:j,guard:h.guard?st(h.guard,e):null,target:f(h.target),assign:h.assign.map(T=>Ut(T,e)),navigate:h.navigate?qt(V(h.navigate,e),n):null}),O=s.map(h=>{let j=o.states[h],T=new Map;for(let[A,$]of Object.entries(j.on))T.set(A,$.map((I,R)=>y(I,`${h}/on/${A}/${R}`)));let B=new Map;j.after.forEach((A,$)=>{let I=y(A.transition,`${h}/after/${$}`);B.set(A.ms,[...B.get(A.ms)??[],I])});let M=j.invoke;return{name:h,final:j.final,on:T,invoke:M&&{effect:M.effect,input:V(M.input,e),done:M.done.map((A,$)=>y(A,`${h}/invoke/done/${$}`)),failed:new Map(Object.entries(M.failed).map(([A,$])=>[A,$.map((I,R)=>y(I,`${h}/invoke/failed/${A}/${R}`))]))},after:B,timers:[...B.keys()].sort((A,$)=>A-$)}});return{feature:t.id,initial:f(o.initial),initialContext:o.initialContext,states:O,index:a,transitions:d}}function vt(t,e,n,o,s){let a=t.states[e];a.invoke&&s.push({type:"invoke",entry:o,effect:a.invoke.effect,input:a.invoke.input({context:n})});for(let f of a.timers)s.push({type:"timer",entry:o,ms:f})}function jt(t,e,n,o=1){let s=t.index.get(e);if(s===void 0)throw new Error(`Unknown state "${e}" in ${t.feature}`);let a=[];return vt(t,s,n,o,a),{snapshot:{state:e,context:n,entry:o},effects:a,taken:null}}var yt=t=>jt(t,t.states[t.initial].name,t.initialContext),nt=t=>({snapshot:t,effects:[],taken:null});function ut(t,e,n,o){if(!n)return nt(e);for(let s of n){if(s.guard&&!s.guard(o))continue;let a=e.context;for(let y of s.assign)a=y(a,o);let f=e.entry+1,d=s.navigate===null?[]:[{type:"navigate",url:String(s.navigate(o))}];return vt(t,s.target,a,f,d),{snapshot:{state:t.states[s.target].name,context:a,entry:f},effects:d,taken:s.id}}return nt(e)}function ht(t,e,n){let o=t.states[t.index.get(e.state)??-1];if(!o||o.final)return nt(e);let s=e.context;switch(n.type){case"event":return ut(t,e,o.on.get(n.event),{context:s,event:n.payload});case"done":return n.entry!==e.entry||!o.invoke?nt(e):ut(t,e,o.invoke.done,{context:s,result:n.result});case"failed":{if(n.entry!==e.entry||!o.invoke)return nt(e);let a=o.invoke.failed,f=a.has(n.error),d=f?n.data:{message:Dt(n.data,n.error)};return ut(t,e,a.get(f?n.error:"Unexpected"),{context:s,error:d})}case"timer":return n.entry!==e.entry?nt(e):ut(t,e,o.after.get(n.ms),{context:s})}}function Dt(t,e){return t!==null&&typeof t=="object"&&!Array.isArray(t)&&typeof t.message=="string"?t.message:e}function Nt(t,e){let n=Object.create(null),o=Object.create(null),s=(a,f)=>{let d=typeof f=="string"?f:f.name,y=o[a];y?y.push(d):(o[a]=[d],n[a]=d)};for(let[a,f]of t)s(a,f);return e&&s(...e),{first:n,all:o}}var pt="http://www.w3.org/2000/svg",Ft=new Set(["contenteditable","draggable","spellcheck"]),G=t=>t==null?"":typeof t=="object"?JSON.stringify(t):String(t);function $t(t,e){return e==null?null:typeof e=="boolean"?t.startsWith("aria-")||t.startsWith("data-")||Ft.has(t)?String(e):e?"":null:G(e)}var At=new Set(["value","checked","selected","muted"]),xt=new Set(["scroll","wheel","touchstart","touchmove","touchend","pointermove","mousemove"]),Ot=t=>typeof t=="number"&&!Number.isNaN(t)?t:null,it=new Map,zt=t=>t?[...t].map(e=>{let n=`u${it.size+1}`;return it.set(n,e),{name:e.name,size:e.size,type:e.type,token:n}}):[],bt=t=>e=>{let n=t.target;switch(e){case"value":return typeof n?.value=="string"?n.value:"";case"checked":return n?.checked===!0;case"valueAsNumber":return Ot(n?.valueAsNumber);case"files":return zt(n?.files??t.dataTransfer?.files);case"form":case"formAll":{let o=t.target,s=o.ownerDocument.defaultView,a=Nt(new(s?.FormData??FormData)(o,t.submitter));return e==="form"?a.first:a.all}case"open":return n?.open===!0;case"returnValue":return typeof n?.returnValue=="string"?n.returnValue:"";default:{let o=e in t?t[e]:n?.[e];return typeof o=="number"?Ot(o):typeof o=="string"||typeof o=="boolean"?o:null}}},Ct=(t,e)=>t?e.length?`${t} ${e.join(" ")}`:t:e.join(" ");var _t=JSON.stringify;function mt(t){if(t===null)return"null";switch(typeof t){case"string":return _t(t);case"boolean":return t?"true":"false";case"number":if(!Number.isFinite(t))throw new TypeError(`Non-finite number ${t} is not valid JSON`);return Object.is(t,-0)?"0":String(t);case"object":{if(Array.isArray(t))return`[${t.map(mt).join(",")}]`;let e=t,n=Object.keys(e).sort(),o="{";for(let s=0;s<n.length;s++){let a=n[s],f=e[a];if(f===void 0)throw new TypeError(`Undefined value at key "${a}"`);o+=`${s?",":""}${_t(a)}:${mt(f)}`}return`${o}}`}default:throw new TypeError(`Value of type ${typeof t} is not valid JSON`)}}var kt=t=>{switch(t.op){case"and":case"or":return t.args.some(kt);case"not":return kt(t.arg);case"fn":return Q(t.arg);default:return Q(t.left)||Q(t.right)}},Q=t=>"ref"in t?t.ref==="context"||t.ref==="binding":"object"in t?Object.values(t.object).some(Q):"fn"in t?Q(t.arg):"test"in t&&kt(t.test),Tt=(t,e)=>t+mt(e),Bt=t=>t instanceof Map?{data:t,versions:new Map}:t;var rt=(t,e)=>t!==null&&t.nodeType===8&&t.data===e;function K(t,e){let n=[t],o=t;for(;o!==e&&(o=o.nextSibling,!!o);)n.push(o);return n}function wt(t,e){let n=t.next?t.next.previousSibling:t.parent.lastChild;return e(),[n?n.nextSibling:t.parent.firstChild,t.next?t.next.previousSibling:t.parent.lastChild]}function Et(t,e){for(;t.nextSibling&&t.nextSibling!==e;)t.nextSibling.remove()}function Mt(t,e){let{machine:n,fns:o={},params:s=null,search:a=null,routes:f={}}=e,{data:d}=Bt(e.payload),y=[],O=new Set,h=n?e.snapshot?null:yt(n):null,j=e.snapshot??h?.snapshot??null,T=[],B=new Set,M=new Set,A=new WeakMap,$=(r,l,i)=>{let x=A.get(r);return x||(x=V(r,o),A.set(r,x)),x({context:j?.context??null,bindings:l,params:s,search:a,routes:f,...i?{dom:i}:{}})},I=(r,l,i,x)=>{let k=$(l,i);x(k),Q(l)&&r.push(()=>{let u=$(l,i);u!==k&&(k=u,x(u))})},R=(r,l)=>{if(r.claim&&rt(r.next,l)){let i=r.next;return r.next=i.nextSibling,i}return r.parent.insertBefore(t.createComment(l),r.next)},X=r=>{if(!r.claim||!rt(r.next,"["))return;let l=0;for(;r.next;){let i=r.next;if(r.next=i.nextSibling,rt(i,"["))l++;else if(rt(i,"]")&&--l===0)return}},U=(r,l,i,x,k)=>{switch(r.kind){case"text":{let u;i.claim&&i.next?.nodeType===3?(u=i.next,i.next=u.nextSibling):u=i.parent.insertBefore(t.createTextNode(""),i.next),i.claim&&rt(i.next,"")&&(i.next=i.next.nextSibling),I(x,r.value,l,g=>{let c=G(g);u.data!==c&&(u.data=c)});return}case"el":{let u=r.tag,g=u==="svg"?pt:k,c,p=i.claim&&i.next?.nodeType===1&&i.next.localName===u;p?(c=i.next,i.next=c.nextSibling):(c=g?t.createElementNS(g,u):t.createElement(u),r.class&&c.setAttribute("class",r.class),i.parent.insertBefore(c,i.next));for(let m in r.attrs){let w=r.attrs[m],q=At.has(m)&&m in c;p&&!Q(w)||I(x,w,l,F=>{if(q){let z=c,lt=m==="value"?G(F):F===!0;z[m]!==lt&&(z[m]=lt);return}let P=$t(m,F);P===null?c.removeAttribute(m):c.getAttribute(m)!==P&&c.setAttribute(m,P)})}at(c,r,l,x);for(let m in r.on){let w=r.on[m];c.addEventListener(m,q=>{m==="submit"&&q.preventDefault(),J({type:"event",event:w.event,payload:$(w.payload,l,bt(q))})},xt.has(m)?{passive:!0}:void 0)}if(u==="textarea")return;let b={parent:c,next:p?c.firstChild:null,claim:p},N=u==="foreignObject"?null:g;for(let m of r.children)U(m,l,b,x,N);return}case"when":{let u=()=>j?r.states.includes(j.state):!1;E(i,x,u,(g,c)=>{if(u())for(let p of r.children)U(p,l,g,c,k)},r.motion);return}case"query":{let u=l;E(i,x,()=>{let c=Tt(r.query,$(r.input,l)),p=d.get(c);return p&&u!==l&&u.splice(0,u.length,...l,p.ok?p.value:p.data),`${c}|${p?p.ok?"ready":r.failed[p.error]?p.error:"Unexpected":""}`},(c,p)=>{let b=$(r.input,l),N=Tt(r.query,b),m=d.get(N);if(u=l,!m){c.claim||ot(N,r.query,b),r.pending&&U(r.pending,l,c,p,k);return}let w=m.ok?r.ready:r.failed[m.error]??r.failed.Unexpected;u=[...l,m.ok?m.value:m.data],w&&U(w,u,c,p,k)});return}case"each":C(r,l,i,x,k);return;case"component":St(r,l,i,x);return;case"if":{let u=()=>$({test:r.test},l)===!0;E(i,x,u,(g,c)=>{let p=u()?r.ifTrue:r.ifFalse;for(let b of p)U(b,l,g,c,k)},r.motion);return}case"html":{let u=R(i,"["),g;if(i.claim){for(;i.next&&!rt(i.next,"]");)i.next=i.next.nextSibling;g=i.next??i.parent.appendChild(t.createComment("]")),i.next=g.nextSibling}else g=R(i,"]");let c=i.claim?G($(r.value,l)):null;I(x,r.value,l,p=>{let b=G(p);if(b===c)return;c=b,Et(u,g);let N=t.createElement("template");N.innerHTML=b,g.parentNode.insertBefore(N.content,g)});return}case"global":{let u=R(i,"g"),g=r.target==="window"?t.defaultView:t,c=[];for(let p in r.on){let b=r.on[p],N=w=>J({type:"event",event:b.event,payload:$(b.payload,l,bt(w))}),m=xt.has(p)?{passive:!0}:void 0;g.addEventListener(p,N,m),c.push(()=>g.removeEventListener(p,N))}M.add({el:u,stop:()=>c.forEach(p=>p())});return}default:X(i)}},at=(r,l,i,x)=>{let k=Object.entries(l.toggle);if(k.length){let u=()=>{let c=[];for(let[p,b]of k)$(b,i)===!0&&c.push(p);return Ct(l.class,c)},g=u();r.getAttribute("class")!==g&&r.setAttribute("class",g),k.some(([,c])=>Q(c))&&x.push(()=>{let c=u();c!==g&&(g=c,r.setAttribute("class",c))})}for(let u in l.vars)I(x,l.vars[u],i,g=>{let c=r.style;g===null||g===""?c.removeProperty(u):c.getPropertyValue(u)!==G(g)&&c.setProperty(u,G(g))})},St=(r,l,i,x)=>{let k=r.use.component,u=e.components?.[k],g=u?.tag??"div",c,p=i.claim&&i.next?.nodeType===1&&i.next.localName===g;if(p?(c=i.next,i.next=c.nextSibling):(c=t.createElement(g),r.class&&c.setAttribute("class",r.class),i.parent.insertBefore(c,i.next)),at(c,r,l,x),!p||r.children.length){let b={parent:c,next:p?c.firstChild:null,claim:p};for(let N of r.children)U(N,l,b,x,null)}u||console.error(`Hozu: component ${k} has no client code (bundleComponents)`),!(!u||!e.loadComponent||!e.mountComponent)&&e.mountComponent({el:c,ref:u,name:k,doc:t,props:()=>$(r.props,l),emit:(b,N)=>{let m=r.on[b];m&&J({type:"event",event:m.event,payload:$(m.payload,l,w=>w==="detail"?N:null)})},load:e.loadComponent,watch:b=>x.push(b),own:b=>M.add({el:c,stop:b}),same:H})},Y=new Set,ot=(r,l,i)=>{!e.onQuery||Y.has(r)||(Y.add(r),e.onQuery(l,i).then(x=>{Y.delete(r),d.set(r,x);for(let k of T)k();S()}))},S=()=>{for(let r=T.length-1;r>=0;r--)B.delete(T[r])&&T.splice(r,1);for(let r of M)r.el.isConnected||(r.stop(),M.delete(r))},E=(r,l,i,x,k=null)=>{let u=R(r,"["),g=i(),c=[];x(r,c);let p=R(r,"]");l.push(()=>{let b=i();if(b===g){for(let q of c)q();return}g=b,c=[];let N=e.motion;if(!k||!N||N.reduced(t)){Et(u,p),x({parent:p.parentNode,next:p,claim:!1},c);return}N.leave(u.nextSibling===p?[]:K(u.nextSibling,p.previousSibling),k);let[m,w]=wt({parent:p.parentNode,next:p,claim:!1},()=>x({parent:p.parentNode,next:p,claim:!1},c));m&&w&&m!==p&&N.enter(K(m,w),k)})},C=(r,l,i,x,k)=>{let u=R(i,"["),g=m=>{let w=r.key===null?m:D(m,[r.key]);return typeof w=="string"?`s${w}`:JSON.stringify(w)},c=()=>{let m=$(r.source,l);return Array.isArray(m)?m:[]},p=(m,w)=>{let q=[...l,m],F=[],[P,z]=wt(w,()=>U(r.item,q,w,F,k));return{key:g(m),value:m,scope:q,block:F,first:P,last:z}},b=c().map(m=>p(m,i)),N=R(i,"]");x.push(()=>{let m=e.motion,w=r.motion&&m&&!m.reduced(t)?r.motion:null,q=w?new Map(b.flatMap(v=>v.first.nodeType===1?[[v,v.first.getBoundingClientRect()]]:[])):null,F=new Map(b.map(v=>[v.key,v])),P=new Set,z=[];for(let v of c()){let L=g(v),tt=F.get(L);if(tt){F.delete(L),tt.value=v,tt.scope.splice(0,tt.scope.length,...l,v);for(let ct of tt.block)ct();z.push(tt)}else{let ct=p(v,{parent:t.createDocumentFragment(),next:null,claim:!1});P.add(ct),z.push(ct)}}for(let v of F.values())if(w)m.leave(K(v.first,v.last),w);else for(let L of K(v.first,v.last))L.remove();let lt=N.parentNode,dt=u.nextSibling??N;for(let v of z)if(v.first===dt)dt=v.last.nextSibling??N;else for(let L of K(v.first,v.last))lt.insertBefore(L,dt);if(b=z,!!w)for(let v of z)if(P.has(v))m.enter(K(v.first,v.last),w);else{let L=q?.get(v);L&&m.flip(v.first,L,w)}})},_=r=>{for(let l of r.effects)if(l.type==="navigate")e.onNavigate?.(l.url);else if(l.type==="timer"){let i=setTimeout(()=>{O.delete(i),J({type:"timer",entry:l.entry,ms:l.ms})},l.ms);O.add(i)}else e.onInvoke?.(l.effect,l.input).then(i=>J(i.ok?{type:"done",entry:l.entry,result:i.value}:{type:"failed",entry:l.entry,error:i.error,data:i.data}))};function J(r){if(!n||!j)return;let l=ht(n,j,r);if(l.taken){j=l.snapshot;for(let i of T)i();S(),_(l)}}return{attach(r,l,i,x,k){let u={parent:r,next:l,claim:k},g=r.namespaceURI===pt?pt:null,c=[],[p,b]=wt(u,()=>U(i,x,u,c,g));p&&b&&y.push([p,b]);let N=p?.isConnected===!0,m=()=>{if(N&&!p.isConnected)B.add(m);else for(let w of c)w()};T.push(m)},start(){h&&_(h),h=null},sync:()=>{for(let r of T)r();S()},dispatch:J,snapshot:()=>j,destroy:()=>{for(let r of O)clearTimeout(r);O.clear();for(let r of M)r.stop();M.clear(),T.length=0;for(let[r,l]of y)for(let i of K(r,l))i.remove();y.length=0}}}var It=function(t,e){return typeof t=="string"&&/^\.\.?\//.test(t)?t.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(n,o,s,a,f){return o?e?".jsx":".js":s&&(!a||!f)?n:s+a+"."+f.toLowerCase()+"js"}):t},Jt=t=>t.islands.flatMap(([e,n,...o])=>{let s=t.ids[e],a=s.slice(0,s.indexOf("."));return o.map(f=>({feature:a,node:s,scope:[...Array(n).fill(null),...f]}))}),Rt=t=>new URL(t,import.meta.url),Lt=async(t,e,n)=>{let o=JSON.stringify({effect:t,input:e,keys:n}),s=it.size?await(await import("./chunk-7HUHKEFT.js")).encode(o,e,it):o;return await(await fetch(Rt("effect"),{method:"POST",headers:typeof s=="string"?{"content-type":"application/json"}:{},body:s})).json()},Ht=async(t,e)=>await(await fetch(Rt("query"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({query:t,input:e})})).json(),Pt=async t=>(await import(It(t))).default,Wt=async t=>(await import(It(t))).fns;async function Vt(t,{transport:e=Lt,query:n=Ht,live:o,loadFns:s=Wt,loadComponent:a=Pt}={}){let f=new Map,d=t.getElementById("hozu-payload");if(!d?.textContent)return f;let y=JSON.parse(d.textContent),O={data:new Map(y.data),versions:new Map},h=y.fns?await s(y.fns):{},{components:j,routes:T}=y,B=y.motion?await import("./chunk-HGZ7KQUC.js"):void 0,M=Object.keys(j).length?(await import("./chunk-G6LC6QZB.js")).mountComponent:void 0;y.visible&&import("./chunk-DRLGN2D4.js").then(S=>S.watch(t));let A=new Map,$=(S,E)=>{let C=S+JSON.stringify(E),_=A.get(C);return _||(_=n(S,E).finally(()=>A.delete(C)),A.set(C,_)),_},I=Object.entries(y.live??{}),R=async S=>{if(X)return void U.push(...S);let E=I.filter(([,C])=>C.tags.some(_=>S.includes(_)));for(let[C,_]of E)O.data.set(C,await n(_.query,_.input));if(E.length)for(let C of f.values())C.sync()},X=0,U=[],at=async(S,E)=>{X++;let{result:C,refreshed:_,session:J}=await e(S,E,[...O.data.keys()]).finally(()=>X--);J&&(O.data.clear(),U=[]);for(let[r,l]of _)O.data.set(r,l),O.versions.set(r,(O.versions.get(r)??0)+1);if(_.length||J)for(let r of f.values())r.sync();return!X&&U.length&&R(U.splice(0)),C},St=null;for(let[S,E]of Object.entries(y.features)){let C=y.snapshots?.[S];f.set(S,Mt(t,{machine:E?gt({id:S,machine:E},h,T):null,payload:O,params:y.params,search:y.search,...C?{snapshot:C}:{},fns:h,components:j,routes:T,motion:B,mountComponent:M,loadComponent:a,onQuery:$,onInvoke:at,onNavigate:_=>t.defaultView?.location.assign(_)}))}let Y=[],ot=t.createTreeWalker(t.body??t,128);for(;ot.nextNode();)ot.currentNode.data==="i"&&Y.push(ot.currentNode);Jt(y).forEach((S,E)=>{let C=Y[E],_=y.nodes[S.node];C?.parentNode&&_&&f.get(S.feature)?.attach(C.parentNode,C.nextSibling,_,S.scope,!0)});for(let S of f.values())S.sync();for(let S of f.values())S.start();return I.length&&(o??(await import("./chunk-627YWRJ6.js")).liveStream(t))(R,I.flatMap(([,S])=>S.tags)),t.documentElement.setAttribute("data-hozu-ready",""),f}Vt(document);
|
|
1
|
+
var St=JSON.stringify;function et(t){if(t===null)return"null";switch(typeof t){case"string":return St(t);case"boolean":return t?"true":"false";case"number":if(!Number.isFinite(t))throw new TypeError(`Non-finite number ${t} is not valid JSON`);return Object.is(t,-0)?"0":String(t);case"object":{if(Array.isArray(t))return`[${t.map(et).join(",")}]`;let e=t,r=Object.keys(e).sort(),o="{";for(let s=0;s<r.length;s++){let a=r[s],u=e[a];if(u===void 0)throw new TypeError(`Undefined value at key "${a}"`);o+=`${s?",":""}${St(a)}:${et(u)}`}return`${o}}`}default:throw new TypeError(`Value of type ${typeof t} is not valid JSON`)}}function q(t,e){let r=t;for(let o of e){if(typeof r=="string"&&o==="length")return r.length;if(r===null||typeof r!="object")return null;r=r[o]}return r===void 0?null:r}function Z(t,e,r,o=0){if(o===e.length)return r;let s=e[o];if(Array.isArray(t)){let u=t.slice();return u[Number(s)]=Z(t[Number(s)]??null,e,r,o+1),u}let a=t!==null&&typeof t=="object"?t:{};return{...a,[s]:Z(a[s]??null,e,r,o+1)}}function J(t,e){if(t===e)return!0;if(t===null||e===null||typeof t!="object"||typeof e!="object")return!1;if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(let o=0;o<t.length;o++)if(!J(t[o],e[o]))return!1;return!0}if(Array.isArray(e))return!1;let r=Object.keys(t);if(r.length!==Object.keys(e).length)return!1;for(let o of r)if(!Object.hasOwn(e,o)||!J(t[o],e[o]))return!1;return!0}var ut=(t,e,r)=>{let[o="",s=""]=t.split("?"),a=o.replace(/\/:([A-Za-z]\w*)[?*+]?/g,(j,b)=>[q(e,[b])??[]].flat().map(N=>`/${encodeURIComponent(String(N))}`).join(""))||"/",u=s.split("&"),d="";if(r&&typeof r=="object")for(let j of Object.keys(r).sort()){let b=r[j],y=`${encodeURIComponent(j)}=${encodeURIComponent(String(b))}`;b!==null&&typeof b!="object"&&!u.includes(y)&&(d+=`${d&&"&"}${y}`)}return d?`${a}?${d}`:a};var nt=class extends Error{name="CompileError"};function E(t,e){if("literal"in t||"formRef"in t){let a="literal"in t?t.literal:t.formRef;return()=>a}if("object"in t){let a=Object.entries(t.object).map(([u,d])=>[u,E(d,e)]);return u=>{let d={};for(let[j,b]of a)d[j]=b(u);return d}}if("fn"in t){let a=e[t.fn];if(!a)throw new nt(`No implementation bound for fn ${t.fn}`);let u=E(t.arg,e);return d=>a(u(d))}if("link"in t){let a=t.link,u=E(t.params,e),d=E(t.search,e);return j=>ut(j.routes?.[a]??"",u(j),d(j))}if("test"in t){let a=at(t.test,e);return u=>a(u)}if("endpoint"in t){let a=t.endpoint,u=E(t.input??{literal:null},e);return d=>ut(d.routes?.[a]??"",null,u(d))}let r=t,{path:o}=r;if(r.ref==="binding"){let a=r.depth;return o.length?u=>q(u.bindings?.[a],o):u=>u.bindings?.[a]??null}if(r.ref==="dom"){let[a,...u]=o;return d=>d.dom&&a?q(d.dom(a),u)??(a==="formAll"?[]:null):null}let s=r.ref;return o.length===0?a=>a[s]??null:a=>q(a[s],o)}var P=t=>typeof t=="number"||typeof t=="string"?t:Number.NaN;function at(t,e){switch(t.op){case"and":{let r=t.args.map(o=>at(o,e));return o=>r.every(s=>s(o))}case"or":{let r=t.args.map(o=>at(o,e));return o=>r.some(s=>s(o))}case"not":{let r=at(t.arg,e);return o=>!r(o)}case"fn":{let r=E({fn:t.fn,arg:t.arg},e);return o=>r(o)===!0}default:{let r=E(t.left,e),o=E(t.right,e);switch(t.op){case"eq":return s=>J(r(s),o(s));case"neq":return s=>!J(r(s),o(s));case"lt":return s=>P(r(s))<P(o(s));case"lte":return s=>P(r(s))<=P(o(s));case"gt":return s=>P(r(s))>P(o(s));default:return s=>P(r(s))>=P(o(s))}}}}function Ut(t,e){let{path:r}=t,o=E(t.value,e);switch(t.op){case"set":return(s,a)=>Z(s,r,o({...a,context:s}));case"append":return(s,a)=>{let u=q(s,r);return Z(s,r,[...Array.isArray(u)?u:[],o({...a,context:s})])};case"inc":return(s,a)=>Z(s,r,Number(q(s,r)??0)+Number(o({...a,context:s})));case"removeWhere":{let s=t.key;return(a,u)=>{let d=q(a,r),j=o({...u,context:a}),b=Array.isArray(d)?d:[];return Z(a,r,b.filter(y=>!J(s===null?y:y!==null&&typeof y=="object"&&!Array.isArray(y)?y[s]:null,j)))}}}}var qt=(t,e)=>r=>t({...r,routes:e});function gt(t,e={},r={}){let o=t.machine;if(!o)throw new nt(`Feature ${t.id} has no machine`);let s=Object.keys(o.states),a=new Map(s.map((y,N)=>[y,N])),u=y=>{let N=a.get(y);if(N===void 0)throw new nt(`Unknown state "${y}" in ${t.id}`);return N},d=[],j=(y,N)=>(d.push(N),{id:N,guard:y.guard?at(y.guard,e):null,target:u(y.target),assign:y.assign.map(C=>Ut(C,e)),navigate:y.navigate?qt(E(y.navigate,e),r):null}),b=s.map(y=>{let N=o.states[y],C=new Map;for(let[A,k]of Object.entries(N.on))C.set(A,k.map((V,I)=>j(V,`${y}/on/${A}/${I}`)));let D=new Map;N.after.forEach((A,k)=>{let V=j(A.transition,`${y}/after/${k}`);D.set(A.ms,[...D.get(A.ms)??[],V])});let M=N.invoke;return{name:y,final:N.final,on:C,invoke:M&&{effect:M.effect,input:E(M.input,e),done:M.done.map((A,k)=>j(A,`${y}/invoke/done/${k}`)),failed:new Map(Object.entries(M.failed).map(([A,k])=>[A,k.map((V,I)=>j(V,`${y}/invoke/failed/${A}/${I}`))]))},after:D,timers:[...D.keys()].sort((A,k)=>A-k)}});return{feature:t.id,initial:u(o.initial),initialContext:o.initialContext,states:b,index:a,transitions:d}}function jt(t,e,r,o,s){let a=t.states[e];a.invoke&&s.push({type:"invoke",entry:o,effect:a.invoke.effect,input:a.invoke.input({context:r})});for(let u of a.timers)s.push({type:"timer",entry:o,ms:u})}function Ot(t,e,r,o=1){let s=t.index.get(e);if(s===void 0)throw new Error(`Unknown state "${e}" in ${t.feature}`);let a=[];return jt(t,s,r,o,a),{snapshot:{state:e,context:r,entry:o},effects:a,taken:null}}var yt=t=>Ot(t,t.states[t.initial].name,t.initialContext),rt=t=>({snapshot:t,effects:[],taken:null});function pt(t,e,r,o){if(!r)return rt(e);for(let s of r){if(s.guard&&!s.guard(o))continue;let a=e.context;for(let j of s.assign)a=j(a,o);let u=e.entry+1,d=s.navigate===null?[]:[{type:"navigate",url:String(s.navigate(o))}];return jt(t,s.target,a,u,d),{snapshot:{state:t.states[s.target].name,context:a,entry:u},effects:d,taken:s.id}}return rt(e)}function ht(t,e,r){let o=t.states[t.index.get(e.state)??-1];if(!o||o.final)return rt(e);let s=e.context;switch(r.type){case"event":return pt(t,e,o.on.get(r.event),{context:s,event:r.payload});case"done":return r.entry!==e.entry||!o.invoke?rt(e):pt(t,e,o.invoke.done,{context:s,result:r.result});case"failed":{if(r.entry!==e.entry||!o.invoke)return rt(e);let a=o.invoke.failed,u=a.has(r.error),d=u?r.data:{message:Dt(r.data,r.error)};return pt(t,e,a.get(u?r.error:"Unexpected"),{context:s,error:d})}case"timer":return r.entry!==e.entry?rt(e):pt(t,e,o.after.get(r.ms),{context:s})}}function Dt(t,e){return t!==null&&typeof t=="object"&&!Array.isArray(t)&&typeof t.message=="string"?t.message:e}function Nt(t,e){let r=Object.create(null),o=Object.create(null),s=(a,u)=>{let d=typeof u=="string"?u:u.name,j=o[a];j?j.push(d):(o[a]=[d],r[a]=d)};for(let[a,u]of t)s(a,u);return e&&s(...e),{first:r,all:o}}var mt="http://www.w3.org/2000/svg",zt=new Set(["contenteditable","draggable","spellcheck"]),W=t=>t==null?"":typeof t=="object"?JSON.stringify(t):String(t);function $t(t,e){return e==null?null:typeof e=="boolean"?t.startsWith("aria-")||t.startsWith("data-")||zt.has(t)?String(e):e?"":null:W(e)}var At=new Set(["value","checked","selected","muted"]),xt=new Set(["scroll","wheel","touchstart","touchmove","touchend","pointermove","mousemove"]),_t=t=>typeof t=="number"&&!Number.isNaN(t)?t:null,lt=new Map,Bt=t=>t?[...t].map(e=>{let r=`u${lt.size+1}`;return lt.set(r,e),{name:e.name,size:e.size,type:e.type,token:r}}):[],bt=t=>e=>{let r=t.target;switch(e){case"value":return typeof r?.value=="string"?r.value:"";case"checked":return r?.checked===!0;case"valueAsNumber":return _t(r?.valueAsNumber);case"files":return Bt(r?.files??t.dataTransfer?.files);case"form":case"formAll":{let o=t.target,s=o.ownerDocument.defaultView,a=Nt(new(s?.FormData??FormData)(o,t.submitter));return e==="form"?a.first:a.all}case"open":return r?.open===!0;case"returnValue":return typeof r?.returnValue=="string"?r.returnValue:"";default:{let o=e in t?t[e]:r?.[e];return typeof o=="number"?_t(o):typeof o=="string"||typeof o=="boolean"?o:null}}},Tt=(t,e)=>t?e.length?`${t} ${e.join(" ")}`:t:e.join(" ");var kt=t=>{switch(t.op){case"and":case"or":return t.args.some(kt);case"not":return kt(t.arg);case"fn":return G(t.arg);default:return G(t.left)||G(t.right)}},G=t=>"ref"in t?t.ref==="context"||t.ref==="binding":"object"in t?Object.values(t.object).some(G):"fn"in t?G(t.arg):"test"in t&&kt(t.test),Ct=(t,e)=>t+et(e),Ft=t=>t instanceof Map?{data:t,versions:new Map}:t;var ot=(t,e)=>t!==null&&t.nodeType===8&&t.data===e;function K(t,e){let r=[t],o=t;for(;o!==e&&(o=o.nextSibling,!!o);)r.push(o);return r}function wt(t,e){let r=t.next?t.next.previousSibling:t.parent.lastChild;return e(),[r?r.nextSibling:t.parent.firstChild,t.next?t.next.previousSibling:t.parent.lastChild]}function Et(t,e){for(;t.nextSibling&&t.nextSibling!==e;)t.nextSibling.remove()}function Mt(t,e){let{machine:r,fns:o={},params:s=null,search:a=null,routes:u={}}=e,{data:d}=Ft(e.payload),j=[],b=new Set,y=r?e.snapshot?null:yt(r):null,N=e.snapshot??y?.snapshot??null,C=[],D=new Set,M=new Set,A=new WeakMap,k=(n,l,i)=>{let g=A.get(n);return g||(g=E(n,o),A.set(n,g)),g({context:N?.context??null,bindings:l,params:s,search:a,routes:u,...i?{dom:i}:{}})},V=(n,l,i,g)=>{let w=k(l,i);g(w),G(l)&&n.push(()=>{let f=k(l,i);f!==w&&(w=f,g(f))})},I=(n,l)=>{if(n.claim&&ot(n.next,l)){let i=n.next;return n.next=i.nextSibling,i}return n.parent.insertBefore(t.createComment(l),n.next)},st=n=>{if(!n.claim||!ot(n.next,"["))return;let l=0;for(;n.next;){let i=n.next;if(n.next=i.nextSibling,ot(i,"["))l++;else if(ot(i,"]")&&--l===0)return}},R=(n,l,i,g,w)=>{switch(n.kind){case"text":{let f;i.claim&&i.next?.nodeType===3?(f=i.next,i.next=f.nextSibling):f=i.parent.insertBefore(t.createTextNode(""),i.next),i.claim&&ot(i.next,"")&&(i.next=i.next.nextSibling),V(g,n.value,l,h=>{let c=W(h);f.data!==c&&(f.data=c)});return}case"el":{let f=n.tag,h=f==="svg"?mt:w,c,p=i.claim&&i.next?.nodeType===1&&i.next.localName===f;p?(c=i.next,i.next=c.nextSibling):(c=h?t.createElementNS(h,f):t.createElement(f),n.class&&c.setAttribute("class",n.class),i.parent.insertBefore(c,i.next));for(let m in n.attrs){let v=n.attrs[m],U=At.has(m)&&m in c;p&&!G(v)||V(g,v,l,z=>{if(U){let B=c,ct=m==="value"?W(z):z===!0;B[m]!==ct&&(B[m]=ct);return}let L=$t(m,z);L===null?c.removeAttribute(m):c.getAttribute(m)!==L&&c.setAttribute(m,L)})}F(c,n,l,g);for(let m in n.on){let v=n.on[m];c.addEventListener(m,U=>{m==="submit"&&U.preventDefault(),_({type:"event",event:v.event,payload:k(v.payload,l,bt(U))})},xt.has(m)?{passive:!0}:void 0)}if(f==="textarea")return;let x={parent:c,next:p?c.firstChild:null,claim:p},$=f==="foreignObject"?null:h;for(let m of n.children)R(m,l,x,g,$);return}case"when":{let f=()=>N?n.states.includes(N.state):!1;Q(i,g,f,(h,c)=>{if(f())for(let p of n.children)R(p,l,h,c,w)},n.motion);return}case"query":{let f=l;Q(i,g,()=>{let c=Ct(n.query,k(n.input,l)),p=d.get(c);return p&&f!==l&&f.splice(0,f.length,...l,p.ok?p.value:p.data),`${c}|${p?p.ok?"ready":n.failed[p.error]?p.error:"Unexpected":""}`},(c,p)=>{let x=k(n.input,l),$=Ct(n.query,x),m=d.get($);if(f=l,!m){(!c.claim||e.readsInBrowser?.(n.query))&&vt($,n.query,x),n.pending&&R(n.pending,l,c,p,w);return}let v=m.ok?n.ready:n.failed[m.error]??n.failed.Unexpected;f=[...l,m.ok?m.value:m.data],v&&R(v,f,c,p,w)});return}case"each":S(n,l,i,g,w);return;case"component":X(n,l,i,g);return;case"if":{let f=()=>k({test:n.test},l)===!0;Q(i,g,f,(h,c)=>{let p=f()?n.ifTrue:n.ifFalse;for(let x of p)R(x,l,h,c,w)},n.motion);return}case"html":{let f=I(i,"["),h;if(i.claim){for(;i.next&&!ot(i.next,"]");)i.next=i.next.nextSibling;h=i.next??i.parent.appendChild(t.createComment("]")),i.next=h.nextSibling}else h=I(i,"]");let c=i.claim?W(k(n.value,l)):null;V(g,n.value,l,p=>{let x=W(p);if(x===c)return;c=x,Et(f,h);let $=t.createElement("template");$.innerHTML=x,h.parentNode.insertBefore($.content,h)});return}case"global":{let f=I(i,"g"),h=n.target==="window"?t.defaultView:t,c=[];for(let p in n.on){let x=n.on[p],$=v=>_({type:"event",event:x.event,payload:k(x.payload,l,bt(v))}),m=xt.has(p)?{passive:!0}:void 0;h.addEventListener(p,$,m),c.push(()=>h.removeEventListener(p,$))}M.add({el:f,stop:()=>c.forEach(p=>p())});return}default:st(i)}},F=(n,l,i,g)=>{let w=Object.entries(l.toggle);if(w.length){let f=()=>{let c=[];for(let[p,x]of w)k(x,i)===!0&&c.push(p);return Tt(l.class,c)},h=f();n.getAttribute("class")!==h&&n.setAttribute("class",h),w.some(([,c])=>G(c))&&g.push(()=>{let c=f();c!==h&&(h=c,n.setAttribute("class",c))})}for(let f in l.vars)V(g,l.vars[f],i,h=>{let c=n.style;h===null||h===""?c.removeProperty(f):c.getPropertyValue(f)!==W(h)&&c.setProperty(f,W(h))})},X=(n,l,i,g)=>{let w=n.use.component,f=e.components?.[w],h=f?.tag??"div",c,p=i.claim&&i.next?.nodeType===1&&i.next.localName===h;if(p?(c=i.next,i.next=c.nextSibling):(c=t.createElement(h),n.class&&c.setAttribute("class",n.class),i.parent.insertBefore(c,i.next)),F(c,n,l,g),!p||n.children.length){let x={parent:c,next:p?c.firstChild:null,claim:p};for(let $ of n.children)R($,l,x,g,null)}f||console.error(`Hozu: component ${w} has no client code (bundleComponents)`),!(!f||!e.loadComponent||!e.mountComponent)&&e.mountComponent({el:c,ref:f,name:w,doc:t,props:()=>k(n.props,l),emit:(x,$)=>{let m=n.on[x];m&&_({type:"event",event:m.event,payload:k(m.payload,l,v=>v==="detail"?$:null)})},load:e.loadComponent,watch:x=>g.push(x),own:x=>M.add({el:c,stop:x}),same:J})},it=new Set,vt=(n,l,i)=>{!e.onQuery||it.has(n)||(it.add(n),e.onQuery(l,i).then(g=>{it.delete(n),d.set(n,g);for(let w of C)w();Y()}))},Y=()=>{for(let n=C.length-1;n>=0;n--)D.delete(C[n])&&C.splice(n,1);for(let n of M)n.el.isConnected||(n.stop(),M.delete(n))},Q=(n,l,i,g,w=null)=>{let f=I(n,"["),h=i(),c=[];g(n,c);let p=I(n,"]");l.push(()=>{let x=i();if(x===h){for(let U of c)U();return}h=x,c=[];let $=e.motion;if(!w||!$||$.reduced(t)){Et(f,p),g({parent:p.parentNode,next:p,claim:!1},c);return}$.leave(f.nextSibling===p?[]:K(f.nextSibling,p.previousSibling),w);let[m,v]=wt({parent:p.parentNode,next:p,claim:!1},()=>g({parent:p.parentNode,next:p,claim:!1},c));m&&v&&m!==p&&$.enter(K(m,v),w)})},S=(n,l,i,g,w)=>{let f=I(i,"["),h=m=>{let v=n.key===null?m:q(m,[n.key]);return typeof v=="string"?`s${v}`:JSON.stringify(v)},c=()=>{let m=k(n.source,l);return Array.isArray(m)?m:[]},p=(m,v)=>{let U=[...l,m],z=[],[L,B]=wt(v,()=>R(n.item,U,v,z,w));return{key:h(m),value:m,scope:U,block:z,first:L,last:B}},x=c().map(m=>p(m,i)),$=I(i,"]");g.push(()=>{let m=e.motion,v=n.motion&&m&&!m.reduced(t)?n.motion:null,U=v?new Map(x.flatMap(O=>O.first.nodeType===1?[[O,O.first.getBoundingClientRect()]]:[])):null,z=new Map(x.map(O=>[O.key,O])),L=new Set,B=[];for(let O of c()){let H=h(O),tt=z.get(H);if(tt){z.delete(H),tt.value=O,tt.scope.splice(0,tt.scope.length,...l,O);for(let ft of tt.block)ft();B.push(tt)}else{let ft=p(O,{parent:t.createDocumentFragment(),next:null,claim:!1});L.add(ft),B.push(ft)}}for(let O of z.values())if(v)m.leave(K(O.first,O.last),v);else for(let H of K(O.first,O.last))H.remove();let ct=$.parentNode,dt=f.nextSibling??$;for(let O of B)if(O.first===dt)dt=O.last.nextSibling??$;else for(let H of K(O.first,O.last))ct.insertBefore(H,dt);if(x=B,!!v)for(let O of B)if(L.has(O))m.enter(K(O.first,O.last),v);else{let H=U?.get(O);H&&m.flip(O.first,H,v)}})},T=n=>{for(let l of n.effects)if(l.type==="navigate")e.onNavigate?.(l.url);else if(l.type==="timer"){let i=setTimeout(()=>{b.delete(i),_({type:"timer",entry:l.entry,ms:l.ms})},l.ms);b.add(i)}else e.onInvoke?.(l.effect,l.input).then(i=>_(i.ok?{type:"done",entry:l.entry,result:i.value}:{type:"failed",entry:l.entry,error:i.error,data:i.data}))};function _(n){if(!r||!N)return;let l=ht(r,N,n);if(l.taken){N=l.snapshot;for(let i of C)i();Y(),T(l)}}return{attach(n,l,i,g,w){let f={parent:n,next:l,claim:w},h=n.namespaceURI===mt?mt:null,c=[],[p,x]=wt(f,()=>R(i,g,f,c,h));p&&x&&j.push([p,x]);let $=p?.isConnected===!0,m=()=>{if($&&!p.isConnected)D.add(m);else for(let v of c)v()};C.push(m)},start(){y&&T(y),y=null},sync:()=>{for(let n of C)n();Y()},dispatch:_,snapshot:()=>N,destroy:()=>{for(let n of b)clearTimeout(n);b.clear();for(let n of M)n.stop();M.clear(),C.length=0;for(let[n,l]of j)for(let i of K(n,l))i.remove();j.length=0}}}var Vt=function(t,e){return typeof t=="string"&&/^\.\.?\//.test(t)?t.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(r,o,s,a,u){return o?e?".jsx":".js":s&&(!a||!u)?r:s+a+"."+u.toLowerCase()+"js"}):t},Ht=t=>t.islands.flatMap(([e,r,...o])=>{let s=t.ids[e],a=s.slice(0,s.indexOf("."));return o.map(u=>({feature:a,node:s,scope:[...Array(r).fill(null),...u]}))}),It=t=>new URL(t,import.meta.url),Jt=async(t,e,r)=>{let o=JSON.stringify({effect:t,input:e,keys:r}),s=lt.size?await(await import("./chunk-7HUHKEFT.js")).encode(o,e,lt):o;return await(await fetch(It("effect"),{method:"POST",headers:typeof s=="string"?{"content-type":"application/json"}:{},body:s})).json()},Lt=async(t,e)=>await(await fetch(It("query"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({query:t,input:e})})).json(),Zt=async t=>(await import(Vt(t))).default,Pt=async t=>(await import(Vt(t))).fns;async function Rt(t,{transport:e=Jt,query:r=Lt,live:o,loadFns:s=Pt,loadComponent:a=Zt,loadFetch:u}={}){let d=new Map,j=t.getElementById("hozu-payload");if(!j?.textContent)return d;let b=JSON.parse(j.textContent),y={data:new Map(b.data),versions:new Map},N=b.fns?await s(b.fns):{},{components:C,routes:D}=b,M=b.motion?await import("./chunk-HGZ7KQUC.js"):void 0,A=Object.keys(C).length?(await import("./chunk-G6LC6QZB.js")).mountComponent:void 0;b.visible&&import("./chunk-DRLGN2D4.js").then(S=>S.watch(t));let k=b.effects?(await import("./chunk-CE5MSQHF.js")).createRunner(b,N,y,{stringify:et,compile:E},u):null,V=new Map,I=(S,T)=>{let _=S+JSON.stringify(T),n=V.get(_);return n||(n=(k?.runs(S)?k.run(S,T):r(S,T)).finally(()=>V.delete(_)),V.set(_,n)),n},st=Object.entries(b.live??{}),R=async S=>{if(F)return void X.push(...S);let T=st.filter(([,_])=>_.tags.some(n=>S.includes(n)));for(let[_,n]of T)y.data.set(_,await r(n.query,n.input));if(T.length)for(let _ of d.values())_.sync()},F=0,X=[],it=async(S,T)=>{if(k?.runs(S)){F++;let{result:g,changed:w}=await k.mutate(S,T).finally(()=>F--);if(w)for(let f of d.values())f.sync();return g}F++;let{result:_,refreshed:n,session:l,tags:i}=await e(S,T,[...y.data.keys()]).finally(()=>F--);if(i&&k&&await k.reread(i))for(let g of d.values())g.sync();l&&(y.data.clear(),X=[]);for(let[g,w]of n)y.data.set(g,w),y.versions.set(g,(y.versions.get(g)??0)+1);if(n.length||l)for(let g of d.values())g.sync();return!F&&X.length&&R(X.splice(0)),_},vt=null;for(let[S,T]of Object.entries(b.features)){let _=b.snapshots?.[S];d.set(S,Mt(t,{machine:T?gt({id:S,machine:T},N,D):null,payload:y,params:b.params,search:b.search,..._?{snapshot:_}:{},fns:N,components:C,routes:D,motion:M,mountComponent:A,loadComponent:a,onQuery:I,onInvoke:it,...k?{readsInBrowser:n=>k.runs(n)}:{},onNavigate:n=>t.defaultView?.location.assign(n)}))}let Y=[],Q=t.createTreeWalker(t.body??t,128);for(;Q.nextNode();)Q.currentNode.data==="i"&&Y.push(Q.currentNode);Ht(b).forEach((S,T)=>{let _=Y[T],n=b.nodes[S.node];_?.parentNode&&n&&d.get(S.feature)?.attach(_.parentNode,_.nextSibling,n,S.scope,!0)});for(let S of d.values())S.sync();for(let S of d.values())S.start();return st.length&&(o??(await import("./chunk-627YWRJ6.js")).liveStream(t))(R,st.flatMap(([,S])=>S.tags)),t.documentElement.setAttribute("data-hozu-ready",""),d}Rt(document);
|
|
@@ -239,6 +239,172 @@ var init_visible = __esm({
|
|
|
239
239
|
}
|
|
240
240
|
});
|
|
241
241
|
|
|
242
|
+
// packages/runtime-client/dist/fetch.js
|
|
243
|
+
var fetch_exports = {};
|
|
244
|
+
__export(fetch_exports, {
|
|
245
|
+
checked: () => checked,
|
|
246
|
+
createRunner: () => createRunner
|
|
247
|
+
});
|
|
248
|
+
function checked(schema, value, root = schema, at = "") {
|
|
249
|
+
const issues = [];
|
|
250
|
+
const where = at || "(root)";
|
|
251
|
+
let s = schema;
|
|
252
|
+
if (typeof s.$ref === "string")
|
|
253
|
+
s = s.$ref.split("/").slice(1).reduce((o, k) => o?.[k], root) ?? {};
|
|
254
|
+
const alternatives = s.anyOf ?? s.oneOf;
|
|
255
|
+
if (Array.isArray(alternatives)) {
|
|
256
|
+
for (const alt of alternatives) {
|
|
257
|
+
const r = checked(alt, value, root, at);
|
|
258
|
+
if (!r.issues.length)
|
|
259
|
+
return r;
|
|
260
|
+
}
|
|
261
|
+
return { issues: [`${where}: matches none of the allowed shapes`], value };
|
|
262
|
+
}
|
|
263
|
+
if ("const" in s && value !== s.const)
|
|
264
|
+
issues.push(`${where}: expected ${JSON.stringify(s.const)}`);
|
|
265
|
+
if (Array.isArray(s.enum) && !s.enum.includes(value))
|
|
266
|
+
issues.push(`${where}: expected one of ${s.enum.join(", ")}`);
|
|
267
|
+
const types = s.type === void 0 ? [] : Array.isArray(s.type) ? s.type : [s.type];
|
|
268
|
+
const is = (t) => t === "null" ? value === null : t === "array" ? Array.isArray(value) : t === "integer" ? Number.isInteger(value) : t === "object" ? typeof value === "object" && value !== null && !Array.isArray(value) : typeof value === t;
|
|
269
|
+
if (types.length && !types.some(is))
|
|
270
|
+
return { issues: [`${where}: expected ${types.join(" or ")}`], value };
|
|
271
|
+
if (typeof value === "string") {
|
|
272
|
+
if (s.minLength !== void 0 && value.length < s.minLength)
|
|
273
|
+
issues.push(`${where}: too short`);
|
|
274
|
+
if (s.maxLength !== void 0 && value.length > s.maxLength)
|
|
275
|
+
issues.push(`${where}: too long`);
|
|
276
|
+
if (s.pattern && !new RegExp(s.pattern).test(value))
|
|
277
|
+
issues.push(`${where}: does not match ${s.pattern}`);
|
|
278
|
+
}
|
|
279
|
+
if (typeof value === "number") {
|
|
280
|
+
if (s.minimum !== void 0 && value < s.minimum)
|
|
281
|
+
issues.push(`${where}: below ${s.minimum}`);
|
|
282
|
+
if (s.maximum !== void 0 && value > s.maximum)
|
|
283
|
+
issues.push(`${where}: above ${s.maximum}`);
|
|
284
|
+
}
|
|
285
|
+
if (Array.isArray(value)) {
|
|
286
|
+
if (!s.items)
|
|
287
|
+
return { issues, value };
|
|
288
|
+
const out = value.map((x, i) => {
|
|
289
|
+
const r = checked(s.items, x, root, `${at}${at ? "." : ""}${i}`);
|
|
290
|
+
issues.push(...r.issues);
|
|
291
|
+
return r.value;
|
|
292
|
+
});
|
|
293
|
+
return { issues, value: out };
|
|
294
|
+
}
|
|
295
|
+
if (typeof value === "object" && value !== null && s.properties) {
|
|
296
|
+
const v = value;
|
|
297
|
+
const out = {};
|
|
298
|
+
for (const key of s.required ?? [])
|
|
299
|
+
if (!(key in v))
|
|
300
|
+
issues.push(`${at}${at ? "." : ""}${key}: required`);
|
|
301
|
+
for (const [key, sub] of Object.entries(s.properties))
|
|
302
|
+
if (key in v) {
|
|
303
|
+
const r = checked(sub, v[key], root, `${at}${at ? "." : ""}${key}`);
|
|
304
|
+
issues.push(...r.issues);
|
|
305
|
+
out[key] = r.value;
|
|
306
|
+
}
|
|
307
|
+
if (s.additionalProperties && typeof s.additionalProperties === "object") {
|
|
308
|
+
for (const key of Object.keys(v))
|
|
309
|
+
if (!(key in out))
|
|
310
|
+
out[key] = v[key];
|
|
311
|
+
}
|
|
312
|
+
return { issues, value: out };
|
|
313
|
+
}
|
|
314
|
+
return { issues, value };
|
|
315
|
+
}
|
|
316
|
+
function createRunner(payload, fns, shared, tools, load = (url) => import(__rewriteRelativeImportExtension(
|
|
317
|
+
/* @vite-ignore */
|
|
318
|
+
url
|
|
319
|
+
))) {
|
|
320
|
+
const effects = payload.effects ?? {};
|
|
321
|
+
const modules = /* @__PURE__ */ new Map();
|
|
322
|
+
const controllers = /* @__PURE__ */ new Set();
|
|
323
|
+
globalThis.addEventListener?.("pagehide", () => {
|
|
324
|
+
for (const c of controllers)
|
|
325
|
+
c.abort();
|
|
326
|
+
});
|
|
327
|
+
const moduleOf = (feature) => {
|
|
328
|
+
let m = modules.get(feature);
|
|
329
|
+
if (!m) {
|
|
330
|
+
const url = payload.fetches?.[feature];
|
|
331
|
+
m = url ? load(url) : Promise.reject(new Error(`No fetch bundle for ${feature}`));
|
|
332
|
+
modules.set(feature, m);
|
|
333
|
+
}
|
|
334
|
+
return m;
|
|
335
|
+
};
|
|
336
|
+
const tagsOf = (ref, input) => (effects[ref]?.tags ?? []).map((t) => t.param ? `${t.tag}(${tools.stringify(tools.compile(t.param, fns)({ input }))})` : t.tag);
|
|
337
|
+
async function run(ref, input) {
|
|
338
|
+
const e = effects[ref];
|
|
339
|
+
if (!e)
|
|
340
|
+
return unexpected(`${ref} does not run in the browser`);
|
|
341
|
+
const given = checked(e.input, input);
|
|
342
|
+
if (given.issues.length)
|
|
343
|
+
return e.kind === "mutation" ? { ok: false, error: "Invalid", data: { message: given.issues.join("; "), fields: {} } } : unexpected(`Invalid input: ${given.issues.join("; ")}`);
|
|
344
|
+
const dot = ref.indexOf(".");
|
|
345
|
+
const controller = new AbortController();
|
|
346
|
+
controllers.add(controller);
|
|
347
|
+
try {
|
|
348
|
+
const impl = (await moduleOf(ref.slice(0, dot)))[ref.slice(dot + 1)];
|
|
349
|
+
if (typeof impl !== "function")
|
|
350
|
+
return unexpected(`fetch.ts exports no ${ref.slice(dot + 1)}`);
|
|
351
|
+
const value = await impl(given.value, {
|
|
352
|
+
fail: (error, data) => {
|
|
353
|
+
throw { [FETCH_FAIL]: { error, data } };
|
|
354
|
+
},
|
|
355
|
+
signal: controller.signal,
|
|
356
|
+
env: payload.env ?? {}
|
|
357
|
+
});
|
|
358
|
+
const out = checked(e.output, value);
|
|
359
|
+
return out.issues.length ? unexpected(`${ref} returned a value that does not match its output: ${out.issues.join("; ")}`) : { ok: true, value: out.value };
|
|
360
|
+
} catch (error) {
|
|
361
|
+
const marked = error?.[FETCH_FAIL];
|
|
362
|
+
if (marked)
|
|
363
|
+
return { ok: false, error: marked.error, data: marked.data ?? null };
|
|
364
|
+
return unexpected(error instanceof Error ? error.message : String(error));
|
|
365
|
+
} finally {
|
|
366
|
+
controllers.delete(controller);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
const isQuery = (ref) => effects[ref]?.kind === "query";
|
|
370
|
+
async function reread(tags) {
|
|
371
|
+
let changed = false;
|
|
372
|
+
for (const key of [...shared.data.keys()]) {
|
|
373
|
+
const ref = Object.keys(effects).find((r) => isQuery(r) && key.startsWith(r) && '{["tfn0123456789-'.includes(key[r.length] ?? ""));
|
|
374
|
+
if (!ref)
|
|
375
|
+
continue;
|
|
376
|
+
const input = JSON.parse(key.slice(ref.length));
|
|
377
|
+
if (!tagsOf(ref, input).some((t) => tags.includes(t)))
|
|
378
|
+
continue;
|
|
379
|
+
shared.data.set(key, await run(ref, input));
|
|
380
|
+
shared.versions.set(key, (shared.versions.get(key) ?? 0) + 1);
|
|
381
|
+
changed = true;
|
|
382
|
+
}
|
|
383
|
+
return changed;
|
|
384
|
+
}
|
|
385
|
+
async function mutate(ref, input) {
|
|
386
|
+
const result = await run(ref, input);
|
|
387
|
+
return { result, changed: result.ok ? await reread(tagsOf(ref, input)) : false };
|
|
388
|
+
}
|
|
389
|
+
return { run, mutate, reread, runs: (ref) => ref in effects };
|
|
390
|
+
}
|
|
391
|
+
var __rewriteRelativeImportExtension, FETCH_FAIL, unexpected;
|
|
392
|
+
var init_fetch = __esm({
|
|
393
|
+
"packages/runtime-client/dist/fetch.js"() {
|
|
394
|
+
"use strict";
|
|
395
|
+
__rewriteRelativeImportExtension = function(path, preserveJsx) {
|
|
396
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
397
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) {
|
|
398
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js";
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
return path;
|
|
402
|
+
};
|
|
403
|
+
FETCH_FAIL = /* @__PURE__ */ Symbol.for("hozu.fetchFail");
|
|
404
|
+
unexpected = (message) => ({ ok: false, error: "Unexpected", data: { message } });
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
|
|
242
408
|
// packages/runtime-client/dist/dev.js
|
|
243
409
|
var dev_exports = {};
|
|
244
410
|
__export(dev_exports, {
|
|
@@ -313,6 +479,40 @@ var init_live = __esm({
|
|
|
313
479
|
}
|
|
314
480
|
});
|
|
315
481
|
|
|
482
|
+
// packages/core/dist/canonical/stringify.js
|
|
483
|
+
var quote = JSON.stringify;
|
|
484
|
+
function canonicalStringify(value) {
|
|
485
|
+
if (value === null)
|
|
486
|
+
return "null";
|
|
487
|
+
switch (typeof value) {
|
|
488
|
+
case "string":
|
|
489
|
+
return quote(value);
|
|
490
|
+
case "boolean":
|
|
491
|
+
return value ? "true" : "false";
|
|
492
|
+
case "number":
|
|
493
|
+
if (!Number.isFinite(value))
|
|
494
|
+
throw new TypeError(`Non-finite number ${value} is not valid JSON`);
|
|
495
|
+
return Object.is(value, -0) ? "0" : String(value);
|
|
496
|
+
case "object": {
|
|
497
|
+
if (Array.isArray(value))
|
|
498
|
+
return `[${value.map(canonicalStringify).join(",")}]`;
|
|
499
|
+
const obj = value;
|
|
500
|
+
const keys = Object.keys(obj).sort();
|
|
501
|
+
let out = "{";
|
|
502
|
+
for (let i = 0; i < keys.length; i++) {
|
|
503
|
+
const key = keys[i];
|
|
504
|
+
const v = obj[key];
|
|
505
|
+
if (v === void 0)
|
|
506
|
+
throw new TypeError(`Undefined value at key "${key}"`);
|
|
507
|
+
out += `${i ? "," : ""}${quote(key)}:${canonicalStringify(v)}`;
|
|
508
|
+
}
|
|
509
|
+
return `${out}}`;
|
|
510
|
+
}
|
|
511
|
+
default:
|
|
512
|
+
throw new TypeError(`Value of type ${typeof value} is not valid JSON`);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
|
|
316
516
|
// packages/machine/dist/data.js
|
|
317
517
|
function getIn(value, path) {
|
|
318
518
|
let current = value;
|
|
@@ -706,40 +906,6 @@ var domField = (e) => (field) => {
|
|
|
706
906
|
};
|
|
707
907
|
var classText = (base, active) => base ? active.length ? `${base} ${active.join(" ")}` : base : active.join(" ");
|
|
708
908
|
|
|
709
|
-
// packages/core/dist/canonical/stringify.js
|
|
710
|
-
var quote = JSON.stringify;
|
|
711
|
-
function canonicalStringify(value) {
|
|
712
|
-
if (value === null)
|
|
713
|
-
return "null";
|
|
714
|
-
switch (typeof value) {
|
|
715
|
-
case "string":
|
|
716
|
-
return quote(value);
|
|
717
|
-
case "boolean":
|
|
718
|
-
return value ? "true" : "false";
|
|
719
|
-
case "number":
|
|
720
|
-
if (!Number.isFinite(value))
|
|
721
|
-
throw new TypeError(`Non-finite number ${value} is not valid JSON`);
|
|
722
|
-
return Object.is(value, -0) ? "0" : String(value);
|
|
723
|
-
case "object": {
|
|
724
|
-
if (Array.isArray(value))
|
|
725
|
-
return `[${value.map(canonicalStringify).join(",")}]`;
|
|
726
|
-
const obj = value;
|
|
727
|
-
const keys = Object.keys(obj).sort();
|
|
728
|
-
let out = "{";
|
|
729
|
-
for (let i = 0; i < keys.length; i++) {
|
|
730
|
-
const key = keys[i];
|
|
731
|
-
const v = obj[key];
|
|
732
|
-
if (v === void 0)
|
|
733
|
-
throw new TypeError(`Undefined value at key "${key}"`);
|
|
734
|
-
out += `${i ? "," : ""}${quote(key)}:${canonicalStringify(v)}`;
|
|
735
|
-
}
|
|
736
|
-
return `${out}}`;
|
|
737
|
-
}
|
|
738
|
-
default:
|
|
739
|
-
throw new TypeError(`Value of type ${typeof value} is not valid JSON`);
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
|
|
743
909
|
// packages/runtime-client/dist/mount.js
|
|
744
910
|
var guardReads = (g) => {
|
|
745
911
|
switch (g.op) {
|
|
@@ -865,6 +1031,8 @@ function createApp(doc, options) {
|
|
|
865
1031
|
c.next = el.nextSibling;
|
|
866
1032
|
} else {
|
|
867
1033
|
el = space ? doc.createElementNS(space, tag) : doc.createElement(tag);
|
|
1034
|
+
if (true)
|
|
1035
|
+
el.setAttribute("data-hz", node.id);
|
|
868
1036
|
if (node.class)
|
|
869
1037
|
el.setAttribute("class", node.class);
|
|
870
1038
|
c.parent.insertBefore(el, c.next);
|
|
@@ -930,7 +1098,7 @@ function createApp(doc, options) {
|
|
|
930
1098
|
const result = payload.get(k);
|
|
931
1099
|
bound = scope;
|
|
932
1100
|
if (!result) {
|
|
933
|
-
if (!cc.claim)
|
|
1101
|
+
if (!cc.claim || options.readsInBrowser?.(node.query))
|
|
934
1102
|
request(k, node.query, input);
|
|
935
1103
|
if (node.pending)
|
|
936
1104
|
render(node.pending, scope, cc, inner, ns);
|
|
@@ -1041,6 +1209,8 @@ function createApp(doc, options) {
|
|
|
1041
1209
|
c.next = el.nextSibling;
|
|
1042
1210
|
} else {
|
|
1043
1211
|
el = doc.createElement(tag);
|
|
1212
|
+
if (true)
|
|
1213
|
+
el.setAttribute("data-hz", node.id);
|
|
1044
1214
|
if (node.class)
|
|
1045
1215
|
el.setAttribute("class", node.class);
|
|
1046
1216
|
c.parent.insertBefore(el, c.next);
|
|
@@ -1268,7 +1438,7 @@ function createApp(doc, options) {
|
|
|
1268
1438
|
}
|
|
1269
1439
|
|
|
1270
1440
|
// packages/runtime-client/dist/hydrate.js
|
|
1271
|
-
var
|
|
1441
|
+
var __rewriteRelativeImportExtension2 = function(path, preserveJsx) {
|
|
1272
1442
|
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
1273
1443
|
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) {
|
|
1274
1444
|
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js";
|
|
@@ -1300,15 +1470,15 @@ var fetchQuery = async (query, input) => {
|
|
|
1300
1470
|
});
|
|
1301
1471
|
return await response.json();
|
|
1302
1472
|
};
|
|
1303
|
-
var importComponent = async (url) => (await import(
|
|
1473
|
+
var importComponent = async (url) => (await import(__rewriteRelativeImportExtension2(
|
|
1304
1474
|
/* @vite-ignore */
|
|
1305
1475
|
url
|
|
1306
1476
|
))).default;
|
|
1307
|
-
var importFns = async (url) => (await import(
|
|
1477
|
+
var importFns = async (url) => (await import(__rewriteRelativeImportExtension2(
|
|
1308
1478
|
/* @vite-ignore */
|
|
1309
1479
|
url
|
|
1310
1480
|
))).fns;
|
|
1311
|
-
async function hydrate(doc, { transport = fetchTransport, query = fetchQuery, live, loadFns = importFns, loadComponent = importComponent } = {}) {
|
|
1481
|
+
async function hydrate(doc, { transport = fetchTransport, query = fetchQuery, live, loadFns = importFns, loadComponent = importComponent, loadFetch } = {}) {
|
|
1312
1482
|
const apps = /* @__PURE__ */ new Map();
|
|
1313
1483
|
const script = doc.getElementById("hozu-payload");
|
|
1314
1484
|
if (!script?.textContent)
|
|
@@ -1321,12 +1491,19 @@ async function hydrate(doc, { transport = fetchTransport, query = fetchQuery, li
|
|
|
1321
1491
|
const mountComponent2 = Object.keys(components).length ? (await Promise.resolve().then(() => (init_component(), component_exports))).mountComponent : void 0;
|
|
1322
1492
|
if (payload.visible)
|
|
1323
1493
|
void Promise.resolve().then(() => (init_visible(), visible_exports)).then((m) => m.watch(doc));
|
|
1494
|
+
const local = payload.effects ? (await Promise.resolve().then(() => (init_fetch(), fetch_exports))).createRunner(payload, fns, shared, { stringify: canonicalStringify, compile: compileValue }, loadFetch) : null;
|
|
1324
1495
|
const inflight = /* @__PURE__ */ new Map();
|
|
1325
1496
|
const onQuery = (q, input) => {
|
|
1497
|
+
if (true) {
|
|
1498
|
+
const held = payload.devState;
|
|
1499
|
+
if (held && "query" in held && held.query === q)
|
|
1500
|
+
return new Promise(() => {
|
|
1501
|
+
});
|
|
1502
|
+
}
|
|
1326
1503
|
const key = q + JSON.stringify(input);
|
|
1327
1504
|
let pending = inflight.get(key);
|
|
1328
1505
|
if (!pending) {
|
|
1329
|
-
pending = query(q, input).finally(() => inflight.delete(key));
|
|
1506
|
+
pending = (local?.runs(q) ? local.run(q, input) : query(q, input)).finally(() => inflight.delete(key));
|
|
1330
1507
|
inflight.set(key, pending);
|
|
1331
1508
|
}
|
|
1332
1509
|
return pending;
|
|
@@ -1345,8 +1522,21 @@ async function hydrate(doc, { transport = fetchTransport, query = fetchQuery, li
|
|
|
1345
1522
|
let busy = 0;
|
|
1346
1523
|
let queued = [];
|
|
1347
1524
|
const onInvoke = async (effect, input) => {
|
|
1525
|
+
if (local?.runs(effect)) {
|
|
1526
|
+
busy++;
|
|
1527
|
+
const { result: result2, changed } = await local.mutate(effect, input).finally(() => busy--);
|
|
1528
|
+
if (changed)
|
|
1529
|
+
for (const app of apps.values())
|
|
1530
|
+
app.sync();
|
|
1531
|
+
return result2;
|
|
1532
|
+
}
|
|
1348
1533
|
busy++;
|
|
1349
|
-
const { result, refreshed, session } = await transport(effect, input, [
|
|
1534
|
+
const { result, refreshed, session, tags } = await transport(effect, input, [
|
|
1535
|
+
...shared.data.keys()
|
|
1536
|
+
]).finally(() => busy--);
|
|
1537
|
+
if (tags && local && await local.reread(tags))
|
|
1538
|
+
for (const app of apps.values())
|
|
1539
|
+
app.sync();
|
|
1350
1540
|
if (session) {
|
|
1351
1541
|
shared.data.clear();
|
|
1352
1542
|
queued = [];
|
|
@@ -1381,6 +1571,7 @@ async function hydrate(doc, { transport = fetchTransport, query = fetchQuery, li
|
|
|
1381
1571
|
loadComponent,
|
|
1382
1572
|
onQuery,
|
|
1383
1573
|
onInvoke,
|
|
1574
|
+
...local ? { readsInBrowser: (q) => local.runs(q) } : {},
|
|
1384
1575
|
onNavigate: (url) => doc.defaultView?.location.assign(url)
|
|
1385
1576
|
}));
|
|
1386
1577
|
}
|
package/dist/fetch.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Json, ValueExpr } from '@hozu/core/ir';
|
|
2
|
+
import type { PagePayload } from './hydrate.ts';
|
|
3
|
+
import type { Result, Store } from './mount.ts';
|
|
4
|
+
type S = Record<string, any>;
|
|
5
|
+
/**
|
|
6
|
+
* Checks a value against the subset of JSON Schema the IR emits, and returns it with undeclared object keys
|
|
7
|
+
* removed (as a schema parse strips them on the server).
|
|
8
|
+
*/
|
|
9
|
+
export declare function checked(schema: S, value: unknown, root?: S, at?: string): {
|
|
10
|
+
issues: string[];
|
|
11
|
+
value: unknown;
|
|
12
|
+
};
|
|
13
|
+
/** Runs a page's browser-run effects (ADR 0049): loads each feature's fetch bundle once, checks every boundary. */
|
|
14
|
+
export declare function createRunner(payload: PagePayload, fns: Record<string, never>, shared: Store,
|
|
15
|
+
/** From the initial bundle, so this chunk shares no module with it (budget P7). */
|
|
16
|
+
tools: {
|
|
17
|
+
stringify: (value: unknown) => string;
|
|
18
|
+
compile: (v: ValueExpr, fns: Record<string, never>) => (scope: never) => Json;
|
|
19
|
+
}, load?: (url: string) => Promise<Record<string, unknown>>): {
|
|
20
|
+
run: (ref: string, input: Json) => Promise<Result>;
|
|
21
|
+
mutate: (ref: string, input: Json) => Promise<{
|
|
22
|
+
result: Result;
|
|
23
|
+
changed: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
reread: (tags: string[]) => Promise<boolean>;
|
|
26
|
+
runs: (ref: string) => boolean;
|
|
27
|
+
};
|
|
28
|
+
export type Runner = ReturnType<typeof createRunner>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAI/C,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAE5B;;;GAGG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,CAAU,EAChB,EAAE,SAAK,GACN;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAkEtC;AAID,mHAAmH;AACnH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAC1B,MAAM,EAAE,KAAK;AACb,mFAAmF;AACnF,KAAK,EAAE;IACL,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAA;IACrC,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CAC9E,EACD,IAAI,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAA2C;eAqBzE,MAAM,SAAS,IAAI,KAAG,OAAO,CAAC,MAAM,CAAC;kBAmDlC,MAAM,SAAS,IAAI,KAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;mBAhBlE,MAAM,EAAE,KAAG,OAAO,CAAC,OAAO,CAAC;gBAoBb,MAAM;EACjD;AAED,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA"}
|