@typed/template 0.6.0 → 0.7.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 (79) 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.map +1 -1
  4. package/dist/cjs/Many.js.map +1 -1
  5. package/dist/cjs/RenderTemplate.js.map +1 -1
  6. package/dist/cjs/Test.js.map +1 -1
  7. package/dist/cjs/internal/hydrate.js.map +1 -1
  8. package/dist/cjs/internal/parts.js.map +1 -1
  9. package/dist/cjs/internal/render.js.map +1 -1
  10. package/dist/cjs/internal/server.js +2 -6
  11. package/dist/cjs/internal/server.js.map +1 -1
  12. package/dist/dts/Directive.d.ts +13 -13
  13. package/dist/dts/Directive.d.ts.map +1 -1
  14. package/dist/dts/ElementRef.d.ts +2 -2
  15. package/dist/dts/ElementRef.d.ts.map +1 -1
  16. package/dist/dts/ElementSource.d.ts +4 -4
  17. package/dist/dts/ElementSource.d.ts.map +1 -1
  18. package/dist/dts/EventHandler.d.ts +11 -11
  19. package/dist/dts/EventHandler.d.ts.map +1 -1
  20. package/dist/dts/Html.d.ts +2 -2
  21. package/dist/dts/Html.d.ts.map +1 -1
  22. package/dist/dts/Hydrate.d.ts +2 -2
  23. package/dist/dts/Hydrate.d.ts.map +1 -1
  24. package/dist/dts/Many.d.ts +8 -8
  25. package/dist/dts/Many.d.ts.map +1 -1
  26. package/dist/dts/Part.d.ts +1 -1
  27. package/dist/dts/Part.d.ts.map +1 -1
  28. package/dist/dts/Placeholder.d.ts +6 -6
  29. package/dist/dts/Placeholder.d.ts.map +1 -1
  30. package/dist/dts/Platform.d.ts +1 -1
  31. package/dist/dts/Platform.d.ts.map +1 -1
  32. package/dist/dts/Render.d.ts +2 -2
  33. package/dist/dts/Render.d.ts.map +1 -1
  34. package/dist/dts/RenderTemplate.d.ts +2 -2
  35. package/dist/dts/RenderTemplate.d.ts.map +1 -1
  36. package/dist/dts/Renderable.d.ts +3 -3
  37. package/dist/dts/Renderable.d.ts.map +1 -1
  38. package/dist/dts/Test.d.ts +4 -4
  39. package/dist/dts/Test.d.ts.map +1 -1
  40. package/dist/dts/internal/EventSource.d.ts +1 -1
  41. package/dist/dts/internal/EventSource.d.ts.map +1 -1
  42. package/dist/dts/internal/hydrate.d.ts.map +1 -1
  43. package/dist/dts/internal/module-augmentation.d.ts +13 -13
  44. package/dist/dts/internal/module-augmentation.d.ts.map +1 -1
  45. package/dist/dts/internal/parts.d.ts +2 -2
  46. package/dist/dts/internal/parts.d.ts.map +1 -1
  47. package/dist/dts/internal/server.d.ts.map +1 -1
  48. package/dist/esm/ElementRef.js.map +1 -1
  49. package/dist/esm/ElementSource.js.map +1 -1
  50. package/dist/esm/Html.js.map +1 -1
  51. package/dist/esm/Many.js.map +1 -1
  52. package/dist/esm/RenderTemplate.js.map +1 -1
  53. package/dist/esm/Test.js.map +1 -1
  54. package/dist/esm/internal/hydrate.js.map +1 -1
  55. package/dist/esm/internal/parts.js.map +1 -1
  56. package/dist/esm/internal/render.js.map +1 -1
  57. package/dist/esm/internal/server.js +2 -6
  58. package/dist/esm/internal/server.js.map +1 -1
  59. package/package.json +5 -5
  60. package/src/Directive.ts +19 -19
  61. package/src/ElementRef.ts +6 -6
  62. package/src/ElementSource.ts +16 -16
  63. package/src/EventHandler.ts +11 -11
  64. package/src/Html.ts +31 -31
  65. package/src/Hydrate.ts +4 -4
  66. package/src/Many.ts +26 -26
  67. package/src/Part.ts +1 -1
  68. package/src/Placeholder.ts +13 -13
  69. package/src/Platform.ts +2 -2
  70. package/src/Render.ts +3 -3
  71. package/src/RenderTemplate.ts +2 -6
  72. package/src/Renderable.ts +5 -5
  73. package/src/Test.ts +7 -7
  74. package/src/internal/EventSource.ts +1 -1
  75. package/src/internal/hydrate.ts +1 -5
  76. package/src/internal/module-augmentation.ts +15 -15
  77. package/src/internal/parts.ts +1 -1
  78. package/src/internal/render.ts +8 -8
  79. package/src/internal/server.ts +0 -2
package/src/Html.ts CHANGED
@@ -30,9 +30,9 @@ const [padStart, padEnd] = [[TYPED_START], [TYPED_END]] as const
30
30
  /**
31
31
  * @since 1.0.0
32
32
  */
33
- export function renderToHtml<R, E>(
34
- fx: Fx.Fx<R, E, RenderEvent>
35
- ): Fx.Fx<Exclude<R, RenderTemplate> | RenderContext, E, string> {
33
+ export function renderToHtml<E, R>(
34
+ fx: Fx.Fx<RenderEvent, E, R>
35
+ ): Fx.Fx<string, E, Exclude<R, RenderTemplate> | RenderContext> {
36
36
  return Fx.fromFxEffect(
37
37
  RenderContext.with((ctx) =>
38
38
  fx.pipe(
@@ -47,8 +47,8 @@ export function renderToHtml<R, E>(
47
47
  /**
48
48
  * @since 1.0.0
49
49
  */
50
- export function renderToHtmlString<R, E>(
51
- fx: Fx.Fx<R, E, RenderEvent>
50
+ export function renderToHtmlString<E, R>(
51
+ fx: Fx.Fx<RenderEvent, E, R>
52
52
  ): Effect.Effect<string, E, Exclude<R, RenderTemplate> | RenderContext> {
53
53
  return Effect.map(Fx.toReadonlyArray(renderToHtml(fx)), join(""))
54
54
  }
@@ -58,9 +58,9 @@ function renderHtml(ctx: RenderContext) {
58
58
  templateStrings: TemplateStringsArray,
59
59
  values: Values
60
60
  ): Fx.Fx<
61
- Scope.Scope | Placeholder.Context<readonly [] extends Values ? never : Values[number]>,
61
+ RenderEvent,
62
62
  Placeholder.Error<Values[number]>,
63
- RenderEvent
63
+ Scope.Scope | Placeholder.Context<readonly [] extends Values ? never : Values[number]>
64
64
  > => {
65
65
  const isStatic = ctx.environment === "static"
66
66
  const entry = getServerEntry(templateStrings, ctx.templateCache, isStatic)
@@ -71,8 +71,8 @@ function renderHtml(ctx: RenderContext) {
71
71
  Fx.mergeOrdered(
72
72
  entry.chunks.map((chunk) =>
73
73
  renderChunk<
74
- Placeholder.Context<readonly [] extends Values ? never : Values[number]>,
75
- Placeholder.Error<Values[number]>
74
+ Placeholder.Error<Values[number]>,
75
+ Placeholder.Context<readonly [] extends Values ? never : Values[number]>
76
76
  >(chunk, values, isStatic)
77
77
  )
78
78
  ),
@@ -82,21 +82,21 @@ function renderHtml(ctx: RenderContext) {
82
82
  }
83
83
  }
84
84
 
85
- function renderChunk<R, E>(
85
+ function renderChunk<E, R>(
86
86
  chunk: HtmlChunk,
87
87
  values: ReadonlyArray<Renderable<any, any>>,
88
88
  isStatic: boolean
89
- ): Fx.Fx<R, E, RenderEvent> {
89
+ ): Fx.Fx<RenderEvent, E, R> {
90
90
  if (chunk._tag === "text") {
91
91
  return Fx.succeed(HtmlRenderEvent(chunk.value))
92
92
  } else if (chunk._tag === "part") {
93
- return renderPart<R, E>(chunk, values, isStatic)
93
+ return renderPart<E, R>(chunk, values, isStatic)
94
94
  } else {
95
- return renderSparsePart<R, E>(chunk, values) as Fx.Fx<R, E, RenderEvent>
95
+ return renderSparsePart<E, R>(chunk, values) as Fx.Fx<RenderEvent, E, R>
96
96
  }
97
97
  }
98
98
 
99
- function renderNode<R, E>(renderable: Renderable<any, any>, isStatic: boolean): Fx.Fx<R, E, RenderEvent> {
99
+ function renderNode<E, R>(renderable: Renderable<any, any>, isStatic: boolean): Fx.Fx<RenderEvent, E, R> {
100
100
  switch (typeof renderable) {
101
101
  case "string":
102
102
  case "number":
@@ -111,7 +111,7 @@ function renderNode<R, E>(renderable: Renderable<any, any>, isStatic: boolean):
111
111
  }
112
112
  }
113
113
 
114
- function renderObject<R, E>(renderable: object | null | undefined, isStatic: boolean) {
114
+ function renderObject<E, R>(renderable: object | null | undefined, isStatic: boolean) {
115
115
  if (renderable === null || renderable === undefined) {
116
116
  return isStatic ? Fx.empty : Fx.succeed(HtmlRenderEvent(TEXT_START))
117
117
  } else if (Array.isArray(renderable)) {
@@ -122,7 +122,7 @@ function renderObject<R, E>(renderable: object | null | undefined, isStatic: boo
122
122
  } else if (Effect.isEffect(renderable)) {
123
123
  return Fx.switchMap(
124
124
  Fx.fromEffect(renderable as Effect.Effect<Renderable, E, R>),
125
- (r) => renderNode<R, E>(r, isStatic)
125
+ (r) => renderNode<E, R>(r, isStatic)
126
126
  )
127
127
  } else if (isRenderEvent(renderable)) {
128
128
  return Fx.succeed(renderable)
@@ -131,17 +131,17 @@ function renderObject<R, E>(renderable: object | null | undefined, isStatic: boo
131
131
  }
132
132
  }
133
133
 
134
- function renderPart<R, E>(
134
+ function renderPart<E, R>(
135
135
  chunk: PartChunk,
136
136
  values: ReadonlyArray<Renderable<any, any>>,
137
137
  isStatic: boolean
138
- ): Fx.Fx<R, E, RenderEvent> {
138
+ ): Fx.Fx<RenderEvent, E, R> {
139
139
  const { node, render } = chunk
140
140
  const renderable: Renderable<any, any> = values[node.index]
141
141
 
142
142
  // Refs and events are not rendered into HTML
143
- if (isDirective<R, E>(renderable)) {
144
- return Fx.make((sink: Sink.Sink<never, E, RenderEvent>) => {
143
+ if (isDirective<E, R>(renderable)) {
144
+ return Fx.make<RenderEvent, E, R>((sink: Sink.Sink<RenderEvent, E>) => {
145
145
  const part = partNodeToPart(
146
146
  node,
147
147
  (value) => sink.onSuccess(HtmlRenderEvent(render(value)))
@@ -150,8 +150,8 @@ function renderPart<R, E>(
150
150
  return Effect.catchAllCause(renderable(part), sink.onFailure)
151
151
  })
152
152
  } else if (node._tag === "node") {
153
- if (isStatic) return renderNode<R, E>(renderable, isStatic)
154
- return Fx.append(renderNode<R, E>(renderable, isStatic), HtmlRenderEvent(TYPED_HOLE(node.index)))
153
+ if (isStatic) return renderNode<E, R>(renderable, isStatic)
154
+ return Fx.append(renderNode<E, R>(renderable, isStatic), HtmlRenderEvent(TYPED_HOLE(node.index)))
155
155
  } else if (node._tag === "properties") {
156
156
  if (renderable == null) return Fx.empty
157
157
  return Fx.map(
@@ -166,7 +166,7 @@ function renderPart<R, E>(
166
166
  } else {
167
167
  if (renderable === null) return Fx.succeed(HtmlRenderEvent(render(renderable)))
168
168
 
169
- const html = Fx.filterMap(Fx.take(unwrapRenderable<R, E>(renderable), 1), (value) => {
169
+ const html = Fx.filterMap(Fx.take(unwrapRenderable<E, R>(renderable), 1), (value) => {
170
170
  const s = render(value)
171
171
 
172
172
  return s ? Option.some(HtmlRenderEvent(s)) : Option.none()
@@ -180,10 +180,10 @@ function renderPart<R, E>(
180
180
  }
181
181
  }
182
182
 
183
- function renderSparsePart<R, E>(
183
+ function renderSparsePart<E, R>(
184
184
  chunk: SparsePartChunk,
185
185
  values: ReadonlyArray<Renderable<any, any>>
186
- ): Fx.Fx<R, E, RenderEvent> {
186
+ ): Fx.Fx<RenderEvent, E, R> {
187
187
  const { node, render } = chunk
188
188
 
189
189
  return Fx.map(
@@ -194,8 +194,8 @@ function renderSparsePart<R, E>(
194
194
 
195
195
  const renderable: Renderable<any, any> = (values as any)[node.index]
196
196
 
197
- if (isDirective<R, E>(renderable)) {
198
- return Fx.make<R, E, unknown>((sink: Sink.Sink<never, E, unknown>) =>
197
+ if (isDirective<E, R>(renderable)) {
198
+ return Fx.make<unknown, E, R>((sink: Sink.Sink<unknown, E>) =>
199
199
  Effect.catchAllCause(
200
200
  renderable(partNodeToPart(node, (value) => sink.onSuccess(value))),
201
201
  sink.onFailure
@@ -203,7 +203,7 @@ function renderSparsePart<R, E>(
203
203
  )
204
204
  }
205
205
 
206
- return unwrapRenderable<R, E>(renderable)
206
+ return unwrapRenderable<E, R>(renderable)
207
207
  })
208
208
  ),
209
209
  1
@@ -212,8 +212,8 @@ function renderSparsePart<R, E>(
212
212
  )
213
213
  }
214
214
 
215
- function takeOneIfNotRenderEvent<R, E, A>(fx: Fx.Fx<R, E, A>): Fx.Fx<R, E, A> {
216
- return Fx.make<R, E, A>((sink) =>
215
+ function takeOneIfNotRenderEvent<A, E, R>(fx: Fx.Fx<A, E, R>): Fx.Fx<A, E, R> {
216
+ return Fx.make<A, E, R>((sink) =>
217
217
  Sink.withEarlyExit(sink, (sink) =>
218
218
  fx.run(
219
219
  Sink.make(
@@ -249,7 +249,7 @@ function getServerEntry(
249
249
  }
250
250
  }
251
251
 
252
- function unwrapRenderable<R, E>(renderable: Renderable<any, any>): Fx.Fx<R, E, any> {
252
+ function unwrapRenderable<E, R>(renderable: Renderable<any, any>): Fx.Fx<any, E, R> {
253
253
  switch (typeof renderable) {
254
254
  case "undefined":
255
255
  case "object": {
package/src/Hydrate.ts CHANGED
@@ -20,8 +20,8 @@ import { RenderTemplate } from "./RenderTemplate.js"
20
20
  * @since 1.0.0
21
21
  */
22
22
  export function hydrate<R, E, T extends RenderEvent | null>(
23
- rendered: Fx.Fx<R, E, T>
24
- ): Fx.Fx<Exclude<R, RenderTemplate> | Document | RenderContext | RootElement, E, ToRendered<T>> {
23
+ rendered: Fx.Fx<T, E, R>
24
+ ): Fx.Fx<ToRendered<T>, E, Exclude<R, RenderTemplate> | Document | RenderContext | RootElement> {
25
25
  return Fx.fromFxEffect(Effect.contextWith((context) => {
26
26
  const [document, renderContext, { rootElement }] = Context.getMany(context, Document, RenderContext, RootElement)
27
27
  const ctx: HydrateContext = {
@@ -40,14 +40,14 @@ export function hydrate<R, E, T extends RenderEvent | null>(
40
40
  Fx.mapEffect(rendered, (what) => attachRoot(renderContext.renderCache, rootElement, what)),
41
41
  layer
42
42
  )
43
- })) as Fx.Fx<Exclude<R, RenderTemplate> | Document | RenderContext | RootElement, E, ToRendered<T>>
43
+ })) as Fx.Fx<ToRendered<T>, E, Exclude<R, RenderTemplate> | Document | RenderContext | RootElement>
44
44
  }
45
45
 
46
46
  /**
47
47
  * @since 1.0.0
48
48
  */
49
49
  export function hydrateLayer<R, E, T extends RenderEvent | null>(
50
- rendered: Fx.Fx<R, E, T>
50
+ rendered: Fx.Fx<T, E, R>
51
51
  ) {
52
52
  return Fx.drainLayer(Fx.switchMapCause(hydrate(rendered), (cause) => Fx.fromEffect(Effect.logError(cause))))
53
53
  }
package/src/Many.ts CHANGED
@@ -20,14 +20,14 @@ import { HtmlRenderEvent, type RenderEvent } from "./RenderEvent.js"
20
20
  /**
21
21
  * @since 1.0.0
22
22
  */
23
- export function many<R, E, A, B extends PropertyKey, R2, E2>(
24
- values: Fx.Fx<R, E, ReadonlyArray<A>>,
23
+ export function many<A, E, R, B extends PropertyKey, R2, E2>(
24
+ values: Fx.Fx<ReadonlyArray<A>, E, R>,
25
25
  getKey: (a: NoInfer<A>) => B,
26
- f: (a: RefSubject.RefSubject<never, never, NoInfer<A>>, key: B) => Fx.Fx<R2, E2, RenderEvent>
27
- ): Fx.Fx<R | R2 | Scope.Scope | RenderContext, E | E2, RenderEvent | ReadonlyArray<RenderEvent>> {
26
+ f: (a: RefSubject.RefSubject<NoInfer<A>>, key: B) => Fx.Fx<RenderEvent, E2, R2>
27
+ ): Fx.Fx<RenderEvent | ReadonlyArray<RenderEvent>, E | E2, R | R2 | Scope.Scope | RenderContext> {
28
28
  return Fx.fromFxEffect(
29
29
  Effect.contextWith(
30
- (context): Fx.Fx<R | R2 | RenderContext | Scope.Scope, E | E2, RenderEvent | ReadonlyArray<RenderEvent>> => {
30
+ (context): Fx.Fx<RenderEvent | ReadonlyArray<RenderEvent>, E | E2, R | R2 | RenderContext | Scope.Scope> => {
31
31
  const ctx = get(context, RenderContext)
32
32
  const hydrateContext = getOption(context, HydrateContext)
33
33
 
@@ -87,15 +87,15 @@ export const manyAsyncData: {
87
87
  matchers: {
88
88
  NoData: () => NoData
89
89
  Loading: (todo: TODO) => Loading
90
- Failure: (data: RefSubject.Computed<never, never, E1>, computed: TODO) => Failure
91
- Success: (value: RefSubject.Computed<never, never, A>, computed: TODO) => Success
90
+ Failure: (data: RefSubject.Computed<E1>, computed: TODO) => Failure
91
+ Success: (value: RefSubject.Computed<A>, computed: TODO) => Success
92
92
  }
93
- ): <R, E>(
94
- fx: Fx.Fx<R, E, AsyncData.AsyncData<ReadonlyArray<A>, E1>>
93
+ ): <E, R>(
94
+ fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>
95
95
  ) => Fx.Fx<
96
- R | Fx.Fx.Context<NoData | Loading | Failure | Success>,
96
+ Fx.Fx.Success<NoData | Loading | Failure | Success>,
97
97
  E | Fx.Fx.Error<NoData | Loading | Failure | Success>,
98
- Fx.Fx.Success<NoData | Loading | Failure | Success>
98
+ R | Fx.Fx.Context<NoData | Loading | Failure | Success>
99
99
  >
100
100
 
101
101
  <
@@ -109,18 +109,18 @@ export const manyAsyncData: {
109
109
  Failure extends Fx.Fx<any, any, any>,
110
110
  Success extends Fx.Fx<any, any, any>
111
111
  >(
112
- fx: Fx.Fx<R, E, AsyncData.AsyncData<ReadonlyArray<A>, E1>>,
112
+ fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>,
113
113
  getKey: (a: A) => B,
114
114
  matchers: {
115
115
  NoData: () => NoData
116
116
  Loading: (data: TODO) => Loading
117
- Failure: (data: RefSubject.Computed<never, never, E1>, computed: TODO) => Failure
118
- Success: (value: RefSubject.Computed<never, never, A>, computed: TODO) => Success
117
+ Failure: (data: RefSubject.Computed<E1>, computed: TODO) => Failure
118
+ Success: (value: RefSubject.Computed<A>, computed: TODO) => Success
119
119
  }
120
120
  ): Fx.Fx<
121
- R | Fx.Fx.Context<NoData | Loading | Failure | Success>,
121
+ Fx.Fx.Success<NoData | Loading | Failure | Success>,
122
122
  E | Fx.Fx.Error<NoData | Loading | Failure | Success>,
123
- Fx.Fx.Success<NoData | Loading | Failure | Success>
123
+ R | Fx.Fx.Context<NoData | Loading | Failure | Success>
124
124
  >
125
125
  } = dual(
126
126
  3,
@@ -130,23 +130,23 @@ export const manyAsyncData: {
130
130
  E1,
131
131
  A,
132
132
  B extends PropertyKey,
133
- NoData extends Fx.Fx<any, any, RenderEvent>,
134
- Loading extends Fx.Fx<any, any, RenderEvent>,
135
- Failure extends Fx.Fx<any, any, RenderEvent>,
136
- Success extends Fx.Fx<any, any, RenderEvent>
133
+ NoData extends Fx.Fx<RenderEvent, any, any>,
134
+ Loading extends Fx.Fx<RenderEvent, any, any>,
135
+ Failure extends Fx.Fx<RenderEvent, any, any>,
136
+ Success extends Fx.Fx<RenderEvent, any, any>
137
137
  >(
138
- fx: Fx.Fx<R, E, AsyncData.AsyncData<ReadonlyArray<A>, E1>>,
138
+ fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>,
139
139
  getKey: (a: A) => B,
140
140
  matchers: {
141
141
  NoData: NoData
142
- Loading: (data: RefSubject.Filtered<never, never, Progress>) => Loading
143
- Failure: (data: RefSubject.Computed<never, never, E1>) => Failure
144
- Success: (value: RefSubject.Computed<never, never, A>, key: B) => Success
142
+ Loading: (data: RefSubject.Filtered<Progress>) => Loading
143
+ Failure: (data: RefSubject.Computed<E1>) => Failure
144
+ Success: (value: RefSubject.Computed<A>, key: B) => Success
145
145
  }
146
146
  ): Fx.Fx<
147
- R | Fx.Fx.Context<NoData | Loading | Failure | Success>,
147
+ RenderEvent | ReadonlyArray<RenderEvent>,
148
148
  E | Fx.Fx.Error<NoData | Loading | Failure | Success>,
149
- RenderEvent | ReadonlyArray<RenderEvent>
149
+ R | Fx.Fx.Context<NoData | Loading | Failure | Success>
150
150
  > => {
151
151
  return RefAsyncData.matchAsyncData(fx, {
152
152
  NoData: matchers.NoData,
package/src/Part.ts CHANGED
@@ -80,7 +80,7 @@ export interface EventPart {
80
80
  readonly value: null
81
81
  readonly index: number
82
82
  readonly onCause: (cause: Cause<unknown>) => Effect<unknown>
83
- readonly addEventListener: (handler: EventHandler<never, never, Event>) => void
83
+ readonly addEventListener: (handler: EventHandler<Event>) => void
84
84
  }
85
85
 
86
86
  /**
@@ -21,7 +21,7 @@ export type PlaceholderTypeId = typeof PlaceholderTypeId
21
21
  /**
22
22
  * @since 1.0.0
23
23
  */
24
- export interface Placeholder<out R = never, out E = never, out A = unknown> {
24
+ export interface Placeholder<A = unknown, E = never, R = never> {
25
25
  readonly [PlaceholderTypeId]: {
26
26
  readonly _R: (_: never) => R
27
27
  readonly _E: (_: never) => E
@@ -37,32 +37,32 @@ export namespace Placeholder {
37
37
  * @since 1.0.0
38
38
  */
39
39
  export type Any<A = any> =
40
- | Placeholder<any, any, A>
41
- | Placeholder<any, never, A>
42
- | Placeholder<never, never, A>
43
- | Placeholder<never, any, A>
40
+ | Placeholder<A, any, any>
41
+ | Placeholder<A, never, any>
42
+ | Placeholder<A>
43
+ | Placeholder<A, any>
44
44
 
45
45
  /**
46
46
  * @since 1.0.0
47
47
  */
48
- export type Context<T> = [T] extends [never] ? never : T extends Placeholder<infer R, infer _E, infer _A> ? R : never
48
+ export type Context<T> = [T] extends [never] ? never : T extends Placeholder<infer _A, infer _E, infer R> ? R : never
49
49
  /**
50
50
  * @since 1.0.0
51
51
  */
52
- export type Error<T> = [T] extends [never] ? never : T extends Placeholder<infer _R, infer E, infer _A> ? E : never
52
+ export type Error<T> = [T] extends [never] ? never : T extends Placeholder<infer _A, infer E, infer _R> ? E : never
53
53
  /**
54
54
  * @since 1.0.0
55
55
  */
56
- export type Success<T> = [T] extends [never] ? never : T extends Placeholder<infer _R, infer _E, infer A> ? A : never
56
+ export type Success<T> = [T] extends [never] ? never : T extends Placeholder<infer A, infer _E, infer _R> ? A : never
57
57
 
58
58
  /**
59
59
  * @since 1.0.0
60
60
  */
61
- export function asRef<R = never, E = never, A = never>(
62
- placeholder: Placeholder<R, E, A> | Fx<R, E, A> | Effect.Effect<A, E, R> | A
63
- ): Effect.Effect<RefSubject.RefSubject<never, E, A>, never, R | Scope.Scope> {
64
- if (isFx<R, E, A>(placeholder) || Effect.isEffect(placeholder)) {
65
- return RefSubject.make(placeholder as Fx<R, E, A>)
61
+ export function asRef<A = never, E = never, R = never>(
62
+ placeholder: Placeholder<A, E, R> | Fx<A, E, R> | Effect.Effect<A, E, R> | A
63
+ ): Effect.Effect<RefSubject.RefSubject<A, E>, never, R | Scope.Scope> {
64
+ if (isFx<A, E, R>(placeholder) || Effect.isEffect(placeholder)) {
65
+ return RefSubject.make(placeholder as Fx<A, E, R>)
66
66
  } else {
67
67
  return RefSubject.of<A, E>(placeholder as A)
68
68
  }
package/src/Platform.ts CHANGED
@@ -20,8 +20,8 @@ const HYPHENATED_CONTENT_TYPE = { "content-type": HTML_CONTENT_TYPE }
20
20
  /**
21
21
  * @since 1.0.0
22
22
  */
23
- export function htmlResponse<R, E>(
24
- fx: Fx.Fx<R, E, RenderEvent>,
23
+ export function htmlResponse<E, R>(
24
+ fx: Fx.Fx<RenderEvent, E, R>,
25
25
  options?: HttpServer.response.Options
26
26
  ): Effect.Effect<HttpServer.response.ServerResponse, E, RenderContext.RenderContext | Exclude<R, RenderTemplate>> {
27
27
  return Effect.contextWithEffect((ctx) =>
package/src/Render.ts CHANGED
@@ -23,8 +23,8 @@ export type ToRendered<T extends RenderEvent | null> = T extends null ? Rendered
23
23
  * @since 1.0.0
24
24
  */
25
25
  export function render<R, E, T extends RenderEvent | null>(
26
- rendered: Fx.Fx<R, E, T>
27
- ): Fx.Fx<Exclude<R, RenderTemplate> | Document | RenderContext | RootElement, E, ToRendered<T>> {
26
+ rendered: Fx.Fx<T, E, R>
27
+ ): Fx.Fx<ToRendered<T>, E, Exclude<R, RenderTemplate> | Document | RenderContext | RootElement> {
28
28
  return Fx.fromFxEffect(Effect.contextWith((context) => {
29
29
  const [document, ctx, { rootElement }] = Context.getMany(context, Document, RenderContext, RootElement)
30
30
 
@@ -40,7 +40,7 @@ export function render<R, E, T extends RenderEvent | null>(
40
40
  * @since 1.0.0
41
41
  */
42
42
  export function renderLayer<R, E, T extends RenderEvent | null>(
43
- rendered: Fx.Fx<R, E, T>
43
+ rendered: Fx.Fx<T, E, R>
44
44
  ): Layer.Layer<
45
45
  never,
46
46
  never,
@@ -16,11 +16,7 @@ export interface RenderTemplate {
16
16
  <Values extends ReadonlyArray<Renderable<any, any>>>(
17
17
  templateStrings: TemplateStringsArray,
18
18
  values: Values
19
- ): Fx.Fx<
20
- Scope | Placeholder.Context<Values[number]>,
21
- Placeholder.Error<Values[number]>,
22
- RenderEvent
23
- >
19
+ ): Fx.Fx<RenderEvent, Placeholder.Error<Values[number]>, Scope | Placeholder.Context<Values[number]>>
24
20
  }
25
21
 
26
22
  /**
@@ -38,6 +34,6 @@ export const RenderTemplate: Context.Tagged<RenderTemplate, RenderTemplate> = Co
38
34
  export function html<const Values extends ReadonlyArray<Renderable<any, any>>>(
39
35
  template: TemplateStringsArray,
40
36
  ...values: Values
41
- ): Fx.Fx<RenderTemplate | Scope | Placeholder.Context<Values[number]>, Placeholder.Error<Values[number]>, RenderEvent> {
37
+ ): Fx.Fx<RenderEvent, Placeholder.Error<Values[number]>, RenderTemplate | Scope | Placeholder.Context<Values[number]>> {
42
38
  return Fx.fromFxEffect(RenderTemplate.with((render) => render(template, values)))
43
39
  }
package/src/Renderable.ts CHANGED
@@ -12,12 +12,12 @@ import type { RenderEvent } from "./RenderEvent.js"
12
12
  */
13
13
  export type Renderable<R = never, E = never> =
14
14
  | Renderable.Value
15
- | Placeholder<R, E, any>
16
- | { readonly [key: string]: Renderable<R, E> | Placeholder<R, E, any> | unknown } // TODO: Should we manage data attributes this way?
17
- | Placeholder<R, E, any>
15
+ | Placeholder<any, E, R>
16
+ | { readonly [key: string]: Renderable<E, R> | Placeholder<any, E, R> | unknown } // TODO: Should we manage data attributes this way?
17
+ | Placeholder<any, E, R>
18
18
  | Effect<any, E, R>
19
- | Fx<R, E, any>
20
- | ReadonlyArray<Renderable<R, E>>
19
+ | Fx<any, E, R>
20
+ | ReadonlyArray<Renderable<E, R>>
21
21
 
22
22
  /**
23
23
  * @since 1.0.0
package/src/Test.ts CHANGED
@@ -42,8 +42,8 @@ export interface TestRender<E> {
42
42
  readonly window: Window & GlobalThis
43
43
  readonly document: Document
44
44
  readonly elementRef: ElementRef.ElementRef
45
- readonly errors: RefSubject.Computed<never, never, ReadonlyArray<E>>
46
- readonly lastError: RefSubject.Filtered<never, never, E>
45
+ readonly errors: RefSubject.Computed<ReadonlyArray<E>>
46
+ readonly lastError: RefSubject.Filtered<E>
47
47
  readonly interrupt: Effect.Effect<void>
48
48
  readonly makeEvent: (type: string, eventInitDict?: EventInit) => Event
49
49
  readonly makeCustomEvent: <A>(type: string, eventInitDict?: CustomEventInit<A>) => CustomEvent<A>
@@ -54,8 +54,8 @@ export interface TestRender<E> {
54
54
  /**
55
55
  * @since 1.0.0
56
56
  */
57
- export function testRender<R, E>(
58
- fx: Fx.Fx<R, E, RenderEvent>,
57
+ export function testRender<E, R>(
58
+ fx: Fx.Fx<RenderEvent, E, R>,
59
59
  options?:
60
60
  & HappyDOMOptions
61
61
  & { readonly [K in keyof DomServicesElementParams]?: (document: Document) => DomServicesElementParams[K] }
@@ -67,7 +67,7 @@ export function testRender<R, E>(
67
67
  return Effect.gen(function*(_) {
68
68
  const window = yield* _(getOrMakeWindow(options))
69
69
  const elementRef = yield* _(ElementRef.make())
70
- const errors = yield* _(RefSubject.make<never, never, ReadonlyArray<E>>(Effect.succeed([])))
70
+ const errors = yield* _(RefSubject.make<ReadonlyArray<E>>(Effect.succeed([])))
71
71
  const fiber = yield* _(
72
72
  fx,
73
73
  render,
@@ -187,7 +187,7 @@ export interface TestHydrate<E, Elements> extends TestRender<E> {
187
187
  * @since 1.0.0
188
188
  */
189
189
  export function testHydrate<R, E, Elements>(
190
- fx: Fx.Fx<R, E, RenderEvent>,
190
+ fx: Fx.Fx<RenderEvent, E, R>,
191
191
  f: (rendered: Rendered, window: Window & GlobalThis) => Elements,
192
192
  options?:
193
193
  & HappyDOMOptions
@@ -218,7 +218,7 @@ export function testHydrate<R, E, Elements>(
218
218
  const elements = f(rendered.length === 1 ? rendered[0] : rendered, window)
219
219
 
220
220
  const elementRef = yield* _(ElementRef.make())
221
- const errors = yield* _(RefSubject.make<never, never, ReadonlyArray<E>>(Effect.succeed([])))
221
+ const errors = yield* _(RefSubject.make<ReadonlyArray<E>>(Effect.succeed([])))
222
222
  const fiber = yield* _(
223
223
  fx,
224
224
  hydrate,
@@ -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>(
@@ -40,11 +40,7 @@ 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
46
  const context = yield* _(Effect.context<Scope.Scope>())
@@ -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
  }