@weftui/dom 0.25.0 → 0.26.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.
@@ -1,10 +1,15 @@
1
1
  import { i as UnsupportedNodeTypeError, n as RenderError, r as StreamSubscriptionError, t as HydrationMismatchError } from "../data-Bk7mnjdd.js";
2
- import { Effect } from "effect";
2
+ import { Effect, Scope } from "effect";
3
3
  import { AssertNoServerOnly, Node, Renderable, ServerOnlyLeak } from "@weftui/core";
4
4
 
5
5
  //#region src/client/render.d.ts
6
6
  /**
7
- * Cleanup handle returned from mount that allows unmounting
7
+ * Cleanup handle returned from {@link mount} / {@link hydrate}.
8
+ *
9
+ * The handle owns the mount's lifetime: its runtime, forked subscriptions, and
10
+ * event handlers stay live until `unmount`. `unmount` interrupts subscriptions,
11
+ * removes listeners, and disposes the runtime — it does **not** remove the DOM
12
+ * nodes from the root.
8
13
  */
9
14
  interface MountHandle {
10
15
  /**
@@ -15,24 +20,45 @@ interface MountHandle {
15
20
  unmount(): Effect.Effect<void>;
16
21
  }
17
22
  /**
18
- * Mounts a JSX tree to a DOM element with full reactive support.
23
+ * Mounts a Weft node tree to a DOM element with full reactive support.
19
24
  *
20
25
  * - Clears the root element's existing children
21
- * - Renders the JSX tree to DOM nodes
26
+ * - Renders the node tree to DOM nodes
22
27
  * - Sets up reactive subscriptions for Stream/Effect values
23
- * - Returns Effect that completes after initial render (streams run in background)
24
- * - Creates a fresh ManagedRuntime per mount
25
- * - Returns a cleanup handle to unmount and dispose resources
28
+ * - Returns an Effect that completes after initial render (streams run in background)
29
+ * - Creates a fresh `ManagedRuntime` per mount
30
+ * - Returns a {@link MountHandle} to unmount and dispose resources
31
+ *
32
+ * ## Lifetime
33
+ *
34
+ * The mount's runtime (streams, event handlers, forked work) lives until
35
+ * `unmount`, **not** until the mount Effect resolves — the Effect completes right
36
+ * after initial render. Because of this, providing a **scoped** layer the obvious
37
+ * way disposes it too early:
38
+ *
39
+ * ```ts
40
+ * // ❌ the layer is released the moment runPromise settles, while the app runs on
41
+ * Effect.runPromise(mount(App(), root).pipe(Effect.provide(SomeScopedLayer)));
42
+ * ```
43
+ *
44
+ * Provide scoped layers via a {@link ManagedRuntime} that outlives the mount, or
45
+ * use {@link mountScoped} to bind the mount lifetime to an ambient `Scope`.
46
+ *
47
+ * **Ambient scope:** if `mount` runs inside a region that supplies a `Scope.Scope`
48
+ * (e.g. under `Effect.scoped`), `unmount` is auto-registered on that scope, so the
49
+ * mount is torn down when the scope closes. With no ambient scope, behavior is
50
+ * unchanged. Scoped work forked from event handlers (`Effect.forkScoped`,
51
+ * `acquireRelease`) attaches to the mount's internal scope, so `unmount` owns it.
26
52
  *
27
- * @param app - JSX tree to render
53
+ * @param app - node tree to render (built with `h.*`; components are plain
54
+ * functions that are called, e.g. `App()`)
28
55
  * @param root - HTMLElement to mount to
29
- * @returns Effect that yields MountHandle for cleanup
56
+ * @returns Effect that yields a {@link MountHandle} for cleanup
30
57
  *
31
58
  * @example
32
- * ```tsx
33
- * const app = <div>Hello World</div>;
59
+ * ```ts
34
60
  * const root = document.getElementById("root")!;
35
- * const handle = await Effect.runPromise(mount(app, root));
61
+ * const handle = await Effect.runPromise(mount(App(), root));
36
62
  * // Later: cleanup
37
63
  * await Effect.runPromise(handle.unmount());
38
64
  * ```
@@ -52,8 +78,13 @@ declare function mount(app: Renderable, root: HTMLElement): Effect.Effect<MountH
52
78
  * preserved); only subsequent emissions patch the region — see
53
79
  * `hydrate.specs.md`.
54
80
  *
55
- * Shares {@link mount}'s lifecycle: a fresh `ManagedRuntime` per call, a `Scope`
56
- * owning all forked subscriptions, and a {@link MountHandle} for teardown.
81
+ * Shares {@link mount}'s lifecycle and lifetime rules: a fresh `ManagedRuntime`
82
+ * per call, a `Scope` owning all forked subscriptions, and a {@link MountHandle}
83
+ * for teardown. Like `mount`, the runtime lives until `unmount` (not until the
84
+ * Effect resolves); it auto-registers `unmount` on an ambient `Scope.Scope` when
85
+ * present; and scoped work forked from handlers is owned by the internal scope.
86
+ * Use {@link hydrateScoped} to bind the hydrated mount's lifetime to an ambient
87
+ * `Scope`, or a {@link ManagedRuntime} for scoped layers (see `mount`).
57
88
  *
58
89
  * Hydration is a **client-only** operation: the app's requirement channel `R`
59
90
  * must be free of server-only dependencies. A {@link Boundary.server} discharges
@@ -62,17 +93,87 @@ declare function mount(app: Renderable, root: HTMLElement): Effect.Effect<MountH
62
93
  * stays in `R`, and {@link AssertNoServerOnly} turns that into a compile error
63
94
  * (the return type degrades to the {@link ServerOnlyLeak} sentinel).
64
95
  *
65
- * @param app - JSX tree to hydrate (must match the tree rendered on the server)
96
+ * @param app - node tree to hydrate (must match the tree rendered on the server)
66
97
  * @param root - HTMLElement whose children were produced by the server renderer
67
98
  * @returns Effect that yields a MountHandle for cleanup
68
99
  *
69
100
  * @example
70
- * ```tsx
101
+ * ```ts
71
102
  * const root = document.getElementById("root")!;
72
103
  * // root.innerHTML already contains server output
73
- * const handle = await Effect.runPromise(hydrate(<App />, root));
104
+ * const handle = await Effect.runPromise(hydrate(App(), root));
74
105
  * ```
75
106
  */
76
107
  declare function hydrate<A extends Renderable>(app: A, root: HTMLElement): [AssertNoServerOnly<Node.Context<A>>] extends [Node.Context<A>] ? Effect.Effect<MountHandle, UnsupportedNodeTypeError | StreamSubscriptionError | RenderError | HydrationMismatchError> : ServerOnlyLeak;
77
108
  //#endregion
78
- export { type MountHandle, hydrate, mount };
109
+ //#region src/client/mount-scoped.d.ts
110
+ /**
111
+ * Error union raised by {@link mountScoped} — identical to `mount`'s failure
112
+ * channel.
113
+ */
114
+ type MountErrors = UnsupportedNodeTypeError | StreamSubscriptionError | RenderError;
115
+ /**
116
+ * Error union raised by {@link hydrateScoped} — `mount`'s errors plus
117
+ * {@link HydrationMismatchError}, matching `hydrate`.
118
+ */
119
+ type HydrateErrors = MountErrors | HydrationMismatchError;
120
+ /**
121
+ * Scope-aware {@link mount}. Behaves exactly like `mount`, but requires an
122
+ * ambient `Scope.Scope` in the effect's requirement channel and registers
123
+ * `unmount` as a finalizer on it: the mount lives until the ambient scope
124
+ * closes.
125
+ *
126
+ * This makes the mount lifetime composable with Effect's scoped resource
127
+ * management. Provide any scoped layer **outside** a long-lived scoped region so
128
+ * the layer outlives initial render — the mount Effect resolves right after the
129
+ * first render, so a layer released at mount-resolve would be disposed while the
130
+ * app is still running.
131
+ *
132
+ * Like `mount`, `unmount` interrupts subscriptions and disposes the runtime; it
133
+ * does **not** remove DOM nodes from `root`.
134
+ *
135
+ * @param app - Renderable tree to mount
136
+ * @param root - HTMLElement to mount into
137
+ * @returns Effect requiring `Scope.Scope`, yielding a {@link MountHandle}
138
+ *
139
+ * @example
140
+ * ```ts
141
+ * const program = pipe(
142
+ * Effect.scoped(
143
+ * Effect.gen(function* () {
144
+ * yield* mountScoped(App(), root);
145
+ * yield* Effect.never; // keep the region (and layer) alive
146
+ * }),
147
+ * ),
148
+ * Effect.provide(AppLive), // OUTSIDE the region — lives until it ends
149
+ * );
150
+ * const fiber = Effect.runFork(program); // runFork, not runPromise
151
+ * // later: Effect.runPromise(Fiber.interrupt(fiber));
152
+ * // teardown order: unmount (inner scope close) → AppLive release
153
+ * ```
154
+ *
155
+ * @example Anti-pattern — do NOT do this; the layer is disposed at mount-resolve
156
+ * ```ts
157
+ * // ❌ finalizers run the moment runPromise settles
158
+ * Effect.runPromise(mountScoped(App(), root).pipe(Effect.provide(AppLive), Effect.scoped));
159
+ * ```
160
+ */
161
+ declare function mountScoped(app: Renderable, root: HTMLElement): Effect.Effect<MountHandle, MountErrors, Scope.Scope>;
162
+ /**
163
+ * Scope-aware {@link hydrate}. Behaves exactly like `hydrate`, but requires an
164
+ * ambient `Scope.Scope` in the effect's requirement channel and registers
165
+ * `unmount` as a finalizer on it: the hydrated mount lives until the ambient
166
+ * scope closes.
167
+ *
168
+ * Preserves `hydrate`'s compile-time client-only guard: a server-only `ServerTag`
169
+ * left in the app's requirement channel degrades the return type to the
170
+ * {@link ServerOnlyLeak} sentinel via {@link AssertNoServerOnly}.
171
+ *
172
+ * @param app - Renderable tree to hydrate (must match the server-rendered tree)
173
+ * @param root - HTMLElement whose children were produced by the server renderer
174
+ * @returns Effect requiring `Scope.Scope`, yielding a {@link MountHandle}, or the
175
+ * {@link ServerOnlyLeak} sentinel when a server-only requirement leaks
176
+ */
177
+ declare function hydrateScoped<A extends Renderable>(app: A, root: HTMLElement): [AssertNoServerOnly<Node.Context<A>>] extends [Node.Context<A>] ? Effect.Effect<MountHandle, HydrateErrors, Scope.Scope> : ServerOnlyLeak;
178
+ //#endregion
179
+ export { type MountHandle, hydrate, hydrateScoped, mount, mountScoped };
@@ -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,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};
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,Context as y,Deferred as b,Effect as x,ExecutionStrategy as S,Exit as C,Fiber as w,HashMap as T,HashSet as E,Layer as ee,ManagedRuntime as te,Option as D,Ref as O,Schema as ne,Scope as k,Stream as A,SubscriptionRef as j,pipe as M}from"effect";import{AppRpcClientTag as re,FAILURE_BOUNDARY as ie,FRAGMENT as ae,LIST as oe,SERVER_BOUNDARY as se,SUSPENSE_BOUNDARY as ce,Source as le,getElementDescriptor as ue,isStream as N,toStream as P}from"@weftui/core";function F(){return x.gen(function*(){let e=yield*r;return++e.streamIdCounter.current})}const de=F;let fe=0;const I=()=>++fe;function pe(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 x.gen(function*(){for(let[n,r]of Object.entries(t))if(n!==`children`){if(pe(n)){yield*be(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*ve(e,r);continue}me(e,n)?yield*he(e,n,r):yield*ge(e,n,r)}})}function me(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 he(e,t,n){return x.gen(function*(){N(n)||x.isEffect(n)?yield*z(P(n),n=>{n==null?delete e[t]:e[t]=n},`property:${t}`):n!=null&&(e[t]=n)})}function ge(e,t,n){return x.gen(function*(){if(N(n)||x.isEffect(n))yield*z(P(n),n=>{if(n==null)e.removeAttribute(t);else{let r=_e(n);r!==void 0&&(typeof n==`boolean`?n?e.setAttribute(t,``):e.removeAttribute(t):e.setAttribute(t,r))}},`attribute:${t}`);else{let r=_e(n);r!==void 0&&(typeof n==`boolean`?n?e.setAttribute(t,``):e.removeAttribute(t):e.setAttribute(t,r))}})}function _e(e){if(e!=null)return String(e)}function ve(e,t){return x.gen(function*(){if(N(t)||x.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*ye(e,t))})}function ye(e,t){return x.gen(function*(){for(let[n,r]of Object.entries(t))N(r)||x.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 x.gen(function*(){let n=yield*r,i=yield*x.serviceOption(a),o=A.runForEach(e,e=>x.sync(()=>void t(e))),s=yield*x.forkIn(o,n.scope);yield*M(w.await(s),x.flatMap(e=>C.isFailure(e)&&D.isSome(i)?i.value.reportError(e.cause):x.void),x.forkIn(n.scope))})}function be(e,t,n){return x.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);x.isEffect(r)&&i.runtime.runFork(M(r,x.catchAll(e=>process.env.NODE_ENV===`development`?x.logError(`Event handler error: ${t}`,{error:e}):x.void)))},e.addEventListener(a,o))};yield*k.addFinalizer(i.scope,x.sync(s)),N(n)||x.isEffect(n)?yield*z(P(n),e=>c(e),`event:${t}`):c(n)})}function xe(e,t,n,r,i,a){return x.gen(function*(){let o=yield*b.await(t).pipe(x.flip,x.catchAll(()=>x.interrupt)),s=e.match(o);if(yield*k.close(n,C.void),s===null)return D.isSome(r)?yield*r.value.reportError(o):yield*x.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 Se(e){return x.gen(function*(){let t=yield*r,n=yield*x.serviceOption(a),i=I(),s=document.createComment(o(i)),c=document.createComment(u(i)),l=yield*k.fork(t.scope,S.sequential),d={...t,scope:l},f=yield*b.make(),p=yield*M(V(e.children),x.provideService(a,{reportError:e=>b.fail(f,e).pipe(x.asVoid)}),x.provideService(r,d),x.provideService(k.Scope,l),x.catchAllCause(t=>{let n=e.match(t);return n===null?x.failCause(t):M(k.close(l,C.void),x.flatMap(()=>B(n)),x.map(e=>e===null?[]:Array.isArray(e)?e:[e]))}));return yield*x.forkIn(xe(e,f,l,n,s,c),t.scope),[s,...p,c]})}function Ce(e){return x.gen(function*(){let t=yield*r,i=yield*O.make(1),a=yield*b.make(),o=M(O.updateAndGet(i,e=>e-1),x.flatMap(e=>e<=0?x.asVoid(b.succeed(a,void 0)):x.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=>x.isEffect(e)||N(e)?{type:()=>e,props:{}}:e)).pipe(x.provideService(n,s)),u=l===null?[]:Array.isArray(l)?l:[l];yield*o;let d=yield*b.poll(a);if(D.isSome(d))return u;let p=yield*de(),m=document.createComment(f(p)),g=document.createComment(h(p)),_=yield*B(e.fallback??null),v=[];_!==null&&(Array.isArray(_)?v.push(..._):v.push(_));let y=document.createDocumentFragment();for(let e of u)y.appendChild(e);let S=x.gen(function*(){yield*b.await(a),K(m,g);let e=g.parentNode;e!==null&&(e.insertBefore(y,g),m.remove(),g.remove())});return yield*x.forkIn(S,t.scope),[m,...v,g]})}function we(t){return x.gen(function*(){let n=yield*r,i=yield*x.serviceOption(re);if(D.isNone(i))return yield*x.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=x.gen(function*(){let e=yield*a.call(t.tag,t.payload()),n=yield*Xe(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(x.catchAllCause(e=>x.logError(`[weft] Boundary.rpc "${t.tag}" mount failed to resolve; fallback left in place.`,e)));return yield*x.forkIn(p,n.scope),[c,...f,l]})}function B(e){return x.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)||x.isEffect(e)){let t=ue(e);if(t!==void 0)return yield*B(t);if(x.isEffect(e)){let t=x.runSyncExit(e);if(C.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(Te(e));if(typeof e==`object`&&`type`in e&&!(Symbol.iterator in e)){let{type:t,props:n}=e;return t===ae?yield*Ee(n):t===ce?yield*Ce(n):t===se?yield*we(n):t===ie?yield*Se(n):t===oe?yield*Ne(n):typeof t==`string`?yield*De(t,n):typeof t==`function`?yield*Oe(t,n):yield*x.fail(new i({type:t,message:`Invalid Renderable type: expected string, FRAGMENT, or function, got ${typeof t}`}))}return null})}function Te(e){let t=[];function n(e){if(N(e)||x.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 x.gen(function*(){let t=[];for(let n of e)if(N(n)||x.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 Ee(e){return x.gen(function*(){let t=`children`in e?e.children:void 0;return t===void 0?[]:yield*V(Array.isArray(t)?t:[t])})}function De(e,t){return x.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)||x.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 Oe(e,t){return x.gen(function*(){let i=e(t);if(N(i)||x.isEffect(i)){let e=yield*r,t=yield*k.fork(e.scope,S.sequential),a={...e,scope:t},o=yield*x.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(x.as(o.value.settle,e)):A.make(e)))),yield*H(s).pipe(x.provideService(r,a),x.provideService(k.Scope,t))}return yield*B(i)})}function H(e){return x.gen(function*(){let t=yield*r,[n,i]=ke(yield*F()),o=null,s=A.runForEach(e,e=>x.gen(function*(){o!==null&&(yield*k.close(o,C.void)),o=yield*k.fork(t.scope,S.sequential);let a={...t,scope:o};yield*U(n,i,e).pipe(x.provideService(r,a),x.provideService(k.Scope,o))})),c=yield*x.forkIn(s,t.scope),l=yield*x.serviceOption(a);return yield*M(w.await(c),x.flatMap(e=>C.isFailure(e)&&D.isSome(l)?l.value.reportError(e.cause):x.void),x.forkIn(t.scope)),[n,i]})}function ke(e){return[document.createComment(l(e)),document.createComment(c(e))]}function U(e,t,n){return x.gen(function*(){let r=e.nextSibling,i=r!==null&&r!==t&&r.nextSibling===t;if(i&&r.nodeType===rt&&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*Ae(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=ue(e);if(t!==void 0)return t;if(typeof e==`object`&&e&&`type`in e&&!(Symbol.iterator in e)&&!N(e)&&!x.isEffect(e))return e}function Ae(e,t){return x.gen(function*(){yield*L(e,t.props);let n=t.props.children,r=n===void 0?[]:Array.isArray(n)?n:[n];if(!(yield*je(e,r))){for(;e.firstChild!==null;)e.firstChild.remove();yield*Me(e,r)}})}function je(e,t){return x.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!==rt)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*Ae(i,G(r))}return!0})}function Me(e,t){return x.gen(function*(){for(let n of t)if(N(n)||x.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 Ne(e){return x.gen(function*(){let t=yield*r,{of:n,by:i,render:o}=e,[s,c]=ke(yield*F()),l=yield*k.fork(t.scope,S.sequential),u=(yield*le.toSubscribable(n).pipe(x.provideService(k.Scope,l))).changes,d={records:T.empty(),order:[]},f=A.runForEach(u,e=>x.gen(function*(){d=yield*q(Array.from(e),i,o,d,l,c,t)})),p=yield*x.forkIn(f,l),m=yield*x.serviceOption(a);return yield*M(w.await(p),x.flatMap(e=>C.isFailure(e)&&D.isSome(m)?m.value.reportError(e.cause):x.void),x.forkIn(t.scope)),[s,c]})}function Pe(t,n){return x.gen(function*(){let r=[],i=E.empty();for(let a=0;a<t.length;a++){let o=n===void 0?t[a]:n(t[a],a);if(E.has(i,o))return yield*x.fail(new e({cause:o,message:`List.each: duplicate key ${Re(o)} in a single emission; keys must be unique (set a stable \`by\`).`}));i=E.add(i,o),r.push(o)}return r})}function q(e,t,n,r,i,a,o){return x.gen(function*(){let s=yield*Pe(e,t),c=T.empty();r.order.forEach((e,t)=>{c=T.set(c,e,t)});let l=[],u=[];for(let t=0;t<e.length;t++){let a=s[t],d=T.get(r.records,a);if(D.isSome(d))l.push(d.value),u.push(D.getOrElse(T.get(c,a),()=>-1));else{let r=yield*Fe(a,e[t],t,n,i,o);l.push(r),u.push(-1)}}let d=E.empty();for(let e of s)d=E.add(d,e);for(let e of r.order)if(!E.has(d,e)){let t=T.get(r.records,e);D.isSome(t)&&(yield*k.close(t.value.scope,C.void),Le(t.value.startMarker,t.value.endMarker))}let f=ze(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]:Ie(t.startMarker,t.endMarker);for(let e of r)p.insertBefore(e,n)}let m=T.empty();for(let e of l)m=T.set(m,e.key,e);return{records:m,order:s}})}function Fe(e,t,n,i,a,o){return x.gen(function*(){let s=yield*k.fork(a,S.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(x.provideService(r,c),x.provideService(k.Scope,s));return{key:e,scope:s,startMarker:u,endMarker:d,nodes:f===null?[]:Array.isArray(f)?f:[f]}})}function Ie(e,t){let n=[],r=e;for(;r!==null&&(n.push(r),r!==t);)r=r.nextSibling;return n}function Le(e,t){let n=e;for(;n!==null;){let e=n.nextSibling;if(n.remove(),n===t)break;n=e}}function Re(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 ze(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 Be(e,t){return x.gen(function*(){let n=yield*x.context(),i=yield*x.serviceOption(k.Scope),a=yield*k.make(),o=te.make(ee.succeedContext(y.add(n,k.Scope,a))),s={runtime:o,scope:a,streamIdCounter:{current:0}},c=x.zipRight(k.close(a,C.void),x.promise(()=>o.dispose()));t.innerHTML=``;let l=yield*B(e).pipe(x.provideService(r,s),x.provideService(k.Scope,a),x.tapError(()=>c));if(l!==null)if(Array.isArray(l))for(let e of l)t.appendChild(e);else t.appendChild(l);let u=!1,d={unmount:()=>x.gen(function*(){u||(u=!0,yield*k.close(a,C.void),yield*x.promise(()=>o.dispose()))})};return D.isSome(i)&&(yield*k.addFinalizer(i.value,d.unmount())),d})}function Ve(e,t){return x.gen(function*(){let n=yield*x.context(),i=yield*x.serviceOption(k.Scope),a=yield*k.make(),o=te.make(ee.succeedContext(y.add(n,k.Scope,a))),s=yield*Ue(),c={runtime:o,scope:a,streamIdCounter:{current:0},hydrationReady:s};it(t,c.streamIdCounter);let l=x.zipRight(k.close(a,C.void),x.promise(()=>o.dispose()));yield*J(e,t.firstChild,`root`).pipe(x.provideService(r,c),x.provideService(k.Scope,a),x.tapError(()=>l)),yield*s.settle,yield*s.awaitReady;let u=!1,d={unmount:()=>x.gen(function*(){u||(u=!0,yield*k.close(a,C.void),yield*x.promise(()=>o.dispose()))})};return D.isSome(i)&&(yield*k.addFinalizer(i.value,d.unmount())),d})}function J(e,t,n){return x.gen(function*(){if(typeof e==`string`||typeof e==`number`||typeof e==`bigint`)return yield*He(String(e),t,n);if(typeof e==`boolean`||e==null)return t;if(N(e)||x.isEffect(e)){let r=ue(e);if(r!==void 0)return yield*J(r,t,n);if(x.isEffect(e)){let r=x.runSyncExit(e);if(C.isSuccess(r))return yield*J(r.value,t,n)}return yield*Ge(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===ae)return yield*Y(a,t,n);if(r===ce){if(t!==null&&t.nodeType===Z){let e=_(t);if(e!==null&&e.kind===`start`)return yield*qe(t,n)}return yield*Y(a,t,n)}return r===ie?yield*Ye(a,t,n):r===se?yield*Ze(a,t,n):r===oe?yield*$e(a,t,n):typeof r==`string`?yield*Qe(r,a,t,n):typeof r==`function`?yield*J(r(a),t,n):yield*x.fail(new i({type:r,message:`Invalid Renderable type during hydration at ${n}: expected string, FRAGMENT, or function, got ${typeof r}`}))}return t})}function He(e,t,n){return x.gen(function*(){if(e.length===0)return t;if(t===null||t.nodeType!==rt)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 Ue(){return x.gen(function*(){let e=yield*O.make(1),t=yield*b.make(),n=M(O.updateAndGet(e,e=>e-1),x.flatMap(e=>e<=0?x.asVoid(b.succeed(t,void 0)):x.void));return{register:O.update(e,e=>e+1),settle:n,awaitReady:b.await(t)}})}function We(e){let t=!1;return x.suspend(()=>t||e===void 0?x.void:(t=!0,e.settle))}function Ge(e,t,n){return x.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=at(o);if(c===null)return yield*$(`reactive region end marker`,`unterminated region starting at ${JSON.stringify(o.data)}`,n);let l=We(i.hydrationReady),u=!0,f=null,p=A.runForEach(e,e=>x.gen(function*(){f!==null&&(yield*k.close(f,C.void)),f=yield*k.fork(i.scope,S.sequential);let t={...i,scope:f};yield*x.gen(function*(){u?(u=!1,yield*Ke(e,o,c,n),yield*l):yield*U(o,c,e)}).pipe(x.provideService(r,t),x.provideService(k.Scope,f))})).pipe(x.ensuring(l));i.hydrationReady!==void 0&&(yield*i.hydrationReady.register);let m=yield*x.forkIn(p,i.scope),h=yield*x.serviceOption(a);return yield*M(w.await(m),x.flatMap(e=>C.isFailure(e)&&D.isSome(h)?h.value.reportError(e.cause):x.void),x.forkIn(i.scope)),c.nextSibling})}function Ke(e,t,n,r){return x.gen(function*(){let i=yield*J(e,t.nextSibling,`${r}<resume>`).pipe(x.map(e=>e===n?null:`adopted content did not align with the end marker`),x.catchTag(`HydrationMismatchError`,e=>x.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 qe(e,t){return x.gen(function*(){let n=Je(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*x.try({try:()=>JSON.parse(e),catch:e=>e}).pipe(x.catchAll(()=>x.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*x.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 Je(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 Ye(e,t,n){return x.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*x.serviceOption(a),c=yield*k.fork(i.scope,S.sequential),l={...i,scope:c},d=yield*b.make(),f=yield*Y(e,t,n).pipe(x.provideService(a,{reportError:e=>b.fail(d,e).pipe(x.asVoid)}),x.provideService(r,l),x.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*x.forkIn(xe(e,d,c,s,h,g),i.scope),f}let i=t,s=i.textContent??``,c=yield*x.gen(function*(){let t=yield*x.try({try:()=>JSON.parse(s),catch:e=>e}),n=p(e.children)[t.index];if(n===void 0)return null;let r=yield*ne.decodeUnknown(n.errorSchema)(t.error);return e.match(v.fail(r))}).pipe(x.catchAll(e=>(console.error(`[weft] hydrate: boundary failure payload at ${n} failed to decode; cannot replay.`,e),x.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 Xe(e,t,n,r){return x.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:()=>x.void,onSome:n=>x.gen(function*(){(yield*j.get(a))||(yield*j.set(a,!0),yield*x.gen(function*(){let r=yield*x.exit(n.call(e,t()));C.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(x.ensuring(j.set(a,!1))))})}),pending:a,error:o}})}function Ze(e,t,n){return x.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*x.try({try:()=>JSON.parse(i),catch:e=>e}).pipe(x.flatMap(t=>ne.decodeUnknown(e.successSchema)(t)),x.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*x.serviceOption(re),s=yield*Xe(e.tag,e.payload,a,o),c=yield*J(e.render(s),r.nextSibling,n);return r.remove(),c})}function Qe(e,t,n,r){return x.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 x.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 $e(e,t,n){return x.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=at(l);if(f===null)return yield*$(`list region end marker`,`unterminated region starting at ${JSON.stringify(l.data)}`,n);let p=et(l,f),m=yield*k.fork(i.scope,S.sequential),h=(yield*le.toSubscribable(o).pipe(x.provideService(k.Scope,m))).changes,g={records:T.empty(),order:[]},_=!0,v=We(i.hydrationReady),y=A.runForEach(h,e=>x.gen(function*(){let t=Array.from(e);_?(_=!1,g=yield*tt(t,s,c,p,m,l,f,i,n),yield*v):g=yield*q(t,s,c,g,m,f,i)})).pipe(x.ensuring(v));i.hydrationReady!==void 0&&(yield*i.hydrationReady.register);let b=yield*x.forkIn(y,m),E=yield*x.serviceOption(a);return yield*M(w.await(b),x.flatMap(e=>C.isFailure(e)&&D.isSome(E)?E.value.reportError(e.cause):x.void),x.forkIn(i.scope)),f.nextSibling})}function et(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 tt(e,t,n,r,i,a,o,s,c){return x.gen(function*(){let l=yield*Pe(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:T.empty(),order:[]},i,o,s);let u=[];for(let t=0;t<e.length;t++){let a=yield*nt(l[t],e[t],t,n,r[t],i,s,c);u.push(a)}let d=T.empty();for(let e of u)d=T.set(d,e.key,e);return{records:d,order:l}})}function nt(e,t,n,i,a,o,s,c){return x.gen(function*(){let l=yield*k.fork(o,S.sequential),u={...s,scope:l},d=i(t,n),f=yield*J(d,a.startMarker.nextSibling,`${c}<item>`).pipe(x.provideService(r,u),x.provideService(k.Scope,l),x.map(e=>e===a.endMarker?null:`adopted item content did not align with its end marker`),x.catchTag(`HydrationMismatchError`,e=>x.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,C.void);let p=yield*k.fork(o,S.sequential),m={...s,scope:p};K(a.startMarker,a.endMarker);let h=yield*B(d).pipe(x.provideService(r,m),x.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,rt=3,Z=8;function it(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 at(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 x.fail(new t({expected:e,actual:n,path:r}))}function ot(e,t){return M(Be(e,t),x.tap(e=>x.addFinalizer(()=>e.unmount())))}function st(e,t){return M(Ve(e,t),x.tap(e=>x.addFinalizer(()=>e.unmount())))}export{Ve as hydrate,st as hydrateScoped,Be as mount,ot as mountScoped};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weftui/dom",
3
- "version": "0.25.0",
3
+ "version": "0.26.0",
4
4
  "description": "Client-side DOM renderer for Weft",
5
5
  "license": "MIT",
6
6
  "author": "Stef van Wijchen",
@@ -30,13 +30,13 @@
30
30
  "access": "public"
31
31
  },
32
32
  "dependencies": {
33
- "@weftui/core": "0.25.0"
33
+ "@weftui/core": "0.26.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@effect/rpc": "^0.75.1",
37
37
  "@types/jsdom": "^28.0.3",
38
38
  "@types/node": "^25.9.2",
39
- "effect": "^3.21.3",
39
+ "effect": "^3.21.4",
40
40
  "jsdom": "^29.1.1",
41
41
  "tsx": "^4.22.4",
42
42
  "typescript": "^6.0.3",