@typed/template 0.12.0 → 0.14.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/Directive.js +1 -1
- package/dist/cjs/Directive.js.map +1 -1
- package/dist/cjs/ElementRef.js +4 -4
- package/dist/cjs/ElementRef.js.map +1 -1
- package/dist/cjs/ElementSource.js +11 -7
- package/dist/cjs/ElementSource.js.map +1 -1
- package/dist/cjs/EventHandler.js +1 -1
- package/dist/cjs/EventHandler.js.map +1 -1
- package/dist/cjs/Html.js +10 -10
- package/dist/cjs/Html.js.map +1 -1
- package/dist/cjs/Hydrate.js +4 -18
- 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/Placeholder.js +2 -2
- package/dist/cjs/Placeholder.js.map +1 -1
- package/dist/cjs/Platform.js +10 -11
- package/dist/cjs/Platform.js.map +1 -1
- package/dist/cjs/Render.js +5 -5
- package/dist/cjs/Render.js.map +1 -1
- package/dist/cjs/RenderContext.js +3 -3
- package/dist/cjs/RenderContext.js.map +1 -1
- package/dist/cjs/RenderQueue.js +11 -9
- package/dist/cjs/RenderQueue.js.map +1 -1
- package/dist/cjs/RenderTemplate.js +2 -2
- package/dist/cjs/RenderTemplate.js.map +1 -1
- package/dist/cjs/Template.js.map +1 -1
- package/dist/cjs/Test.js +12 -12
- package/dist/cjs/Test.js.map +1 -1
- package/dist/cjs/Vitest.js +5 -5
- package/dist/cjs/Vitest.js.map +1 -1
- package/dist/cjs/compiler-tools.js +100 -0
- package/dist/cjs/compiler-tools.js.map +1 -0
- package/dist/cjs/index.js +6 -6
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/EventSource.js +4 -4
- package/dist/cjs/internal/EventSource.js.map +1 -1
- 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/indexRefCounter.js +4 -4
- package/dist/cjs/internal/indexRefCounter.js.map +1 -1
- package/dist/cjs/internal/parser.js +4 -4
- package/dist/cjs/internal/parser.js.map +1 -1
- package/dist/cjs/internal/parser2.js +1 -1
- package/dist/cjs/internal/parser2.js.map +1 -1
- package/dist/cjs/internal/server-parts.js +2 -2
- package/dist/cjs/internal/server-parts.js.map +1 -1
- package/dist/cjs/internal/server.js +1 -1
- package/dist/cjs/internal/server.js.map +1 -1
- package/dist/cjs/internal/utils.js +2 -2
- package/dist/cjs/internal/utils.js.map +1 -1
- package/dist/cjs/internal/v2/parts.js +1 -1
- package/dist/cjs/internal/v2/parts.js.map +1 -1
- package/dist/cjs/internal/v2/render-sync-parts.js +3 -3
- package/dist/cjs/internal/v2/render-sync-parts.js.map +1 -1
- package/dist/cjs/internal/v2/render.js +250 -75
- package/dist/cjs/internal/v2/render.js.map +1 -1
- package/dist/cjs/internal/v2/sync-parts.js +1 -1
- package/dist/cjs/internal/v2/sync-parts.js.map +1 -1
- package/dist/dts/ElementRef.d.ts.map +1 -1
- package/dist/dts/ElementSource.d.ts +3 -1
- package/dist/dts/ElementSource.d.ts.map +1 -1
- package/dist/dts/EventHandler.d.ts.map +1 -1
- package/dist/dts/Html.d.ts +1 -1
- package/dist/dts/Html.d.ts.map +1 -1
- package/dist/dts/Hydrate.d.ts +2 -9
- package/dist/dts/Hydrate.d.ts.map +1 -1
- package/dist/dts/Platform.d.ts +5 -5
- package/dist/dts/Platform.d.ts.map +1 -1
- package/dist/dts/Render.d.ts.map +1 -1
- package/dist/dts/RenderQueue.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/Vitest.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/server-parts.d.ts.map +1 -1
- package/dist/dts/internal/utils.d.ts.map +1 -1
- package/dist/dts/internal/v2/parts.d.ts.map +1 -1
- package/dist/dts/internal/v2/render.d.ts +31 -10
- package/dist/dts/internal/v2/render.d.ts.map +1 -1
- package/dist/dts/internal/v2/sync-parts.d.ts.map +1 -1
- package/dist/esm/ElementRef.js +1 -1
- package/dist/esm/ElementRef.js.map +1 -1
- package/dist/esm/ElementSource.js +14 -8
- package/dist/esm/ElementSource.js.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/Platform.js +3 -4
- package/dist/esm/Platform.js.map +1 -1
- package/dist/esm/RenderQueue.js +3 -1
- package/dist/esm/RenderQueue.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 +20 -11
- package/src/ElementRef.ts +35 -13
- package/src/ElementSource.ts +131 -53
- package/src/Html.ts +2 -2
- package/src/Hydrate.ts +2 -37
- package/src/Platform.ts +9 -10
- package/src/RenderQueue.ts +3 -1
- 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
|
@@ -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
|