@typed/template 0.11.0 → 0.13.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/compiler-tools/package.json +6 -0
- package/dist/cjs/Html.js +1 -1
- package/dist/cjs/Html.js.map +1 -1
- package/dist/cjs/Hydrate.js +0 -14
- package/dist/cjs/Hydrate.js.map +1 -1
- package/dist/cjs/Template.js.map +1 -1
- package/dist/cjs/Test.js +1 -1
- package/dist/cjs/Test.js.map +1 -1
- package/dist/cjs/compiler-tools.js +100 -0
- package/dist/cjs/compiler-tools.js.map +1 -0
- package/dist/cjs/internal/HydrateContext.js.map +1 -1
- package/dist/cjs/internal/browser.js +1 -1
- package/dist/cjs/internal/browser.js.map +1 -1
- package/dist/cjs/internal/v2/render-sync-parts.js +1 -1
- package/dist/cjs/internal/v2/render-sync-parts.js.map +1 -1
- package/dist/cjs/internal/v2/render.js +241 -66
- package/dist/cjs/internal/v2/render.js.map +1 -1
- package/dist/dts/Hydrate.d.ts +2 -9
- package/dist/dts/Hydrate.d.ts.map +1 -1
- package/dist/dts/Template.d.ts +3 -3
- package/dist/dts/Template.d.ts.map +1 -1
- package/dist/dts/compiler-tools.d.ts +143 -0
- package/dist/dts/compiler-tools.d.ts.map +1 -0
- package/dist/dts/internal/v2/render.d.ts +31 -10
- package/dist/dts/internal/v2/render.d.ts.map +1 -1
- package/dist/esm/Html.js +2 -2
- package/dist/esm/Html.js.map +1 -1
- package/dist/esm/Hydrate.js +0 -12
- package/dist/esm/Hydrate.js.map +1 -1
- package/dist/esm/Template.js.map +1 -1
- package/dist/esm/Test.js +2 -2
- package/dist/esm/Test.js.map +1 -1
- package/dist/esm/compiler-tools.js +91 -0
- package/dist/esm/compiler-tools.js.map +1 -0
- package/dist/esm/internal/HydrateContext.js.map +1 -1
- package/dist/esm/internal/v2/render.js +231 -63
- package/dist/esm/internal/v2/render.js.map +1 -1
- package/package.json +17 -9
- package/src/Html.ts +2 -2
- package/src/Hydrate.ts +2 -37
- package/src/Template.ts +4 -2
- package/src/Test.ts +2 -2
- package/src/compiler-tools.ts +250 -0
- package/src/internal/HydrateContext.ts +0 -2
- package/src/internal/v2/render.ts +279 -54
- package/dist/cjs/internal/v2/hydrate.js +0 -202
- package/dist/cjs/internal/v2/hydrate.js.map +0 -1
- package/dist/dts/internal/v2/hydrate.d.ts +0 -7
- package/dist/dts/internal/v2/hydrate.d.ts.map +0 -1
- package/dist/esm/internal/v2/hydrate.js +0 -195
- package/dist/esm/internal/v2/hydrate.js.map +0 -1
- package/src/internal/v2/hydrate.ts +0 -289
package/src/Template.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type { Chunk } from "effect/Chunk"
|
|
4
|
+
import type { Chunk, NonEmptyChunk } from "effect/Chunk"
|
|
5
5
|
import { type Inspectable, NodeInspectSymbol } from "effect/Inspectable"
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -15,7 +15,9 @@ export class Template implements Inspectable {
|
|
|
15
15
|
readonly hash: string,
|
|
16
16
|
// Parts are a array of Parts to the respective path from the root node to access it prior to rendering
|
|
17
17
|
/// any nodes/elements into the template.
|
|
18
|
-
readonly parts: ReadonlyArray<
|
|
18
|
+
readonly parts: ReadonlyArray<
|
|
19
|
+
readonly [part: PartNode | SparsePartNode, path: Chunk<number> | NonEmptyChunk<number>]
|
|
20
|
+
>
|
|
19
21
|
) {}
|
|
20
22
|
|
|
21
23
|
toJSON() {
|
package/src/Test.ts
CHANGED
|
@@ -21,7 +21,7 @@ import type * as Scope from "effect/Scope"
|
|
|
21
21
|
import * as ElementRef from "./ElementRef.js"
|
|
22
22
|
import { ROOT_CSS_SELECTOR } from "./ElementSource.js"
|
|
23
23
|
import { renderToHtml, renderToHtmlString, serverLayer, staticLayer } from "./Html.js"
|
|
24
|
-
import { hydrate
|
|
24
|
+
import { hydrate } from "./Hydrate.js"
|
|
25
25
|
import { adjustTime } from "./internal/utils.js"
|
|
26
26
|
import { render, renderLayer } from "./Render.js"
|
|
27
27
|
import type * as RenderContext from "./RenderContext.js"
|
|
@@ -263,7 +263,7 @@ export function testHydrate<R, E, Elements>(
|
|
|
263
263
|
fromRendered(rendered)
|
|
264
264
|
)
|
|
265
265
|
)),
|
|
266
|
-
Effect.provide(
|
|
266
|
+
Effect.provide(renderLayer(window)),
|
|
267
267
|
Effect.forkScoped
|
|
268
268
|
)
|
|
269
269
|
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A collection of tools utilized by @typed/compiler to setup templates imperatively.
|
|
3
|
+
* This is not intended for direct usage by end-users and the API surface is not guaranteed
|
|
4
|
+
* to have the same stabilitiy as the rest of the library.
|
|
5
|
+
*
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { Option } from "effect"
|
|
10
|
+
import type * as Cause from "effect/Cause"
|
|
11
|
+
import type * as Chunk from "effect/Chunk"
|
|
12
|
+
import type * as Effect from "effect/Effect"
|
|
13
|
+
import type * as Scope from "effect/Scope"
|
|
14
|
+
import type * as internalHydrateContext from "./internal/HydrateContext.js"
|
|
15
|
+
import * as utils from "./internal/utils.js"
|
|
16
|
+
import * as hydrationTemplate from "./internal/v2/hydration-template.js"
|
|
17
|
+
import * as render from "./internal/v2/render.js"
|
|
18
|
+
import type { Placeholder } from "./Placeholder.js"
|
|
19
|
+
import type { Renderable } from "./Renderable.js"
|
|
20
|
+
import type { RenderContext } from "./RenderContext.js"
|
|
21
|
+
import type { RenderQueue } from "./RenderQueue.js"
|
|
22
|
+
import type * as Template from "./Template.js"
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
*/
|
|
27
|
+
export interface TemplateContext extends render.TemplateContext {}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @since 1.0.0
|
|
31
|
+
*/
|
|
32
|
+
export interface HydrateContext extends internalHydrateContext.HydrateContext {}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @since 1.0.0
|
|
36
|
+
*/
|
|
37
|
+
export interface HydrationTemplate extends hydrationTemplate.HydrationTemplate {}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @since 1.0.0
|
|
41
|
+
*/
|
|
42
|
+
export type HydrationNode = hydrationTemplate.HydrationNode
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @since 1.0.0
|
|
46
|
+
*/
|
|
47
|
+
export interface HydrationHole extends hydrationTemplate.HydrationHole {}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @since 1.0.0
|
|
51
|
+
*/
|
|
52
|
+
export interface HydrationMany extends hydrationTemplate.HydrationMany {}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @since 1.0.0
|
|
56
|
+
*/
|
|
57
|
+
export interface HydrationElement extends hydrationTemplate.HydrationElement {}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @since 1.0.0
|
|
61
|
+
*/
|
|
62
|
+
export interface HydrationLiteral extends hydrationTemplate.HydrationLiteral {}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @since 1.0.0
|
|
66
|
+
*/
|
|
67
|
+
export const makeTemplateContext: <Values extends ReadonlyArray<Renderable<any, any>>>(
|
|
68
|
+
document: Document,
|
|
69
|
+
renderContext: RenderContext,
|
|
70
|
+
values: ReadonlyArray<Renderable<any, any>>,
|
|
71
|
+
onCause: (cause: Cause.Cause<Placeholder.Error<Values[number]>>) => Effect.Effect<unknown, never, never>
|
|
72
|
+
) => Effect.Effect<TemplateContext, never, Scope.Scope | RenderQueue | Placeholder.Context<Values[number]>> =
|
|
73
|
+
render.makeTemplateContext
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @since 1.0.0
|
|
77
|
+
*/
|
|
78
|
+
export const setupAttrPart: (
|
|
79
|
+
{ index, name }: Pick<Template.AttrPartNode, "index" | "name">,
|
|
80
|
+
element: HTMLElement | SVGElement,
|
|
81
|
+
ctx: TemplateContext,
|
|
82
|
+
renderable: Renderable<any, any>
|
|
83
|
+
) => Effect.Effect<void, any, any> | null = render.setupAttrPart
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @since 1.0.0
|
|
87
|
+
*/
|
|
88
|
+
export const setupBooleanPart: (
|
|
89
|
+
{ index, name }: Pick<Template.BooleanPartNode, "index" | "name">,
|
|
90
|
+
element: HTMLElement | SVGElement,
|
|
91
|
+
ctx: TemplateContext,
|
|
92
|
+
renderable: Renderable<any, any>
|
|
93
|
+
) => Effect.Effect<void, any, any> | null = render.setupBooleanPart
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* @since 1.0.0
|
|
97
|
+
*/
|
|
98
|
+
export const setupClassNamePart: (
|
|
99
|
+
{ index }: Pick<Template.ClassNamePartNode, "index">,
|
|
100
|
+
element: HTMLElement | SVGElement,
|
|
101
|
+
ctx: TemplateContext,
|
|
102
|
+
renderable: Renderable<any, any>
|
|
103
|
+
) => Effect.Effect<void, any, any> | null = render.setupClassNamePart
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @since 1.0.0
|
|
107
|
+
*/
|
|
108
|
+
export const setupCommentPart: (
|
|
109
|
+
{ index }: Pick<Template.CommentPartNode, "index">,
|
|
110
|
+
comment: Comment,
|
|
111
|
+
ctx: render.TemplateContext,
|
|
112
|
+
renderable: Renderable<any, any>
|
|
113
|
+
) => Effect.Effect<void, any, any> | null = render.setupCommentPart
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @since 1.0.0
|
|
117
|
+
*/
|
|
118
|
+
export const setupDataPart: (
|
|
119
|
+
{ index }: Pick<Template.DataPartNode, "index">,
|
|
120
|
+
element: HTMLElement | SVGElement,
|
|
121
|
+
ctx: TemplateContext,
|
|
122
|
+
renderable: Renderable<any, any>
|
|
123
|
+
) => Effect.Effect<void, any, any> | null = render.setupDataPart
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* @since 1.0.0
|
|
127
|
+
*/
|
|
128
|
+
export const setupEventPart: (
|
|
129
|
+
{ index, name }: Pick<Template.EventPartNode, "index" | "name">,
|
|
130
|
+
element: HTMLElement | SVGElement,
|
|
131
|
+
ctx: TemplateContext,
|
|
132
|
+
renderable: Renderable<any, any>
|
|
133
|
+
) => Effect.Effect<unknown, unknown, unknown> | null = render.setupEventPart
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* @since 1.0.0
|
|
137
|
+
*/
|
|
138
|
+
export const setupNodePart: (
|
|
139
|
+
{ index }: Template.NodePart,
|
|
140
|
+
comment: Comment,
|
|
141
|
+
ctx: TemplateContext,
|
|
142
|
+
text: Text | null,
|
|
143
|
+
nodes: Array<Node>
|
|
144
|
+
) => Effect.Effect<void, any, any> | null = render.setupNodePart
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @since 1.0.0
|
|
148
|
+
*/
|
|
149
|
+
export const setupHydratedNodePart: (
|
|
150
|
+
part: Template.NodePart,
|
|
151
|
+
hole: hydrationTemplate.HydrationHole,
|
|
152
|
+
ctx: render.HydrateTemplateContext
|
|
153
|
+
) => Effect.Effect<void, any, any> | null = render.setupHydratedNodePart
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* @since 1.0.0
|
|
157
|
+
*/
|
|
158
|
+
export const setupPropertyPart: (
|
|
159
|
+
{ index, name }: Pick<Template.PropertyPartNode, "index" | "name">,
|
|
160
|
+
element: HTMLElement | SVGElement,
|
|
161
|
+
ctx: TemplateContext,
|
|
162
|
+
renderable: Renderable<any, any>
|
|
163
|
+
) => Effect.Effect<void, any, any> | null = render.setupPropertyPart
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* @since 1.0.0
|
|
167
|
+
*/
|
|
168
|
+
export const setupRefPart: (
|
|
169
|
+
{ index }: Pick<Template.RefPartNode, "index">,
|
|
170
|
+
element: HTMLElement | SVGElement,
|
|
171
|
+
renderable: Renderable<any, any>
|
|
172
|
+
) => Effect.Effect<void, any, any> | null = render.setupRefPart
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* @since 1.0.0
|
|
176
|
+
*/
|
|
177
|
+
export const setupPropertiesPart: (
|
|
178
|
+
element: HTMLElement | SVGElement,
|
|
179
|
+
ctx: render.TemplateContext,
|
|
180
|
+
renderable: Renderable<any, any>
|
|
181
|
+
) => Effect.Effect<Array<void>, any, any> | null = render.setupPropertiesPart
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* @since 1.0.0
|
|
185
|
+
*/
|
|
186
|
+
export const setupSparseAttrPart: (
|
|
187
|
+
{ name, nodes }: Pick<Template.SparseAttrNode, "name" | "nodes">,
|
|
188
|
+
element: HTMLElement | SVGElement,
|
|
189
|
+
ctx: render.TemplateContext
|
|
190
|
+
) => Effect.Effect<void, any, any> = render.setupSparseAttrPart
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* @since 1.0.0
|
|
194
|
+
*/
|
|
195
|
+
export const setupSparseClassNamePart: (
|
|
196
|
+
{ nodes }: Pick<Template.SparseClassNameNode, "nodes">,
|
|
197
|
+
element: HTMLElement | SVGElement,
|
|
198
|
+
ctx: render.TemplateContext
|
|
199
|
+
) => Effect.Effect<void, any, any> = render.setupSparseClassNamePart
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @since 1.0.0
|
|
203
|
+
*/
|
|
204
|
+
export const setupSparseCommentPart: (
|
|
205
|
+
{ nodes }: Template.SparseCommentNode,
|
|
206
|
+
comment: Comment,
|
|
207
|
+
ctx: render.TemplateContext
|
|
208
|
+
) => Effect.Effect<void, any, any> = render.setupSparseCommentPart
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @since 1.0.0
|
|
212
|
+
*/
|
|
213
|
+
export const setupTextPart: (
|
|
214
|
+
{ index }: Template.TextPartNode,
|
|
215
|
+
comment: Comment,
|
|
216
|
+
ctx: render.TemplateContext
|
|
217
|
+
) => Effect.Effect<void, any, any> | null = render.setupTextPart
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* @since 1.0.0
|
|
221
|
+
*/
|
|
222
|
+
export const findHydrationHole: (
|
|
223
|
+
nodes: Array<hydrationTemplate.HydrationNode>,
|
|
224
|
+
index: number
|
|
225
|
+
) => hydrationTemplate.HydrationHole | null = hydrationTemplate.findHydrationHole
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* @since 1.0.0
|
|
229
|
+
*/
|
|
230
|
+
export const getChildNodes: (node: hydrationTemplate.HydrationNode) => Array<hydrationTemplate.HydrationNode> =
|
|
231
|
+
hydrationTemplate.getChildNodes
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* @since 1.0.0
|
|
235
|
+
*/
|
|
236
|
+
export const findHydratePath: (node: hydrationTemplate.HydrationNode, path: Chunk.Chunk<number>) => Node =
|
|
237
|
+
utils.findHydratePath
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* @since 1.0.0
|
|
241
|
+
*/
|
|
242
|
+
export const attemptHydration: (
|
|
243
|
+
ctx: TemplateContext,
|
|
244
|
+
hash: string
|
|
245
|
+
) => Option.Option<
|
|
246
|
+
{
|
|
247
|
+
readonly where: HydrationTemplate
|
|
248
|
+
readonly hydrateCtx: HydrateContext
|
|
249
|
+
}
|
|
250
|
+
> = render.attemptHydration
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Tagged } from "@typed/context"
|
|
2
|
-
import type { Template } from "../Template.js"
|
|
3
2
|
import type { HydrationNode } from "./v2/hydration-template.js"
|
|
4
3
|
|
|
5
4
|
/**
|
|
@@ -8,7 +7,6 @@ import type { HydrationNode } from "./v2/hydration-template.js"
|
|
|
8
7
|
*/
|
|
9
8
|
export type HydrateContext = {
|
|
10
9
|
readonly where: HydrationNode
|
|
11
|
-
readonly parentTemplate: Template | null
|
|
12
10
|
|
|
13
11
|
// Used to match sibling components using many() to the correct elements
|
|
14
12
|
readonly manyKey?: string
|