@typed/template 0.14.0 → 1.0.0-beta.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 (453) hide show
  1. package/README.md +108 -2
  2. package/dist/EventHandler.d.ts +273 -0
  3. package/dist/EventHandler.d.ts.map +1 -0
  4. package/dist/EventHandler.js +261 -0
  5. package/dist/EventSource.d.ts +82 -0
  6. package/dist/EventSource.d.ts.map +1 -0
  7. package/dist/EventSource.js +127 -0
  8. package/dist/Html.d.ts +122 -0
  9. package/dist/Html.d.ts.map +1 -0
  10. package/dist/Html.js +250 -0
  11. package/dist/HtmlChunk.d.ts +118 -0
  12. package/dist/HtmlChunk.d.ts.map +1 -0
  13. package/dist/HtmlChunk.js +211 -0
  14. package/dist/HydrateContext.d.ts +28 -0
  15. package/dist/HydrateContext.d.ts.map +1 -0
  16. package/dist/HydrateContext.js +25 -0
  17. package/dist/Parser.d.ts +35 -0
  18. package/dist/Parser.d.ts.map +1 -0
  19. package/dist/Parser.js +437 -0
  20. package/dist/Render.d.ts +195 -0
  21. package/dist/Render.d.ts.map +1 -0
  22. package/dist/Render.js +609 -0
  23. package/dist/RenderEvent.d.ts +179 -0
  24. package/dist/RenderEvent.d.ts.map +1 -0
  25. package/dist/RenderEvent.js +102 -0
  26. package/dist/RenderQueue.d.ts +167 -0
  27. package/dist/RenderQueue.d.ts.map +1 -0
  28. package/dist/RenderQueue.js +297 -0
  29. package/dist/RenderTemplate.d.ts +90 -0
  30. package/dist/RenderTemplate.d.ts.map +1 -0
  31. package/dist/RenderTemplate.js +87 -0
  32. package/dist/Renderable.d.ts +88 -0
  33. package/dist/Renderable.d.ts.map +1 -0
  34. package/dist/Renderable.js +3 -0
  35. package/dist/{dts/Template.d.ts → Template.d.ts} +109 -74
  36. package/dist/Template.d.ts.map +1 -0
  37. package/dist/{esm/Template.js → Template.js} +96 -56
  38. package/dist/Wire.d.ts +169 -0
  39. package/dist/Wire.d.ts.map +1 -0
  40. package/dist/Wire.js +217 -0
  41. package/dist/errors.d.ts +145 -0
  42. package/dist/errors.d.ts.map +1 -0
  43. package/dist/errors.js +159 -0
  44. package/dist/index.d.ts +15 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +14 -0
  47. package/dist/internal/IndexRefCounter.d.ts +11 -0
  48. package/dist/internal/IndexRefCounter.d.ts.map +1 -0
  49. package/dist/internal/IndexRefCounter.js +42 -0
  50. package/dist/internal/ParentChildNodes.d.ts +6 -0
  51. package/dist/internal/ParentChildNodes.d.ts.map +1 -0
  52. package/dist/internal/ParentChildNodes.js +1 -0
  53. package/dist/internal/PathStack.d.ts +9 -0
  54. package/dist/internal/PathStack.d.ts.map +1 -0
  55. package/dist/internal/PathStack.js +18 -0
  56. package/dist/internal/buildTemplateFragement.d.ts +3 -0
  57. package/dist/internal/buildTemplateFragement.d.ts.map +1 -0
  58. package/dist/internal/buildTemplateFragement.js +61 -0
  59. package/dist/internal/diff.d.ts +2 -0
  60. package/dist/internal/diff.d.ts.map +1 -0
  61. package/dist/internal/diff.js +119 -0
  62. package/dist/internal/dom.d.ts +45 -0
  63. package/dist/internal/dom.d.ts.map +1 -0
  64. package/dist/internal/dom.js +304 -0
  65. package/dist/internal/encoding.d.ts +7 -0
  66. package/dist/internal/encoding.d.ts.map +1 -0
  67. package/dist/internal/encoding.js +134 -0
  68. package/dist/{dts/internal/v2/hydration-template.d.ts → internal/hydration.d.ts} +10 -7
  69. package/dist/internal/hydration.d.ts.map +1 -0
  70. package/dist/{esm/internal/v2/hydration-template.js → internal/hydration.js} +80 -26
  71. package/dist/internal/keyToPartType.d.ts +2 -0
  72. package/dist/internal/keyToPartType.d.ts.map +1 -0
  73. package/dist/internal/keyToPartType.js +110 -0
  74. package/dist/internal/meta.d.ts +17 -0
  75. package/dist/internal/meta.d.ts.map +1 -0
  76. package/dist/internal/meta.js +14 -0
  77. package/dist/internal/takeOneIfNotRenderEvent.d.ts +4 -0
  78. package/dist/internal/takeOneIfNotRenderEvent.d.ts.map +1 -0
  79. package/dist/internal/takeOneIfNotRenderEvent.js +10 -0
  80. package/dist/internal/templateHash.d.ts +2 -0
  81. package/dist/internal/templateHash.d.ts.map +1 -0
  82. package/dist/internal/templateHash.js +14 -0
  83. package/dist/many.d.ts +68 -0
  84. package/dist/many.d.ts.map +1 -0
  85. package/dist/many.js +107 -0
  86. package/package.json +22 -224
  87. package/src/EventHandler.ts +318 -86
  88. package/src/EventSource.ts +202 -0
  89. package/src/Html.test.ts +490 -0
  90. package/src/Html.ts +292 -333
  91. package/src/HtmlChunk.ts +290 -332
  92. package/src/HydrateContext.ts +40 -0
  93. package/src/Hydration.test.ts +409 -0
  94. package/src/Parser.test.ts +924 -0
  95. package/src/Parser.ts +598 -10
  96. package/src/Render.test.ts +338 -0
  97. package/src/Render.ts +878 -63
  98. package/src/RenderEvent.ts +169 -40
  99. package/src/RenderQueue.ts +290 -385
  100. package/src/RenderTemplate.ts +98 -31
  101. package/src/Renderable.ts +122 -24
  102. package/src/Template.ts +246 -145
  103. package/src/Wire.ts +309 -0
  104. package/src/errors.ts +173 -0
  105. package/src/index.ts +14 -66
  106. package/src/internal/IndexRefCounter.ts +53 -0
  107. package/src/internal/ParentChildNodes.ts +7 -0
  108. package/src/internal/PathStack.ts +23 -0
  109. package/src/internal/buildTemplateFragement.ts +82 -0
  110. package/src/internal/diff.ts +127 -0
  111. package/src/internal/dom.ts +357 -0
  112. package/src/internal/encoding.ts +147 -0
  113. package/src/internal/hydration.ts +406 -0
  114. package/src/internal/keyToPartType.ts +113 -0
  115. package/src/internal/meta.ts +25 -0
  116. package/src/internal/takeOneIfNotRenderEvent.ts +19 -0
  117. package/src/internal/templateHash.ts +18 -0
  118. package/src/many.ts +148 -0
  119. package/tsconfig.json +6 -0
  120. package/Directive/package.json +0 -6
  121. package/ElementRef/package.json +0 -6
  122. package/ElementSource/package.json +0 -6
  123. package/Entry/package.json +0 -6
  124. package/EventHandler/package.json +0 -6
  125. package/Html/package.json +0 -6
  126. package/HtmlChunk/package.json +0 -6
  127. package/Hydrate/package.json +0 -6
  128. package/LICENSE +0 -21
  129. package/Many/package.json +0 -6
  130. package/Meta/package.json +0 -6
  131. package/Parser/package.json +0 -6
  132. package/Part/package.json +0 -6
  133. package/Placeholder/package.json +0 -6
  134. package/Platform/package.json +0 -6
  135. package/Render/package.json +0 -6
  136. package/RenderContext/package.json +0 -6
  137. package/RenderEvent/package.json +0 -6
  138. package/RenderQueue/package.json +0 -6
  139. package/RenderTemplate/package.json +0 -6
  140. package/Renderable/package.json +0 -6
  141. package/Template/package.json +0 -6
  142. package/Test/package.json +0 -6
  143. package/Vitest/package.json +0 -6
  144. package/compiler-tools/package.json +0 -6
  145. package/dist/cjs/Directive.js +0 -76
  146. package/dist/cjs/Directive.js.map +0 -1
  147. package/dist/cjs/ElementRef.js +0 -92
  148. package/dist/cjs/ElementRef.js.map +0 -1
  149. package/dist/cjs/ElementSource.js +0 -246
  150. package/dist/cjs/ElementSource.js.map +0 -1
  151. package/dist/cjs/Entry.js +0 -6
  152. package/dist/cjs/Entry.js.map +0 -1
  153. package/dist/cjs/EventHandler.js +0 -76
  154. package/dist/cjs/EventHandler.js.map +0 -1
  155. package/dist/cjs/Html.js +0 -224
  156. package/dist/cjs/Html.js.map +0 -1
  157. package/dist/cjs/HtmlChunk.js +0 -306
  158. package/dist/cjs/HtmlChunk.js.map +0 -1
  159. package/dist/cjs/Hydrate.js +0 -43
  160. package/dist/cjs/Hydrate.js.map +0 -1
  161. package/dist/cjs/Many.js +0 -66
  162. package/dist/cjs/Many.js.map +0 -1
  163. package/dist/cjs/Meta.js +0 -50
  164. package/dist/cjs/Meta.js.map +0 -1
  165. package/dist/cjs/Parser.js +0 -19
  166. package/dist/cjs/Parser.js.map +0 -1
  167. package/dist/cjs/Part.js +0 -6
  168. package/dist/cjs/Part.js.map +0 -1
  169. package/dist/cjs/Placeholder.js +0 -34
  170. package/dist/cjs/Placeholder.js.map +0 -1
  171. package/dist/cjs/Platform.js +0 -65
  172. package/dist/cjs/Platform.js.map +0 -1
  173. package/dist/cjs/Render.js +0 -50
  174. package/dist/cjs/Render.js.map +0 -1
  175. package/dist/cjs/RenderContext.js +0 -67
  176. package/dist/cjs/RenderContext.js.map +0 -1
  177. package/dist/cjs/RenderEvent.js +0 -52
  178. package/dist/cjs/RenderEvent.js.map +0 -1
  179. package/dist/cjs/RenderQueue.js +0 -343
  180. package/dist/cjs/RenderQueue.js.map +0 -1
  181. package/dist/cjs/RenderTemplate.js +0 -26
  182. package/dist/cjs/RenderTemplate.js.map +0 -1
  183. package/dist/cjs/Renderable.js +0 -6
  184. package/dist/cjs/Renderable.js.map +0 -1
  185. package/dist/cjs/Template.js +0 -305
  186. package/dist/cjs/Template.js.map +0 -1
  187. package/dist/cjs/Test.js +0 -184
  188. package/dist/cjs/Test.js.map +0 -1
  189. package/dist/cjs/Vitest.js +0 -52
  190. package/dist/cjs/Vitest.js.map +0 -1
  191. package/dist/cjs/compiler-tools.js +0 -100
  192. package/dist/cjs/compiler-tools.js.map +0 -1
  193. package/dist/cjs/index.js +0 -138
  194. package/dist/cjs/index.js.map +0 -1
  195. package/dist/cjs/internal/EventSource.js +0 -129
  196. package/dist/cjs/internal/EventSource.js.map +0 -1
  197. package/dist/cjs/internal/HydrateContext.js +0 -13
  198. package/dist/cjs/internal/HydrateContext.js.map +0 -1
  199. package/dist/cjs/internal/browser.js +0 -110
  200. package/dist/cjs/internal/browser.js.map +0 -1
  201. package/dist/cjs/internal/character-entities.js +0 -2141
  202. package/dist/cjs/internal/character-entities.js.map +0 -1
  203. package/dist/cjs/internal/chunks.js +0 -68
  204. package/dist/cjs/internal/chunks.js.map +0 -1
  205. package/dist/cjs/internal/errors.js +0 -52
  206. package/dist/cjs/internal/errors.js.map +0 -1
  207. package/dist/cjs/internal/indexRefCounter.js +0 -52
  208. package/dist/cjs/internal/indexRefCounter.js.map +0 -1
  209. package/dist/cjs/internal/module-augmentation.js +0 -6
  210. package/dist/cjs/internal/module-augmentation.js.map +0 -1
  211. package/dist/cjs/internal/parser.js +0 -568
  212. package/dist/cjs/internal/parser.js.map +0 -1
  213. package/dist/cjs/internal/parser2.js +0 -382
  214. package/dist/cjs/internal/parser2.js.map +0 -1
  215. package/dist/cjs/internal/server-parts.js +0 -124
  216. package/dist/cjs/internal/server-parts.js.map +0 -1
  217. package/dist/cjs/internal/server.js +0 -48
  218. package/dist/cjs/internal/server.js.map +0 -1
  219. package/dist/cjs/internal/utils.js +0 -136
  220. package/dist/cjs/internal/utils.js.map +0 -1
  221. package/dist/cjs/internal/v2/SyncPart.js +0 -6
  222. package/dist/cjs/internal/v2/SyncPart.js.map +0 -1
  223. package/dist/cjs/internal/v2/helpers.js +0 -15
  224. package/dist/cjs/internal/v2/helpers.js.map +0 -1
  225. package/dist/cjs/internal/v2/hydration-template.js +0 -269
  226. package/dist/cjs/internal/v2/hydration-template.js.map +0 -1
  227. package/dist/cjs/internal/v2/parts.js +0 -169
  228. package/dist/cjs/internal/v2/parts.js.map +0 -1
  229. package/dist/cjs/internal/v2/render-entry.js +0 -110
  230. package/dist/cjs/internal/v2/render-entry.js.map +0 -1
  231. package/dist/cjs/internal/v2/render-sync-parts.js +0 -318
  232. package/dist/cjs/internal/v2/render-sync-parts.js.map +0 -1
  233. package/dist/cjs/internal/v2/render.js +0 -592
  234. package/dist/cjs/internal/v2/render.js.map +0 -1
  235. package/dist/cjs/internal/v2/sync-parts.js +0 -115
  236. package/dist/cjs/internal/v2/sync-parts.js.map +0 -1
  237. package/dist/dts/Directive.d.ts +0 -70
  238. package/dist/dts/Directive.d.ts.map +0 -1
  239. package/dist/dts/ElementRef.d.ts +0 -42
  240. package/dist/dts/ElementRef.d.ts.map +0 -1
  241. package/dist/dts/ElementSource.d.ts +0 -79
  242. package/dist/dts/ElementSource.d.ts.map +0 -1
  243. package/dist/dts/Entry.d.ts +0 -26
  244. package/dist/dts/Entry.d.ts.map +0 -1
  245. package/dist/dts/EventHandler.d.ts +0 -73
  246. package/dist/dts/EventHandler.d.ts.map +0 -1
  247. package/dist/dts/Html.d.ts +0 -35
  248. package/dist/dts/Html.d.ts.map +0 -1
  249. package/dist/dts/HtmlChunk.d.ts +0 -56
  250. package/dist/dts/HtmlChunk.d.ts.map +0 -1
  251. package/dist/dts/Hydrate.d.ts +0 -19
  252. package/dist/dts/Hydrate.d.ts.map +0 -1
  253. package/dist/dts/Many.d.ts +0 -32
  254. package/dist/dts/Many.d.ts.map +0 -1
  255. package/dist/dts/Meta.d.ts +0 -33
  256. package/dist/dts/Meta.d.ts.map +0 -1
  257. package/dist/dts/Parser.d.ts +0 -13
  258. package/dist/dts/Parser.d.ts.map +0 -1
  259. package/dist/dts/Part.d.ts +0 -121
  260. package/dist/dts/Part.d.ts.map +0 -1
  261. package/dist/dts/Placeholder.d.ts +0 -48
  262. package/dist/dts/Placeholder.d.ts.map +0 -1
  263. package/dist/dts/Platform.d.ts +0 -21
  264. package/dist/dts/Platform.d.ts.map +0 -1
  265. package/dist/dts/Render.d.ts +0 -31
  266. package/dist/dts/Render.d.ts.map +0 -1
  267. package/dist/dts/RenderContext.d.ts +0 -70
  268. package/dist/dts/RenderContext.d.ts.map +0 -1
  269. package/dist/dts/RenderEvent.d.ts +0 -42
  270. package/dist/dts/RenderEvent.d.ts.map +0 -1
  271. package/dist/dts/RenderQueue.d.ts +0 -103
  272. package/dist/dts/RenderQueue.d.ts.map +0 -1
  273. package/dist/dts/RenderTemplate.d.ts +0 -25
  274. package/dist/dts/RenderTemplate.d.ts.map +0 -1
  275. package/dist/dts/Renderable.d.ts +0 -28
  276. package/dist/dts/Renderable.d.ts.map +0 -1
  277. package/dist/dts/Template.d.ts.map +0 -1
  278. package/dist/dts/Test.d.ts +0 -85
  279. package/dist/dts/Test.d.ts.map +0 -1
  280. package/dist/dts/Vitest.d.ts +0 -43
  281. package/dist/dts/Vitest.d.ts.map +0 -1
  282. package/dist/dts/compiler-tools.d.ts +0 -143
  283. package/dist/dts/compiler-tools.d.ts.map +0 -1
  284. package/dist/dts/index.d.ts +0 -65
  285. package/dist/dts/index.d.ts.map +0 -1
  286. package/dist/dts/internal/EventSource.d.ts +0 -13
  287. package/dist/dts/internal/EventSource.d.ts.map +0 -1
  288. package/dist/dts/internal/HydrateContext.d.ts +0 -2
  289. package/dist/dts/internal/HydrateContext.d.ts.map +0 -1
  290. package/dist/dts/internal/browser.d.ts +0 -8
  291. package/dist/dts/internal/browser.d.ts.map +0 -1
  292. package/dist/dts/internal/character-entities.d.ts +0 -2133
  293. package/dist/dts/internal/character-entities.d.ts.map +0 -1
  294. package/dist/dts/internal/chunks.d.ts +0 -23
  295. package/dist/dts/internal/chunks.d.ts.map +0 -1
  296. package/dist/dts/internal/errors.d.ts +0 -22
  297. package/dist/dts/internal/errors.d.ts.map +0 -1
  298. package/dist/dts/internal/indexRefCounter.d.ts +0 -7
  299. package/dist/dts/internal/indexRefCounter.d.ts.map +0 -1
  300. package/dist/dts/internal/module-augmentation.d.ts +0 -32
  301. package/dist/dts/internal/module-augmentation.d.ts.map +0 -1
  302. package/dist/dts/internal/parser.d.ts +0 -33
  303. package/dist/dts/internal/parser.d.ts.map +0 -1
  304. package/dist/dts/internal/parser2.d.ts +0 -12
  305. package/dist/dts/internal/parser2.d.ts.map +0 -1
  306. package/dist/dts/internal/server-parts.d.ts +0 -223
  307. package/dist/dts/internal/server-parts.d.ts.map +0 -1
  308. package/dist/dts/internal/server.d.ts +0 -5
  309. package/dist/dts/internal/server.d.ts.map +0 -1
  310. package/dist/dts/internal/utils.d.ts +0 -19
  311. package/dist/dts/internal/utils.d.ts.map +0 -1
  312. package/dist/dts/internal/v2/SyncPart.d.ts +0 -87
  313. package/dist/dts/internal/v2/SyncPart.d.ts.map +0 -1
  314. package/dist/dts/internal/v2/helpers.d.ts +0 -3
  315. package/dist/dts/internal/v2/helpers.d.ts.map +0 -1
  316. package/dist/dts/internal/v2/hydration-template.d.ts.map +0 -1
  317. package/dist/dts/internal/v2/parts.d.ts +0 -245
  318. package/dist/dts/internal/v2/parts.d.ts.map +0 -1
  319. package/dist/dts/internal/v2/render-entry.d.ts +0 -6
  320. package/dist/dts/internal/v2/render-entry.d.ts.map +0 -1
  321. package/dist/dts/internal/v2/render-sync-parts.d.ts +0 -22
  322. package/dist/dts/internal/v2/render-sync-parts.d.ts.map +0 -1
  323. package/dist/dts/internal/v2/render.d.ts +0 -83
  324. package/dist/dts/internal/v2/render.d.ts.map +0 -1
  325. package/dist/dts/internal/v2/sync-parts.d.ts +0 -129
  326. package/dist/dts/internal/v2/sync-parts.d.ts.map +0 -1
  327. package/dist/esm/Directive.js +0 -64
  328. package/dist/esm/Directive.js.map +0 -1
  329. package/dist/esm/ElementRef.js +0 -76
  330. package/dist/esm/ElementRef.js.map +0 -1
  331. package/dist/esm/ElementSource.js +0 -246
  332. package/dist/esm/ElementSource.js.map +0 -1
  333. package/dist/esm/Entry.js +0 -2
  334. package/dist/esm/Entry.js.map +0 -1
  335. package/dist/esm/EventHandler.js +0 -68
  336. package/dist/esm/EventHandler.js.map +0 -1
  337. package/dist/esm/Html.js +0 -230
  338. package/dist/esm/Html.js.map +0 -1
  339. package/dist/esm/HtmlChunk.js +0 -330
  340. package/dist/esm/HtmlChunk.js.map +0 -1
  341. package/dist/esm/Hydrate.js +0 -31
  342. package/dist/esm/Hydrate.js.map +0 -1
  343. package/dist/esm/Many.js +0 -54
  344. package/dist/esm/Many.js.map +0 -1
  345. package/dist/esm/Meta.js +0 -40
  346. package/dist/esm/Meta.js.map +0 -1
  347. package/dist/esm/Parser.js +0 -13
  348. package/dist/esm/Parser.js.map +0 -1
  349. package/dist/esm/Part.js +0 -5
  350. package/dist/esm/Part.js.map +0 -1
  351. package/dist/esm/Placeholder.js +0 -26
  352. package/dist/esm/Placeholder.js.map +0 -1
  353. package/dist/esm/Platform.js +0 -42
  354. package/dist/esm/Platform.js.map +0 -1
  355. package/dist/esm/Render.js +0 -36
  356. package/dist/esm/Render.js.map +0 -1
  357. package/dist/esm/RenderContext.js +0 -54
  358. package/dist/esm/RenderContext.js.map +0 -1
  359. package/dist/esm/RenderEvent.js +0 -43
  360. package/dist/esm/RenderEvent.js.map +0 -1
  361. package/dist/esm/RenderQueue.js +0 -338
  362. package/dist/esm/RenderQueue.js.map +0 -1
  363. package/dist/esm/RenderTemplate.js +0 -16
  364. package/dist/esm/RenderTemplate.js.map +0 -1
  365. package/dist/esm/Renderable.js +0 -2
  366. package/dist/esm/Renderable.js.map +0 -1
  367. package/dist/esm/Template.js.map +0 -1
  368. package/dist/esm/Test.js +0 -167
  369. package/dist/esm/Test.js.map +0 -1
  370. package/dist/esm/Vitest.js +0 -44
  371. package/dist/esm/Vitest.js.map +0 -1
  372. package/dist/esm/compiler-tools.js +0 -91
  373. package/dist/esm/compiler-tools.js.map +0 -1
  374. package/dist/esm/index.js +0 -65
  375. package/dist/esm/index.js.map +0 -1
  376. package/dist/esm/internal/EventSource.js +0 -126
  377. package/dist/esm/internal/EventSource.js.map +0 -1
  378. package/dist/esm/internal/HydrateContext.js +0 -7
  379. package/dist/esm/internal/HydrateContext.js.map +0 -1
  380. package/dist/esm/internal/browser.js +0 -103
  381. package/dist/esm/internal/browser.js.map +0 -1
  382. package/dist/esm/internal/character-entities.js +0 -2134
  383. package/dist/esm/internal/character-entities.js.map +0 -1
  384. package/dist/esm/internal/chunks.js +0 -60
  385. package/dist/esm/internal/chunks.js.map +0 -1
  386. package/dist/esm/internal/errors.js +0 -46
  387. package/dist/esm/internal/errors.js.map +0 -1
  388. package/dist/esm/internal/indexRefCounter.js +0 -47
  389. package/dist/esm/internal/indexRefCounter.js.map +0 -1
  390. package/dist/esm/internal/module-augmentation.js +0 -2
  391. package/dist/esm/internal/module-augmentation.js.map +0 -1
  392. package/dist/esm/internal/parser.js +0 -596
  393. package/dist/esm/internal/parser.js.map +0 -1
  394. package/dist/esm/internal/parser2.js +0 -393
  395. package/dist/esm/internal/parser2.js.map +0 -1
  396. package/dist/esm/internal/server-parts.js +0 -109
  397. package/dist/esm/internal/server-parts.js.map +0 -1
  398. package/dist/esm/internal/server.js +0 -22
  399. package/dist/esm/internal/server.js.map +0 -1
  400. package/dist/esm/internal/utils.js +0 -119
  401. package/dist/esm/internal/utils.js.map +0 -1
  402. package/dist/esm/internal/v2/SyncPart.js +0 -5
  403. package/dist/esm/internal/v2/SyncPart.js.map +0 -1
  404. package/dist/esm/internal/v2/helpers.js +0 -12
  405. package/dist/esm/internal/v2/helpers.js.map +0 -1
  406. package/dist/esm/internal/v2/hydration-template.js.map +0 -1
  407. package/dist/esm/internal/v2/parts.js +0 -150
  408. package/dist/esm/internal/v2/parts.js.map +0 -1
  409. package/dist/esm/internal/v2/render-entry.js +0 -102
  410. package/dist/esm/internal/v2/render-entry.js.map +0 -1
  411. package/dist/esm/internal/v2/render-sync-parts.js +0 -265
  412. package/dist/esm/internal/v2/render-sync-parts.js.map +0 -1
  413. package/dist/esm/internal/v2/render.js +0 -521
  414. package/dist/esm/internal/v2/render.js.map +0 -1
  415. package/dist/esm/internal/v2/sync-parts.js +0 -102
  416. package/dist/esm/internal/v2/sync-parts.js.map +0 -1
  417. package/dist/esm/package.json +0 -4
  418. package/src/Directive.ts +0 -114
  419. package/src/ElementRef.ts +0 -148
  420. package/src/ElementSource.ts +0 -510
  421. package/src/Entry.ts +0 -28
  422. package/src/Hydrate.ts +0 -51
  423. package/src/Many.ts +0 -161
  424. package/src/Meta.ts +0 -45
  425. package/src/Part.ts +0 -154
  426. package/src/Placeholder.ts +0 -78
  427. package/src/Platform.ts +0 -70
  428. package/src/RenderContext.ts +0 -121
  429. package/src/Test.ts +0 -354
  430. package/src/Vitest.ts +0 -141
  431. package/src/compiler-tools.ts +0 -250
  432. package/src/internal/EventSource.ts +0 -188
  433. package/src/internal/HydrateContext.ts +0 -22
  434. package/src/internal/browser.ts +0 -138
  435. package/src/internal/character-entities.ts +0 -2136
  436. package/src/internal/chunks.ts +0 -89
  437. package/src/internal/errors.ts +0 -49
  438. package/src/internal/external.d.ts +0 -11
  439. package/src/internal/indexRefCounter.ts +0 -54
  440. package/src/internal/module-augmentation.ts +0 -44
  441. package/src/internal/parser.ts +0 -757
  442. package/src/internal/parser2.ts +0 -468
  443. package/src/internal/server-parts.ts +0 -161
  444. package/src/internal/server.ts +0 -37
  445. package/src/internal/utils.ts +0 -153
  446. package/src/internal/v2/SyncPart.ts +0 -112
  447. package/src/internal/v2/helpers.ts +0 -13
  448. package/src/internal/v2/hydration-template.ts +0 -308
  449. package/src/internal/v2/parts.ts +0 -254
  450. package/src/internal/v2/render-entry.ts +0 -131
  451. package/src/internal/v2/render-sync-parts.ts +0 -440
  452. package/src/internal/v2/render.ts +0 -813
  453. package/src/internal/v2/sync-parts.ts +0 -133
@@ -0,0 +1,40 @@
1
+ import * as ServiceMap from "effect/ServiceMap";
2
+ import { getHydrationRoot, type HydrationNode } from "./internal/hydration.js";
3
+
4
+ /**
5
+ * Used Internally to pass context down to components for hydration
6
+ * @internal
7
+ */
8
+ export type HydrateContext = {
9
+ readonly where: HydrationNode;
10
+
11
+ // Used to match sibling components using many() to the correct elements
12
+ readonly manyKey?: string;
13
+
14
+ /**@internal */
15
+ hydrate: boolean;
16
+ };
17
+
18
+ /**
19
+ * Used Internally to pass context down to components for hydration
20
+ * @internal
21
+ */
22
+ export const HydrateContext = ServiceMap.Service<HydrateContext>("@typed/html/HydrateContext");
23
+
24
+ /**
25
+ * Creates a hydration context starting from a root element.
26
+ *
27
+ * This context allows the renderer to "attach" to existing DOM nodes (SSR output)
28
+ * instead of creating new ones.
29
+ *
30
+ * @param rootElement - The root DOM element where hydration should begin.
31
+ * @returns A `ServiceMap` containing the `HydrateContext`.
32
+ */
33
+ export const makeHydrateContext = (rootElement: HTMLElement): ServiceMap.ServiceMap<never> => {
34
+ try {
35
+ const where = getHydrationRoot(rootElement);
36
+ return HydrateContext.serviceMap({ where, hydrate: true });
37
+ } catch {
38
+ return ServiceMap.empty();
39
+ }
40
+ };
@@ -0,0 +1,409 @@
1
+ import assert from "node:assert";
2
+ import { describe, it } from "vitest";
3
+ import type { Scope } from "effect";
4
+ import { Effect } from "effect";
5
+ import { Fx } from "@typed/fx";
6
+ import type { Renderable, Rendered, RenderTemplate } from "./index.js";
7
+ import {
8
+ DomRenderTemplate,
9
+ EventHandler,
10
+ html,
11
+ HtmlRenderTemplate,
12
+ many,
13
+ render,
14
+ renderToHtmlString,
15
+ } from "./index.js";
16
+ import { Window } from "happy-dom";
17
+
18
+ describe("Hydration", () => {
19
+ it("hydrates a simple template", () =>
20
+ Effect.gen(function* () {
21
+ yield* hydrateHtmlElement`<div>Hello, world!</div>`;
22
+ }).pipe(Effect.scoped, Effect.runPromise));
23
+
24
+ it("hydrates template with static attribute", () =>
25
+ Effect.gen(function* () {
26
+ const staticExample = yield* hydrateHtmlElement`<div data-foo="Hello, world!"></div>`;
27
+ assert(staticExample.getAttribute("data-foo") === "Hello, world!");
28
+ assert(staticExample.dataset.foo === "Hello, world!");
29
+ }).pipe(Effect.scoped, Effect.runPromise));
30
+
31
+ it("hydrates template with primitive attribute interpolation", () =>
32
+ Effect.gen(function* () {
33
+ const primitiveExample = yield* hydrateHtmlElement`<div data-foo=${"Hello, world!"}></div>`;
34
+ assert(primitiveExample.getAttribute("data-foo") === "Hello, world!");
35
+ assert(primitiveExample.dataset.foo === "Hello, world!");
36
+ }).pipe(Effect.scoped, Effect.runPromise));
37
+
38
+ it("hydrates template with Effect attribute", () =>
39
+ Effect.gen(function* () {
40
+ const effectExample =
41
+ yield* hydrateHtmlElement`<div data-foo=${Effect.succeed("Hello, world!")}></div>`;
42
+ assert(effectExample.getAttribute("data-foo") === "Hello, world!");
43
+ assert(effectExample.dataset.foo === "Hello, world!");
44
+ }).pipe(Effect.scoped, Effect.runPromise));
45
+
46
+ it("hydrates template with reactive Fx attribute", () =>
47
+ Effect.gen(function* () {
48
+ const values = ["A", "B", "C"];
49
+ const interval = 100;
50
+ const fxExample = yield* hydrateHtmlElement`<div data-foo=${Fx.mergeAll(
51
+ ...values.map((value, index) => Fx.at(value, interval * index)),
52
+ )}></div>`;
53
+ assert(fxExample.getAttribute("data-foo") === "A");
54
+ assert.equal(fxExample.dataset["foo"], "A");
55
+
56
+ yield* Effect.sleep(interval * 1.5);
57
+ assert(fxExample.getAttribute("data-foo") === "B");
58
+ assert.equal(fxExample.dataset["foo"], "B");
59
+
60
+ yield* Effect.sleep(interval * 1.5);
61
+ assert(fxExample.getAttribute("data-foo") === "C");
62
+ assert.equal(fxExample.dataset["foo"], "C");
63
+ }).pipe(Effect.scoped, Effect.runPromise));
64
+
65
+ it("hydrates template with a boolean attribute", () =>
66
+ Effect.gen(function* () {
67
+ const trueExample = yield* hydrateHtmlElement`<div ?hidden=${true}></div>`;
68
+ assert(trueExample.hasAttribute("hidden"));
69
+
70
+ const falseExample = yield* hydrateHtmlElement`<div ?hidden=${false}></div>`;
71
+ assert(!falseExample.hasAttribute("hidden"));
72
+
73
+ const effectTrueExample =
74
+ yield* hydrateHtmlElement`<div ?hidden=${Effect.succeed(true)}></div>`;
75
+ assert(effectTrueExample.hasAttribute("hidden"));
76
+
77
+ const effectFalseExample =
78
+ yield* hydrateHtmlElement`<div ?hidden=${Effect.succeed(false)}></div>`;
79
+ assert(!effectFalseExample.hasAttribute("hidden"));
80
+
81
+ const fxTrueExample = yield* hydrateHtmlElement`<div ?hidden=${Fx.succeed(true)}></div>`;
82
+ assert(fxTrueExample.hasAttribute("hidden"));
83
+
84
+ const fxFalseExample = yield* hydrateHtmlElement`<div ?hidden=${Fx.succeed(false)}></div>`;
85
+ assert(!fxFalseExample.hasAttribute("hidden"));
86
+ }).pipe(Effect.scoped, Effect.runPromise));
87
+
88
+ it("hydrates template with a class name", () =>
89
+ Effect.gen(function* () {
90
+ const staticExample = yield* hydrateHtmlElement`<div class="foo"></div>`;
91
+ assert(staticExample.classList.contains("foo"));
92
+
93
+ const primitiveExample = yield* hydrateHtmlElement`<div class=${"foo"}></div>`;
94
+ assert(primitiveExample.classList.contains("foo"));
95
+
96
+ const effectExample = yield* hydrateHtmlElement`<div class=${Effect.succeed("foo")}></div>`;
97
+ assert(effectExample.classList.contains("foo"));
98
+
99
+ const fxExample = yield* hydrateHtmlElement`<div class=${Fx.succeed("foo")}></div>`;
100
+ assert(fxExample.classList.contains("foo"));
101
+ }).pipe(Effect.scoped, Effect.runPromise));
102
+
103
+ it("hydrates template with a class name interpolation", () =>
104
+ Effect.gen(function* () {
105
+ const classNameExample = yield* hydrateHtmlElement`<div class=${"foo bar baz"}></div>`;
106
+ assert(classNameExample.classList.contains("foo"));
107
+ assert(classNameExample.classList.contains("bar"));
108
+ assert(classNameExample.classList.contains("baz"));
109
+ }).pipe(Effect.scoped, Effect.runPromise));
110
+
111
+ it("hydrates template with a class name interpolation with holes", () =>
112
+ Effect.gen(function* () {
113
+ const classNameExample =
114
+ yield* hydrateHtmlElement`<div class="${"foo"} ${Effect.succeed("bar")} ${Fx.succeed(
115
+ "baz",
116
+ )}"></div>`;
117
+ assert(classNameExample.classList.contains("foo"));
118
+ assert(classNameExample.classList.contains("bar"));
119
+ assert(classNameExample.classList.contains("baz"));
120
+ }).pipe(Effect.scoped, Effect.runPromise));
121
+
122
+ it("hydrates template with data attributes", () =>
123
+ Effect.gen(function* () {
124
+ const dataExample = yield* hydrateHtmlElement`<div .data=${{
125
+ a: "a",
126
+ b: Effect.succeed("b"),
127
+ c: Fx.succeed("c"),
128
+ }} />`;
129
+
130
+ assert(dataExample.dataset.a === "a");
131
+ assert(dataExample.dataset.b === "b");
132
+ assert(dataExample.dataset.c === "c");
133
+ }).pipe(Effect.scoped, Effect.runPromise));
134
+
135
+ it("hydrates comments", () =>
136
+ Effect.gen(function* () {
137
+ const commentExample = yield* hydrateComment`<!--Hello, world!-->`;
138
+ assert.equal(commentExample.textContent, "Hello, world!");
139
+ }).pipe(Effect.scoped, Effect.runPromise));
140
+
141
+ it("hydrates comments with holes", () =>
142
+ Effect.gen(function* () {
143
+ const commentExample = yield* hydrateComment`<!--${"Hello, world!"}-->`;
144
+ assert.equal(commentExample.textContent, "Hello, world!");
145
+ }).pipe(Effect.scoped, Effect.runPromise));
146
+
147
+ it("hydrates comments with multiple holes", () =>
148
+ Effect.gen(function* () {
149
+ const commentExample =
150
+ yield* hydrateComment`<!--${"Hello"}, ${Effect.succeed("world")}${Fx.succeed("!")}-->`;
151
+ assert.equal(commentExample.textContent, "Hello, world!");
152
+ }).pipe(Effect.scoped, Effect.runPromise));
153
+
154
+ it("hydrates template with property syntax", ({ expect }) =>
155
+ Effect.gen(function* () {
156
+ const x = {};
157
+ const propertyExample = yield* hydrateHtmlElement`<div .foo=${Effect.succeed(x)}></div>`;
158
+ expect(propertyExample.outerHTML).toMatchInlineSnapshot(`"<div foo="{}"></div>"`);
159
+ }).pipe(Effect.scoped, Effect.runPromise));
160
+
161
+ it("supports ref parts", () =>
162
+ Effect.gen(function* () {
163
+ let element: HTMLElement | undefined;
164
+ const refExample = yield* hydrateHtmlElement`<div ref=${(el: HTMLElement) => {
165
+ element = el;
166
+ }}></div>`;
167
+ assert(element === refExample);
168
+ }).pipe(Effect.scoped, Effect.runPromise));
169
+
170
+ it("supports sparse attributes", () =>
171
+ Effect.gen(function* () {
172
+ const sparseExample =
173
+ yield* hydrateHtmlElement`<div attr="${"foo"} ${"bar"} ${"baz"}"></div>`;
174
+ assert(sparseExample.getAttribute("attr") === "foo bar baz");
175
+ }).pipe(Effect.scoped, Effect.runPromise));
176
+
177
+ it("supports text only elements", () =>
178
+ Effect.gen(function* () {
179
+ const textOnlyExample =
180
+ yield* hydrateHtmlElement`<script>console.log("${"Hello, world!"}")</script>`;
181
+ assert.equal(textOnlyExample.textContent, 'console.log("Hello, world!")');
182
+ }).pipe(Effect.scoped, Effect.runPromise));
183
+
184
+ it("supports text only elements with multipleholes", () =>
185
+ Effect.gen(function* () {
186
+ const textOnlyExample =
187
+ yield* hydrateHtmlElement`<script>console.log("${"Hello"}, ${Effect.succeed("world")}${Fx.succeed(
188
+ "!",
189
+ )}")</script>`;
190
+ assert.equal(textOnlyExample.textContent, 'console.log("Hello, world!")');
191
+ }).pipe(Effect.scoped, Effect.runPromise));
192
+
193
+ it("supports spread attributes", () =>
194
+ Effect.gen(function* () {
195
+ const spreadExample = yield* hydrateHtmlElement`<div ...${{ foo: "bar", baz: "qux" }}></div>`;
196
+ assert(spreadExample.getAttribute("foo") === "bar");
197
+ assert(spreadExample.getAttribute("baz") === "qux");
198
+ }).pipe(Effect.scoped, Effect.runPromise));
199
+
200
+ it("supports effects as event handlers using @event syntax", () =>
201
+ Effect.gen(function* () {
202
+ let clicked = false;
203
+ const eventExample = yield* hydrateHtmlElement`<div @click=${Effect.sync(() => {
204
+ clicked = true;
205
+ })}></div>`;
206
+ eventExample.click();
207
+ assert(clicked);
208
+ }).pipe(Effect.scoped, Effect.runPromise));
209
+
210
+ it("supports EventHandlers using @event syntax", () =>
211
+ Effect.gen(function* () {
212
+ let clicked = false;
213
+ const eventExample = yield* hydrateHtmlElement`<div @click=${EventHandler.make(() => {
214
+ clicked = true;
215
+ })}></div>`;
216
+ eventExample.click();
217
+ assert(clicked);
218
+ }).pipe(Effect.scoped, Effect.runPromise));
219
+
220
+ it("supports effects as event handlers using onclick attribute", () =>
221
+ Effect.gen(function* () {
222
+ let clicked = false;
223
+ const eventExample = yield* hydrateHtmlElement`<div onclick=${Effect.sync(() => {
224
+ clicked = true;
225
+ })}></div>`;
226
+ eventExample.click();
227
+ assert(clicked);
228
+ }).pipe(Effect.scoped, Effect.runPromise));
229
+
230
+ it("supports EventHandlers using onclick attribute", () =>
231
+ Effect.gen(function* () {
232
+ let clicked = false;
233
+ const eventExample = yield* hydrateHtmlElement`<div onclick=${EventHandler.make(() => {
234
+ clicked = true;
235
+ })}></div>`;
236
+ eventExample.click();
237
+ assert(clicked);
238
+ }).pipe(Effect.scoped, Effect.runPromise));
239
+
240
+ it("event handler allows camelCase event names", () =>
241
+ Effect.gen(function* () {
242
+ let clicked = false;
243
+ const eventExample = yield* hydrateHtmlElement`<div onClick=${EventHandler.make(
244
+ (event) => {
245
+ clicked = true;
246
+ assert(event.defaultPrevented);
247
+ },
248
+ { preventDefault: true },
249
+ )}></div>`;
250
+ eventExample.click();
251
+ assert(clicked);
252
+ }).pipe(Effect.scoped, Effect.runPromise));
253
+
254
+ it("interpolates primitive children", () =>
255
+ Effect.gen(function* () {
256
+ const numberExample = yield* hydrateHtmlElement`<div>${1}</div>`;
257
+ assert.equal(numberExample.textContent, "1");
258
+ const stringExample = yield* hydrateHtmlElement`<div>${"Hello, world!"}</div>`;
259
+ assert.equal(stringExample.textContent, "Hello, world!");
260
+ const booleanExample = yield* hydrateHtmlElement`<div>${true}</div>`;
261
+ assert.equal(booleanExample.textContent, "true");
262
+ const bigintExample = yield* hydrateHtmlElement`<div>${BigInt(1)}</div>`;
263
+ assert.equal(bigintExample.textContent, "1");
264
+ const symbolExample = yield* hydrateHtmlElement`<div>${Symbol("foo")}</div>`;
265
+ assert.equal(symbolExample.textContent, "Symbol(foo)");
266
+ const undefinedExample = yield* hydrateHtmlElement`<div>${undefined}</div>`;
267
+ assert.equal(undefinedExample.textContent, "");
268
+ const nullExample = yield* hydrateHtmlElement`<div>${null}</div>`;
269
+ assert.equal(nullExample.textContent, "");
270
+ const arrayExample = yield* hydrateHtmlElement`<div>${[1, "Hello", true]}</div>`;
271
+ assert.equal(arrayExample.textContent, "1Hellotrue");
272
+ }).pipe(Effect.scoped, Effect.runPromise));
273
+
274
+ it("interpolates dom render events", ({ expect }) =>
275
+ Effect.gen(function* () {
276
+ const renderEventExample = yield* hydrateHtmlElement`<div>${html`
277
+ <p>Hello, world!</p>
278
+ `}</div>`;
279
+ expect(renderEventExample.innerHTML).toMatchInlineSnapshot(
280
+ `"<!--n_0--><!--t_67ksqn+xDM4=--><p>Hello, world!</p><!--/t_67ksqn+xDM4=--><!--/n_0-->"`,
281
+ );
282
+ }).pipe(Effect.scoped, Effect.runPromise));
283
+
284
+ it("interpolates array of render events", ({ expect }) =>
285
+ Effect.gen(function* () {
286
+ const renderEventExample = yield* hydrateHtmlElement`<div>${[
287
+ html`
288
+ <p>A</p>
289
+ `,
290
+ html`
291
+ <p>B</p>
292
+ `,
293
+ ]}</div>`;
294
+ expect(renderEventExample.innerHTML).toMatchInlineSnapshot(
295
+ `"<!--n_0--><!--t_bQ8ZflXybUE=--><p>A</p><!--/t_bQ8ZflXybUE=--><!--t_LkwTy1XybUE=--><p>B</p><!--/t_LkwTy1XybUE=--><!--/n_0-->"`,
296
+ );
297
+ }).pipe(Effect.scoped, Effect.runPromise));
298
+
299
+ it("interpolates many comments", ({ expect }) =>
300
+ Effect.gen(function* () {
301
+ const { current, original } = yield* hydrateHtmlElementWithOriginal`<div>${many(
302
+ Fx.succeed([1, 2, 3]),
303
+ (n) => n,
304
+ (n) => html`<p>${n}</p>`,
305
+ )}</div>`;
306
+ assert(original === current);
307
+ // Verify that the nodes are the same
308
+ for (const [index, node] of Array.from(current.childNodes).entries()) {
309
+ const originalNode = original.childNodes[index];
310
+ expect(node).toBe(originalNode);
311
+ expect(node.textContent).toBe(originalNode.textContent);
312
+ }
313
+
314
+ expect(current.innerHTML).toMatchInlineSnapshot(
315
+ `"<!--n_0--><!--t_KwZ/fKKViAs=--><p><!--n_0-->1<!--/n_0--></p><!--/t_KwZ/fKKViAs=--><!--/m_1--><!--t_KwZ/fKKViAs=--><p><!--n_0-->2<!--/n_0--></p><!--/t_KwZ/fKKViAs=--><!--/m_2--><!--t_KwZ/fKKViAs=--><p><!--n_0-->3<!--/n_0--></p><!--/t_KwZ/fKKViAs=--><!--/m_3--><!--/n_0-->"`,
316
+ );
317
+ }).pipe(Effect.scoped, Effect.runPromise));
318
+ });
319
+
320
+ function createHappyDomLayer(...params: ConstructorParameters<typeof Window>) {
321
+ const window = new Window(...params) as unknown as globalThis.Window & typeof globalThis;
322
+ const layer = DomRenderTemplate.using(window.document);
323
+ return [window, layer] as const;
324
+ }
325
+
326
+ function hydrateHtmlElement<Values extends ReadonlyArray<Renderable.Any>>(
327
+ template: TemplateStringsArray,
328
+ ...values: Values
329
+ ): Effect.Effect<
330
+ HTMLElement,
331
+ Renderable.Error<Values[number]>,
332
+ Scope.Scope | Exclude<Renderable.Services<Values[number]>, RenderTemplate>
333
+ > {
334
+ return hydrateTemplate(
335
+ template,
336
+ values,
337
+ (example, window, message): asserts example is HTMLElement => {
338
+ assert(example instanceof window.HTMLElement, message);
339
+ },
340
+ ).pipe(Effect.map(({ current }) => current));
341
+ }
342
+
343
+ function hydrateComment<Values extends ReadonlyArray<Renderable.Any>>(
344
+ template: TemplateStringsArray,
345
+ ...values: Values
346
+ ) {
347
+ return hydrateTemplate(template, values, (example, window, message): asserts example is Comment =>
348
+ assert(example instanceof window.Comment, message),
349
+ ).pipe(Effect.map(({ current }) => current));
350
+ }
351
+
352
+ function hydrateTemplate<Values extends ReadonlyArray<Renderable.Any>, T extends Rendered>(
353
+ template: TemplateStringsArray,
354
+ values: Values,
355
+ assertion: (
356
+ example: Rendered,
357
+ window: globalThis.Window & typeof globalThis,
358
+ message?: string,
359
+ ) => asserts example is T,
360
+ ): Effect.Effect<
361
+ { original: Rendered; current: T },
362
+ Renderable.Error<Values[number]>,
363
+ Scope.Scope | Exclude<Renderable.Services<Values[number]>, RenderTemplate>
364
+ > {
365
+ return Effect.gen(function* () {
366
+ const [window, layer] = createHappyDomLayer();
367
+ const fx = html(template, ...values);
368
+ const htmlString = yield* renderToHtmlString(fx).pipe(Effect.provide(HtmlRenderTemplate));
369
+ const body = window.document.body;
370
+ body.innerHTML = htmlString;
371
+
372
+ let initial = body.firstChild;
373
+ assert(initial);
374
+ if (initial.nodeType === initial.COMMENT_NODE) {
375
+ initial = initial.nextSibling;
376
+ }
377
+
378
+ assertion(initial as Node, window);
379
+
380
+ const [example] = yield* render(fx, body).pipe(
381
+ Fx.provide(layer),
382
+ Fx.take(1),
383
+ Fx.collectUpTo(1),
384
+ );
385
+
386
+ assertion(example, window);
387
+
388
+ // They should be the same node after hydration
389
+ assert((initial as Node) === example);
390
+
391
+ return {
392
+ original: initial as Rendered,
393
+ current: example,
394
+ };
395
+ });
396
+ }
397
+
398
+ function hydrateHtmlElementWithOriginal<Values extends ReadonlyArray<Renderable.Any>>(
399
+ template: TemplateStringsArray,
400
+ ...values: Values
401
+ ) {
402
+ return hydrateTemplate(
403
+ template,
404
+ values,
405
+ (example, window, message): asserts example is HTMLElement => {
406
+ assert(example instanceof window.HTMLElement, message);
407
+ },
408
+ );
409
+ }