@typed/template 0.9.6 → 0.10.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/RenderQueue/package.json +6 -0
- package/dist/cjs/Directive.js +1 -1
- package/dist/cjs/Directive.js.map +1 -1
- package/dist/cjs/ElementRef.js +1 -1
- package/dist/cjs/ElementRef.js.map +1 -1
- package/dist/cjs/ElementSource.js +1 -1
- package/dist/cjs/ElementSource.js.map +1 -1
- package/dist/cjs/EventHandler.js +11 -4
- package/dist/cjs/EventHandler.js.map +1 -1
- package/dist/cjs/Html.js +84 -44
- package/dist/cjs/Html.js.map +1 -1
- package/dist/cjs/HtmlChunk.js +67 -21
- package/dist/cjs/HtmlChunk.js.map +1 -1
- package/dist/cjs/Hydrate.js +6 -6
- package/dist/cjs/Hydrate.js.map +1 -1
- package/dist/cjs/Many.js +4 -4
- package/dist/cjs/Many.js.map +1 -1
- package/dist/cjs/Meta.js +10 -3
- package/dist/cjs/Meta.js.map +1 -1
- package/dist/cjs/Parser.js +1 -1
- package/dist/cjs/Placeholder.js +5 -9
- package/dist/cjs/Placeholder.js.map +1 -1
- package/dist/cjs/Platform.js +7 -5
- package/dist/cjs/Platform.js.map +1 -1
- package/dist/cjs/Render.js +8 -7
- package/dist/cjs/Render.js.map +1 -1
- package/dist/cjs/RenderContext.js +8 -92
- package/dist/cjs/RenderContext.js.map +1 -1
- package/dist/cjs/RenderEvent.js +9 -1
- package/dist/cjs/RenderEvent.js.map +1 -1
- package/dist/cjs/RenderQueue.js +341 -0
- package/dist/cjs/RenderQueue.js.map +1 -0
- package/dist/cjs/RenderTemplate.js +1 -1
- package/dist/cjs/RenderTemplate.js.map +1 -1
- package/dist/cjs/Template.js +12 -0
- package/dist/cjs/Template.js.map +1 -1
- package/dist/cjs/Test.js +64 -33
- package/dist/cjs/Test.js.map +1 -1
- package/dist/cjs/Vitest.js +12 -20
- package/dist/cjs/Vitest.js.map +1 -1
- package/dist/cjs/index.js +6 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/EventSource.js +16 -9
- package/dist/cjs/internal/EventSource.js.map +1 -1
- package/dist/cjs/internal/HydrateContext.js.map +1 -1
- package/dist/cjs/internal/browser.js +11 -10
- package/dist/cjs/internal/browser.js.map +1 -1
- package/dist/cjs/internal/character-entities.js +2141 -0
- package/dist/cjs/internal/character-entities.js.map +1 -0
- package/dist/cjs/internal/errors.js +19 -2
- package/dist/cjs/internal/errors.js.map +1 -1
- package/dist/cjs/internal/indexRefCounter.js +36 -63
- package/dist/cjs/internal/indexRefCounter.js.map +1 -1
- package/dist/cjs/internal/parser.js +18 -17
- package/dist/cjs/internal/parser.js.map +1 -1
- package/dist/cjs/internal/parser2.js +382 -0
- package/dist/cjs/internal/parser2.js.map +1 -0
- package/dist/cjs/internal/server-parts.js +124 -0
- package/dist/cjs/internal/server-parts.js.map +1 -0
- package/dist/cjs/internal/server.js +15 -185
- package/dist/cjs/internal/server.js.map +1 -1
- package/dist/cjs/internal/utils.js +73 -9
- package/dist/cjs/internal/utils.js.map +1 -1
- package/dist/cjs/internal/v2/SyncPart.js +6 -0
- package/dist/cjs/internal/v2/SyncPart.js.map +1 -0
- package/dist/cjs/internal/v2/helpers.js +15 -0
- package/dist/cjs/internal/v2/helpers.js.map +1 -0
- package/dist/cjs/internal/v2/hydrate.js +202 -0
- package/dist/cjs/internal/v2/hydrate.js.map +1 -0
- package/dist/cjs/internal/v2/hydration-template.js +269 -0
- package/dist/cjs/internal/v2/hydration-template.js.map +1 -0
- package/dist/cjs/internal/v2/parts.js +169 -0
- package/dist/cjs/internal/v2/parts.js.map +1 -0
- package/dist/cjs/internal/v2/render-entry.js +110 -0
- package/dist/cjs/internal/v2/render-entry.js.map +1 -0
- package/dist/cjs/internal/v2/render-sync-parts.js +318 -0
- package/dist/cjs/internal/v2/render-sync-parts.js.map +1 -0
- package/dist/cjs/internal/v2/render.js +417 -0
- package/dist/cjs/internal/v2/render.js.map +1 -0
- package/dist/cjs/internal/v2/sync-parts.js +115 -0
- package/dist/cjs/internal/v2/sync-parts.js.map +1 -0
- package/dist/dts/ElementRef.d.ts +1 -1
- package/dist/dts/ElementRef.d.ts.map +1 -1
- package/dist/dts/ElementSource.d.ts +1 -1
- package/dist/dts/ElementSource.d.ts.map +1 -1
- package/dist/dts/EventHandler.d.ts +12 -8
- package/dist/dts/EventHandler.d.ts.map +1 -1
- package/dist/dts/Html.d.ts +6 -5
- package/dist/dts/Html.d.ts.map +1 -1
- package/dist/dts/HtmlChunk.d.ts.map +1 -1
- package/dist/dts/Hydrate.d.ts +1 -3
- package/dist/dts/Hydrate.d.ts.map +1 -1
- package/dist/dts/Many.d.ts +9 -11
- package/dist/dts/Many.d.ts.map +1 -1
- package/dist/dts/Meta.d.ts +5 -1
- package/dist/dts/Meta.d.ts.map +1 -1
- package/dist/dts/Parser.d.ts +1 -1
- package/dist/dts/Parser.d.ts.map +1 -1
- package/dist/dts/Part.d.ts +20 -56
- package/dist/dts/Part.d.ts.map +1 -1
- package/dist/dts/Placeholder.d.ts +6 -10
- package/dist/dts/Placeholder.d.ts.map +1 -1
- package/dist/dts/Platform.d.ts +2 -4
- package/dist/dts/Platform.d.ts.map +1 -1
- package/dist/dts/Render.d.ts +4 -8
- package/dist/dts/Render.d.ts.map +1 -1
- package/dist/dts/RenderContext.d.ts +3 -22
- package/dist/dts/RenderContext.d.ts.map +1 -1
- package/dist/dts/RenderEvent.d.ts +6 -1
- package/dist/dts/RenderEvent.d.ts.map +1 -1
- package/dist/dts/RenderQueue.d.ts +103 -0
- package/dist/dts/RenderQueue.d.ts.map +1 -0
- package/dist/dts/RenderTemplate.d.ts +3 -2
- package/dist/dts/RenderTemplate.d.ts.map +1 -1
- package/dist/dts/Renderable.d.ts +1 -1
- package/dist/dts/Template.d.ts +14 -1
- package/dist/dts/Template.d.ts.map +1 -1
- package/dist/dts/Test.d.ts +14 -1
- package/dist/dts/Test.d.ts.map +1 -1
- package/dist/dts/Vitest.d.ts +11 -8
- package/dist/dts/Vitest.d.ts.map +1 -1
- package/dist/dts/index.d.ts +4 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/EventSource.d.ts +2 -1
- package/dist/dts/internal/EventSource.d.ts.map +1 -1
- package/dist/dts/internal/browser.d.ts +3 -3
- package/dist/dts/internal/browser.d.ts.map +1 -1
- package/dist/dts/internal/character-entities.d.ts +2133 -0
- package/dist/dts/internal/character-entities.d.ts.map +1 -0
- package/dist/dts/internal/errors.d.ts +9 -1
- package/dist/dts/internal/errors.d.ts.map +1 -1
- package/dist/dts/internal/indexRefCounter.d.ts +0 -4
- package/dist/dts/internal/indexRefCounter.d.ts.map +1 -1
- package/dist/dts/internal/parser.d.ts +13 -0
- package/dist/dts/internal/parser.d.ts.map +1 -1
- package/dist/dts/internal/parser2.d.ts +12 -0
- package/dist/dts/internal/parser2.d.ts.map +1 -0
- package/dist/dts/internal/server-parts.d.ts +223 -0
- package/dist/dts/internal/server-parts.d.ts.map +1 -0
- package/dist/dts/internal/server.d.ts +2 -28
- package/dist/dts/internal/server.d.ts.map +1 -1
- package/dist/dts/internal/utils.d.ts +4 -1
- package/dist/dts/internal/utils.d.ts.map +1 -1
- package/dist/dts/internal/v2/SyncPart.d.ts +87 -0
- package/dist/dts/internal/v2/SyncPart.d.ts.map +1 -0
- package/dist/dts/internal/v2/helpers.d.ts +3 -0
- package/dist/dts/internal/v2/helpers.d.ts.map +1 -0
- package/dist/dts/internal/v2/hydrate.d.ts +7 -0
- package/dist/dts/internal/v2/hydrate.d.ts.map +1 -0
- package/dist/dts/internal/v2/hydration-template.d.ts +54 -0
- package/dist/dts/internal/v2/hydration-template.d.ts.map +1 -0
- package/dist/dts/internal/v2/parts.d.ts +245 -0
- package/dist/dts/internal/v2/parts.d.ts.map +1 -0
- package/dist/dts/internal/v2/render-entry.d.ts +6 -0
- package/dist/dts/internal/v2/render-entry.d.ts.map +1 -0
- package/dist/dts/internal/v2/render-sync-parts.d.ts +22 -0
- package/dist/dts/internal/v2/render-sync-parts.d.ts.map +1 -0
- package/dist/dts/internal/v2/render.d.ts +62 -0
- package/dist/dts/internal/v2/render.d.ts.map +1 -0
- package/dist/dts/internal/v2/sync-parts.d.ts +129 -0
- package/dist/dts/internal/v2/sync-parts.d.ts.map +1 -0
- package/dist/esm/ElementRef.js.map +1 -1
- package/dist/esm/EventHandler.js +14 -4
- package/dist/esm/EventHandler.js.map +1 -1
- package/dist/esm/Html.js +91 -50
- package/dist/esm/Html.js.map +1 -1
- package/dist/esm/HtmlChunk.js +75 -24
- package/dist/esm/HtmlChunk.js.map +1 -1
- package/dist/esm/Hydrate.js +5 -5
- package/dist/esm/Hydrate.js.map +1 -1
- package/dist/esm/Many.js +3 -3
- package/dist/esm/Many.js.map +1 -1
- package/dist/esm/Meta.js +7 -1
- package/dist/esm/Meta.js.map +1 -1
- package/dist/esm/Parser.js +1 -1
- package/dist/esm/Parser.js.map +1 -1
- package/dist/esm/Placeholder.js +4 -8
- package/dist/esm/Placeholder.js.map +1 -1
- package/dist/esm/Platform.js +3 -1
- package/dist/esm/Platform.js.map +1 -1
- package/dist/esm/Render.js +6 -5
- package/dist/esm/Render.js.map +1 -1
- package/dist/esm/RenderContext.js +5 -85
- package/dist/esm/RenderContext.js.map +1 -1
- package/dist/esm/RenderEvent.js +8 -1
- package/dist/esm/RenderEvent.js.map +1 -1
- package/dist/esm/RenderQueue.js +336 -0
- package/dist/esm/RenderQueue.js.map +1 -0
- package/dist/esm/RenderTemplate.js.map +1 -1
- package/dist/esm/Template.js +12 -0
- package/dist/esm/Template.js.map +1 -1
- package/dist/esm/Test.js +71 -30
- package/dist/esm/Test.js.map +1 -1
- package/dist/esm/Vitest.js +11 -8
- package/dist/esm/Vitest.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/EventSource.js +12 -7
- package/dist/esm/internal/EventSource.js.map +1 -1
- package/dist/esm/internal/HydrateContext.js.map +1 -1
- package/dist/esm/internal/browser.js +10 -9
- package/dist/esm/internal/browser.js.map +1 -1
- package/dist/esm/internal/character-entities.js +2134 -0
- package/dist/esm/internal/character-entities.js.map +1 -0
- package/dist/esm/internal/errors.js +22 -2
- package/dist/esm/internal/errors.js.map +1 -1
- package/dist/esm/internal/indexRefCounter.js +36 -61
- package/dist/esm/internal/indexRefCounter.js.map +1 -1
- package/dist/esm/internal/parser.js +18 -18
- package/dist/esm/internal/parser.js.map +1 -1
- package/dist/esm/internal/parser2.js +393 -0
- package/dist/esm/internal/parser2.js.map +1 -0
- package/dist/esm/internal/server-parts.js +109 -0
- package/dist/esm/internal/server-parts.js.map +1 -0
- package/dist/esm/internal/server.js +12 -161
- package/dist/esm/internal/server.js.map +1 -1
- package/dist/esm/internal/utils.js +71 -7
- package/dist/esm/internal/utils.js.map +1 -1
- package/dist/esm/internal/v2/SyncPart.js +5 -0
- package/dist/esm/internal/v2/SyncPart.js.map +1 -0
- package/dist/esm/internal/v2/helpers.js +12 -0
- package/dist/esm/internal/v2/helpers.js.map +1 -0
- package/dist/esm/internal/v2/hydrate.js +195 -0
- package/dist/esm/internal/v2/hydrate.js.map +1 -0
- package/dist/esm/internal/v2/hydration-template.js +265 -0
- package/dist/esm/internal/v2/hydration-template.js.map +1 -0
- package/dist/esm/internal/v2/parts.js +150 -0
- package/dist/esm/internal/v2/parts.js.map +1 -0
- package/dist/esm/internal/v2/render-entry.js +102 -0
- package/dist/esm/internal/v2/render-entry.js.map +1 -0
- package/dist/esm/internal/v2/render-sync-parts.js +265 -0
- package/dist/esm/internal/v2/render-sync-parts.js.map +1 -0
- package/dist/esm/internal/v2/render.js +353 -0
- package/dist/esm/internal/v2/render.js.map +1 -0
- package/dist/esm/internal/v2/sync-parts.js +102 -0
- package/dist/esm/internal/v2/sync-parts.js.map +1 -0
- package/package.json +20 -13
- package/src/ElementRef.ts +1 -1
- package/src/ElementSource.ts +1 -1
- package/src/EventHandler.ts +29 -11
- package/src/Html.ts +199 -90
- package/src/HtmlChunk.ts +77 -30
- package/src/Hydrate.ts +20 -14
- package/src/Many.ts +17 -14
- package/src/Meta.ts +8 -1
- package/src/Parser.ts +1 -1
- package/src/Part.ts +22 -66
- package/src/Placeholder.ts +17 -15
- package/src/Platform.ts +5 -5
- package/src/Render.ts +23 -26
- package/src/RenderContext.ts +14 -142
- package/src/RenderEvent.ts +10 -1
- package/src/RenderQueue.ts +445 -0
- package/src/RenderTemplate.ts +7 -2
- package/src/Renderable.ts +1 -1
- package/src/Template.ts +15 -1
- package/src/Test.ts +122 -38
- package/src/Vitest.ts +20 -10
- package/src/index.ts +4 -0
- package/src/internal/EventSource.ts +14 -8
- package/src/internal/HydrateContext.ts +3 -4
- package/src/internal/browser.ts +26 -21
- package/src/internal/character-entities.ts +2136 -0
- package/src/internal/errors.ts +30 -3
- package/src/internal/indexRefCounter.ts +38 -70
- package/src/internal/parser.ts +19 -19
- package/src/internal/parser2.ts +468 -0
- package/src/internal/server-parts.ts +161 -0
- package/src/internal/server.ts +16 -272
- package/src/internal/utils.ts +83 -7
- package/src/internal/v2/SyncPart.ts +112 -0
- package/src/internal/v2/helpers.ts +13 -0
- package/src/internal/v2/hydrate.ts +289 -0
- package/src/internal/v2/hydration-template.ts +308 -0
- package/src/internal/v2/parts.ts +254 -0
- package/src/internal/v2/render-entry.ts +131 -0
- package/src/internal/v2/render-sync-parts.ts +440 -0
- package/src/internal/v2/render.ts +588 -0
- package/src/internal/v2/sync-parts.ts +133 -0
- package/dist/cjs/internal/hydrate.js +0 -274
- package/dist/cjs/internal/hydrate.js.map +0 -1
- package/dist/cjs/internal/parts.js +0 -451
- package/dist/cjs/internal/parts.js.map +0 -1
- package/dist/cjs/internal/render.js +0 -704
- package/dist/cjs/internal/render.js.map +0 -1
- package/dist/dts/internal/hydrate.d.ts +0 -33
- package/dist/dts/internal/hydrate.d.ts.map +0 -1
- package/dist/dts/internal/parts.d.ts +0 -314
- package/dist/dts/internal/parts.d.ts.map +0 -1
- package/dist/dts/internal/render.d.ts +0 -16
- package/dist/dts/internal/render.d.ts.map +0 -1
- package/dist/esm/internal/hydrate.js +0 -239
- package/dist/esm/internal/hydrate.js.map +0 -1
- package/dist/esm/internal/parts.js +0 -373
- package/dist/esm/internal/parts.js.map +0 -1
- package/dist/esm/internal/render.js +0 -689
- package/dist/esm/internal/render.js.map +0 -1
- package/src/internal/hydrate.ts +0 -366
- package/src/internal/parts.ts +0 -609
- package/src/internal/render.ts +0 -971
package/src/Hydrate.ts
CHANGED
|
@@ -11,9 +11,10 @@ import type { CurrentEnvironment } from "@typed/environment"
|
|
|
11
11
|
import * as Fx from "@typed/fx/Fx"
|
|
12
12
|
import * as Effect from "effect/Effect"
|
|
13
13
|
import * as Layer from "effect/Layer"
|
|
14
|
-
import { findRootParentChildNodes, hydrateTemplate } from "./internal/hydrate.js"
|
|
15
14
|
import { HydrateContext } from "./internal/HydrateContext.js"
|
|
16
|
-
import {
|
|
15
|
+
import { hydrateTemplate } from "./internal/v2/hydrate.js"
|
|
16
|
+
import { getHydrationRoot } from "./internal/v2/hydration-template.js"
|
|
17
|
+
import { attachRoot } from "./internal/v2/render.js"
|
|
17
18
|
import type { ToRendered } from "./Render.js"
|
|
18
19
|
import * as RenderContext from "./RenderContext.js"
|
|
19
20
|
import { type RenderEvent } from "./RenderEvent.js"
|
|
@@ -24,7 +25,7 @@ import { RenderTemplate } from "./RenderTemplate.js"
|
|
|
24
25
|
*/
|
|
25
26
|
export const hydrateLayer = (
|
|
26
27
|
window: Window & GlobalThis,
|
|
27
|
-
options?: DomServicesElementParams
|
|
28
|
+
options?: DomServicesElementParams
|
|
28
29
|
): Layer.Layer<
|
|
29
30
|
| RenderTemplate
|
|
30
31
|
| RenderContext.RenderContext
|
|
@@ -32,15 +33,19 @@ export const hydrateLayer = (
|
|
|
32
33
|
| DomServices
|
|
33
34
|
> =>
|
|
34
35
|
Layer.provideMerge(
|
|
35
|
-
RenderTemplate.layer(
|
|
36
|
-
|
|
37
|
-
context
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
RenderTemplate.layer(
|
|
37
|
+
Effect.contextWith(
|
|
38
|
+
(context: Context.Context<Document | RenderContext.RenderContext>) => {
|
|
39
|
+
const [document, ctx] = Context.getMany(
|
|
40
|
+
context,
|
|
41
|
+
Document,
|
|
42
|
+
RenderContext.RenderContext
|
|
43
|
+
)
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
return hydrateTemplate(document, ctx)
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
),
|
|
44
49
|
RenderContext.dom(window, options)
|
|
45
50
|
)
|
|
46
51
|
|
|
@@ -57,8 +62,7 @@ export function hydrate<R, E, T extends RenderEvent | null>(
|
|
|
57
62
|
RootElement
|
|
58
63
|
)
|
|
59
64
|
const ctx: HydrateContext = {
|
|
60
|
-
where:
|
|
61
|
-
rootIndex: -1,
|
|
65
|
+
where: getHydrationRoot(rootElement),
|
|
62
66
|
parentTemplate: null,
|
|
63
67
|
hydrate: true
|
|
64
68
|
}
|
|
@@ -76,5 +80,7 @@ export function hydrate<R, E, T extends RenderEvent | null>(
|
|
|
76
80
|
export function hydrateToLayer<R, E, T extends RenderEvent | null>(
|
|
77
81
|
rendered: Fx.Fx<T, E, R>
|
|
78
82
|
): Layer.Layer<never, never, R | RenderTemplate | RenderContext.RenderContext | RootElement> {
|
|
79
|
-
return Fx.drainLayer(
|
|
83
|
+
return Fx.drainLayer(
|
|
84
|
+
Fx.switchMapCause(hydrate(rendered), (cause) => Fx.fromEffect(Effect.logError(`Hydration Failure`, cause)))
|
|
85
|
+
)
|
|
80
86
|
}
|
package/src/Many.ts
CHANGED
|
@@ -6,12 +6,11 @@ import type { Progress } from "@typed/async-data/Progress"
|
|
|
6
6
|
import * as RefAsyncData from "@typed/fx/AsyncData"
|
|
7
7
|
import * as Fx from "@typed/fx/Fx"
|
|
8
8
|
import * as RefSubject from "@typed/fx/RefSubject"
|
|
9
|
-
import type { Scope } from "effect"
|
|
10
9
|
import { get, getOption } from "effect/Context"
|
|
11
10
|
import * as Effect from "effect/Effect"
|
|
12
11
|
import { dual } from "effect/Function"
|
|
13
12
|
import { isSome } from "effect/Option"
|
|
14
|
-
import type
|
|
13
|
+
import type * as Scope from "effect/Scope"
|
|
15
14
|
import { HydrateContext } from "./internal/HydrateContext.js"
|
|
16
15
|
import { MANY_HOLE } from "./Meta.js"
|
|
17
16
|
import { RenderContext } from "./RenderContext.js"
|
|
@@ -23,7 +22,7 @@ import { HtmlRenderEvent, type RenderEvent } from "./RenderEvent.js"
|
|
|
23
22
|
export function many<A, E, R, B extends PropertyKey, R2, E2>(
|
|
24
23
|
values: Fx.Fx<ReadonlyArray<A>, E, R>,
|
|
25
24
|
getKey: (a: NoInfer<A>) => B,
|
|
26
|
-
f: (a: RefSubject.RefSubject<
|
|
25
|
+
f: (a: RefSubject.RefSubject<A>, key: B) => Fx.Fx<RenderEvent, E2, R2>
|
|
27
26
|
): Fx.Fx<RenderEvent | ReadonlyArray<RenderEvent>, E | E2, R | R2 | Scope.Scope | RenderContext> {
|
|
28
27
|
return Fx.fromFxEffect(
|
|
29
28
|
Effect.contextWith(
|
|
@@ -37,7 +36,7 @@ export function many<A, E, R, B extends PropertyKey, R2, E2>(
|
|
|
37
36
|
return Fx.keyed(values, {
|
|
38
37
|
getKey,
|
|
39
38
|
onValue: (ref, key) =>
|
|
40
|
-
Fx.provideService(f(ref, key), HydrateContext, { ...hydrateContext.value,
|
|
39
|
+
Fx.provideService(f(ref, key), HydrateContext, { ...hydrateContext.value, manyKey: key.toString() })
|
|
41
40
|
})
|
|
42
41
|
}
|
|
43
42
|
|
|
@@ -55,10 +54,16 @@ export function many<A, E, R, B extends PropertyKey, R2, E2>(
|
|
|
55
54
|
return Fx.fromFxEffect(
|
|
56
55
|
Effect.map(Fx.first(values), (values) =>
|
|
57
56
|
Fx.mergeOrdered(
|
|
58
|
-
values.map((value) =>
|
|
57
|
+
values.map((value, i) =>
|
|
59
58
|
Fx.fromFxEffect(Effect.map(RefSubject.of(value), (ref) => {
|
|
60
59
|
const key = getKey(value)
|
|
61
|
-
return Fx.append(
|
|
60
|
+
return Fx.append(
|
|
61
|
+
Fx.map(
|
|
62
|
+
f(RefSubject.take(ref, 1), key),
|
|
63
|
+
(r) => HtmlRenderEvent((r as HtmlRenderEvent).html, false)
|
|
64
|
+
),
|
|
65
|
+
HtmlRenderEvent(MANY_HOLE(key), i === values.length - 1)
|
|
66
|
+
)
|
|
62
67
|
}))
|
|
63
68
|
)
|
|
64
69
|
))
|
|
@@ -68,8 +73,6 @@ export function many<A, E, R, B extends PropertyKey, R2, E2>(
|
|
|
68
73
|
)
|
|
69
74
|
}
|
|
70
75
|
|
|
71
|
-
type TODO = any
|
|
72
|
-
|
|
73
76
|
/**
|
|
74
77
|
* @since 1.0.0
|
|
75
78
|
*/
|
|
@@ -86,9 +89,9 @@ export const manyAsyncData: {
|
|
|
86
89
|
getKey: (a: A) => B,
|
|
87
90
|
matchers: {
|
|
88
91
|
NoData: () => NoData
|
|
89
|
-
Loading: (
|
|
90
|
-
Failure: (data: RefSubject.Computed<E1
|
|
91
|
-
Success: (value: RefSubject.Computed<A
|
|
92
|
+
Loading: (data: RefSubject.Filtered<Progress>) => Loading
|
|
93
|
+
Failure: (data: RefSubject.Computed<E1>) => Failure
|
|
94
|
+
Success: (value: RefSubject.Computed<A>) => Success
|
|
92
95
|
}
|
|
93
96
|
): <E, R>(
|
|
94
97
|
fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>
|
|
@@ -113,9 +116,9 @@ export const manyAsyncData: {
|
|
|
113
116
|
getKey: (a: A) => B,
|
|
114
117
|
matchers: {
|
|
115
118
|
NoData: () => NoData
|
|
116
|
-
Loading: (data:
|
|
117
|
-
Failure: (data: RefSubject.Computed<E1
|
|
118
|
-
Success: (value: RefSubject.Computed<A
|
|
119
|
+
Loading: (data: RefSubject.Filtered<Progress>) => Loading
|
|
120
|
+
Failure: (data: RefSubject.Computed<E1>) => Failure
|
|
121
|
+
Success: (value: RefSubject.Computed<A>) => Success
|
|
119
122
|
}
|
|
120
123
|
): Fx.Fx<
|
|
121
124
|
Fx.Fx.Success<NoData | Loading | Failure | Success>,
|
package/src/Meta.ts
CHANGED
|
@@ -29,7 +29,14 @@ export const TEXT_START = "<!--text-->"
|
|
|
29
29
|
/**
|
|
30
30
|
* @since 1.0.0
|
|
31
31
|
*/
|
|
32
|
-
export const
|
|
32
|
+
export const TYPED_HOLE_START = (index: number) => `<!--hole${index}-->`
|
|
33
|
+
|
|
34
|
+
// Used to mark where a NodePart is in the DOM. It can be found directly after the
|
|
35
|
+
// elements or text nodes it is managing.
|
|
36
|
+
/**
|
|
37
|
+
* @since 1.0.0
|
|
38
|
+
*/
|
|
39
|
+
export const TYPED_HOLE_END = (index: number) => `<!--/hole${index}-->`
|
|
33
40
|
|
|
34
41
|
/**
|
|
35
42
|
* Used to mark separation between the start and end of a template.
|
package/src/Parser.ts
CHANGED
package/src/Part.ts
CHANGED
|
@@ -20,9 +20,9 @@ export type Part =
|
|
|
20
20
|
| EventPart
|
|
21
21
|
| NodePart
|
|
22
22
|
| PropertyPart
|
|
23
|
+
| PropertiesPart
|
|
23
24
|
| RefPart
|
|
24
25
|
| TextPart
|
|
25
|
-
| PropertiesPart
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* @since 1.0.0
|
|
@@ -33,7 +33,7 @@ export interface AttributePart {
|
|
|
33
33
|
readonly value: string | null | undefined
|
|
34
34
|
readonly index: number
|
|
35
35
|
|
|
36
|
-
readonly update: (value: this["value"]) => Effect<void, never, Scope>
|
|
36
|
+
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
@@ -45,7 +45,7 @@ export interface BooleanPart {
|
|
|
45
45
|
readonly value: boolean | null | undefined
|
|
46
46
|
readonly index: number
|
|
47
47
|
|
|
48
|
-
readonly update: (value: this["value"]) => Effect<void, never, Scope>
|
|
48
|
+
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
/**
|
|
@@ -53,10 +53,10 @@ export interface BooleanPart {
|
|
|
53
53
|
*/
|
|
54
54
|
export interface ClassNamePart {
|
|
55
55
|
readonly _tag: "className"
|
|
56
|
-
readonly value: ReadonlyArray<string>
|
|
56
|
+
readonly value: ReadonlyArray<string>
|
|
57
57
|
readonly index: number
|
|
58
58
|
|
|
59
|
-
readonly update: (value: this["value"]) => Effect<void, never, Scope>
|
|
59
|
+
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
/**
|
|
@@ -67,7 +67,7 @@ export interface DataPart {
|
|
|
67
67
|
readonly value: Readonly<Record<string, string | undefined>> | null | undefined
|
|
68
68
|
readonly index: number
|
|
69
69
|
|
|
70
|
-
readonly update: (value: this["value"]) => Effect<void, never, Scope>
|
|
70
|
+
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
/**
|
|
@@ -92,7 +92,18 @@ export interface PropertyPart {
|
|
|
92
92
|
readonly value: unknown
|
|
93
93
|
readonly index: number
|
|
94
94
|
|
|
95
|
-
readonly update: (value: this["value"]) => Effect<void, never, Scope>
|
|
95
|
+
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @since 1.0.0
|
|
100
|
+
*/
|
|
101
|
+
export interface PropertiesPart {
|
|
102
|
+
readonly _tag: "properties"
|
|
103
|
+
readonly value: Record<string, any> | null | undefined
|
|
104
|
+
readonly index: number
|
|
105
|
+
|
|
106
|
+
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
96
107
|
}
|
|
97
108
|
|
|
98
109
|
/**
|
|
@@ -112,7 +123,7 @@ export interface CommentPart {
|
|
|
112
123
|
readonly value: string | null | undefined
|
|
113
124
|
readonly index: number
|
|
114
125
|
|
|
115
|
-
readonly update: (value: this["value"]) => Effect<void, never, Scope>
|
|
126
|
+
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
116
127
|
}
|
|
117
128
|
|
|
118
129
|
/**
|
|
@@ -123,7 +134,7 @@ export interface TextPart {
|
|
|
123
134
|
readonly value: string | null | undefined
|
|
124
135
|
readonly index: number
|
|
125
136
|
|
|
126
|
-
readonly update: (value: this["value"]) => Effect<void, never, Scope>
|
|
137
|
+
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
127
138
|
}
|
|
128
139
|
|
|
129
140
|
/**
|
|
@@ -134,65 +145,10 @@ export interface NodePart {
|
|
|
134
145
|
readonly value: unknown
|
|
135
146
|
readonly index: number
|
|
136
147
|
|
|
137
|
-
readonly update: (value: this["value"]) => Effect<void, never, Scope>
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* @since 1.0.0
|
|
142
|
-
*/
|
|
143
|
-
export interface PropertiesPart {
|
|
144
|
-
readonly _tag: "properties"
|
|
145
|
-
readonly value: Readonly<Record<string, any>> | null | undefined
|
|
146
|
-
readonly index: number
|
|
147
|
-
|
|
148
|
-
readonly update: (value: this["value"]) => Effect<void, never, Scope>
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* @since 1.0.0
|
|
153
|
-
*/
|
|
154
|
-
export type SparsePart = SparseAttributePart | SparseClassNamePart | SparseCommentPart
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* @since 1.0.0
|
|
158
|
-
*/
|
|
159
|
-
export interface SparseAttributePart {
|
|
160
|
-
readonly _tag: "sparse/attribute"
|
|
161
|
-
readonly name: string
|
|
162
|
-
readonly parts: ReadonlyArray<AttributePart | StaticText>
|
|
163
|
-
|
|
164
|
-
readonly update: (value: ReadonlyArray<string>) => Effect<void, never, Scope>
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* @since 1.0.0
|
|
169
|
-
*/
|
|
170
|
-
export interface SparseClassNamePart {
|
|
171
|
-
readonly _tag: "sparse/className"
|
|
172
|
-
readonly parts: ReadonlyArray<ClassNamePart | StaticText>
|
|
173
|
-
|
|
174
|
-
readonly update: (value: ReadonlyArray<string>) => Effect<void, never, Scope>
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* @since 1.0.0
|
|
179
|
-
*/
|
|
180
|
-
export interface SparseCommentPart {
|
|
181
|
-
readonly _tag: "sparse/comment"
|
|
182
|
-
readonly parts: ReadonlyArray<CommentPart | StaticText>
|
|
183
|
-
|
|
184
|
-
readonly update: (value: ReadonlyArray<string>) => Effect<void, never, Scope>
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* @since 1.0.0
|
|
189
|
-
*/
|
|
190
|
-
export interface StaticText {
|
|
191
|
-
readonly _tag: "static/text"
|
|
192
|
-
readonly value: string
|
|
148
|
+
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
193
149
|
}
|
|
194
150
|
|
|
195
151
|
/**
|
|
196
152
|
* @since 1.0.0
|
|
197
153
|
*/
|
|
198
|
-
export type Parts = ReadonlyArray<Part
|
|
154
|
+
export type Parts = ReadonlyArray<Part>
|
package/src/Placeholder.ts
CHANGED
|
@@ -2,10 +2,8 @@
|
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
+
import * as Fx from "@typed/fx"
|
|
5
6
|
import "./internal/module-augmentation.js"
|
|
6
|
-
import type { Fx } from "@typed/fx/Fx"
|
|
7
|
-
import { isFx } from "@typed/fx/Fx"
|
|
8
|
-
import * as RefSubject from "@typed/fx/RefSubject"
|
|
9
7
|
import * as Effect from "effect/Effect"
|
|
10
8
|
import type * as Scope from "effect/Scope"
|
|
11
9
|
|
|
@@ -41,36 +39,40 @@ export namespace Placeholder {
|
|
|
41
39
|
| Placeholder<A, never, any>
|
|
42
40
|
| Placeholder<A>
|
|
43
41
|
| Placeholder<A, any>
|
|
42
|
+
| Effect.Effect<A, any, any>
|
|
43
|
+
// Null/Undefined cannot be modified globally to make them placeholders
|
|
44
|
+
| ([A] extends [null] ? null : never)
|
|
45
|
+
| ([A] extends [undefined] ? undefined : never)
|
|
44
46
|
|
|
45
47
|
/**
|
|
46
48
|
* @since 1.0.0
|
|
47
49
|
*/
|
|
48
50
|
export type Context<T> = [T] extends [never] ? never
|
|
49
|
-
:
|
|
51
|
+
: T extends Effect.Effect<infer _A, infer _E, infer R> ? R
|
|
52
|
+
: T extends Placeholder<infer _A, infer _E, infer R> ? R
|
|
50
53
|
: never
|
|
51
54
|
/**
|
|
52
55
|
* @since 1.0.0
|
|
53
56
|
*/
|
|
54
57
|
export type Error<T> = [T] extends [never] ? never
|
|
55
|
-
:
|
|
58
|
+
: T extends Effect.Effect<infer _A, infer E, infer _R> ? E
|
|
59
|
+
: T extends Placeholder<infer _A, infer E, infer _R> ? E
|
|
56
60
|
: never
|
|
57
61
|
/**
|
|
58
62
|
* @since 1.0.0
|
|
59
63
|
*/
|
|
60
64
|
export type Success<T> = [T] extends [never] ? never
|
|
61
|
-
:
|
|
65
|
+
: T extends Effect.Effect<infer A, infer _E, infer _R> ? A
|
|
66
|
+
: T extends Placeholder<infer A, infer _E, infer _R> ? A
|
|
62
67
|
: never
|
|
63
68
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
): Effect.Effect<RefSubject.RefSubject<A, E>, never, R | Scope.Scope> {
|
|
70
|
-
if (isFx<A, E, R>(placeholder) || Effect.isEffect(placeholder)) {
|
|
71
|
-
return RefSubject.make(placeholder as Fx<A, E, R>)
|
|
69
|
+
export function asRef<A, E = never, R = never>(
|
|
70
|
+
placeholder: Fx.Fx<A, E, R> | Effect.Effect<A, E, R> | Placeholder<A, E, R> | A
|
|
71
|
+
): Effect.Effect<Fx.RefSubject.RefSubject<A, E, never>, never, Scope.Scope | R> {
|
|
72
|
+
if (Fx.isFx(placeholder) || Effect.isEffect(placeholder)) {
|
|
73
|
+
return Fx.RefSubject.make(placeholder)
|
|
72
74
|
} else {
|
|
73
|
-
return RefSubject.of
|
|
75
|
+
return Fx.RefSubject.of(placeholder as A)
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
78
|
}
|
package/src/Platform.ts
CHANGED
|
@@ -7,11 +7,11 @@ import type { ServerRequest } from "@effect/platform/Http/ServerRequest"
|
|
|
7
7
|
import * as HttpServer from "@effect/platform/HttpServer"
|
|
8
8
|
import type * as Fx from "@typed/fx/Fx"
|
|
9
9
|
import { toStream } from "@typed/fx/Stream"
|
|
10
|
-
import
|
|
10
|
+
import * as Effect from "effect/Effect"
|
|
11
|
+
import * as Option from "effect/Option"
|
|
12
|
+
import * as Stream from "effect/Stream"
|
|
11
13
|
import { renderToHtml } from "./Html.js"
|
|
12
|
-
import type * as RenderContext from "./RenderContext.js"
|
|
13
14
|
import type { RenderEvent } from "./RenderEvent.js"
|
|
14
|
-
import type { RenderTemplate } from "./RenderTemplate.js"
|
|
15
15
|
|
|
16
16
|
const HTML_CONTENT_TYPE = "text/html"
|
|
17
17
|
const CAMEL_CASE_CONTENT_TYPE = { contentType: HTML_CONTENT_TYPE }
|
|
@@ -21,9 +21,9 @@ const HYPHENATED_CONTENT_TYPE = { "content-type": HTML_CONTENT_TYPE }
|
|
|
21
21
|
* @since 1.0.0
|
|
22
22
|
*/
|
|
23
23
|
export function htmlResponse<E, R>(
|
|
24
|
-
fx: Fx.Fx<RenderEvent, E, R>,
|
|
24
|
+
fx: Fx.Fx<RenderEvent | null, E, R>,
|
|
25
25
|
options?: HttpServer.response.Options
|
|
26
|
-
): Effect.Effect<HttpServer.response.ServerResponse, E, R
|
|
26
|
+
): Effect.Effect<HttpServer.response.ServerResponse, E, R> {
|
|
27
27
|
return Effect.contextWithEffect((ctx) =>
|
|
28
28
|
HttpServer.response.stream(
|
|
29
29
|
Stream.provideContext(Stream.encodeText(toStream(renderToHtml(fx))), ctx),
|
package/src/Render.ts
CHANGED
|
@@ -10,10 +10,11 @@ import { RootElement } from "@typed/dom/RootElement"
|
|
|
10
10
|
import type { CurrentEnvironment } from "@typed/environment"
|
|
11
11
|
import * as Fx from "@typed/fx/Fx"
|
|
12
12
|
import { type Rendered } from "@typed/wire"
|
|
13
|
-
import type { Scope } from "effect"
|
|
14
|
-
import { Layer } from "effect"
|
|
15
13
|
import * as Effect from "effect/Effect"
|
|
16
|
-
import {
|
|
14
|
+
import { pipe } from "effect/Function"
|
|
15
|
+
import * as Layer from "effect/Layer"
|
|
16
|
+
import type * as Scope from "effect/Scope"
|
|
17
|
+
import { attachRoot, renderTemplate } from "./internal/v2/render.js"
|
|
17
18
|
import * as RenderContext from "./RenderContext.js"
|
|
18
19
|
import { type RenderEvent } from "./RenderEvent.js"
|
|
19
20
|
import { RenderTemplate } from "./RenderTemplate.js"
|
|
@@ -28,7 +29,7 @@ export type ToRendered<T extends RenderEvent | null> = T extends null ? Rendered
|
|
|
28
29
|
*/
|
|
29
30
|
export const renderLayer = (
|
|
30
31
|
window: Window & GlobalThis,
|
|
31
|
-
options?: DomServicesElementParams
|
|
32
|
+
options?: DomServicesElementParams
|
|
32
33
|
): Layer.Layer<
|
|
33
34
|
| RenderTemplate
|
|
34
35
|
| RenderContext.RenderContext
|
|
@@ -36,15 +37,21 @@ export const renderLayer = (
|
|
|
36
37
|
| DomServices
|
|
37
38
|
> =>
|
|
38
39
|
Layer.provideMerge(
|
|
39
|
-
RenderTemplate.layer(
|
|
40
|
-
|
|
41
|
-
context
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
RenderTemplate.layer(
|
|
41
|
+
Effect.contextWith(
|
|
42
|
+
(context: Context.Context<Document | RenderContext.RenderContext>) => {
|
|
43
|
+
const [document, ctx] = pipe(
|
|
44
|
+
context,
|
|
45
|
+
Context.getMany(
|
|
46
|
+
Document,
|
|
47
|
+
RenderContext.RenderContext
|
|
48
|
+
)
|
|
49
|
+
)
|
|
45
50
|
|
|
46
|
-
|
|
47
|
-
|
|
51
|
+
return renderTemplate(document, ctx)
|
|
52
|
+
}
|
|
53
|
+
)
|
|
54
|
+
),
|
|
48
55
|
RenderContext.dom(window, options)
|
|
49
56
|
)
|
|
50
57
|
|
|
@@ -69,19 +76,9 @@ export function render<R, E, T extends RenderEvent | null>(
|
|
|
69
76
|
* @since 1.0.0
|
|
70
77
|
*/
|
|
71
78
|
export function renderToLayer<R, E, T extends RenderEvent | null>(
|
|
72
|
-
rendered: Fx.Fx<T, E, R
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
)
|
|
76
|
-
RenderTemplate | RenderContext.RenderContext | CurrentEnvironment | DomServices,
|
|
77
|
-
never,
|
|
78
|
-
Exclude<
|
|
79
|
-
Exclude<R, Scope.Scope>,
|
|
80
|
-
RenderTemplate | RenderContext.RenderContext | CurrentEnvironment | DomServices
|
|
81
|
-
>
|
|
82
|
-
> {
|
|
83
|
-
return Layer.provideMerge(
|
|
84
|
-
Fx.drainLayer(Fx.switchMapCause(render(rendered), (e) => Fx.fromEffect(Effect.logError(e)))),
|
|
85
|
-
renderLayer(window, options)
|
|
79
|
+
rendered: Fx.Fx<T, E, R>
|
|
80
|
+
): Layer.Layer<never, never, RenderContext.RenderContext | RenderTemplate | RootElement | Exclude<R, Scope.Scope>> {
|
|
81
|
+
return Fx.drainLayer(
|
|
82
|
+
Fx.switchMapCause(render(rendered), (e) => Fx.fromEffect(Effect.logError(`Rendering Failure`, e)))
|
|
86
83
|
)
|
|
87
84
|
}
|