@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.
- package/dist/client/index.d.ts +119 -18
- package/dist/client/index.js +1 -1
- package/package.json +3 -3
package/dist/client/index.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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 -
|
|
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
|
-
* ```
|
|
33
|
-
* const app = <div>Hello World</div>;
|
|
59
|
+
* ```ts
|
|
34
60
|
* const root = document.getElementById("root")!;
|
|
35
|
-
* const handle = await Effect.runPromise(mount(
|
|
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`
|
|
56
|
-
* owning all forked subscriptions, and a {@link MountHandle}
|
|
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 -
|
|
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
|
-
* ```
|
|
101
|
+
* ```ts
|
|
71
102
|
* const root = document.getElementById("root")!;
|
|
72
103
|
* // root.innerHTML already contains server output
|
|
73
|
-
* const handle = await Effect.runPromise(hydrate(
|
|
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
|
-
|
|
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 };
|
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,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.
|
|
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.
|
|
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.
|
|
39
|
+
"effect": "^3.21.4",
|
|
40
40
|
"jsdom": "^29.1.1",
|
|
41
41
|
"tsx": "^4.22.4",
|
|
42
42
|
"typescript": "^6.0.3",
|