@weftui/dom 0.20.9 → 0.22.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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Effect as e}from"effect";import{FAILURE_BOUNDARY as t,FRAGMENT as n,LIST as r,SERVER_BOUNDARY as i,SUSPENSE_BOUNDARY as a,getElementDescriptor as o,isStream as s}from"@weftui/core";function c(e){return` stream-start-${e} `}function l(e){return` stream-end-${e} `}function u(e){return` suspense-start-${e} `}function d(e){return` suspense-end-${e} `}const f=`data-weft-suspense-failure`,p=/^ suspense-(start|end)-(\d+) $/;function m(e){let t=p.exec(e.data);return t===null?null:{kind:t[1],id:Number.parseInt(t[2],10)}}function h(e){return` boundary-start-${e} `}function g(e){return` boundary-end-${e} `}const _=/^ stream-(start|end)-(\d+) $/;function v(e){let t=_.exec(e.data);return t===null?null:{kind:t[1],id:Number.parseInt(t[2],10)}}function y(e){return` list-item-start-${e} `}function b(e){return` list-item-end-${e} `}const x=/^ list-item-(start|end)-(\d+) $/;function S(e){let t=x.exec(e.data);return t===null?null:{kind:t[1],id:Number.parseInt(t[2],10)}}const C=`data-weft-boundary-failure`;function w(e){let t=[];return T(e,t),t}function T(t,n){if(!(t==null||typeof t==`boolean`)&&!(typeof t==`string`||typeof t==`number`||typeof t==`bigint`)){if(s(t)||e.isEffect(t)){let e=o(t);e!==void 0&&E(e,n);return}if(typeof t==`object`&&Symbol.iterator in t&&!(`type`in t)){for(let e of t)T(e,n);return}typeof t==`object`&&`type`in t&&!(Symbol.iterator in t)&&E(t,n)}}function E(e,o){let{type:s,props:c}=e;if(s===i){o.push(c);return}if(s===n||s===a||s===t){D(c,o);return}if(s!==r){if(typeof s==`string`){D(c,o);return}typeof s==`function`&&T(s(c),o)}}function D(e,t){let n=`children`in e?e.children:void 0;if(n==null)return;let r=Array.isArray(n)?n:[n];for(let e of r)T(e,t)}export{h as a,S as c,l as d,c as f,g as i,v as l,u as m,w as n,b as o,d as p,f as r,y as s,C as t,m as u};
|
package/dist/client/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,n as t,o as n,r,s as i,t as a}from"../data-Bk62ePeP.js";import{a as o,c as s,d as c,f as l,i as u,l as d,n as f,o as p,p as m,r as h,s as g,u as _}from"../boundary-replay-C9r9jASU.js";import{Cause as v,Deferred as y,Effect as b,ExecutionStrategy as x,Exit as S,Fiber as C,HashMap as w,HashSet as T,Layer as E,ManagedRuntime as ee,Option as D,Ref as O,Schema as te,Scope as k,Stream as A,SubscriptionRef as j,pipe as M}from"effect";import{AppRpcClientTag as ne,FAILURE_BOUNDARY as re,FRAGMENT as ie,LIST as ae,SERVER_BOUNDARY as oe,SUSPENSE_BOUNDARY as se,Source as ce,getElementDescriptor as N,isStream as P,toStream as F}from"@weftui/core";function I(){return b.gen(function*(){let e=yield*r;return++e.streamIdCounter.current})}const le=I;let ue=0;const de=()=>++ue;function fe(e){if(e.length<=2||!e.startsWith(`on`))return!1;let t=e[2];return t!==void 0&&t>=`a`&&t<=`z`}function L(e,t){return b.gen(function*(){for(let[n,r]of Object.entries(t))if(n!==`children`){if(fe(n)){yield*ye(e,n,r);continue}if(n===`ref`&&typeof r==`object`&&O.RefTypeId in r){yield*O.set(r,D.some(e));continue}if(n===`style`){yield*_e(e,r);continue}pe(e,n)?yield*me(e,n,r):yield*he(e,n,r)}})}function pe(e,t){if(t.startsWith(`data-`)||t.startsWith(`aria-`))return!1;let n=Object.getPrototypeOf(e);for(;n!==null;){if(Object.hasOwn(n,t))return!0;n=Object.getPrototypeOf(n)}return t in e}function me(e,t,n){return b.gen(function*(){P(n)||b.isEffect(n)?yield*z(F(n),n=>{n==null?delete e[t]:e[t]=n},`property:${t}`):n!=null&&(e[t]=n)})}function he(e,t,n){return b.gen(function*(){if(P(n)||b.isEffect(n))yield*z(F(n),n=>{if(n==null)e.removeAttribute(t);else{let r=ge(n);r!==void 0&&(typeof n==`boolean`?n?e.setAttribute(t,``):e.removeAttribute(t):e.setAttribute(t,r))}},`attribute:${t}`);else{let r=ge(n);r!==void 0&&(typeof n==`boolean`?n?e.setAttribute(t,``):e.removeAttribute(t):e.setAttribute(t,r))}})}function ge(e){if(e!=null)return String(e)}function _e(e,t){return b.gen(function*(){if(P(t)||b.isEffect(t)){yield*z(F(t),t=>{if(typeof t==`string`)e.setAttribute(`style`,t);else if(typeof t==`object`&&t){e.style.cssText=``;for(let[n,r]of Object.entries(t))r!=null&&e.style.setProperty(R(n),String(r))}},`style`);return}if(typeof t==`string`){e.setAttribute(`style`,t);return}typeof t==`object`&&t&&(yield*ve(e,t))})}function ve(e,t){return b.gen(function*(){for(let[n,r]of Object.entries(t))P(r)||b.isEffect(r)?yield*z(F(r),t=>{t!=null&&e.style.setProperty(R(n),String(t))},`style.${n}`):r!=null&&e.style.setProperty(R(n),String(r))})}function R(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function z(e,t,n){return b.gen(function*(){let n=yield*r,i=yield*b.serviceOption(a),o=A.runForEach(e,e=>b.sync(()=>void t(e))),s=yield*b.forkIn(o,n.scope);yield*M(C.await(s),b.flatMap(e=>S.isFailure(e)&&D.isSome(i)?i.value.reportError(e.cause):b.void),b.forkIn(n.scope))})}function ye(e,t,n){return b.gen(function*(){let i=yield*r,a=t.slice(2).toLowerCase(),o=null,s=()=>{o&&=(e.removeEventListener(a,o),null)},c=n=>{s(),!(n==null||n===!1)&&typeof n==`function`&&(o=e=>{let r=n(e);b.isEffect(r)&&i.runtime.runFork(M(r,b.catchAll(e=>process.env.NODE_ENV===`development`?b.logError(`Event handler error: ${t}`,{error:e}):b.void)))},e.addEventListener(a,o))};yield*k.addFinalizer(i.scope,b.sync(s)),P(n)||b.isEffect(n)?yield*z(F(n),e=>c(e),`event:${t}`):c(n)})}function be(e){return b.gen(function*(){let t=yield*r,n=yield*b.serviceOption(a),i=de(),o=document.createComment(u(i)),s=document.createComment(h(i)),c=yield*k.fork(t.scope,x.sequential),l={...t,scope:c},d=yield*y.make(),f=yield*M(V(e.children),b.provideService(a,{reportError:e=>y.fail(d,e).pipe(b.asVoid)}),b.provideService(r,l),b.provideService(k.Scope,c),b.catchAllCause(t=>{let n=e.match(t);return n===null?b.failCause(t):M(k.close(c,S.void),b.flatMap(()=>B(n)),b.map(e=>e===null?[]:Array.isArray(e)?e:[e]))})),p=b.gen(function*(){let t=yield*y.await(d).pipe(b.flip),r=e.match(t);if(yield*k.close(c,S.void),r===null)return D.isSome(n)?yield*n.value.reportError(t):yield*b.logError(`Unhandled error escaped the outermost Boundary`,t);K(o,s);let i=yield*B(r),a=s.parentNode;if(a!==null&&i!==null)if(Array.isArray(i))for(let e of i)a.insertBefore(e,s);else a.insertBefore(i,s)});return yield*b.forkIn(p,t.scope),[o,...f,s]})}function xe(e){return b.gen(function*(){let t=yield*r,i=yield*O.make(1),a=yield*y.make(),o=M(O.updateAndGet(i,e=>e-1),b.flatMap(e=>e<=0?b.asVoid(y.succeed(a,void 0)):b.void)),s={register:O.update(i,e=>e+1),settle:o},c=e.children,u=yield*B((c===void 0?[]:Array.isArray(c)?c:[c]).map(e=>b.isEffect(e)||P(e)?{type:()=>e,props:{}}:e)).pipe(b.provideService(n,s)),d=u===null?[]:Array.isArray(u)?u:[u];yield*o;let f=yield*y.poll(a);if(D.isSome(f))return d;let p=yield*le(),h=document.createComment(m(p)),g=document.createComment(l(p)),_=yield*B(e.fallback??null),v=[];_!==null&&(Array.isArray(_)?v.push(..._):v.push(_));let x=document.createDocumentFragment();for(let e of d)x.appendChild(e);let S=b.gen(function*(){yield*y.await(a),K(h,g);let e=g.parentNode;e!==null&&(e.insertBefore(x,g),h.remove(),g.remove())});return yield*b.forkIn(S,t.scope),[h,...v,g]})}function Se(t){return b.gen(function*(){let n=yield*r,i=yield*b.serviceOption(ne);if(D.isNone(i))return yield*b.fail(new e({cause:void 0,message:`Boundary.rpc "${t.tag}" was mounted client-first without an AppRpcClient in context. Mount the app under @weftui/router (RouterLive), which provides the rpc client, so the boundary can resolve its data.`}));let a=i.value,o=de(),s=document.createComment(u(o)),c=document.createComment(h(o)),l=yield*B(t.fallback??null),d=[];l!==null&&(Array.isArray(l)?d.push(...l):d.push(l));let f=b.gen(function*(){let e=yield*a.call(t.tag,t.payload()),n=yield*Ke(t.tag,t.payload,e,i),r=yield*B(t.render(n));K(s,c);let o=c.parentNode;if(o!==null&&r!==null)if(Array.isArray(r))for(let e of r)o.insertBefore(e,c);else o.insertBefore(r,c)}).pipe(b.catchAllCause(e=>b.logError(`[weft] Boundary.rpc "${t.tag}" mount failed to resolve; fallback left in place.`,e)));return yield*b.forkIn(f,n.scope),[s,...d,c]})}function B(e){return b.gen(function*(){if(typeof e==`string`||typeof e==`number`||typeof e==`bigint`)return document.createTextNode(String(e));if(typeof e==`boolean`||e==null)return null;if(P(e)||b.isEffect(e)){let t=N(e);if(t!==void 0)return yield*B(t);if(b.isEffect(e)){let t=b.runSyncExit(e);if(S.isSuccess(t))return yield*B(t.value)}return yield*H(F(e))}if(typeof e==`object`&&Symbol.iterator in e&&!(`type`in e))return yield*V(Ce(e));if(typeof e==`object`&&`type`in e&&!(Symbol.iterator in e)){let{type:t,props:n}=e;return t===ie?yield*we(n):t===se?yield*xe(n):t===oe?yield*Se(n):t===re?yield*be(n):t===ae?yield*je(n):typeof t==`string`?yield*Te(t,n):typeof t==`function`?yield*Ee(t,n):yield*b.fail(new i({type:t,message:`Invalid Renderable type: expected string, FRAGMENT, or function, got ${typeof t}`}))}return null})}function Ce(e){let t=[];function n(e){if(P(e)||b.isEffect(e)){t.push(e);return}if(typeof e==`object`&&e&&Symbol.iterator in e&&!(`type`in e))for(let t of e)n(t);else t.push(e)}return n(e),t}function V(e){return b.gen(function*(){let t=[];for(let n of e)if(P(n)||b.isEffect(n)){let e=yield*H(F(n));t.push(...e)}else{let e=yield*B(n);e!==null&&(Array.isArray(e)?t.push(...e):t.push(e))}return t})}function we(e){return b.gen(function*(){let t=`children`in e?e.children:void 0;return t===void 0?[]:yield*V(Array.isArray(t)?t:[t])})}function Te(e,t){return b.gen(function*(){let n=document.createElement(e);yield*L(n,t);let r=`children`in t?t.children:void 0;if(r!==void 0){let e=Array.isArray(r)?r:[r];for(let t of e)if(P(t)||b.isEffect(t)){let e=yield*H(F(t));for(let t of e)n.appendChild(t)}else{let e=yield*B(t);if(e!==null)if(Array.isArray(e))for(let t of e)n.appendChild(t);else n.appendChild(e)}}return n})}function Ee(e,t){return b.gen(function*(){let i=e(t);if(P(i)||b.isEffect(i)){let e=yield*r,t=yield*k.fork(e.scope,x.sequential),a={...e,scope:t},o=yield*b.serviceOption(n),s=F(i);return D.isSome(o)&&(yield*o.value.register,s=M(s,A.zipWithIndex,A.flatMap(([e,t])=>t===0?A.fromEffect(b.as(o.value.settle,e)):A.make(e)))),yield*H(s).pipe(b.provideService(r,a),b.provideService(k.Scope,t))}return yield*B(i)})}function H(e){return b.gen(function*(){let t=yield*r,[n,i]=De(yield*I()),o=null,s=A.runForEach(e,e=>b.gen(function*(){o!==null&&(yield*k.close(o,S.void)),o=yield*k.fork(t.scope,x.sequential);let a={...t,scope:o};yield*U(n,i,e).pipe(b.provideService(r,a),b.provideService(k.Scope,o))})),c=yield*b.forkIn(s,t.scope),l=yield*b.serviceOption(a);return yield*M(C.await(c),b.flatMap(e=>S.isFailure(e)&&D.isSome(l)?l.value.reportError(e.cause):b.void),b.forkIn(t.scope)),[n,i]})}function De(e){return[document.createComment(c(e)),document.createComment(_(e))]}function U(e,t,n){return b.gen(function*(){let r=e.nextSibling,i=r!==null&&r!==t&&r.nextSibling===t;if(i&&r.nodeType===$e&&W(n)){let e=String(n);r.data!==e&&(r.data=e);return}if(i&&r.nodeType===X){let e=G(n);if(e!==void 0&&typeof e.type==`string`&&r.tagName.toLowerCase()===e.type.toLowerCase()){yield*Oe(r,e);return}}K(e,t);let a=yield*B(n),o=e.parentNode;if(o!==null&&a!==null)if(Array.isArray(a))for(let e of a)o.insertBefore(e,t);else o.insertBefore(a,t)})}function W(e){return typeof e==`string`||typeof e==`number`||typeof e==`bigint`}function G(e){let t=N(e);if(t!==void 0)return t;if(typeof e==`object`&&e&&`type`in e&&!(Symbol.iterator in e)&&!P(e)&&!b.isEffect(e))return e}function Oe(e,t){return b.gen(function*(){yield*L(e,t.props);let n=t.props.children,r=n===void 0?[]:Array.isArray(n)?n:[n];if(!(yield*ke(e,r))){for(;e.firstChild!==null;)e.firstChild.remove();yield*Ae(e,r)}})}function ke(e,t){return b.gen(function*(){let n=Array.from(e.childNodes);if(n.length!==t.length)return!1;for(let e=0;e<t.length;e++){let r=t[e],i=n[e];if(W(r)){if(i.nodeType!==$e)return!1}else{let e=G(r);if(e===void 0||typeof e.type!=`string`||i.nodeType!==X||i.tagName.toLowerCase()!==e.type.toLowerCase())return!1}}for(let e=0;e<t.length;e++){let r=t[e],i=n[e];if(W(r)){let e=String(r);i.data!==e&&(i.data=e)}else yield*Oe(i,G(r))}return!0})}function Ae(e,t){return b.gen(function*(){for(let n of t)if(P(n)||b.isEffect(n)){let t=yield*H(F(n));for(let n of t)e.appendChild(n)}else{let t=yield*B(n);if(t!==null)if(Array.isArray(t))for(let n of t)e.appendChild(n);else e.appendChild(t)}})}function K(e,t){let n=e.nextSibling;for(;n!==null&&n!==t;){let e=n.nextSibling;n.remove(),n=e}}function je(e){return b.gen(function*(){let t=yield*r,{of:n,by:i,render:o}=e,[s,c]=De(yield*I()),l=yield*k.fork(t.scope,x.sequential),u=(yield*ce.toSubscribable(n).pipe(b.provideService(k.Scope,l))).changes,d={records:w.empty(),order:[]},f=A.runForEach(u,e=>b.gen(function*(){d=yield*q(Array.from(e),i,o,d,l,c,t)})),p=yield*b.forkIn(f,l),m=yield*b.serviceOption(a);return yield*M(C.await(p),b.flatMap(e=>S.isFailure(e)&&D.isSome(m)?m.value.reportError(e.cause):b.void),b.forkIn(t.scope)),[s,c]})}function Me(t,n){return b.gen(function*(){let r=[],i=T.empty();for(let a=0;a<t.length;a++){let o=n===void 0?t[a]:n(t[a],a);if(T.has(i,o))return yield*b.fail(new e({cause:o,message:`List.each: duplicate key ${Ie(o)} in a single emission; keys must be unique (set a stable \`by\`).`}));i=T.add(i,o),r.push(o)}return r})}function q(e,t,n,r,i,a,o){return b.gen(function*(){let s=yield*Me(e,t),c=w.empty();r.order.forEach((e,t)=>{c=w.set(c,e,t)});let l=[],u=[];for(let t=0;t<e.length;t++){let a=s[t],d=w.get(r.records,a);if(D.isSome(d))l.push(d.value),u.push(D.getOrElse(w.get(c,a),()=>-1));else{let r=yield*Ne(a,e[t],t,n,i,o);l.push(r),u.push(-1)}}let d=T.empty();for(let e of s)d=T.add(d,e);for(let e of r.order)if(!T.has(d,e)){let t=w.get(r.records,e);D.isSome(t)&&(yield*k.close(t.value.scope,S.void),Fe(t.value.startMarker,t.value.endMarker))}let f=Le(u),p=a.parentNode;if(p!==null)for(let e=l.length-1;e>=0;e--){let t=l[e];if(u[e]!==-1&&f.has(e))continue;let n=e+1<l.length?l[e+1].startMarker:a,r=u[e]===-1?[t.startMarker,...t.nodes,t.endMarker]:Pe(t.startMarker,t.endMarker);for(let e of r)p.insertBefore(e,n)}let m=w.empty();for(let e of l)m=w.set(m,e.key,e);return{records:m,order:s}})}function Ne(e,t,n,i,a,s){return b.gen(function*(){let c=yield*k.fork(a,x.sequential),l={...s,scope:c},u=yield*I(),d=document.createComment(p(u)),f=document.createComment(o(u)),m=yield*B(i(t,n)).pipe(b.provideService(r,l),b.provideService(k.Scope,c));return{key:e,scope:c,startMarker:d,endMarker:f,nodes:m===null?[]:Array.isArray(m)?m:[m]}})}function Pe(e,t){let n=[],r=e;for(;r!==null&&(n.push(r),r!==t);)r=r.nextSibling;return n}function Fe(e,t){let n=e;for(;n!==null;){let e=n.nextSibling;if(n.remove(),n===t)break;n=e}}function Ie(e){if(typeof e==`string`)return JSON.stringify(e);if(typeof e==`object`&&e)try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}return String(e)}function Le(e){let t=e.length,n=[],r=Array.from({length:t},()=>-1);for(let i=0;i<t;i++){let t=e[i];if(t===-1)continue;let a=0,o=n.length;for(;a<o;){let r=a+o>>1;e[n[r]]<t?a=r+1:o=r}a>0&&(r[i]=n[a-1]),n[a]=i}let i=new Set,a=n.length>0?n[n.length-1]:-1;for(;a!==-1;)i.add(a),a=r[a];return i}function Re(e,t){return b.gen(function*(){let n=yield*b.context(),i=ee.make(E.succeedContext(n)),a=yield*k.make(),o={runtime:i,scope:a,streamIdCounter:{current:0}},s=b.zipRight(k.close(a,S.void),b.promise(()=>i.dispose()));t.innerHTML=``;let c=yield*B(e).pipe(b.provideService(r,o),b.provideService(k.Scope,a),b.tapError(()=>s));if(c!==null)if(Array.isArray(c))for(let e of c)t.appendChild(e);else t.appendChild(c);let l=!1;return{unmount:()=>b.gen(function*(){l||(l=!0,yield*k.close(a,S.void),yield*b.promise(()=>i.dispose()))})}})}function ze(e,t){return b.gen(function*(){let n=yield*b.context(),i=ee.make(E.succeedContext(n)),a=yield*k.make(),o=yield*Ve(),s={runtime:i,scope:a,streamIdCounter:{current:0},hydrationReady:o};et(t,s.streamIdCounter);let c=b.zipRight(k.close(a,S.void),b.promise(()=>i.dispose()));yield*J(e,t.firstChild,`root`).pipe(b.provideService(r,s),b.provideService(k.Scope,a),b.tapError(()=>c)),yield*o.settle,yield*o.awaitReady;let l=!1;return{unmount:()=>b.gen(function*(){l||(l=!0,yield*k.close(a,S.void),yield*b.promise(()=>i.dispose()))})}})}function J(e,t,n){return b.gen(function*(){if(typeof e==`string`||typeof e==`number`||typeof e==`bigint`)return yield*Be(String(e),t,n);if(typeof e==`boolean`||e==null)return t;if(P(e)||b.isEffect(e)){let r=N(e);if(r!==void 0)return yield*J(r,t,n);if(b.isEffect(e)){let r=b.runSyncExit(e);if(S.isSuccess(r))return yield*J(r.value,t,n)}return yield*Ue(F(e),t,n)}if(typeof e==`object`&&Symbol.iterator in e&&!(`type`in e)){let r=t,i=0;for(let t of e)r=yield*J(t,r,`${n}[${i}]`),i++;return r}if(typeof e==`object`&&`type`in e&&!(Symbol.iterator in e)){let{type:r,props:a}=e;return r===ie||r===se?yield*Y(a,t,n):r===re?yield*Ge(a,t,n):r===oe?yield*qe(a,t,n):r===ae?yield*Ye(a,t,n):typeof r==`string`?yield*Je(r,a,t,n):typeof r==`function`?yield*J(r(a),t,n):yield*b.fail(new i({type:r,message:`Invalid Renderable type during hydration at ${n}: expected string, FRAGMENT, or function, got ${typeof r}`}))}return t})}function Be(e,t,n){return b.gen(function*(){if(e.length===0)return t;if(t===null||t.nodeType!==$e)return yield*$(`text ${JSON.stringify(e)}`,Q(t),n);let r=t;return r.data.startsWith(e)?r.data.length>e.length?r.splitText(e.length):r.nextSibling:yield*$(`text ${JSON.stringify(e)}`,Q(t),n)})}function Ve(){return b.gen(function*(){let e=yield*O.make(1),t=yield*y.make(),n=M(O.updateAndGet(e,e=>e-1),b.flatMap(e=>e<=0?b.asVoid(y.succeed(t,void 0)):b.void));return{register:O.update(e,e=>e+1),settle:n,awaitReady:y.await(t)}})}function He(e){let t=!1;return b.suspend(()=>t||e===void 0?b.void:(t=!0,e.settle))}function Ue(e,t,n){return b.gen(function*(){let i=yield*r;if(t===null||t.nodeType!==Z)return yield*$(`reactive region start marker`,Q(t),n);let a=t,o=s(a);if(o===null||o.kind!==`start`)return yield*$(`reactive region start marker`,Q(t),n);let c=tt(a);if(c===null)return yield*$(`reactive region end marker`,`unterminated region starting at ${JSON.stringify(a.data)}`,n);let l=He(i.hydrationReady),u=!0,d=null,f=A.runForEach(e,e=>b.gen(function*(){d!==null&&(yield*k.close(d,S.void)),d=yield*k.fork(i.scope,x.sequential);let t={...i,scope:d};yield*b.gen(function*(){u?(u=!1,yield*We(e,a,c,n),yield*l):yield*U(a,c,e)}).pipe(b.provideService(r,t),b.provideService(k.Scope,d))})).pipe(b.ensuring(l));return i.hydrationReady!==void 0&&(yield*i.hydrationReady.register),yield*b.forkIn(f,i.scope),c.nextSibling})}function We(e,t,n,r){return b.gen(function*(){let i=yield*J(e,t.nextSibling,`${r}<resume>`).pipe(b.map(e=>e===n?null:`adopted content did not align with the end marker`),b.catchTag(`HydrationMismatchError`,e=>b.succeed(`expected ${e.expected}, found ${e.actual} at ${e.path}`)));i!==null&&(console.error(`[weft] hydrate: reactive region at ${r} diverged from server output (${i}); patching.`),yield*U(t,n,e))})}function Ge(e,t,n){return b.gen(function*(){if(t===null||t.nodeType!==X||t.tagName!==`SCRIPT`||t.getAttribute(`type`)!==`application/json`||!t.hasAttribute(`data-weft-boundary-failure`))return yield*Y(e,t,n);let r=t,i=r.textContent??``,a=yield*b.gen(function*(){let t=yield*b.try({try:()=>JSON.parse(i),catch:e=>e}),n=f(e.children)[t.index];if(n===void 0)return null;let r=yield*te.decodeUnknown(n.errorSchema)(t.error);return e.match(v.fail(r))}).pipe(b.catchAll(e=>(console.error(`[weft] hydrate: boundary failure payload at ${n} failed to decode; cannot replay.`,e),b.succeed(null))));if(a===null)return yield*$(`replayable boundary failure`,`undecodable failure payload`,n);let o=yield*J(a,r.nextSibling,n);return r.remove(),o})}function Ke(e,t,n,r){return b.gen(function*(){let i=yield*j.make(n),a=yield*j.make(!1),o=yield*j.make(D.none());return{value:i,refetch:D.match(r,{onNone:()=>b.void,onSome:n=>b.gen(function*(){(yield*j.get(a))||(yield*j.set(a,!0),yield*b.gen(function*(){let r=yield*b.exit(n.call(e,t()));S.isSuccess(r)?(yield*j.set(i,r.value),yield*j.set(o,D.none())):yield*j.set(o,D.some(v.squash(r.cause)))}).pipe(b.ensuring(j.set(a,!1))))})}),pending:a,error:o}})}function qe(e,t,n){return b.gen(function*(){if(t===null||t.nodeType!==X||t.tagName!==`SCRIPT`||t.getAttribute(`type`)!==`application/json`)return yield*$(`server boundary payload <script type="application/json">`,Q(t),n);if(t.hasAttribute(`data-weft-boundary-failure`))return yield*$(`server boundary success payload <script type="application/json">`,`boundary failure payload`,n);let r=t,i=r.textContent??``,a=yield*b.try({try:()=>JSON.parse(i),catch:e=>e}).pipe(b.flatMap(t=>te.decodeUnknown(e.successSchema)(t)),b.catchAll(e=>(console.error(`[weft] hydrate: server boundary payload at ${n} failed to decode; cannot replay.`,e),$(`decodable server boundary payload`,`undecodable payload`,n)))),o=yield*b.serviceOption(ne),s=yield*Ke(e.tag,e.payload,a,o),c=yield*J(e.render(s),r.nextSibling,n);return r.remove(),c})}function Je(e,t,n,r){return b.gen(function*(){if(n===null||n.nodeType!==X)return yield*$(`<${e}>`,Q(n),r);let i=n;return i.tagName.toLowerCase()===e.toLowerCase()?(yield*L(i,t),yield*Y(t,i.firstChild,`${r} > ${e}`),i.nextSibling):yield*$(`<${e}>`,Q(n),r)})}function Y(e,t,n){return b.gen(function*(){let r=`children`in e?e.children:void 0;if(r===void 0)return t;let i=Array.isArray(r)?r:[r],a=t,o=0;for(let e of i)a=yield*J(e,a,`${n}[${o}]`),o++;return a})}function Ye(e,t,n){return b.gen(function*(){let i=yield*r,{of:o,by:c,render:l}=e;if(t===null||t.nodeType!==Z)return yield*$(`list region start marker`,Q(t),n);let u=t,d=s(u);if(d===null||d.kind!==`start`)return yield*$(`list region start marker`,Q(t),n);let f=tt(u);if(f===null)return yield*$(`list region end marker`,`unterminated region starting at ${JSON.stringify(u.data)}`,n);let p=Xe(u,f),m=yield*k.fork(i.scope,x.sequential),h=(yield*ce.toSubscribable(o).pipe(b.provideService(k.Scope,m))).changes,g={records:w.empty(),order:[]},_=!0,v=He(i.hydrationReady),y=A.runForEach(h,e=>b.gen(function*(){let t=Array.from(e);_?(_=!1,g=yield*Ze(t,c,l,p,m,u,f,i,n),yield*v):g=yield*q(t,c,l,g,m,f,i)})).pipe(b.ensuring(v));i.hydrationReady!==void 0&&(yield*i.hydrationReady.register);let T=yield*b.forkIn(y,m),E=yield*b.serviceOption(a);return yield*M(C.await(T),b.flatMap(e=>S.isFailure(e)&&D.isSome(E)?E.value.reportError(e.cause):b.void),b.forkIn(i.scope)),f.nextSibling})}function Xe(e,t){let n=[],r=e.nextSibling;for(;r!==null&&r!==t;){let e=r.nodeType===Z?g(r):null;if(e===null||e.kind!==`start`){r=r.nextSibling;continue}let i=r,a=[],o=0,s=null,c=i.nextSibling;for(;c!==null&&c!==t;){if(c.nodeType===Z){let e=g(c);if(e!==null)if(e.kind===`start`)o++;else if(o===0){s=c;break}else o--}a.push(c),c=c.nextSibling}if(s===null)break;n.push({startMarker:i,endMarker:s,nodes:a}),r=s.nextSibling}return n}function Ze(e,t,n,r,i,a,o,s,c){return b.gen(function*(){let l=yield*Me(e,t);if(l.length!==r.length)return console.error(`[weft] hydrate: list region at ${c} had ${r.length} server item(s) but the first emission has ${l.length}; rebuilding.`),K(a,o),yield*q(e,t,n,{records:w.empty(),order:[]},i,o,s);let u=[];for(let t=0;t<e.length;t++){let a=yield*Qe(l[t],e[t],t,n,r[t],i,s,c);u.push(a)}let d=w.empty();for(let e of u)d=w.set(d,e.key,e);return{records:d,order:l}})}function Qe(e,t,n,i,a,o,s,c){return b.gen(function*(){let l=yield*k.fork(o,x.sequential),u={...s,scope:l},d=i(t,n),f=yield*J(d,a.startMarker.nextSibling,`${c}<item>`).pipe(b.provideService(r,u),b.provideService(k.Scope,l),b.map(e=>e===a.endMarker?null:`adopted item content did not align with its end marker`),b.catchTag(`HydrationMismatchError`,e=>b.succeed(`expected ${e.expected}, found ${e.actual} at ${e.path}`)));if(f===null)return{key:e,scope:l,startMarker:a.startMarker,endMarker:a.endMarker,nodes:a.nodes};console.error(`[weft] hydrate: list item at ${c} diverged from server output (${f}); patching.`),yield*k.close(l,S.void);let p=yield*k.fork(o,x.sequential),m={...s,scope:p};K(a.startMarker,a.endMarker);let h=yield*B(d).pipe(b.provideService(r,m),b.provideService(k.Scope,p)),g=h===null?[]:Array.isArray(h)?h:[h],_=a.endMarker.parentNode;if(_!==null)for(let e of g)_.insertBefore(e,a.endMarker);return{key:e,scope:p,startMarker:a.startMarker,endMarker:a.endMarker,nodes:g}})}const X=1,$e=3,Z=8;function et(e,t){let n=document.createTreeWalker(e,128),r=t.current;for(let e=n.nextNode();e!==null;e=n.nextNode()){let t=e,n=s(t)??d(t)??g(t);n!==null&&n.id>r&&(r=n.id)}t.current=r}function tt(e){let t=0,n=e.nextSibling;for(;n!==null;){if(n.nodeType===8){let e=s(n);if(e!==null)if(e.kind===`start`)t++;else if(t===0)return n;else t--}n=n.nextSibling}return null}function Q(e){if(e===null)return`end of children`;switch(e.nodeType){case 1:return`<${e.tagName.toLowerCase()}>`;case 3:return`text ${JSON.stringify(e.data)}`;case 8:return`comment ${JSON.stringify(e.data)}`;default:return`node(type ${e.nodeType})`}}function $(e,n,r){return b.fail(new t({expected:e,actual:n,path:r}))}export{ze as hydrate,Re as mount};
|
|
1
|
+
import{i as e,n as t,o as n,r,s as i,t as a}from"../data-Bk62ePeP.js";import{a as o,c as s,d as c,f as l,i as u,l as d,m as f,n as p,o as m,p as h,s as g,u as _}from"../boundary-replay-BR26_puM.js";import{Cause as v,Deferred as y,Effect as b,ExecutionStrategy as x,Exit as S,Fiber as C,HashMap as w,HashSet as T,Layer as E,ManagedRuntime as ee,Option as D,Ref as O,Schema as te,Scope as k,Stream as A,SubscriptionRef as j,pipe as M}from"effect";import{AppRpcClientTag as ne,FAILURE_BOUNDARY as re,FRAGMENT as ie,LIST as ae,SERVER_BOUNDARY as oe,SUSPENSE_BOUNDARY as se,Source as ce,getElementDescriptor as le,isStream as N,toStream as P}from"@weftui/core";function F(){return b.gen(function*(){let e=yield*r;return++e.streamIdCounter.current})}const ue=F;let de=0;const I=()=>++de;function fe(e){if(e.length<=2||!e.startsWith(`on`))return!1;let t=e[2];return t!==void 0&&t>=`a`&&t<=`z`}function L(e,t){return b.gen(function*(){for(let[n,r]of Object.entries(t))if(n!==`children`){if(fe(n)){yield*ye(e,n,r);continue}if(n===`ref`&&typeof r==`object`&&O.RefTypeId in r){yield*O.set(r,D.some(e));continue}if(n===`style`){yield*_e(e,r);continue}pe(e,n)?yield*me(e,n,r):yield*he(e,n,r)}})}function pe(e,t){if(t.startsWith(`data-`)||t.startsWith(`aria-`))return!1;let n=Object.getPrototypeOf(e);for(;n!==null;){if(Object.hasOwn(n,t))return!0;n=Object.getPrototypeOf(n)}return t in e}function me(e,t,n){return b.gen(function*(){N(n)||b.isEffect(n)?yield*z(P(n),n=>{n==null?delete e[t]:e[t]=n},`property:${t}`):n!=null&&(e[t]=n)})}function he(e,t,n){return b.gen(function*(){if(N(n)||b.isEffect(n))yield*z(P(n),n=>{if(n==null)e.removeAttribute(t);else{let r=ge(n);r!==void 0&&(typeof n==`boolean`?n?e.setAttribute(t,``):e.removeAttribute(t):e.setAttribute(t,r))}},`attribute:${t}`);else{let r=ge(n);r!==void 0&&(typeof n==`boolean`?n?e.setAttribute(t,``):e.removeAttribute(t):e.setAttribute(t,r))}})}function ge(e){if(e!=null)return String(e)}function _e(e,t){return b.gen(function*(){if(N(t)||b.isEffect(t)){yield*z(P(t),t=>{if(typeof t==`string`)e.setAttribute(`style`,t);else if(typeof t==`object`&&t){e.style.cssText=``;for(let[n,r]of Object.entries(t))r!=null&&e.style.setProperty(R(n),String(r))}},`style`);return}if(typeof t==`string`){e.setAttribute(`style`,t);return}typeof t==`object`&&t&&(yield*ve(e,t))})}function ve(e,t){return b.gen(function*(){for(let[n,r]of Object.entries(t))N(r)||b.isEffect(r)?yield*z(P(r),t=>{t!=null&&e.style.setProperty(R(n),String(t))},`style.${n}`):r!=null&&e.style.setProperty(R(n),String(r))})}function R(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function z(e,t,n){return b.gen(function*(){let n=yield*r,i=yield*b.serviceOption(a),o=A.runForEach(e,e=>b.sync(()=>void t(e))),s=yield*b.forkIn(o,n.scope);yield*M(C.await(s),b.flatMap(e=>S.isFailure(e)&&D.isSome(i)?i.value.reportError(e.cause):b.void),b.forkIn(n.scope))})}function ye(e,t,n){return b.gen(function*(){let i=yield*r,a=t.slice(2).toLowerCase(),o=null,s=()=>{o&&=(e.removeEventListener(a,o),null)},c=n=>{s(),!(n==null||n===!1)&&typeof n==`function`&&(o=e=>{let r=n(e);b.isEffect(r)&&i.runtime.runFork(M(r,b.catchAll(e=>process.env.NODE_ENV===`development`?b.logError(`Event handler error: ${t}`,{error:e}):b.void)))},e.addEventListener(a,o))};yield*k.addFinalizer(i.scope,b.sync(s)),N(n)||b.isEffect(n)?yield*z(P(n),e=>c(e),`event:${t}`):c(n)})}function be(e,t,n,r,i,a){return b.gen(function*(){let o=yield*y.await(t).pipe(b.flip,b.catchAll(()=>b.interrupt)),s=e.match(o);if(yield*k.close(n,S.void),s===null)return D.isSome(r)?yield*r.value.reportError(o):yield*b.logError(`Unhandled error escaped the outermost Boundary`,o);K(i,a);let c=yield*B(s),l=a.parentNode;if(l!==null&&c!==null)if(Array.isArray(c))for(let e of c)l.insertBefore(e,a);else l.insertBefore(c,a)})}function xe(e){return b.gen(function*(){let t=yield*r,n=yield*b.serviceOption(a),i=I(),s=document.createComment(o(i)),c=document.createComment(u(i)),l=yield*k.fork(t.scope,x.sequential),d={...t,scope:l},f=yield*y.make(),p=yield*M(V(e.children),b.provideService(a,{reportError:e=>y.fail(f,e).pipe(b.asVoid)}),b.provideService(r,d),b.provideService(k.Scope,l),b.catchAllCause(t=>{let n=e.match(t);return n===null?b.failCause(t):M(k.close(l,S.void),b.flatMap(()=>B(n)),b.map(e=>e===null?[]:Array.isArray(e)?e:[e]))}));return yield*b.forkIn(be(e,f,l,n,s,c),t.scope),[s,...p,c]})}function Se(e){return b.gen(function*(){let t=yield*r,i=yield*O.make(1),a=yield*y.make(),o=M(O.updateAndGet(i,e=>e-1),b.flatMap(e=>e<=0?b.asVoid(y.succeed(a,void 0)):b.void)),s={register:O.update(i,e=>e+1),settle:o},c=e.children,l=yield*B((c===void 0?[]:Array.isArray(c)?c:[c]).map(e=>b.isEffect(e)||N(e)?{type:()=>e,props:{}}:e)).pipe(b.provideService(n,s)),u=l===null?[]:Array.isArray(l)?l:[l];yield*o;let d=yield*y.poll(a);if(D.isSome(d))return u;let p=yield*ue(),m=document.createComment(f(p)),g=document.createComment(h(p)),_=yield*B(e.fallback??null),v=[];_!==null&&(Array.isArray(_)?v.push(..._):v.push(_));let x=document.createDocumentFragment();for(let e of u)x.appendChild(e);let S=b.gen(function*(){yield*y.await(a),K(m,g);let e=g.parentNode;e!==null&&(e.insertBefore(x,g),m.remove(),g.remove())});return yield*b.forkIn(S,t.scope),[m,...v,g]})}function Ce(t){return b.gen(function*(){let n=yield*r,i=yield*b.serviceOption(ne);if(D.isNone(i))return yield*b.fail(new e({cause:void 0,message:`Boundary.rpc "${t.tag}" was mounted client-first without an AppRpcClient in context. Mount the app under @weftui/router (RouterLive), which provides the rpc client, so the boundary can resolve its data.`}));let a=i.value,s=I(),c=document.createComment(o(s)),l=document.createComment(u(s)),d=yield*B(t.fallback??null),f=[];d!==null&&(Array.isArray(d)?f.push(...d):f.push(d));let p=b.gen(function*(){let e=yield*a.call(t.tag,t.payload()),n=yield*Ye(t.tag,t.payload,e,i),r=yield*B(t.render(n));K(c,l);let o=l.parentNode;if(o!==null&&r!==null)if(Array.isArray(r))for(let e of r)o.insertBefore(e,l);else o.insertBefore(r,l)}).pipe(b.catchAllCause(e=>b.logError(`[weft] Boundary.rpc "${t.tag}" mount failed to resolve; fallback left in place.`,e)));return yield*b.forkIn(p,n.scope),[c,...f,l]})}function B(e){return b.gen(function*(){if(typeof e==`string`||typeof e==`number`||typeof e==`bigint`)return document.createTextNode(String(e));if(typeof e==`boolean`||e==null)return null;if(N(e)||b.isEffect(e)){let t=le(e);if(t!==void 0)return yield*B(t);if(b.isEffect(e)){let t=b.runSyncExit(e);if(S.isSuccess(t))return yield*B(t.value)}return yield*H(P(e))}if(typeof e==`object`&&Symbol.iterator in e&&!(`type`in e))return yield*V(we(e));if(typeof e==`object`&&`type`in e&&!(Symbol.iterator in e)){let{type:t,props:n}=e;return t===ie?yield*Te(n):t===se?yield*Se(n):t===oe?yield*Ce(n):t===re?yield*xe(n):t===ae?yield*Me(n):typeof t==`string`?yield*Ee(t,n):typeof t==`function`?yield*De(t,n):yield*b.fail(new i({type:t,message:`Invalid Renderable type: expected string, FRAGMENT, or function, got ${typeof t}`}))}return null})}function we(e){let t=[];function n(e){if(N(e)||b.isEffect(e)){t.push(e);return}if(typeof e==`object`&&e&&Symbol.iterator in e&&!(`type`in e))for(let t of e)n(t);else t.push(e)}return n(e),t}function V(e){return b.gen(function*(){let t=[];for(let n of e)if(N(n)||b.isEffect(n)){let e=yield*H(P(n));t.push(...e)}else{let e=yield*B(n);e!==null&&(Array.isArray(e)?t.push(...e):t.push(e))}return t})}function Te(e){return b.gen(function*(){let t=`children`in e?e.children:void 0;return t===void 0?[]:yield*V(Array.isArray(t)?t:[t])})}function Ee(e,t){return b.gen(function*(){let n=document.createElement(e);yield*L(n,t);let r=`children`in t?t.children:void 0;if(r!==void 0){let e=Array.isArray(r)?r:[r];for(let t of e)if(N(t)||b.isEffect(t)){let e=yield*H(P(t));for(let t of e)n.appendChild(t)}else{let e=yield*B(t);if(e!==null)if(Array.isArray(e))for(let t of e)n.appendChild(t);else n.appendChild(e)}}return n})}function De(e,t){return b.gen(function*(){let i=e(t);if(N(i)||b.isEffect(i)){let e=yield*r,t=yield*k.fork(e.scope,x.sequential),a={...e,scope:t},o=yield*b.serviceOption(n),s=P(i);return D.isSome(o)&&(yield*o.value.register,s=M(s,A.zipWithIndex,A.flatMap(([e,t])=>t===0?A.fromEffect(b.as(o.value.settle,e)):A.make(e)))),yield*H(s).pipe(b.provideService(r,a),b.provideService(k.Scope,t))}return yield*B(i)})}function H(e){return b.gen(function*(){let t=yield*r,[n,i]=Oe(yield*F()),o=null,s=A.runForEach(e,e=>b.gen(function*(){o!==null&&(yield*k.close(o,S.void)),o=yield*k.fork(t.scope,x.sequential);let a={...t,scope:o};yield*U(n,i,e).pipe(b.provideService(r,a),b.provideService(k.Scope,o))})),c=yield*b.forkIn(s,t.scope),l=yield*b.serviceOption(a);return yield*M(C.await(c),b.flatMap(e=>S.isFailure(e)&&D.isSome(l)?l.value.reportError(e.cause):b.void),b.forkIn(t.scope)),[n,i]})}function Oe(e){return[document.createComment(l(e)),document.createComment(c(e))]}function U(e,t,n){return b.gen(function*(){let r=e.nextSibling,i=r!==null&&r!==t&&r.nextSibling===t;if(i&&r.nodeType===nt&&W(n)){let e=String(n);r.data!==e&&(r.data=e);return}if(i&&r.nodeType===X){let e=G(n);if(e!==void 0&&typeof e.type==`string`&&r.tagName.toLowerCase()===e.type.toLowerCase()){yield*ke(r,e);return}}K(e,t);let a=yield*B(n),o=e.parentNode;if(o!==null&&a!==null)if(Array.isArray(a))for(let e of a)o.insertBefore(e,t);else o.insertBefore(a,t)})}function W(e){return typeof e==`string`||typeof e==`number`||typeof e==`bigint`}function G(e){let t=le(e);if(t!==void 0)return t;if(typeof e==`object`&&e&&`type`in e&&!(Symbol.iterator in e)&&!N(e)&&!b.isEffect(e))return e}function ke(e,t){return b.gen(function*(){yield*L(e,t.props);let n=t.props.children,r=n===void 0?[]:Array.isArray(n)?n:[n];if(!(yield*Ae(e,r))){for(;e.firstChild!==null;)e.firstChild.remove();yield*je(e,r)}})}function Ae(e,t){return b.gen(function*(){let n=Array.from(e.childNodes);if(n.length!==t.length)return!1;for(let e=0;e<t.length;e++){let r=t[e],i=n[e];if(W(r)){if(i.nodeType!==nt)return!1}else{let e=G(r);if(e===void 0||typeof e.type!=`string`||i.nodeType!==X||i.tagName.toLowerCase()!==e.type.toLowerCase())return!1}}for(let e=0;e<t.length;e++){let r=t[e],i=n[e];if(W(r)){let e=String(r);i.data!==e&&(i.data=e)}else yield*ke(i,G(r))}return!0})}function je(e,t){return b.gen(function*(){for(let n of t)if(N(n)||b.isEffect(n)){let t=yield*H(P(n));for(let n of t)e.appendChild(n)}else{let t=yield*B(n);if(t!==null)if(Array.isArray(t))for(let n of t)e.appendChild(n);else e.appendChild(t)}})}function K(e,t){let n=e.nextSibling;for(;n!==null&&n!==t;){let e=n.nextSibling;n.remove(),n=e}}function Me(e){return b.gen(function*(){let t=yield*r,{of:n,by:i,render:o}=e,[s,c]=Oe(yield*F()),l=yield*k.fork(t.scope,x.sequential),u=(yield*ce.toSubscribable(n).pipe(b.provideService(k.Scope,l))).changes,d={records:w.empty(),order:[]},f=A.runForEach(u,e=>b.gen(function*(){d=yield*q(Array.from(e),i,o,d,l,c,t)})),p=yield*b.forkIn(f,l),m=yield*b.serviceOption(a);return yield*M(C.await(p),b.flatMap(e=>S.isFailure(e)&&D.isSome(m)?m.value.reportError(e.cause):b.void),b.forkIn(t.scope)),[s,c]})}function Ne(t,n){return b.gen(function*(){let r=[],i=T.empty();for(let a=0;a<t.length;a++){let o=n===void 0?t[a]:n(t[a],a);if(T.has(i,o))return yield*b.fail(new e({cause:o,message:`List.each: duplicate key ${Le(o)} in a single emission; keys must be unique (set a stable \`by\`).`}));i=T.add(i,o),r.push(o)}return r})}function q(e,t,n,r,i,a,o){return b.gen(function*(){let s=yield*Ne(e,t),c=w.empty();r.order.forEach((e,t)=>{c=w.set(c,e,t)});let l=[],u=[];for(let t=0;t<e.length;t++){let a=s[t],d=w.get(r.records,a);if(D.isSome(d))l.push(d.value),u.push(D.getOrElse(w.get(c,a),()=>-1));else{let r=yield*Pe(a,e[t],t,n,i,o);l.push(r),u.push(-1)}}let d=T.empty();for(let e of s)d=T.add(d,e);for(let e of r.order)if(!T.has(d,e)){let t=w.get(r.records,e);D.isSome(t)&&(yield*k.close(t.value.scope,S.void),Ie(t.value.startMarker,t.value.endMarker))}let f=Re(u),p=a.parentNode;if(p!==null)for(let e=l.length-1;e>=0;e--){let t=l[e];if(u[e]!==-1&&f.has(e))continue;let n=e+1<l.length?l[e+1].startMarker:a,r=u[e]===-1?[t.startMarker,...t.nodes,t.endMarker]:Fe(t.startMarker,t.endMarker);for(let e of r)p.insertBefore(e,n)}let m=w.empty();for(let e of l)m=w.set(m,e.key,e);return{records:m,order:s}})}function Pe(e,t,n,i,a,o){return b.gen(function*(){let s=yield*k.fork(a,x.sequential),c={...o,scope:s},l=yield*F(),u=document.createComment(g(l)),d=document.createComment(m(l)),f=yield*B(i(t,n)).pipe(b.provideService(r,c),b.provideService(k.Scope,s));return{key:e,scope:s,startMarker:u,endMarker:d,nodes:f===null?[]:Array.isArray(f)?f:[f]}})}function Fe(e,t){let n=[],r=e;for(;r!==null&&(n.push(r),r!==t);)r=r.nextSibling;return n}function Ie(e,t){let n=e;for(;n!==null;){let e=n.nextSibling;if(n.remove(),n===t)break;n=e}}function Le(e){if(typeof e==`string`)return JSON.stringify(e);if(typeof e==`object`&&e)try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}return String(e)}function Re(e){let t=e.length,n=[],r=Array.from({length:t},()=>-1);for(let i=0;i<t;i++){let t=e[i];if(t===-1)continue;let a=0,o=n.length;for(;a<o;){let r=a+o>>1;e[n[r]]<t?a=r+1:o=r}a>0&&(r[i]=n[a-1]),n[a]=i}let i=new Set,a=n.length>0?n[n.length-1]:-1;for(;a!==-1;)i.add(a),a=r[a];return i}function ze(e,t){return b.gen(function*(){let n=yield*b.context(),i=ee.make(E.succeedContext(n)),a=yield*k.make(),o={runtime:i,scope:a,streamIdCounter:{current:0}},s=b.zipRight(k.close(a,S.void),b.promise(()=>i.dispose()));t.innerHTML=``;let c=yield*B(e).pipe(b.provideService(r,o),b.provideService(k.Scope,a),b.tapError(()=>s));if(c!==null)if(Array.isArray(c))for(let e of c)t.appendChild(e);else t.appendChild(c);let l=!1;return{unmount:()=>b.gen(function*(){l||(l=!0,yield*k.close(a,S.void),yield*b.promise(()=>i.dispose()))})}})}function Be(e,t){return b.gen(function*(){let n=yield*b.context(),i=ee.make(E.succeedContext(n)),a=yield*k.make(),o=yield*He(),s={runtime:i,scope:a,streamIdCounter:{current:0},hydrationReady:o};rt(t,s.streamIdCounter);let c=b.zipRight(k.close(a,S.void),b.promise(()=>i.dispose()));yield*J(e,t.firstChild,`root`).pipe(b.provideService(r,s),b.provideService(k.Scope,a),b.tapError(()=>c)),yield*o.settle,yield*o.awaitReady;let l=!1;return{unmount:()=>b.gen(function*(){l||(l=!0,yield*k.close(a,S.void),yield*b.promise(()=>i.dispose()))})}})}function J(e,t,n){return b.gen(function*(){if(typeof e==`string`||typeof e==`number`||typeof e==`bigint`)return yield*Ve(String(e),t,n);if(typeof e==`boolean`||e==null)return t;if(N(e)||b.isEffect(e)){let r=le(e);if(r!==void 0)return yield*J(r,t,n);if(b.isEffect(e)){let r=b.runSyncExit(e);if(S.isSuccess(r))return yield*J(r.value,t,n)}return yield*We(P(e),t,n)}if(typeof e==`object`&&Symbol.iterator in e&&!(`type`in e)){let r=t,i=0;for(let t of e)r=yield*J(t,r,`${n}[${i}]`),i++;return r}if(typeof e==`object`&&`type`in e&&!(Symbol.iterator in e)){let{type:r,props:a}=e;if(r===ie)return yield*Y(a,t,n);if(r===se){if(t!==null&&t.nodeType===Z){let e=_(t);if(e!==null&&e.kind===`start`)return yield*Ke(t,n)}return yield*Y(a,t,n)}return r===re?yield*Je(a,t,n):r===oe?yield*Xe(a,t,n):r===ae?yield*Qe(a,t,n):typeof r==`string`?yield*Ze(r,a,t,n):typeof r==`function`?yield*J(r(a),t,n):yield*b.fail(new i({type:r,message:`Invalid Renderable type during hydration at ${n}: expected string, FRAGMENT, or function, got ${typeof r}`}))}return t})}function Ve(e,t,n){return b.gen(function*(){if(e.length===0)return t;if(t===null||t.nodeType!==nt)return yield*$(`text ${JSON.stringify(e)}`,Q(t),n);let r=t;return r.data.startsWith(e)?r.data.length>e.length?r.splitText(e.length):r.nextSibling:yield*$(`text ${JSON.stringify(e)}`,Q(t),n)})}function He(){return b.gen(function*(){let e=yield*O.make(1),t=yield*y.make(),n=M(O.updateAndGet(e,e=>e-1),b.flatMap(e=>e<=0?b.asVoid(y.succeed(t,void 0)):b.void));return{register:O.update(e,e=>e+1),settle:n,awaitReady:y.await(t)}})}function Ue(e){let t=!1;return b.suspend(()=>t||e===void 0?b.void:(t=!0,e.settle))}function We(e,t,n){return b.gen(function*(){let i=yield*r;if(t===null||t.nodeType!==Z)return yield*$(`reactive region start marker`,Q(t),n);let o=t,s=d(o);if(s===null||s.kind!==`start`)return yield*$(`reactive region start marker`,Q(t),n);let c=it(o);if(c===null)return yield*$(`reactive region end marker`,`unterminated region starting at ${JSON.stringify(o.data)}`,n);let l=Ue(i.hydrationReady),u=!0,f=null,p=A.runForEach(e,e=>b.gen(function*(){f!==null&&(yield*k.close(f,S.void)),f=yield*k.fork(i.scope,x.sequential);let t={...i,scope:f};yield*b.gen(function*(){u?(u=!1,yield*Ge(e,o,c,n),yield*l):yield*U(o,c,e)}).pipe(b.provideService(r,t),b.provideService(k.Scope,f))})).pipe(b.ensuring(l));i.hydrationReady!==void 0&&(yield*i.hydrationReady.register);let m=yield*b.forkIn(p,i.scope),h=yield*b.serviceOption(a);return yield*M(C.await(m),b.flatMap(e=>S.isFailure(e)&&D.isSome(h)?h.value.reportError(e.cause):b.void),b.forkIn(i.scope)),c.nextSibling})}function Ge(e,t,n,r){return b.gen(function*(){let i=yield*J(e,t.nextSibling,`${r}<resume>`).pipe(b.map(e=>e===n?null:`adopted content did not align with the end marker`),b.catchTag(`HydrationMismatchError`,e=>b.succeed(`expected ${e.expected}, found ${e.actual} at ${e.path}`)));i!==null&&(console.error(`[weft] hydrate: reactive region at ${r} diverged from server output (${i}); patching.`),yield*U(t,n,e))})}function Ke(e,t){return b.gen(function*(){let n=qe(e);if(n===null)return yield*$(`substituted suspense end marker`,`unterminated region starting at ${JSON.stringify(e.data)}`,t);let r=null;for(let t=e.nextSibling;t!==null&&t!==n;t=t.nextSibling)if(t.nodeType===X&&t.tagName===`SCRIPT`&&t.getAttribute(`type`)===`application/json`&&t.hasAttribute(`data-weft-suspense-failure`)){r=t;break}let i=null;if(r!==null){let e=r.textContent??``;i=yield*b.try({try:()=>JSON.parse(e),catch:e=>e}).pipe(b.catchAll(()=>b.succeed(null)))}if(typeof i!=`object`||!i||!(`error`in i))return console.error(`[weft] hydrate: substituted suspense region at ${t} has no decodable failure sentinel; leaving its static content.`),n.nextSibling;let o=yield*b.serviceOption(a);return D.isNone(o)?(console.error(`[weft] hydrate: substituted suspense region at ${t} has no enclosing Boundary to replay its failure to; leaving its static content.`,i.error),n.nextSibling):(yield*o.value.reportError(v.fail(i.error)),n.nextSibling)})}function qe(e){let t=0,n=e.nextSibling;for(;n!==null;){if(n.nodeType===Z){let e=_(n);if(e!==null)if(e.kind===`start`)t++;else if(t===0)return n;else t--}n=n.nextSibling}return null}function Je(e,t,n){return b.gen(function*(){if(t===null||t.nodeType!==X||t.tagName!==`SCRIPT`||t.getAttribute(`type`)!==`application/json`||!t.hasAttribute(`data-weft-boundary-failure`)){let i=yield*r,s=yield*b.serviceOption(a),c=yield*k.fork(i.scope,x.sequential),l={...i,scope:c},d=yield*y.make(),f=yield*Y(e,t,n).pipe(b.provideService(a,{reportError:e=>y.fail(d,e).pipe(b.asVoid)}),b.provideService(r,l),b.provideService(k.Scope,c)),p=t?.parentNode??null;if(t===null||t===f||p===null)return console.error(`[weft] hydrate: boundary at ${n} adopted an empty extent; live failure recovery is not installed for it.`),f;let m=I(),h=document.createComment(o(m)),g=document.createComment(u(m));return p.insertBefore(h,t),f===null?p.appendChild(g):p.insertBefore(g,f),yield*b.forkIn(be(e,d,c,s,h,g),i.scope),f}let i=t,s=i.textContent??``,c=yield*b.gen(function*(){let t=yield*b.try({try:()=>JSON.parse(s),catch:e=>e}),n=p(e.children)[t.index];if(n===void 0)return null;let r=yield*te.decodeUnknown(n.errorSchema)(t.error);return e.match(v.fail(r))}).pipe(b.catchAll(e=>(console.error(`[weft] hydrate: boundary failure payload at ${n} failed to decode; cannot replay.`,e),b.succeed(null))));if(c===null)return yield*$(`replayable boundary failure`,`undecodable failure payload`,n);let l=yield*J(c,i.nextSibling,n);return i.remove(),l})}function Ye(e,t,n,r){return b.gen(function*(){let i=yield*j.make(n),a=yield*j.make(!1),o=yield*j.make(D.none());return{value:i,refetch:D.match(r,{onNone:()=>b.void,onSome:n=>b.gen(function*(){(yield*j.get(a))||(yield*j.set(a,!0),yield*b.gen(function*(){let r=yield*b.exit(n.call(e,t()));S.isSuccess(r)?(yield*j.set(i,r.value),yield*j.set(o,D.none())):yield*j.set(o,D.some(v.squash(r.cause)))}).pipe(b.ensuring(j.set(a,!1))))})}),pending:a,error:o}})}function Xe(e,t,n){return b.gen(function*(){if(t===null||t.nodeType!==X||t.tagName!==`SCRIPT`||t.getAttribute(`type`)!==`application/json`)return yield*$(`server boundary payload <script type="application/json">`,Q(t),n);if(t.hasAttribute(`data-weft-boundary-failure`))return yield*$(`server boundary success payload <script type="application/json">`,`boundary failure payload`,n);let r=t,i=r.textContent??``,a=yield*b.try({try:()=>JSON.parse(i),catch:e=>e}).pipe(b.flatMap(t=>te.decodeUnknown(e.successSchema)(t)),b.catchAll(e=>(console.error(`[weft] hydrate: server boundary payload at ${n} failed to decode; cannot replay.`,e),$(`decodable server boundary payload`,`undecodable payload`,n)))),o=yield*b.serviceOption(ne),s=yield*Ye(e.tag,e.payload,a,o),c=yield*J(e.render(s),r.nextSibling,n);return r.remove(),c})}function Ze(e,t,n,r){return b.gen(function*(){if(n===null||n.nodeType!==X)return yield*$(`<${e}>`,Q(n),r);let i=n;return i.tagName.toLowerCase()===e.toLowerCase()?(yield*L(i,t),yield*Y(t,i.firstChild,`${r} > ${e}`),i.nextSibling):yield*$(`<${e}>`,Q(n),r)})}function Y(e,t,n){return b.gen(function*(){let r=`children`in e?e.children:void 0;if(r===void 0)return t;let i=Array.isArray(r)?r:[r],a=t,o=0;for(let e of i)a=yield*J(e,a,`${n}[${o}]`),o++;return a})}function Qe(e,t,n){return b.gen(function*(){let i=yield*r,{of:o,by:s,render:c}=e;if(t===null||t.nodeType!==Z)return yield*$(`list region start marker`,Q(t),n);let l=t,u=d(l);if(u===null||u.kind!==`start`)return yield*$(`list region start marker`,Q(t),n);let f=it(l);if(f===null)return yield*$(`list region end marker`,`unterminated region starting at ${JSON.stringify(l.data)}`,n);let p=$e(l,f),m=yield*k.fork(i.scope,x.sequential),h=(yield*ce.toSubscribable(o).pipe(b.provideService(k.Scope,m))).changes,g={records:w.empty(),order:[]},_=!0,v=Ue(i.hydrationReady),y=A.runForEach(h,e=>b.gen(function*(){let t=Array.from(e);_?(_=!1,g=yield*et(t,s,c,p,m,l,f,i,n),yield*v):g=yield*q(t,s,c,g,m,f,i)})).pipe(b.ensuring(v));i.hydrationReady!==void 0&&(yield*i.hydrationReady.register);let T=yield*b.forkIn(y,m),E=yield*b.serviceOption(a);return yield*M(C.await(T),b.flatMap(e=>S.isFailure(e)&&D.isSome(E)?E.value.reportError(e.cause):b.void),b.forkIn(i.scope)),f.nextSibling})}function $e(e,t){let n=[],r=e.nextSibling;for(;r!==null&&r!==t;){let e=r.nodeType===Z?s(r):null;if(e===null||e.kind!==`start`){r=r.nextSibling;continue}let i=r,a=[],o=0,c=null,l=i.nextSibling;for(;l!==null&&l!==t;){if(l.nodeType===Z){let e=s(l);if(e!==null)if(e.kind===`start`)o++;else if(o===0){c=l;break}else o--}a.push(l),l=l.nextSibling}if(c===null)break;n.push({startMarker:i,endMarker:c,nodes:a}),r=c.nextSibling}return n}function et(e,t,n,r,i,a,o,s,c){return b.gen(function*(){let l=yield*Ne(e,t);if(l.length!==r.length)return console.error(`[weft] hydrate: list region at ${c} had ${r.length} server item(s) but the first emission has ${l.length}; rebuilding.`),K(a,o),yield*q(e,t,n,{records:w.empty(),order:[]},i,o,s);let u=[];for(let t=0;t<e.length;t++){let a=yield*tt(l[t],e[t],t,n,r[t],i,s,c);u.push(a)}let d=w.empty();for(let e of u)d=w.set(d,e.key,e);return{records:d,order:l}})}function tt(e,t,n,i,a,o,s,c){return b.gen(function*(){let l=yield*k.fork(o,x.sequential),u={...s,scope:l},d=i(t,n),f=yield*J(d,a.startMarker.nextSibling,`${c}<item>`).pipe(b.provideService(r,u),b.provideService(k.Scope,l),b.map(e=>e===a.endMarker?null:`adopted item content did not align with its end marker`),b.catchTag(`HydrationMismatchError`,e=>b.succeed(`expected ${e.expected}, found ${e.actual} at ${e.path}`)));if(f===null)return{key:e,scope:l,startMarker:a.startMarker,endMarker:a.endMarker,nodes:a.nodes};console.error(`[weft] hydrate: list item at ${c} diverged from server output (${f}); patching.`),yield*k.close(l,S.void);let p=yield*k.fork(o,x.sequential),m={...s,scope:p};K(a.startMarker,a.endMarker);let h=yield*B(d).pipe(b.provideService(r,m),b.provideService(k.Scope,p)),g=h===null?[]:Array.isArray(h)?h:[h],_=a.endMarker.parentNode;if(_!==null)for(let e of g)_.insertBefore(e,a.endMarker);return{key:e,scope:p,startMarker:a.startMarker,endMarker:a.endMarker,nodes:g}})}const X=1,nt=3,Z=8;function rt(e,t){let n=document.createTreeWalker(e,128),r=t.current;for(let e=n.nextNode();e!==null;e=n.nextNode()){let t=e,n=d(t)??_(t)??s(t);n!==null&&n.id>r&&(r=n.id)}t.current=r}function it(e){let t=0,n=e.nextSibling;for(;n!==null;){if(n.nodeType===8){let e=d(n);if(e!==null)if(e.kind===`start`)t++;else if(t===0)return n;else t--}n=n.nextSibling}return null}function Q(e){if(e===null)return`end of children`;switch(e.nodeType){case 1:return`<${e.tagName.toLowerCase()}>`;case 3:return`text ${JSON.stringify(e.data)}`;case 8:return`comment ${JSON.stringify(e.data)}`;default:return`node(type ${e.nodeType})`}}function $(e,n,r){return b.fail(new t({expected:e,actual:n,path:r}))}export{Be as hydrate,ze as mount};
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Effect, Stream } from "effect";
|
|
1
|
+
import { Cause, Context, Effect, Option, Scope, Stream } from "effect";
|
|
2
2
|
import { AppRpcClientTag, Renderable } from "@weftui/core";
|
|
3
3
|
import { Renderable as Renderable$1 } from "@weftui/core/types";
|
|
4
4
|
|
|
@@ -47,4 +47,89 @@ declare const renderToString: (node: Renderable$1) => Effect.Effect<string, Erro
|
|
|
47
47
|
*/
|
|
48
48
|
declare const renderToStringHydratable: (node: Renderable$1) => Effect.Effect<string, Error, AppRpcClientTag>;
|
|
49
49
|
//#endregion
|
|
50
|
-
|
|
50
|
+
//#region src/server/streaming-shell.d.ts
|
|
51
|
+
/**
|
|
52
|
+
* The result of {@link renderToHydratableShell}: the fully buffered main
|
|
53
|
+
* document walk plus the trailing Suspense patch stream.
|
|
54
|
+
*/
|
|
55
|
+
interface HydratableShell {
|
|
56
|
+
/**
|
|
57
|
+
* The fully buffered main walk — byte-identical to the `mainStream` portion
|
|
58
|
+
* of `renderToStreamHydratable` for the same tree: reactive-region markers,
|
|
59
|
+
* Suspense fallbacks inline with their markers, resolved (blocking)
|
|
60
|
+
* `Boundary.rpc` regions, and failure-boundary fallbacks with payloads.
|
|
61
|
+
*/
|
|
62
|
+
readonly shell: string;
|
|
63
|
+
/**
|
|
64
|
+
* The Suspense patch queue as a stream. Never fails (resolution fibers
|
|
65
|
+
* handle their own errors — see {@link SuspenseFailureHandlerTag}); completes
|
|
66
|
+
* once all pending boundaries have resolved, or immediately if the tree has
|
|
67
|
+
* no `Boundary.suspend`.
|
|
68
|
+
*/
|
|
69
|
+
readonly patches: Stream.Stream<string>;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Shell-split variant of `renderToStreamHydratable` (spec:
|
|
73
|
+
* `streaming-shell.specs.md`). Buffers the main document walk into `shell` so
|
|
74
|
+
* an HTTP consumer can decide status/headers before flushing any bytes, then
|
|
75
|
+
* streams Suspense patches separately.
|
|
76
|
+
*
|
|
77
|
+
* Errors raised during the main walk fail this Effect — nothing has been
|
|
78
|
+
* handed to the consumer yet, so the caller may respond with a different
|
|
79
|
+
* document and a real status (AC-SH2).
|
|
80
|
+
*
|
|
81
|
+
* Suspense resolution fibers are forked into the ambient `Scope.Scope`: keep
|
|
82
|
+
* it open until `patches` completes; closing it interrupts pending fibers
|
|
83
|
+
* (consumer disconnect, AC-SH6).
|
|
84
|
+
*/
|
|
85
|
+
declare const renderToHydratableShell: (node: Renderable) => Effect.Effect<HydratableShell, Error, AppRpcClientTag | Scope.Scope>;
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region src/server/suspense-failure-handler.d.ts
|
|
88
|
+
/**
|
|
89
|
+
* Substitute patch content returned by a {@link SuspenseFailureHandler} for an
|
|
90
|
+
* otherwise-unhandled Suspense resolution failure.
|
|
91
|
+
*/
|
|
92
|
+
interface SuspenseFailureSubstitute {
|
|
93
|
+
/** Rendered (hydratable pass) as the patch content for the failed boundary. */
|
|
94
|
+
readonly content: Renderable;
|
|
95
|
+
/**
|
|
96
|
+
* When `true`, the patch script also injects
|
|
97
|
+
* `<meta name="robots" content="noindex">` into `document.head` before
|
|
98
|
+
* performing the swap (the head has long been flushed; DOM injection is the
|
|
99
|
+
* only route — Googlebot's soft-404 pattern).
|
|
100
|
+
*/
|
|
101
|
+
readonly markNoindex: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Optional already-Schema-encoded, JSON-serializable failure value. When
|
|
104
|
+
* present, the patch is emitted in the failure-replay variant (AC-FH7):
|
|
105
|
+
* the suspense markers are retained and a
|
|
106
|
+
* `<script type="application/json" data-weft-suspense-failure>` sentinel
|
|
107
|
+
* carrying `{"error":<this value>}` is prepended to the swapped-in content,
|
|
108
|
+
* so the client `hydrate` can replay the failure to its nearest boundary
|
|
109
|
+
* (`hydrate.specs.md` AC-H14).
|
|
110
|
+
*/
|
|
111
|
+
readonly failureReplay?: unknown;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Ambient, optional seam consulted by the Suspense resolution fiber when a
|
|
115
|
+
* cause escapes the suspended children unhandled (no failure `Boundary`
|
|
116
|
+
* inside the children matched it). Returning `Option.some` substitutes the
|
|
117
|
+
* patch content for that boundary; `Option.none` (or an absent service)
|
|
118
|
+
* keeps the default behaviour — the failure is swallowed, no patch is
|
|
119
|
+
* emitted, and the fallback persists. Spec: `streaming-shell.specs.md`
|
|
120
|
+
* (AC-FH1 … AC-FH6).
|
|
121
|
+
*/
|
|
122
|
+
interface SuspenseFailureHandler {
|
|
123
|
+
/** Decide a substitute for an unhandled Suspense resolution failure. */
|
|
124
|
+
readonly handle: (cause: Cause.Cause<unknown>) => Option.Option<SuspenseFailureSubstitute>;
|
|
125
|
+
}
|
|
126
|
+
declare const SuspenseFailureHandlerTag_base: Context.TagClass<SuspenseFailureHandlerTag, "@weftui/dom/SuspenseFailureHandler", SuspenseFailureHandler>;
|
|
127
|
+
/**
|
|
128
|
+
* `Context.Tag` for the {@link SuspenseFailureHandler} seam. Read via
|
|
129
|
+
* `Effect.serviceOption` inside the Suspense resolution fiber, so providing it
|
|
130
|
+
* is always optional. Lives in `@weftui/dom` (like `AppRpcClientTag`) so dom
|
|
131
|
+
* never imports its consumers.
|
|
132
|
+
*/
|
|
133
|
+
declare class SuspenseFailureHandlerTag extends SuspenseFailureHandlerTag_base {}
|
|
134
|
+
//#endregion
|
|
135
|
+
export { type HydratableShell, type SuspenseFailureHandler, SuspenseFailureHandlerTag, type SuspenseFailureSubstitute, renderToHydratableShell, renderToStream, renderToStreamHydratable, renderToString, renderToStringHydratable };
|
package/dist/server/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"../data-Bk62ePeP.js";import{
|
|
1
|
+
import{s as e}from"../data-Bk62ePeP.js";import{d as t,f as n,m as r,n as i,o as a,p as o,r as s,s as c,t as l}from"../boundary-replay-BR26_puM.js";import{Cause as u,Context as d,Effect as f,ExecutionStrategy as p,Exit as m,Option as h,Queue as g,Ref as _,Schema as v,Scope as y,Stream as b,Subscribable as x}from"effect";import{AppRpcClientTag as ee,FAILURE_BOUNDARY as S,FRAGMENT as C,LIST as w,SERVER_BOUNDARY as T,SUSPENSE_BOUNDARY as E,Source as D,getElementDescriptor as O,isStream as k,toStream as A}from"@weftui/core";function te(e){if(e.length<=2||!e.startsWith(`on`))return!1;let t=e[2];return t!==void 0&&t>=`a`&&t<=`z`}const j=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`param`,`source`,`track`,`wbr`]),M={'"':`"`,"&":`&`,"'":`'`,"<":`<`,">":`>`};function N(e){return e.replace(/["'&<>]/g,e=>M[e]??e)}const ne=new Set([38,60,62,8232,8233]);function P(e){let t=JSON.stringify(e),n=``;for(let e=0;e<t.length;e++){let r=t.charCodeAt(e);ne.has(r)?n+=`\\u${r.toString(16).padStart(4,`0`)}`:n+=t[e]}return n}function re(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function F(e){return f.gen(function*(){let t=``;for(let[n,r]of Object.entries(e))if(!(n===`children`||n===`ref`||te(n))){if(n===`style`){t+=yield*R(r);continue}t+=yield*L(n,r)}return t})}function I(e){return k(e)||f.isEffect(e)?A(e).pipe(b.runHead,f.map(h.getOrElse(()=>void 0))):f.succeed(e)}function L(e,t){return f.gen(function*(){let n=yield*I(t);return n==null?``:typeof n==`boolean`?n?` ${e}=""`:``:` ${e}="${N(String(n))}"`})}function R(e){return f.gen(function*(){let t=yield*I(e);if(t==null)return``;if(typeof t==`string`)return t===``?``:` style="${N(t)}"`;if(typeof t==`object`){let e=[];for(let[n,r]of Object.entries(t)){let t=yield*I(r);t!=null&&e.push(`${re(n)}: ${String(t)}`)}return e.length===0?``:` style="${N(e.join(`; `))}"`}return``})}var z=class extends d.Tag(`@weftui/dom/SuspenseFailureHandler`)(){};function B(e,t,n=!1,i){let a=r(e),c=o(e),l=n?`var m=document.createElement("meta");m.setAttribute("name","robots");m.setAttribute("content","noindex");document.head.appendChild(m);`:``,u=i!==void 0,d=u?`<script type="application/json" ${s}>`+P({error:i})+`<\/script>`+t:t,f=u?``:`p.removeChild(s);p.removeChild(e);`;return`<template id="ef-s-${e}">${d}</template><script>(function(){`+l+`var w=document.createTreeWalker(document,128),s,e;while(w.nextNode()){var d=w.currentNode.data;if(d==="${a}")s=w.currentNode;if(d==="${c}"){e=w.currentNode;break;}}if(!s||!e)return;var p=s.parentNode,c=s.nextSibling,n;while(c&&c!==e){n=c.nextSibling;p.removeChild(c);c=n;}var t=document.getElementById("ef-s-${e}");p.insertBefore(t.content,e);`+f+`t.remove();document.currentScript.remove();})();<\/script>`}function V(e,t,n){return b.unwrap(f.gen(function*(){let i=++t.idCounter.current;yield*_.update(t.pendingCount,e=>e+1);let a=e.children===void 0?null:(Array.isArray(e.children),e.children),s=f.gen(function*(){let e=yield*b.mkString(n(a));yield*g.offer(t.patchQueue,h.some(B(i,e)))}).pipe(f.catchAllCause(e=>u.isInterruptedOnly(e)?f.failCause(e):f.gen(function*(){let r=yield*f.serviceOption(z);if(h.isNone(r))return;let a=r.value.handle(e);if(h.isNone(a))return;let o=yield*b.mkString(n(a.value.content));yield*g.offer(t.patchQueue,h.some(B(i,o,a.value.markNoindex,a.value.failureReplay)))})),f.ensuring(_.updateAndGet(t.pendingCount,e=>e-1).pipe(f.flatMap(e=>e<=0?g.offer(t.patchQueue,h.none()).pipe(f.asVoid):f.void))),f.ignore);yield*f.forkIn(s,t.scope);let c=`<!--${r(i)}-->`,l=`<!--${o(i)}-->`,d=e.fallback??null;return b.make(c).pipe(b.concat(n(d)),b.concat(b.make(l)))}))}function H(e,t,n){let r=e.children.length===0?null:e.children.length===1?e.children[0]:e.children;return b.unwrapScoped(f.gen(function*(){let a=yield*b.mkString(n(r)).pipe(f.catchAllCause(r=>f.gen(function*(){let a=e.match(r);if(a===null)return yield*f.failCause(r);let o=yield*b.mkString(n(a));if(t===null)return o;let s=yield*_.getAndSet(t,h.none());return h.isNone(s)?o:`<script type="application/json" ${l}>${P({index:i(e.children).indexOf(s.value.owner),error:s.value.encoded})}<\/script>`+o})));return b.make(a)}))}function ie(e,t,n){if(t===null)return f.failCause(n);let r=u.failureOption(n);return h.isNone(r)?f.failCause(n):v.encode(e.errorSchema)(r.value).pipe(f.flatMap(n=>_.set(t,h.some({owner:e,encoded:n}))),f.matchCauseEffect({onFailure:()=>f.failCause(n),onSuccess:()=>f.failCause(n)}))}function U(e){return{value:x.make({get:f.succeed(e),changes:b.make(e)}),refetch:f.void,pending:x.make({get:f.succeed(!1),changes:b.make(!1)}),error:x.make({get:f.succeed(h.none()),changes:b.make(h.none())})}}function W(e,t,n,r){return b.unwrap(f.gen(function*(){let i=yield*(yield*ee).call(e.tag,e.payload()).pipe(f.catchAllCause(t=>ie(e,n,t))),a=r(e.render(U(i)));if(!t)return a;let o=`<script type="application/json">${P(yield*v.encode(e.successSchema)(i))}<\/script>`;return b.make(o).pipe(b.concat(a))}))}function G(e){return f.scoped(D.toSubscribable(e).pipe(f.flatMap(e=>e.get),f.map(e=>Array.from(e)),f.catchTag(`NoPropValue`,()=>f.succeed([]))))}function K(t,n){if(t==null||typeof t==`boolean`)return b.empty;if(typeof t==`string`||typeof t==`number`||typeof t==`bigint`)return b.make(N(String(t)));if(k(t)||f.isEffect(t)){let e=O(t);if(e!==void 0)return K(e,n);if(f.isEffect(t)){let e=f.runSyncExit(t);if(m.isSuccess(e))return K(e.value,n)}return A(t).pipe(b.runHead,f.map(h.match({onNone:()=>b.empty,onSome:e=>K(e,n)})),b.unwrap)}if(typeof t==`object`&&Symbol.iterator in t&&!(`type`in t))return b.flatMap(b.fromIterable(t),e=>K(e,n));if(typeof t==`object`&&`type`in t&&!(Symbol.iterator in t)){let{type:e,props:r}=t;if(e===C)return J(r,n);if(e===E){let e=r;return n===null?K(e.fallback??null,null):V(e,n,e=>K(e,n))}if(e===S)return H(r,null,e=>K(e,n));if(e===T)return W(r,!1,null,e=>K(e,n));if(e===w)return q(r,n);if(typeof e==`string`){let t=b.fromEffect(F(r).pipe(f.map(t=>`<${e}${t}>`)));return j.has(e)?t:t.pipe(b.concat(J(r,n)),b.concat(b.make(`</${e}>`)))}if(typeof e==`function`)return K(e(r),n)}return b.fail(new e({type:t.type,message:`Invalid Renderable type: expected string, FRAGMENT, or function, got ${typeof t.type}`}))}function q(e,t){return b.unwrap(f.gen(function*(){let n=yield*G(e.of),r=b.empty;return n.forEach((n,i)=>{r=r.pipe(b.concat(K(e.render(n,i),t)))}),r}))}function J(e,t){let n=`children`in e?e.children:void 0;if(n==null)return b.empty;let r=Array.isArray(n)?n:[n];return b.flatMap(b.fromIterable(r),e=>K(e,t))}function Y(r,i,a){if(r==null||typeof r==`boolean`)return b.empty;if(typeof r==`string`||typeof r==`number`||typeof r==`bigint`)return b.make(N(String(r)));if(k(r)||f.isEffect(r)){let e=O(r);if(e!==void 0)return Y(e,i,a);if(f.isEffect(r)){let e=f.runSyncExit(r);if(m.isSuccess(e))return Y(e.value,i,a)}return A(r).pipe(b.runHead,f.map(e=>{let r=++i.current,o=h.match(e,{onNone:()=>b.empty,onSome:e=>Y(e,i,a)});return b.make(`<!--${n(r)}-->`).pipe(b.concat(o),b.concat(b.make(`<!--${t(r)}-->`)))}),b.unwrap)}if(typeof r==`object`&&Symbol.iterator in r&&!(`type`in r))return b.flatMap(b.fromIterable(r),e=>Y(e,i,a));if(typeof r==`object`&&`type`in r&&!(Symbol.iterator in r)){let{type:e,props:t}=r;if(e===C)return X(t,i,a);if(e===E){let e=t;return a===null?Y(e.fallback??null,i,null):V(e,a,e=>Y(e,i,a))}if(e===S)return H(t,a?.failureCollector??null,e=>Y(e,i,a));if(e===T)return W(t,!0,a?.failureCollector??null,e=>Y(e,i,a));if(e===w)return ae(t,i,a);if(typeof e==`string`){let n=b.fromEffect(F(t).pipe(f.map(t=>`<${e}${t}>`)));return j.has(e)?n:n.pipe(b.concat(X(t,i,a)),b.concat(b.make(`</${e}>`)))}if(typeof e==`function`)return Y(e(t),i,a)}return b.fail(new e({type:r.type,message:`Invalid Renderable type: expected string, FRAGMENT, or function, got ${typeof r.type}`}))}function ae(e,r,i){return b.unwrap(f.gen(function*(){let o=++r.current,s=yield*G(e.of),l=b.empty;return s.forEach((t,n)=>{let o=++r.current;l=l.pipe(b.concat(b.make(`<!--${c(o)}-->`)),b.concat(Y(e.render(t,n),r,i)),b.concat(b.make(`<!--${a(o)}-->`)))}),b.make(`<!--${n(o)}-->`).pipe(b.concat(l),b.concat(b.make(`<!--${t(o)}-->`)))}))}function X(e,t,n){let r=`children`in e?e.children:void 0;if(r==null)return b.empty;let i=Array.isArray(r)?r:[r];return b.flatMap(b.fromIterable(i),e=>Y(e,t,n))}const oe=e=>K(e,null),se=e=>b.unwrapScoped(f.gen(function*(){let t=yield*g.unbounded(),n=yield*_.make(0),r=K(e,{patchQueue:t,pendingCount:n,idCounter:{current:0},scope:yield*f.scope,failureCollector:null}).pipe(b.ensuring(_.get(n).pipe(f.flatMap(e=>e===0?g.offer(t,h.none()).pipe(f.asVoid):f.void))));return b.concat(r,Z(t))})),Z=e=>b.fromQueue(e).pipe(b.takeWhile(h.isSome),b.map(e=>e.value)),Q=(e,t)=>f.gen(function*(){let n=yield*g.unbounded(),r=yield*_.make(0);return{mainStream:Y(e,{current:0},{patchQueue:n,pendingCount:r,idCounter:{current:0},scope:t,failureCollector:yield*_.make(h.none())}).pipe(b.ensuring(_.get(r).pipe(f.flatMap(e=>e===0?g.offer(n,h.none()).pipe(f.asVoid):f.void)))),patches:Z(n)}}),$=e=>b.unwrapScoped(f.gen(function*(){let{mainStream:t,patches:n}=yield*Q(e,yield*f.scope);return b.concat(t,n)})),ce=e=>oe(e).pipe(b.mkString),le=e=>$(e).pipe(b.mkString),ue=e=>f.gen(function*(){let t=yield*f.scope,n=yield*y.fork(t,p.sequential),{mainStream:r,patches:i}=yield*Q(e,n);return{shell:yield*b.mkString(r).pipe(f.onError(e=>y.close(n,m.failCause(e)))),patches:i}});export{z as SuspenseFailureHandlerTag,ue as renderToHydratableShell,se as renderToStream,$ as renderToStreamHydratable,ce as renderToString,le as renderToStringHydratable};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weftui/dom",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "Client-side DOM renderer for Weft",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Stef van Wijchen",
|
|
@@ -30,17 +30,17 @@
|
|
|
30
30
|
"access": "public"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@weftui/core": "0.
|
|
33
|
+
"@weftui/core": "0.22.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@effect/rpc": "^0.75.1",
|
|
37
37
|
"@types/jsdom": "^28.0.3",
|
|
38
|
-
"@types/node": "^25.9.
|
|
39
|
-
"effect": "^3.21.
|
|
38
|
+
"@types/node": "^25.9.2",
|
|
39
|
+
"effect": "^3.21.3",
|
|
40
40
|
"jsdom": "^29.1.1",
|
|
41
|
-
"tsx": "^4.22.
|
|
41
|
+
"tsx": "^4.22.4",
|
|
42
42
|
"typescript": "^6.0.3",
|
|
43
|
-
"vite-plus": "
|
|
43
|
+
"vite-plus": "0.2.1"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"effect": "^3.21"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Effect as e}from"effect";import{FAILURE_BOUNDARY as t,FRAGMENT as n,LIST as r,SERVER_BOUNDARY as i,SUSPENSE_BOUNDARY as a,getElementDescriptor as o,isStream as s}from"@weftui/core";function c(e){return` stream-start-${e} `}function l(e){return` stream-end-${e} `}function u(e){return` suspense-start-${e} `}function d(e){return` suspense-end-${e} `}const f=/^ suspense-(start|end)-(\d+) $/;function p(e){let t=f.exec(e.data);return t===null?null:{kind:t[1],id:Number.parseInt(t[2],10)}}function m(e){return` boundary-start-${e} `}function h(e){return` boundary-end-${e} `}const g=/^ stream-(start|end)-(\d+) $/;function _(e){let t=g.exec(e.data);return t===null?null:{kind:t[1],id:Number.parseInt(t[2],10)}}function v(e){return` list-item-start-${e} `}function y(e){return` list-item-end-${e} `}const b=/^ list-item-(start|end)-(\d+) $/;function x(e){let t=b.exec(e.data);return t===null?null:{kind:t[1],id:Number.parseInt(t[2],10)}}const S=`data-weft-boundary-failure`;function C(e){let t=[];return w(e,t),t}function w(t,n){if(!(t==null||typeof t==`boolean`)&&!(typeof t==`string`||typeof t==`number`||typeof t==`bigint`)){if(s(t)||e.isEffect(t)){let e=o(t);e!==void 0&&T(e,n);return}if(typeof t==`object`&&Symbol.iterator in t&&!(`type`in t)){for(let e of t)w(e,n);return}typeof t==`object`&&`type`in t&&!(Symbol.iterator in t)&&T(t,n)}}function T(e,o){let{type:s,props:c}=e;if(s===i){o.push(c);return}if(s===n||s===a||s===t){E(c,o);return}if(s!==r){if(typeof s==`string`){E(c,o);return}typeof s==`function`&&w(s(c),o)}}function E(e,t){let n=`children`in e?e.children:void 0;if(n==null)return;let r=Array.isArray(n)?n:[n];for(let e of r)w(e,t)}export{y as a,_ as c,c as d,d as f,m as i,p as l,C as n,v as o,u as p,h as r,x as s,S as t,l as u};
|