@typed/template 0.6.0 → 0.8.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.
Files changed (96) hide show
  1. package/dist/cjs/ElementRef.js.map +1 -1
  2. package/dist/cjs/ElementSource.js.map +1 -1
  3. package/dist/cjs/Html.js +12 -2
  4. package/dist/cjs/Html.js.map +1 -1
  5. package/dist/cjs/Hydrate.js +15 -7
  6. package/dist/cjs/Hydrate.js.map +1 -1
  7. package/dist/cjs/Many.js.map +1 -1
  8. package/dist/cjs/Render.js +17 -7
  9. package/dist/cjs/Render.js.map +1 -1
  10. package/dist/cjs/RenderTemplate.js.map +1 -1
  11. package/dist/cjs/Test.js +10 -5
  12. package/dist/cjs/Test.js.map +1 -1
  13. package/dist/cjs/internal/hydrate.js +10 -5
  14. package/dist/cjs/internal/hydrate.js.map +1 -1
  15. package/dist/cjs/internal/parts.js.map +1 -1
  16. package/dist/cjs/internal/render.js +8 -5
  17. package/dist/cjs/internal/render.js.map +1 -1
  18. package/dist/cjs/internal/server.js +2 -6
  19. package/dist/cjs/internal/server.js.map +1 -1
  20. package/dist/dts/Directive.d.ts +13 -13
  21. package/dist/dts/Directive.d.ts.map +1 -1
  22. package/dist/dts/ElementRef.d.ts +2 -2
  23. package/dist/dts/ElementRef.d.ts.map +1 -1
  24. package/dist/dts/ElementSource.d.ts +4 -4
  25. package/dist/dts/ElementSource.d.ts.map +1 -1
  26. package/dist/dts/EventHandler.d.ts +11 -11
  27. package/dist/dts/EventHandler.d.ts.map +1 -1
  28. package/dist/dts/Html.d.ts +13 -3
  29. package/dist/dts/Html.d.ts.map +1 -1
  30. package/dist/dts/Hydrate.d.ts +12 -4
  31. package/dist/dts/Hydrate.d.ts.map +1 -1
  32. package/dist/dts/Many.d.ts +8 -8
  33. package/dist/dts/Many.d.ts.map +1 -1
  34. package/dist/dts/Part.d.ts +1 -1
  35. package/dist/dts/Part.d.ts.map +1 -1
  36. package/dist/dts/Placeholder.d.ts +6 -6
  37. package/dist/dts/Placeholder.d.ts.map +1 -1
  38. package/dist/dts/Platform.d.ts +1 -1
  39. package/dist/dts/Platform.d.ts.map +1 -1
  40. package/dist/dts/Render.d.ts +16 -5
  41. package/dist/dts/Render.d.ts.map +1 -1
  42. package/dist/dts/RenderTemplate.d.ts +2 -2
  43. package/dist/dts/RenderTemplate.d.ts.map +1 -1
  44. package/dist/dts/Renderable.d.ts +3 -3
  45. package/dist/dts/Renderable.d.ts.map +1 -1
  46. package/dist/dts/Test.d.ts +10 -14
  47. package/dist/dts/Test.d.ts.map +1 -1
  48. package/dist/dts/internal/EventSource.d.ts +1 -1
  49. package/dist/dts/internal/EventSource.d.ts.map +1 -1
  50. package/dist/dts/internal/hydrate.d.ts.map +1 -1
  51. package/dist/dts/internal/module-augmentation.d.ts +13 -13
  52. package/dist/dts/internal/module-augmentation.d.ts.map +1 -1
  53. package/dist/dts/internal/parts.d.ts +2 -2
  54. package/dist/dts/internal/parts.d.ts.map +1 -1
  55. package/dist/dts/internal/render.d.ts.map +1 -1
  56. package/dist/dts/internal/server.d.ts.map +1 -1
  57. package/dist/esm/ElementRef.js.map +1 -1
  58. package/dist/esm/ElementSource.js.map +1 -1
  59. package/dist/esm/Html.js +13 -2
  60. package/dist/esm/Html.js.map +1 -1
  61. package/dist/esm/Hydrate.js +11 -5
  62. package/dist/esm/Hydrate.js.map +1 -1
  63. package/dist/esm/Many.js.map +1 -1
  64. package/dist/esm/Render.js +13 -5
  65. package/dist/esm/Render.js.map +1 -1
  66. package/dist/esm/RenderTemplate.js.map +1 -1
  67. package/dist/esm/Test.js +12 -7
  68. package/dist/esm/Test.js.map +1 -1
  69. package/dist/esm/internal/hydrate.js +9 -6
  70. package/dist/esm/internal/hydrate.js.map +1 -1
  71. package/dist/esm/internal/parts.js.map +1 -1
  72. package/dist/esm/internal/render.js +7 -6
  73. package/dist/esm/internal/render.js.map +1 -1
  74. package/dist/esm/internal/server.js +2 -6
  75. package/dist/esm/internal/server.js.map +1 -1
  76. package/package.json +5 -5
  77. package/src/Directive.ts +19 -19
  78. package/src/ElementRef.ts +6 -6
  79. package/src/ElementSource.ts +16 -16
  80. package/src/EventHandler.ts +11 -11
  81. package/src/Html.ts +56 -37
  82. package/src/Hydrate.ts +41 -14
  83. package/src/Many.ts +26 -26
  84. package/src/Part.ts +1 -1
  85. package/src/Placeholder.ts +13 -13
  86. package/src/Platform.ts +3 -3
  87. package/src/Render.ts +52 -15
  88. package/src/RenderTemplate.ts +2 -6
  89. package/src/Renderable.ts +5 -5
  90. package/src/Test.ts +30 -20
  91. package/src/internal/EventSource.ts +1 -1
  92. package/src/internal/hydrate.ts +10 -11
  93. package/src/internal/module-augmentation.ts +15 -15
  94. package/src/internal/parts.ts +1 -1
  95. package/src/internal/render.ts +15 -16
  96. package/src/internal/server.ts +0 -2
package/src/Test.ts CHANGED
@@ -2,15 +2,16 @@
2
2
  * @since 1.0.0
3
3
  */
4
4
  import type { Document } from "@typed/dom/Document"
5
- import type { DomServices, DomServicesElementParams } from "@typed/dom/DomServices"
6
- import type { GlobalThis } from "@typed/dom/GlobalThis"
7
- import type { Window } from "@typed/dom/Window"
5
+ import { type DomServices, domServices, type DomServicesElementParams } from "@typed/dom/DomServices"
6
+ import { GlobalThis } from "@typed/dom/GlobalThis"
7
+ import { Window } from "@typed/dom/Window"
8
8
  import type { CurrentEnvironment } from "@typed/environment"
9
9
  import * as Fx from "@typed/fx/Fx"
10
10
  import * as RefArray from "@typed/fx/RefArray"
11
11
  import * as RefSubject from "@typed/fx/RefSubject"
12
12
  import * as Sink from "@typed/fx/Sink"
13
13
  import { type Rendered } from "@typed/wire"
14
+ import { Layer } from "effect"
14
15
  import * as Cause from "effect/Cause"
15
16
  import * as Effect from "effect/Effect"
16
17
  import * as Either from "effect/Either"
@@ -18,11 +19,11 @@ import * as Fiber from "effect/Fiber"
18
19
  import type * as Scope from "effect/Scope"
19
20
  import * as ElementRef from "./ElementRef.js"
20
21
  import { ROOT_CSS_SELECTOR } from "./ElementSource.js"
21
- import { renderToHtmlString } from "./Html.js"
22
- import { hydrate } from "./Hydrate.js"
22
+ import { renderToHtmlString, serverLayer } from "./Html.js"
23
+ import { hydrate, hydrateLayer } from "./Hydrate.js"
23
24
  import { adjustTime, isCommentWithValue } from "./internal/utils.js"
24
- import { render } from "./Render.js"
25
- import * as RenderContext from "./RenderContext.js"
25
+ import { render, renderLayer } from "./Render.js"
26
+ import type * as RenderContext from "./RenderContext.js"
26
27
  import type { RenderEvent } from "./RenderEvent.js"
27
28
  import type { RenderTemplate } from "./RenderTemplate.js"
28
29
 
@@ -42,8 +43,8 @@ export interface TestRender<E> {
42
43
  readonly window: Window & GlobalThis
43
44
  readonly document: Document
44
45
  readonly elementRef: ElementRef.ElementRef
45
- readonly errors: RefSubject.Computed<never, never, ReadonlyArray<E>>
46
- readonly lastError: RefSubject.Filtered<never, never, E>
46
+ readonly errors: RefSubject.Computed<ReadonlyArray<E>>
47
+ readonly lastError: RefSubject.Filtered<E>
47
48
  readonly interrupt: Effect.Effect<void>
48
49
  readonly makeEvent: (type: string, eventInitDict?: EventInit) => Event
49
50
  readonly makeCustomEvent: <A>(type: string, eventInitDict?: CustomEventInit<A>) => CustomEvent<A>
@@ -54,20 +55,20 @@ export interface TestRender<E> {
54
55
  /**
55
56
  * @since 1.0.0
56
57
  */
57
- export function testRender<R, E>(
58
- fx: Fx.Fx<R, E, RenderEvent>,
58
+ export function testRender<E, R>(
59
+ fx: Fx.Fx<RenderEvent, E, R>,
59
60
  options?:
60
61
  & HappyDOMOptions
61
62
  & { readonly [K in keyof DomServicesElementParams]?: (document: Document) => DomServicesElementParams[K] }
62
63
  ): Effect.Effect<
63
64
  TestRender<E>,
64
65
  never,
65
- Scope.Scope | Exclude<Exclude<R, RenderTemplate>, RenderContext.RenderContext | CurrentEnvironment | DomServices>
66
+ Scope.Scope | Exclude<R, RenderTemplate | RenderContext.RenderContext | CurrentEnvironment | DomServices>
66
67
  > {
67
68
  return Effect.gen(function*(_) {
68
69
  const window = yield* _(getOrMakeWindow(options))
69
70
  const elementRef = yield* _(ElementRef.make())
70
- const errors = yield* _(RefSubject.make<never, never, ReadonlyArray<E>>(Effect.succeed([])))
71
+ const errors = yield* _(RefSubject.make<ReadonlyArray<E>>(Effect.succeed([])))
71
72
  const fiber = yield* _(
72
73
  fx,
73
74
  render,
@@ -83,7 +84,7 @@ export function testRender<R, E>(
83
84
  (rendered) => ElementRef.set(elementRef, rendered)
84
85
  )),
85
86
  Effect.forkScoped,
86
- Effect.provide(RenderContext.dom(window, { skipRenderScheduling: true }))
87
+ Effect.provide(renderLayer(window, { skipRenderScheduling: true }))
87
88
  )
88
89
 
89
90
  const test: TestRender<E> = {
@@ -187,19 +188,28 @@ export interface TestHydrate<E, Elements> extends TestRender<E> {
187
188
  * @since 1.0.0
188
189
  */
189
190
  export function testHydrate<R, E, Elements>(
190
- fx: Fx.Fx<R, E, RenderEvent>,
191
+ fx: Fx.Fx<RenderEvent, E, R>,
191
192
  f: (rendered: Rendered, window: Window & GlobalThis) => Elements,
192
193
  options?:
193
194
  & HappyDOMOptions
194
195
  & { readonly [K in keyof DomServicesElementParams]?: (document: Document) => DomServicesElementParams[K] }
195
- ) {
196
+ ): Effect.Effect<
197
+ TestHydrate<E, Elements>,
198
+ E,
199
+ Scope.Scope | Exclude<R, RenderTemplate | RenderContext.RenderContext | CurrentEnvironment | DomServices>
200
+ > {
196
201
  return Effect.gen(function*(_) {
197
202
  const window = yield* _(getOrMakeWindow(options))
198
203
  const { body } = window.document
199
204
 
200
205
  const html = yield* _(
201
206
  renderToHtmlString(fx),
202
- Effect.provide(RenderContext.server)
207
+ Effect.provide(serverLayer.pipe(
208
+ // Add DomServices to the layer for the types
209
+ Layer.provideMerge(domServices()),
210
+ Layer.provideMerge(Window.layer(window)),
211
+ Layer.provideMerge(GlobalThis.layer(window))
212
+ ))
203
213
  )
204
214
 
205
215
  body.innerHTML = html
@@ -218,7 +228,7 @@ export function testHydrate<R, E, Elements>(
218
228
  const elements = f(rendered.length === 1 ? rendered[0] : rendered, window)
219
229
 
220
230
  const elementRef = yield* _(ElementRef.make())
221
- const errors = yield* _(RefSubject.make<never, never, ReadonlyArray<E>>(Effect.succeed([])))
231
+ const errors = yield* _(RefSubject.make<ReadonlyArray<E>>(Effect.succeed([])))
222
232
  const fiber = yield* _(
223
233
  fx,
224
234
  hydrate,
@@ -233,8 +243,8 @@ export function testHydrate<R, E, Elements>(
233
243
  ),
234
244
  (rendered) => ElementRef.set(elementRef, rendered)
235
245
  )),
236
- Effect.forkScoped,
237
- Effect.provide(RenderContext.dom(window, { skipRenderScheduling: true }))
246
+ Effect.provide(hydrateLayer(window, { skipRenderScheduling: true })),
247
+ Effect.forkScoped
238
248
  )
239
249
 
240
250
  const test: TestHydrate<E, Elements> = {
@@ -7,7 +7,7 @@ import type { EventHandler } from "../EventHandler.js"
7
7
 
8
8
  type EventName = string
9
9
 
10
- type Handler<Ev extends Event> = EventHandler<never, never, Ev>
10
+ type Handler<Ev extends Event> = EventHandler<Ev>
11
11
 
12
12
  export interface EventSource {
13
13
  readonly addEventListener: <Ev extends Event>(
@@ -10,7 +10,7 @@ import { indexRefCounter2 } from "./indexRefCounter.js"
10
10
 
11
11
  import { unsafeGet } from "@typed/context"
12
12
 
13
- import { Either, ExecutionStrategy, Exit } from "effect"
13
+ import { Either, ExecutionStrategy, Exit, Runtime } from "effect"
14
14
  import * as Scope from "effect/Scope"
15
15
  import type { Template } from "../Template.js"
16
16
  import { CouldNotFindCommentError, CouldNotFindManyCommentError, CouldNotFindRootElement } from "./errors.js"
@@ -40,16 +40,13 @@ export const hydrateTemplate: (document: Document, ctx: RenderContext) => Render
40
40
  return <Values extends ReadonlyArray<Renderable<any, any>>>(
41
41
  templateStrings: TemplateStringsArray,
42
42
  values: Values
43
- ): Fx.Fx<
44
- Scope.Scope | Placeholder.Context<Values[number]>,
45
- Placeholder.Error<Values[number]>,
46
- RenderEvent
47
- > => {
43
+ ): Fx.Fx<RenderEvent, Placeholder.Error<Values[number]>, Scope.Scope | Placeholder.Context<Values[number]>> => {
48
44
  return Fx.make((sink) =>
49
45
  Effect.gen(function*(_) {
50
- const context = yield* _(Effect.context<Scope.Scope>())
51
- const hydrateCtx = unsafeGet(context, HydrateContext)
52
- const parentScope = unsafeGet(context, Scope.Scope)
46
+ const runtime = yield* _(Effect.runtime<Placeholder.Context<Values[number]> | Scope.Scope>())
47
+ const runFork = Runtime.runFork(runtime)
48
+ const hydrateCtx = unsafeGet(runtime.context, HydrateContext)
49
+ const parentScope = unsafeGet(runtime.context, Scope.Scope)
53
50
  const scope = yield* _(Scope.fork(parentScope, ExecutionStrategy.sequential))
54
51
 
55
52
  // If we're not longer hydrating, just render normally
@@ -82,7 +79,7 @@ export const hydrateTemplate: (document: Document, ctx: RenderContext) => Render
82
79
 
83
80
  const refCounter = yield* _(indexRefCounter2())
84
81
  const ctx: RenderPartContext = {
85
- context,
82
+ context: runtime.context,
86
83
  document,
87
84
  eventSource: makeEventSource(),
88
85
  expected: 0,
@@ -109,7 +106,9 @@ export const hydrateTemplate: (document: Document, ctx: RenderContext) => Render
109
106
 
110
107
  // Fork any effects necessary
111
108
  if (effects.length > 0) {
112
- yield* _(Effect.forkAll(effects))
109
+ for (let i = 0; i < effects.length; i++) {
110
+ runFork(effects[i], { scope })
111
+ }
113
112
  }
114
113
 
115
114
  // Set the element when it is ready
@@ -1,44 +1,44 @@
1
1
  import type { Placeholder } from "../Placeholder.js"
2
2
 
3
3
  declare global {
4
- export interface String extends Placeholder<never, never, string> {}
4
+ export interface String extends Placeholder<string> {}
5
5
 
6
- export interface Number extends Placeholder<never, never, number> {}
6
+ export interface Number extends Placeholder<number> {}
7
7
 
8
- export interface Boolean extends Placeholder<never, never, boolean> {}
8
+ export interface Boolean extends Placeholder<boolean> {}
9
9
 
10
- export interface Symbol extends Placeholder<never, never, symbol> {}
10
+ export interface Symbol extends Placeholder<symbol> {}
11
11
 
12
- export interface BigInt extends Placeholder<never, never, bigint> {}
12
+ export interface BigInt extends Placeholder<bigint> {}
13
13
 
14
14
  export interface Array<T> extends
15
15
  Placeholder<
16
- Placeholder.Context<T>,
16
+ Array<Placeholder.Success<T>>,
17
17
  Placeholder.Error<T>,
18
- Array<Placeholder.Success<T>>
18
+ Placeholder.Context<T>
19
19
  >
20
20
  {}
21
21
 
22
22
  export interface ReadonlyArray<T> extends
23
23
  Placeholder<
24
- Placeholder.Context<T>,
24
+ ReadonlyArray<Placeholder.Success<T>>,
25
25
  Placeholder.Error<T>,
26
- ReadonlyArray<Placeholder.Success<T>>
26
+ Placeholder.Context<T>
27
27
  >
28
28
  {}
29
29
 
30
30
  // DOM types
31
- export interface Node extends Placeholder<never, never, Node> {}
31
+ export interface Node extends Placeholder<Node> {}
32
32
 
33
- export interface DocumentFragment extends Placeholder<never, never, DocumentFragment> {}
33
+ export interface DocumentFragment extends Placeholder<DocumentFragment> {}
34
34
 
35
- export interface Element extends Placeholder<never, never, Element> {}
35
+ export interface Element extends Placeholder<Element> {}
36
36
 
37
- export interface HTMLElement extends Placeholder<never, never, HTMLElement> {}
37
+ export interface HTMLElement extends Placeholder<HTMLElement> {}
38
38
 
39
- export interface SVGElement extends Placeholder<never, never, SVGElement> {}
39
+ export interface SVGElement extends Placeholder<SVGElement> {}
40
40
  }
41
41
 
42
42
  declare module "@typed/fx/Fx" {
43
- export interface Fx<R, E, A> extends Placeholder<R, E, A> {}
43
+ export interface Fx<A, E, R> extends Placeholder<A, E, R> {}
44
44
  }
@@ -295,7 +295,7 @@ export class EventPartImpl implements EventPart {
295
295
  readonly index: number,
296
296
  readonly source: ElementSource<any>,
297
297
  readonly onCause: <E>(cause: Cause<E>) => Effect.Effect<unknown>,
298
- readonly addEventListener: <Ev extends Event>(handler: EventHandler<never, never, Ev>) => void
298
+ readonly addEventListener: <Ev extends Event>(handler: EventHandler<Ev>) => void
299
299
  ) {
300
300
  }
301
301
  }
@@ -3,7 +3,7 @@ import * as Sink from "@typed/fx/Sink"
3
3
  import { TypeId } from "@typed/fx/TypeId"
4
4
  import type { Rendered } from "@typed/wire"
5
5
  import { persistent } from "@typed/wire"
6
- import { Effect, ExecutionStrategy, Exit } from "effect"
6
+ import { Effect, ExecutionStrategy, Exit, Runtime } from "effect"
7
7
  import type { Cause } from "effect/Cause"
8
8
  import type { Chunk } from "effect/Chunk"
9
9
  import * as Context from "effect/Context"
@@ -570,17 +570,18 @@ export const renderTemplate: (document: Document, renderContext: RenderContext)
570
570
  return Fx.sync(() => DomRenderEvent(persistent(document.importNode(entry.content, true))))
571
571
  }
572
572
 
573
- return Fx.make<Scope.Scope | Placeholder.Context<Values[number]>, Placeholder.Error<Values[number]>, RenderEvent>((
573
+ return Fx.make<RenderEvent, Placeholder.Error<Values[number]>, Scope.Scope | Placeholder.Context<Values[number]>>((
574
574
  sink
575
575
  ) => {
576
576
  return Effect.gen(function*(_) {
577
- const context = yield* _(Effect.context<Scope.Scope | Placeholder.Context<Values[number]>>())
578
- const parentScope = Context.get(context, Scope.Scope)
577
+ const runtime = yield* _(Effect.runtime<Scope.Scope | Placeholder.Context<Values[number]>>())
578
+ const runFork = Runtime.runFork(runtime)
579
+ const parentScope = Context.get(runtime.context, Scope.Scope)
579
580
  const scope = yield* _(Scope.fork(parentScope, ExecutionStrategy.sequential))
580
581
  const refCounter = yield* _(indexRefCounter2())
581
582
  const content = document.importNode(entry.content, true)
582
583
  const ctx: RenderPartContext = {
583
- context,
584
+ context: runtime.context,
584
585
  document,
585
586
  eventSource: makeEventSource(),
586
587
  expected: 0,
@@ -606,10 +607,8 @@ export const renderTemplate: (document: Document, renderContext: RenderContext)
606
607
 
607
608
  // Fork any effects necessary
608
609
  if (effects.length > 0) {
609
- for (const eff of effects) {
610
- yield* _(
611
- Effect.forkIn(Effect.catchAllCause(eff, ctx.onCause), scope)
612
- )
610
+ for (let i = 0; i < effects.length; ++i) {
611
+ runFork(effects[i], { scope })
613
612
  }
614
613
  }
615
614
 
@@ -640,7 +639,7 @@ export const renderTemplate: (document: Document, renderContext: RenderContext)
640
639
  })
641
640
  }
642
641
 
643
- function getEventHandler<R, E>(
642
+ function getEventHandler<E, R>(
644
643
  renderable: any,
645
644
  ctx: Context.Context<any> | Context.Context<never>,
646
645
  onCause: (cause: Cause<E>) => Effect.Effect<unknown>
@@ -650,10 +649,10 @@ function getEventHandler<R, E>(
650
649
  return EventHandler.make(
651
650
  (ev) =>
652
651
  Effect.provide(
653
- Effect.catchAllCause((renderable as EventHandler.EventHandler<R, E>).handler(ev), onCause),
652
+ Effect.catchAllCause((renderable as EventHandler.EventHandler<Event, E, R>).handler(ev), onCause),
654
653
  ctx as any
655
654
  ),
656
- (renderable as EventHandler.EventHandler<R, E>).options
655
+ (renderable as EventHandler.EventHandler<Event, E, R>).options
657
656
  )
658
657
  } else if (Effect.EffectTypeId in renderable) {
659
658
  return EventHandler.make(() => Effect.provide(Effect.catchAllCause(renderable, onCause), ctx))
@@ -665,7 +664,7 @@ function getEventHandler<R, E>(
665
664
 
666
665
  function handlePart<R, E, R2>(
667
666
  renderable: unknown,
668
- sink: Sink.Sink<R2, any, any>
667
+ sink: Sink.Sink<any, any, R2>
669
668
  ): Effect.Effect<any, never, R | R2 | Scope.Scope> {
670
669
  switch (typeof renderable) {
671
670
  case "undefined":
@@ -676,7 +675,7 @@ function handlePart<R, E, R2>(
676
675
  ? sink.onSuccess(null)
677
676
  : Fx.tuple(renderable.map(unwrapRenderable)).run(sink) as any
678
677
  } else if (TypeId in renderable) {
679
- return (renderable as Fx.Fx<R | R2, any, any>).run(sink)
678
+ return (renderable as Fx.Fx<any, any, R | R2>).run(sink)
680
679
  } else if (Effect.EffectTypeId in renderable) {
681
680
  return Effect.matchCauseEffect(renderable as Effect.Effect<any, E, R>, sink)
682
681
  } else return sink.onSuccess(renderable)
@@ -686,7 +685,7 @@ function handlePart<R, E, R2>(
686
685
  }
687
686
  }
688
687
 
689
- function unwrapRenderable<R, E>(renderable: unknown): Fx.Fx<R, E, any> {
688
+ function unwrapRenderable<E, R>(renderable: unknown): Fx.Fx<any, E, R> {
690
689
  switch (typeof renderable) {
691
690
  case "undefined":
692
691
  case "object": {
@@ -698,7 +697,7 @@ function unwrapRenderable<R, E>(renderable: unknown): Fx.Fx<R, E, any> {
698
697
  } else if (TypeId in renderable) {
699
698
  return renderable as any
700
699
  } else if (Effect.EffectTypeId in renderable) {
701
- return Fx.fromFxEffect(Effect.map(renderable as any, unwrapRenderable<R, E>))
700
+ return Fx.fromFxEffect(Effect.map(renderable as any, unwrapRenderable<E, R>))
702
701
  } else return Fx.succeed(renderable as any)
703
702
  }
704
703
  default:
@@ -77,7 +77,6 @@ type RenderChunkMap = {
77
77
  const renderChunkMap: RenderChunkMap = {
78
78
  text: (chunk, index) => new TextRenderChunk(index, chunk.value),
79
79
  part: (chunk, index, values, onChunk) =>
80
- // @ts-expect-error
81
80
  new PartRenderChunk(
82
81
  index,
83
82
  chunk,
@@ -85,7 +84,6 @@ const renderChunkMap: RenderChunkMap = {
85
84
  values[chunk.node.index]
86
85
  ),
87
86
  "sparse-part": (chunk, index, values, onChunk) =>
88
- // @ts-expect-error
89
87
  new SparsePartRenderChunk(
90
88
  index,
91
89
  chunk,