@typed/template 0.14.0 → 1.0.0-beta.1

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 (452) hide show
  1. package/README.md +121 -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 +298 -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 +29 -227
  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 +408 -0
  94. package/src/Parser.test.ts +923 -0
  95. package/src/Parser.ts +598 -10
  96. package/src/Render.test.ts +337 -0
  97. package/src/Render.ts +878 -63
  98. package/src/RenderEvent.ts +169 -40
  99. package/src/RenderQueue.ts +291 -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/Directive/package.json +0 -6
  120. package/ElementRef/package.json +0 -6
  121. package/ElementSource/package.json +0 -6
  122. package/Entry/package.json +0 -6
  123. package/EventHandler/package.json +0 -6
  124. package/Html/package.json +0 -6
  125. package/HtmlChunk/package.json +0 -6
  126. package/Hydrate/package.json +0 -6
  127. package/LICENSE +0 -21
  128. package/Many/package.json +0 -6
  129. package/Meta/package.json +0 -6
  130. package/Parser/package.json +0 -6
  131. package/Part/package.json +0 -6
  132. package/Placeholder/package.json +0 -6
  133. package/Platform/package.json +0 -6
  134. package/Render/package.json +0 -6
  135. package/RenderContext/package.json +0 -6
  136. package/RenderEvent/package.json +0 -6
  137. package/RenderQueue/package.json +0 -6
  138. package/RenderTemplate/package.json +0 -6
  139. package/Renderable/package.json +0 -6
  140. package/Template/package.json +0 -6
  141. package/Test/package.json +0 -6
  142. package/Vitest/package.json +0 -6
  143. package/compiler-tools/package.json +0 -6
  144. package/dist/cjs/Directive.js +0 -76
  145. package/dist/cjs/Directive.js.map +0 -1
  146. package/dist/cjs/ElementRef.js +0 -92
  147. package/dist/cjs/ElementRef.js.map +0 -1
  148. package/dist/cjs/ElementSource.js +0 -246
  149. package/dist/cjs/ElementSource.js.map +0 -1
  150. package/dist/cjs/Entry.js +0 -6
  151. package/dist/cjs/Entry.js.map +0 -1
  152. package/dist/cjs/EventHandler.js +0 -76
  153. package/dist/cjs/EventHandler.js.map +0 -1
  154. package/dist/cjs/Html.js +0 -224
  155. package/dist/cjs/Html.js.map +0 -1
  156. package/dist/cjs/HtmlChunk.js +0 -306
  157. package/dist/cjs/HtmlChunk.js.map +0 -1
  158. package/dist/cjs/Hydrate.js +0 -43
  159. package/dist/cjs/Hydrate.js.map +0 -1
  160. package/dist/cjs/Many.js +0 -66
  161. package/dist/cjs/Many.js.map +0 -1
  162. package/dist/cjs/Meta.js +0 -50
  163. package/dist/cjs/Meta.js.map +0 -1
  164. package/dist/cjs/Parser.js +0 -19
  165. package/dist/cjs/Parser.js.map +0 -1
  166. package/dist/cjs/Part.js +0 -6
  167. package/dist/cjs/Part.js.map +0 -1
  168. package/dist/cjs/Placeholder.js +0 -34
  169. package/dist/cjs/Placeholder.js.map +0 -1
  170. package/dist/cjs/Platform.js +0 -65
  171. package/dist/cjs/Platform.js.map +0 -1
  172. package/dist/cjs/Render.js +0 -50
  173. package/dist/cjs/Render.js.map +0 -1
  174. package/dist/cjs/RenderContext.js +0 -67
  175. package/dist/cjs/RenderContext.js.map +0 -1
  176. package/dist/cjs/RenderEvent.js +0 -52
  177. package/dist/cjs/RenderEvent.js.map +0 -1
  178. package/dist/cjs/RenderQueue.js +0 -343
  179. package/dist/cjs/RenderQueue.js.map +0 -1
  180. package/dist/cjs/RenderTemplate.js +0 -26
  181. package/dist/cjs/RenderTemplate.js.map +0 -1
  182. package/dist/cjs/Renderable.js +0 -6
  183. package/dist/cjs/Renderable.js.map +0 -1
  184. package/dist/cjs/Template.js +0 -305
  185. package/dist/cjs/Template.js.map +0 -1
  186. package/dist/cjs/Test.js +0 -184
  187. package/dist/cjs/Test.js.map +0 -1
  188. package/dist/cjs/Vitest.js +0 -52
  189. package/dist/cjs/Vitest.js.map +0 -1
  190. package/dist/cjs/compiler-tools.js +0 -100
  191. package/dist/cjs/compiler-tools.js.map +0 -1
  192. package/dist/cjs/index.js +0 -138
  193. package/dist/cjs/index.js.map +0 -1
  194. package/dist/cjs/internal/EventSource.js +0 -129
  195. package/dist/cjs/internal/EventSource.js.map +0 -1
  196. package/dist/cjs/internal/HydrateContext.js +0 -13
  197. package/dist/cjs/internal/HydrateContext.js.map +0 -1
  198. package/dist/cjs/internal/browser.js +0 -110
  199. package/dist/cjs/internal/browser.js.map +0 -1
  200. package/dist/cjs/internal/character-entities.js +0 -2141
  201. package/dist/cjs/internal/character-entities.js.map +0 -1
  202. package/dist/cjs/internal/chunks.js +0 -68
  203. package/dist/cjs/internal/chunks.js.map +0 -1
  204. package/dist/cjs/internal/errors.js +0 -52
  205. package/dist/cjs/internal/errors.js.map +0 -1
  206. package/dist/cjs/internal/indexRefCounter.js +0 -52
  207. package/dist/cjs/internal/indexRefCounter.js.map +0 -1
  208. package/dist/cjs/internal/module-augmentation.js +0 -6
  209. package/dist/cjs/internal/module-augmentation.js.map +0 -1
  210. package/dist/cjs/internal/parser.js +0 -568
  211. package/dist/cjs/internal/parser.js.map +0 -1
  212. package/dist/cjs/internal/parser2.js +0 -382
  213. package/dist/cjs/internal/parser2.js.map +0 -1
  214. package/dist/cjs/internal/server-parts.js +0 -124
  215. package/dist/cjs/internal/server-parts.js.map +0 -1
  216. package/dist/cjs/internal/server.js +0 -48
  217. package/dist/cjs/internal/server.js.map +0 -1
  218. package/dist/cjs/internal/utils.js +0 -136
  219. package/dist/cjs/internal/utils.js.map +0 -1
  220. package/dist/cjs/internal/v2/SyncPart.js +0 -6
  221. package/dist/cjs/internal/v2/SyncPart.js.map +0 -1
  222. package/dist/cjs/internal/v2/helpers.js +0 -15
  223. package/dist/cjs/internal/v2/helpers.js.map +0 -1
  224. package/dist/cjs/internal/v2/hydration-template.js +0 -269
  225. package/dist/cjs/internal/v2/hydration-template.js.map +0 -1
  226. package/dist/cjs/internal/v2/parts.js +0 -169
  227. package/dist/cjs/internal/v2/parts.js.map +0 -1
  228. package/dist/cjs/internal/v2/render-entry.js +0 -110
  229. package/dist/cjs/internal/v2/render-entry.js.map +0 -1
  230. package/dist/cjs/internal/v2/render-sync-parts.js +0 -318
  231. package/dist/cjs/internal/v2/render-sync-parts.js.map +0 -1
  232. package/dist/cjs/internal/v2/render.js +0 -592
  233. package/dist/cjs/internal/v2/render.js.map +0 -1
  234. package/dist/cjs/internal/v2/sync-parts.js +0 -115
  235. package/dist/cjs/internal/v2/sync-parts.js.map +0 -1
  236. package/dist/dts/Directive.d.ts +0 -70
  237. package/dist/dts/Directive.d.ts.map +0 -1
  238. package/dist/dts/ElementRef.d.ts +0 -42
  239. package/dist/dts/ElementRef.d.ts.map +0 -1
  240. package/dist/dts/ElementSource.d.ts +0 -79
  241. package/dist/dts/ElementSource.d.ts.map +0 -1
  242. package/dist/dts/Entry.d.ts +0 -26
  243. package/dist/dts/Entry.d.ts.map +0 -1
  244. package/dist/dts/EventHandler.d.ts +0 -73
  245. package/dist/dts/EventHandler.d.ts.map +0 -1
  246. package/dist/dts/Html.d.ts +0 -35
  247. package/dist/dts/Html.d.ts.map +0 -1
  248. package/dist/dts/HtmlChunk.d.ts +0 -56
  249. package/dist/dts/HtmlChunk.d.ts.map +0 -1
  250. package/dist/dts/Hydrate.d.ts +0 -19
  251. package/dist/dts/Hydrate.d.ts.map +0 -1
  252. package/dist/dts/Many.d.ts +0 -32
  253. package/dist/dts/Many.d.ts.map +0 -1
  254. package/dist/dts/Meta.d.ts +0 -33
  255. package/dist/dts/Meta.d.ts.map +0 -1
  256. package/dist/dts/Parser.d.ts +0 -13
  257. package/dist/dts/Parser.d.ts.map +0 -1
  258. package/dist/dts/Part.d.ts +0 -121
  259. package/dist/dts/Part.d.ts.map +0 -1
  260. package/dist/dts/Placeholder.d.ts +0 -48
  261. package/dist/dts/Placeholder.d.ts.map +0 -1
  262. package/dist/dts/Platform.d.ts +0 -21
  263. package/dist/dts/Platform.d.ts.map +0 -1
  264. package/dist/dts/Render.d.ts +0 -31
  265. package/dist/dts/Render.d.ts.map +0 -1
  266. package/dist/dts/RenderContext.d.ts +0 -70
  267. package/dist/dts/RenderContext.d.ts.map +0 -1
  268. package/dist/dts/RenderEvent.d.ts +0 -42
  269. package/dist/dts/RenderEvent.d.ts.map +0 -1
  270. package/dist/dts/RenderQueue.d.ts +0 -103
  271. package/dist/dts/RenderQueue.d.ts.map +0 -1
  272. package/dist/dts/RenderTemplate.d.ts +0 -25
  273. package/dist/dts/RenderTemplate.d.ts.map +0 -1
  274. package/dist/dts/Renderable.d.ts +0 -28
  275. package/dist/dts/Renderable.d.ts.map +0 -1
  276. package/dist/dts/Template.d.ts.map +0 -1
  277. package/dist/dts/Test.d.ts +0 -85
  278. package/dist/dts/Test.d.ts.map +0 -1
  279. package/dist/dts/Vitest.d.ts +0 -43
  280. package/dist/dts/Vitest.d.ts.map +0 -1
  281. package/dist/dts/compiler-tools.d.ts +0 -143
  282. package/dist/dts/compiler-tools.d.ts.map +0 -1
  283. package/dist/dts/index.d.ts +0 -65
  284. package/dist/dts/index.d.ts.map +0 -1
  285. package/dist/dts/internal/EventSource.d.ts +0 -13
  286. package/dist/dts/internal/EventSource.d.ts.map +0 -1
  287. package/dist/dts/internal/HydrateContext.d.ts +0 -2
  288. package/dist/dts/internal/HydrateContext.d.ts.map +0 -1
  289. package/dist/dts/internal/browser.d.ts +0 -8
  290. package/dist/dts/internal/browser.d.ts.map +0 -1
  291. package/dist/dts/internal/character-entities.d.ts +0 -2133
  292. package/dist/dts/internal/character-entities.d.ts.map +0 -1
  293. package/dist/dts/internal/chunks.d.ts +0 -23
  294. package/dist/dts/internal/chunks.d.ts.map +0 -1
  295. package/dist/dts/internal/errors.d.ts +0 -22
  296. package/dist/dts/internal/errors.d.ts.map +0 -1
  297. package/dist/dts/internal/indexRefCounter.d.ts +0 -7
  298. package/dist/dts/internal/indexRefCounter.d.ts.map +0 -1
  299. package/dist/dts/internal/module-augmentation.d.ts +0 -32
  300. package/dist/dts/internal/module-augmentation.d.ts.map +0 -1
  301. package/dist/dts/internal/parser.d.ts +0 -33
  302. package/dist/dts/internal/parser.d.ts.map +0 -1
  303. package/dist/dts/internal/parser2.d.ts +0 -12
  304. package/dist/dts/internal/parser2.d.ts.map +0 -1
  305. package/dist/dts/internal/server-parts.d.ts +0 -223
  306. package/dist/dts/internal/server-parts.d.ts.map +0 -1
  307. package/dist/dts/internal/server.d.ts +0 -5
  308. package/dist/dts/internal/server.d.ts.map +0 -1
  309. package/dist/dts/internal/utils.d.ts +0 -19
  310. package/dist/dts/internal/utils.d.ts.map +0 -1
  311. package/dist/dts/internal/v2/SyncPart.d.ts +0 -87
  312. package/dist/dts/internal/v2/SyncPart.d.ts.map +0 -1
  313. package/dist/dts/internal/v2/helpers.d.ts +0 -3
  314. package/dist/dts/internal/v2/helpers.d.ts.map +0 -1
  315. package/dist/dts/internal/v2/hydration-template.d.ts.map +0 -1
  316. package/dist/dts/internal/v2/parts.d.ts +0 -245
  317. package/dist/dts/internal/v2/parts.d.ts.map +0 -1
  318. package/dist/dts/internal/v2/render-entry.d.ts +0 -6
  319. package/dist/dts/internal/v2/render-entry.d.ts.map +0 -1
  320. package/dist/dts/internal/v2/render-sync-parts.d.ts +0 -22
  321. package/dist/dts/internal/v2/render-sync-parts.d.ts.map +0 -1
  322. package/dist/dts/internal/v2/render.d.ts +0 -83
  323. package/dist/dts/internal/v2/render.d.ts.map +0 -1
  324. package/dist/dts/internal/v2/sync-parts.d.ts +0 -129
  325. package/dist/dts/internal/v2/sync-parts.d.ts.map +0 -1
  326. package/dist/esm/Directive.js +0 -64
  327. package/dist/esm/Directive.js.map +0 -1
  328. package/dist/esm/ElementRef.js +0 -76
  329. package/dist/esm/ElementRef.js.map +0 -1
  330. package/dist/esm/ElementSource.js +0 -246
  331. package/dist/esm/ElementSource.js.map +0 -1
  332. package/dist/esm/Entry.js +0 -2
  333. package/dist/esm/Entry.js.map +0 -1
  334. package/dist/esm/EventHandler.js +0 -68
  335. package/dist/esm/EventHandler.js.map +0 -1
  336. package/dist/esm/Html.js +0 -230
  337. package/dist/esm/Html.js.map +0 -1
  338. package/dist/esm/HtmlChunk.js +0 -330
  339. package/dist/esm/HtmlChunk.js.map +0 -1
  340. package/dist/esm/Hydrate.js +0 -31
  341. package/dist/esm/Hydrate.js.map +0 -1
  342. package/dist/esm/Many.js +0 -54
  343. package/dist/esm/Many.js.map +0 -1
  344. package/dist/esm/Meta.js +0 -40
  345. package/dist/esm/Meta.js.map +0 -1
  346. package/dist/esm/Parser.js +0 -13
  347. package/dist/esm/Parser.js.map +0 -1
  348. package/dist/esm/Part.js +0 -5
  349. package/dist/esm/Part.js.map +0 -1
  350. package/dist/esm/Placeholder.js +0 -26
  351. package/dist/esm/Placeholder.js.map +0 -1
  352. package/dist/esm/Platform.js +0 -42
  353. package/dist/esm/Platform.js.map +0 -1
  354. package/dist/esm/Render.js +0 -36
  355. package/dist/esm/Render.js.map +0 -1
  356. package/dist/esm/RenderContext.js +0 -54
  357. package/dist/esm/RenderContext.js.map +0 -1
  358. package/dist/esm/RenderEvent.js +0 -43
  359. package/dist/esm/RenderEvent.js.map +0 -1
  360. package/dist/esm/RenderQueue.js +0 -338
  361. package/dist/esm/RenderQueue.js.map +0 -1
  362. package/dist/esm/RenderTemplate.js +0 -16
  363. package/dist/esm/RenderTemplate.js.map +0 -1
  364. package/dist/esm/Renderable.js +0 -2
  365. package/dist/esm/Renderable.js.map +0 -1
  366. package/dist/esm/Template.js.map +0 -1
  367. package/dist/esm/Test.js +0 -167
  368. package/dist/esm/Test.js.map +0 -1
  369. package/dist/esm/Vitest.js +0 -44
  370. package/dist/esm/Vitest.js.map +0 -1
  371. package/dist/esm/compiler-tools.js +0 -91
  372. package/dist/esm/compiler-tools.js.map +0 -1
  373. package/dist/esm/index.js +0 -65
  374. package/dist/esm/index.js.map +0 -1
  375. package/dist/esm/internal/EventSource.js +0 -126
  376. package/dist/esm/internal/EventSource.js.map +0 -1
  377. package/dist/esm/internal/HydrateContext.js +0 -7
  378. package/dist/esm/internal/HydrateContext.js.map +0 -1
  379. package/dist/esm/internal/browser.js +0 -103
  380. package/dist/esm/internal/browser.js.map +0 -1
  381. package/dist/esm/internal/character-entities.js +0 -2134
  382. package/dist/esm/internal/character-entities.js.map +0 -1
  383. package/dist/esm/internal/chunks.js +0 -60
  384. package/dist/esm/internal/chunks.js.map +0 -1
  385. package/dist/esm/internal/errors.js +0 -46
  386. package/dist/esm/internal/errors.js.map +0 -1
  387. package/dist/esm/internal/indexRefCounter.js +0 -47
  388. package/dist/esm/internal/indexRefCounter.js.map +0 -1
  389. package/dist/esm/internal/module-augmentation.js +0 -2
  390. package/dist/esm/internal/module-augmentation.js.map +0 -1
  391. package/dist/esm/internal/parser.js +0 -596
  392. package/dist/esm/internal/parser.js.map +0 -1
  393. package/dist/esm/internal/parser2.js +0 -393
  394. package/dist/esm/internal/parser2.js.map +0 -1
  395. package/dist/esm/internal/server-parts.js +0 -109
  396. package/dist/esm/internal/server-parts.js.map +0 -1
  397. package/dist/esm/internal/server.js +0 -22
  398. package/dist/esm/internal/server.js.map +0 -1
  399. package/dist/esm/internal/utils.js +0 -119
  400. package/dist/esm/internal/utils.js.map +0 -1
  401. package/dist/esm/internal/v2/SyncPart.js +0 -5
  402. package/dist/esm/internal/v2/SyncPart.js.map +0 -1
  403. package/dist/esm/internal/v2/helpers.js +0 -12
  404. package/dist/esm/internal/v2/helpers.js.map +0 -1
  405. package/dist/esm/internal/v2/hydration-template.js.map +0 -1
  406. package/dist/esm/internal/v2/parts.js +0 -150
  407. package/dist/esm/internal/v2/parts.js.map +0 -1
  408. package/dist/esm/internal/v2/render-entry.js +0 -102
  409. package/dist/esm/internal/v2/render-entry.js.map +0 -1
  410. package/dist/esm/internal/v2/render-sync-parts.js +0 -265
  411. package/dist/esm/internal/v2/render-sync-parts.js.map +0 -1
  412. package/dist/esm/internal/v2/render.js +0 -521
  413. package/dist/esm/internal/v2/render.js.map +0 -1
  414. package/dist/esm/internal/v2/sync-parts.js +0 -102
  415. package/dist/esm/internal/v2/sync-parts.js.map +0 -1
  416. package/dist/esm/package.json +0 -4
  417. package/src/Directive.ts +0 -114
  418. package/src/ElementRef.ts +0 -148
  419. package/src/ElementSource.ts +0 -510
  420. package/src/Entry.ts +0 -28
  421. package/src/Hydrate.ts +0 -51
  422. package/src/Many.ts +0 -161
  423. package/src/Meta.ts +0 -45
  424. package/src/Part.ts +0 -154
  425. package/src/Placeholder.ts +0 -78
  426. package/src/Platform.ts +0 -70
  427. package/src/RenderContext.ts +0 -121
  428. package/src/Test.ts +0 -354
  429. package/src/Vitest.ts +0 -141
  430. package/src/compiler-tools.ts +0 -250
  431. package/src/internal/EventSource.ts +0 -188
  432. package/src/internal/HydrateContext.ts +0 -22
  433. package/src/internal/browser.ts +0 -138
  434. package/src/internal/character-entities.ts +0 -2136
  435. package/src/internal/chunks.ts +0 -89
  436. package/src/internal/errors.ts +0 -49
  437. package/src/internal/external.d.ts +0 -11
  438. package/src/internal/indexRefCounter.ts +0 -54
  439. package/src/internal/module-augmentation.ts +0 -44
  440. package/src/internal/parser.ts +0 -757
  441. package/src/internal/parser2.ts +0 -468
  442. package/src/internal/server-parts.ts +0 -161
  443. package/src/internal/server.ts +0 -37
  444. package/src/internal/utils.ts +0 -153
  445. package/src/internal/v2/SyncPart.ts +0 -112
  446. package/src/internal/v2/helpers.ts +0 -13
  447. package/src/internal/v2/hydration-template.ts +0 -308
  448. package/src/internal/v2/parts.ts +0 -254
  449. package/src/internal/v2/render-entry.ts +0 -131
  450. package/src/internal/v2/render-sync-parts.ts +0 -440
  451. package/src/internal/v2/render.ts +0 -813
  452. package/src/internal/v2/sync-parts.ts +0 -133
@@ -0,0 +1,61 @@
1
+ export function buildTemplateFragment(document, template) {
2
+ const root = document.createDocumentFragment();
3
+ for (const node of template.nodes) {
4
+ root.appendChild(buildTemplateNode(document, node));
5
+ }
6
+ return root;
7
+ }
8
+ function buildTemplateNode(document, node) {
9
+ switch (node._tag) {
10
+ case "comment":
11
+ return document.createComment(node.value);
12
+ case "comment-part":
13
+ return document.createComment(`c_${node.index}`);
14
+ case "sparse-comment": {
15
+ return document.createComment(`c_${node.nodes.map((n) => (n._tag === "text" ? "" : n.index)).join("_")}`);
16
+ }
17
+ case "doctype":
18
+ return document.implementation.createDocumentType(node.name, node.publicId ?? "", node.systemId ?? "");
19
+ case "element":
20
+ return buildTemplateElement(document, node);
21
+ case "self-closing-element":
22
+ return buildTemplateSelfClosingElement(document, node);
23
+ case "text-only-element":
24
+ return buildTemplateTextOnlyElement(document, node);
25
+ case "text":
26
+ return document.createTextNode(node.value);
27
+ case "node":
28
+ return document.createComment(`/n_${node.index}`);
29
+ }
30
+ }
31
+ function buildTemplateElement(document, node) {
32
+ const element = document.createElement(node.tagName);
33
+ addStaticAttributes(element, node.attributes);
34
+ for (const child of node.children) {
35
+ element.appendChild(buildTemplateNode(document, child));
36
+ }
37
+ return element;
38
+ }
39
+ function addStaticAttributes(element, attributes) {
40
+ for (const attribute of attributes) {
41
+ if (attribute._tag === "attribute") {
42
+ element.setAttribute(attribute.name, attribute.value);
43
+ }
44
+ else if (attribute._tag === "boolean") {
45
+ element.toggleAttribute(attribute.name, true);
46
+ }
47
+ }
48
+ }
49
+ function buildTemplateSelfClosingElement(document, node) {
50
+ const element = document.createElement(node.tagName);
51
+ addStaticAttributes(element, node.attributes);
52
+ return element;
53
+ }
54
+ function buildTemplateTextOnlyElement(document, node) {
55
+ const element = document.createElement(node.tagName);
56
+ addStaticAttributes(element, node.attributes);
57
+ if (node.textContent && node.textContent._tag === "text") {
58
+ element.textContent = node.textContent.value;
59
+ }
60
+ return element;
61
+ }
@@ -0,0 +1,2 @@
1
+ export declare const diff: (a: Array<Node>, b: Array<Node>, get: (entry: Node, action: number) => Node, before: Node) => Node[];
2
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/internal/diff.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,GACf,GAAG,KAAK,CAAC,IAAI,CAAC,EACd,GAAG,KAAK,CAAC,IAAI,CAAC,EACd,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAC1C,QAAQ,IAAI,WAwHb,CAAC"}
@@ -0,0 +1,119 @@
1
+ // @see https://github.com/WebReflection/udomdiff
2
+ export const diff = (a, b, get, before) => {
3
+ const parentNode = before.parentNode;
4
+ const bLength = b.length;
5
+ let aEnd = a.length;
6
+ let bEnd = bLength;
7
+ let aStart = 0;
8
+ let bStart = 0;
9
+ let map = null;
10
+ while (aStart < aEnd || bStart < bEnd) {
11
+ // append head, tail, or nodes in between: fast path
12
+ if (aEnd === aStart) {
13
+ // we could be in a situation where the rest of nodes that
14
+ // need to be added are not at the end, and in such case
15
+ // the node to `insertBefore`, if the index is more than 0
16
+ // must be retrieved, otherwise it's gonna be the first item.
17
+ const node = bEnd < bLength ? (bStart ? get(b[bStart - 1], -0).nextSibling : get(b[bEnd], 0)) : before;
18
+ while (bStart < bEnd) {
19
+ parentNode.insertBefore(get(b[bStart++], 1), node);
20
+ }
21
+ } // remove head or tail: fast path
22
+ else if (bEnd === bStart) {
23
+ while (aStart < aEnd) {
24
+ // remove the node only if it's unknown or not live
25
+ if (!map || !map.has(a[aStart])) {
26
+ // @ts-ignore
27
+ get(a[aStart], -1).remove();
28
+ }
29
+ aStart++;
30
+ }
31
+ } // same node: fast path
32
+ else if (a[aStart] === b[bStart]) {
33
+ aStart++;
34
+ bStart++;
35
+ } // same tail: fast path
36
+ else if (a[aEnd - 1] === b[bEnd - 1]) {
37
+ aEnd--;
38
+ bEnd--;
39
+ } // The once here single last swap "fast path" has been removed in v1.1.0
40
+ // https://github.com/WebReflection/udomdiff/blob/single-final-swap/esm/index.js#L69-L85
41
+ // reverse swap: also fast path
42
+ else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
43
+ // this is a "shrink" operation that could happen in these cases:
44
+ // [1, 2, 3, 4, 5]
45
+ // [1, 4, 3, 2, 5]
46
+ // or asymmetric too
47
+ // [1, 2, 3, 4, 5]
48
+ // [1, 2, 3, 5, 6, 4]
49
+ const node = get(a[--aEnd], -0).nextSibling;
50
+ parentNode.insertBefore(get(b[bStart++], 1), get(a[aStart++], -0).nextSibling);
51
+ parentNode.insertBefore(get(b[--bEnd], 1), node);
52
+ // mark the future index as identical (yeah, it's dirty, but cheap 👍)
53
+ // The main reason to do this, is that when a[aEnd] will be reached,
54
+ // the loop will likely be on the fast path, as identical to b[bEnd].
55
+ // In the best case scenario, the next loop will skip the tail,
56
+ // but in the worst one, this node will be considered as already
57
+ // processed, bailing out pretty quickly from the map index check
58
+ a[aEnd] = b[bEnd];
59
+ } // map based fallback, "slow" path
60
+ else {
61
+ // the map requires an O(bEnd - bStart) operation once
62
+ // to store all future nodes indexes for later purposes.
63
+ // In the worst case scenario, this is a full O(N) cost,
64
+ // and such scenario happens at least when all nodes are different,
65
+ // but also if both first and last items of the lists are different
66
+ if (!map) {
67
+ map = new Map();
68
+ let i = bStart;
69
+ while (i < bEnd) {
70
+ map.set(b[i], i++);
71
+ }
72
+ }
73
+ const index = map.get(a[aStart]) ?? -1;
74
+ // this node has no meaning in the future list, so it's more than safe
75
+ // to remove it, and check the next live node out instead, meaning
76
+ // that only the live list index should be forwarded
77
+ if (index < 0)
78
+ get(a[aStart++], -1).remove();
79
+ // it's a future node, hence it needs some handling
80
+ else {
81
+ // if it's not already processed, look on demand for the next LCS
82
+ if (bStart < index && index < bEnd) {
83
+ let i = aStart;
84
+ // counts the amount of nodes that are the same in the future
85
+ let sequence = 1;
86
+ while (++i < aEnd && i < bEnd && map.get(a[i]) === index + sequence) {
87
+ sequence++;
88
+ }
89
+ // effort decision here: if the sequence is longer than replaces
90
+ // needed to reach such sequence, which would brings again this loop
91
+ // to the fast path, prepend the difference before a sequence,
92
+ // and move only the future list index forward, so that aStart
93
+ // and bStart will be aligned again, hence on the fast path.
94
+ // An example considering aStart and bStart are both 0:
95
+ // a: [1, 2, 3, 4]
96
+ // b: [7, 1, 2, 3, 6]
97
+ // this would place 7 before 1 and, from that time on, 1, 2, and 3
98
+ // will be processed at zero cost
99
+ if (sequence > index - bStart) {
100
+ const node = get(a[aStart], 0);
101
+ while (bStart < index) {
102
+ parentNode.insertBefore(get(b[bStart++], 1), node);
103
+ }
104
+ } // if the effort wasn't good enough, fallback to a replace,
105
+ // moving both source and target indexes forward, hoping that some
106
+ // similar node will be found later on, to go back to the fast path
107
+ else {
108
+ // TODO: benchmark replaceWith instead
109
+ parentNode.replaceChild(get(b[bStart++], 1), get(a[aStart++], -1));
110
+ }
111
+ } // otherwise move the source forward, 'cause there's nothing to do
112
+ else {
113
+ aStart++;
114
+ }
115
+ }
116
+ }
117
+ }
118
+ return b;
119
+ };
@@ -0,0 +1,45 @@
1
+ import { type EventHandler } from "../EventHandler.js";
2
+ export declare function makeTextContentUpdater(element: Node): (value: unknown) => void;
3
+ export declare function makeAttributeValueUpdater(element: HTMLElement | SVGElement, attr: Attr): (value: string | null | undefined) => void;
4
+ export declare function makeClassListUpdater(element: HTMLElement | SVGElement): (classNames: ReadonlyArray<string>) => void;
5
+ export declare function makeDatasetUpdater(element: HTMLElement | SVGElement): (value: unknown) => void;
6
+ export declare function diffStrings(previous: ReadonlyArray<string> | null | undefined, current: ReadonlyArray<string> | null | undefined): {
7
+ added: ReadonlyArray<string>;
8
+ removed: ReadonlyArray<string>;
9
+ unchanged: ReadonlyArray<string>;
10
+ };
11
+ export declare function diffDataSet(a: Record<string, string | undefined> | null | undefined, b: Record<string, string | undefined> | null | undefined): {
12
+ added: Array<readonly [string, string | undefined]>;
13
+ removed: ReadonlyArray<string>;
14
+ } | null;
15
+ export declare function getClassList(value: unknown): ReadonlyArray<string>;
16
+ /**
17
+ * Splits a string of class names (like those used in HTML `class=""` attributes)
18
+ * into an array of individual class names (words), separated by whitespace.
19
+ *
20
+ * This function avoids creating intermediate arrays and unnecessary string copying by:
21
+ * - Scanning the string one character at a time
22
+ * - Skipping over all leading whitespace for each word
23
+ * - Collecting all consecutive non-whitespace characters as a "word"
24
+ * - Repeating until the input is exhausted
25
+ *
26
+ * All ASCII "whitespace" characters with code <= 32 are considered as delimiters.
27
+ * This is more efficient than `String.prototype.trim` and `String.prototype.split(/\s+/)`
28
+ * as it only allocates memory for the result array, not for intermediate or empty strings.
29
+ *
30
+ * Example:
31
+ * splitClassNames(" foo bar\tbaz\nqux ") // => ["foo", "bar", "baz", "qux"]
32
+ */
33
+ export declare function splitClassNames(value: string): Array<string>;
34
+ export declare function matchNodeValue<A, B>(document: Document, value: unknown, onText: (text: string) => A, onNodes: (nodes: Array<Node>) => B): A | B;
35
+ export declare function renderEventToArray(document: Document, x: unknown): Array<Node>;
36
+ export declare function diffChildren(comment: Comment, currentNodes: Array<Node>, nextNodes: Array<Node>, get: (entry: Node, action: number) => Node): Node[];
37
+ export declare function findNodePartEndComment(parent: Element, index: number): Comment;
38
+ export declare function findNodePartStartComment(parent: Element, index: number): Comment;
39
+ export declare function makeNodeUpdater(document: Document, comment: Comment, text?: Text | null, nodes?: Array<Node>): (value: unknown) => void;
40
+ export declare function makeBooleanUpdater(element: HTMLElement | SVGElement, name: string): (value: boolean) => void;
41
+ export declare function getAttributeValue(value: unknown): string | null | undefined;
42
+ export declare function getBooleanValue(value: unknown): boolean;
43
+ export declare function getDatasetValue(value: unknown): Record<string, string | undefined> | null | undefined;
44
+ export declare function getEventHandlerValue<E, R>(value: unknown): EventHandler<Event, E, R> | null | undefined;
45
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/internal/dom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,304 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { isNullish, isObject } from "effect/Predicate";
3
+ import { CouldNotFindCommentError } from "../errors.js";
4
+ import { fromEffectOrEventHandler, isEventHandler } from "../EventHandler.js";
5
+ import { isRenderEvent, RenderEventTypeId, } from "../RenderEvent.js";
6
+ import { diffable, isComment } from "../Wire.js";
7
+ import { diff } from "./diff.js";
8
+ import { renderToString } from "./encoding.js";
9
+ export function makeTextContentUpdater(element) {
10
+ return (value) => {
11
+ element.textContent = renderToString(value, "");
12
+ };
13
+ }
14
+ export function makeAttributeValueUpdater(element, attr) {
15
+ let isSet = false;
16
+ const setValue = (value) => {
17
+ if (isNullish(value)) {
18
+ element.removeAttribute(attr.name);
19
+ isSet = false;
20
+ }
21
+ else {
22
+ attr.value = value;
23
+ if (isSet === false) {
24
+ element.setAttributeNode(attr);
25
+ isSet = true;
26
+ }
27
+ }
28
+ };
29
+ return setValue;
30
+ }
31
+ export function makeClassListUpdater(element) {
32
+ // We do double-bookeeping such that we don't assume we know everything about the classList
33
+ // Other DOM-based libraries might have additional classes in the classList, so we need to allow them to exist
34
+ // outside of our control.
35
+ let classList = Array.from(element.classList);
36
+ return (classNames) => {
37
+ const { added, removed } = diffStrings(classList, classNames);
38
+ if (added.length > 0) {
39
+ element.classList.add(...added);
40
+ }
41
+ if (removed.length > 0) {
42
+ element.classList.remove(...removed);
43
+ }
44
+ classList = classNames;
45
+ };
46
+ }
47
+ export function makeDatasetUpdater(element) {
48
+ // We do double-bookeeping such that we don't assume we know everything about the dataset
49
+ // Other DOM-based libraries might have additional keys in the dataset, so we need to allow them to exist
50
+ // outside of our control.
51
+ const previous = { ...element.dataset };
52
+ return (value) => {
53
+ const diff = diffDataSet(previous, value);
54
+ if (diff) {
55
+ const { added, removed } = diff;
56
+ removed.forEach((k) => {
57
+ delete element.dataset[k];
58
+ delete previous[k];
59
+ });
60
+ added.forEach(([k, v]) => {
61
+ element.dataset[k] = v;
62
+ previous[k] = v;
63
+ });
64
+ }
65
+ };
66
+ }
67
+ export function diffStrings(previous, current) {
68
+ if (previous == null || previous.length === 0) {
69
+ return {
70
+ added: current || [],
71
+ removed: [],
72
+ unchanged: [],
73
+ };
74
+ }
75
+ else if (current == null || current.length === 0) {
76
+ return {
77
+ added: [],
78
+ removed: previous,
79
+ unchanged: [],
80
+ };
81
+ }
82
+ else {
83
+ const previousSet = new Set(previous);
84
+ const currentSet = new Set(current);
85
+ const added = current.filter((c) => !previousSet.has(c));
86
+ const removed = [];
87
+ const unchanged = [];
88
+ for (let i = 0; i < previous.length; ++i) {
89
+ if (currentSet.has(previous[i])) {
90
+ unchanged.push(previous[i]);
91
+ }
92
+ else {
93
+ removed.push(previous[i]);
94
+ }
95
+ }
96
+ return {
97
+ added,
98
+ removed,
99
+ unchanged,
100
+ };
101
+ }
102
+ }
103
+ export function diffDataSet(a, b) {
104
+ if (!a)
105
+ return b ? { added: Object.entries(b), removed: [] } : null;
106
+ if (!b)
107
+ return { added: [], removed: Object.keys(a) };
108
+ const { added, removed, unchanged } = diffStrings(Object.keys(a), Object.keys(b));
109
+ return {
110
+ added: added.concat(unchanged).map((k) => [k, b[k]]),
111
+ removed,
112
+ };
113
+ }
114
+ export function getClassList(value) {
115
+ if (isNullish(value))
116
+ return [];
117
+ if (Array.isArray(value))
118
+ return value.flatMap(getClassList);
119
+ return splitClassNames(renderToString(value, ""));
120
+ }
121
+ const ASCII_SPACE_CODE = 32;
122
+ /**
123
+ * Splits a string of class names (like those used in HTML `class=""` attributes)
124
+ * into an array of individual class names (words), separated by whitespace.
125
+ *
126
+ * This function avoids creating intermediate arrays and unnecessary string copying by:
127
+ * - Scanning the string one character at a time
128
+ * - Skipping over all leading whitespace for each word
129
+ * - Collecting all consecutive non-whitespace characters as a "word"
130
+ * - Repeating until the input is exhausted
131
+ *
132
+ * All ASCII "whitespace" characters with code <= 32 are considered as delimiters.
133
+ * This is more efficient than `String.prototype.trim` and `String.prototype.split(/\s+/)`
134
+ * as it only allocates memory for the result array, not for intermediate or empty strings.
135
+ *
136
+ * Example:
137
+ * splitClassNames(" foo bar\tbaz\nqux ") // => ["foo", "bar", "baz", "qux"]
138
+ */
139
+ export function splitClassNames(value) {
140
+ const result = [];
141
+ let start = 0;
142
+ const len = value.length;
143
+ while (start < len) {
144
+ // Skip leading whitespace (all ASCII <= 32)
145
+ while (start < len && value.charCodeAt(start) <= ASCII_SPACE_CODE)
146
+ start++;
147
+ if (start >= len)
148
+ break;
149
+ // Find the end of the word (next whitespace)
150
+ let end = start + 1;
151
+ while (end < len && value.charCodeAt(end) > ASCII_SPACE_CODE)
152
+ end++;
153
+ result.push(value.slice(start, end));
154
+ // Move start past the end of the last word (one char after end)
155
+ start = end + 1;
156
+ }
157
+ return result;
158
+ }
159
+ export function matchNodeValue(document, value, onText, onNodes) {
160
+ switch (typeof value) {
161
+ // primitives are handled as text content
162
+ case "string":
163
+ case "symbol":
164
+ case "number":
165
+ case "bigint":
166
+ case "boolean":
167
+ return onText(String(value));
168
+ case "undefined":
169
+ case "function":
170
+ case "object": {
171
+ if (isNullish(value)) {
172
+ return onNodes([]);
173
+ }
174
+ else if (isRenderEvent(value)) {
175
+ return onNodes(unwrapRenderEvent(document, value));
176
+ }
177
+ else if (Array.isArray(value)) {
178
+ return onNodes(value.flatMap((_) => renderEventToArray(document, _)));
179
+ }
180
+ else {
181
+ return onNodes(renderEventToArray(document, value));
182
+ }
183
+ }
184
+ }
185
+ }
186
+ export function renderEventToArray(document, x) {
187
+ switch (typeof x) {
188
+ case "string":
189
+ case "number":
190
+ case "bigint":
191
+ case "boolean":
192
+ case "symbol":
193
+ return [document.createTextNode(String(x))];
194
+ case "undefined":
195
+ case "function":
196
+ case "object":
197
+ if (isNullish(x))
198
+ return [];
199
+ if (isRenderEvent(x))
200
+ return unwrapRenderEvent(document, x);
201
+ if (Array.isArray(x))
202
+ return x.flatMap((_) => renderEventToArray(document, _));
203
+ return [x];
204
+ default:
205
+ return [];
206
+ }
207
+ }
208
+ function unwrapRenderEvent(document, x) {
209
+ if (x[RenderEventTypeId] === "dom")
210
+ return unwrapDomRenderEvent(x);
211
+ return unwrapHtmlRenderEvent(document, x);
212
+ }
213
+ function unwrapDomRenderEvent(x) {
214
+ const value = x.content;
215
+ return Array.isArray(value) ? value : [value];
216
+ }
217
+ function unwrapHtmlRenderEvent(document, x) {
218
+ const tmp = document.createElement("template");
219
+ tmp.innerHTML = x.html;
220
+ return Array.from(tmp.childNodes);
221
+ }
222
+ export function diffChildren(comment, currentNodes, nextNodes, get) {
223
+ return diff(currentNodes, nextNodes, get, comment);
224
+ }
225
+ const commentCache = new WeakMap();
226
+ function getCommentCacheKey(index, isEnd) {
227
+ return isEnd ? -index - 1 : index;
228
+ }
229
+ function findCommentInElement(parent, index, isEnd) {
230
+ let cache = commentCache.get(parent);
231
+ if (cache === undefined) {
232
+ cache = new Map();
233
+ commentCache.set(parent, cache);
234
+ }
235
+ const cacheKey = getCommentCacheKey(index, isEnd);
236
+ const cached = cache.get(cacheKey);
237
+ if (cached !== undefined) {
238
+ return cached;
239
+ }
240
+ const childNodes = parent.childNodes;
241
+ const searchValue = isEnd ? `/n_${index}` : `n_${index}`;
242
+ for (let i = 0; i < childNodes.length; ++i) {
243
+ const node = childNodes[i];
244
+ if (isCommentWithValue(node, searchValue)) {
245
+ cache.set(cacheKey, node);
246
+ return node;
247
+ }
248
+ }
249
+ throw new CouldNotFindCommentError(index);
250
+ }
251
+ export function findNodePartEndComment(parent, index) {
252
+ return findCommentInElement(parent, index, true);
253
+ }
254
+ export function findNodePartStartComment(parent, index) {
255
+ return findCommentInElement(parent, index, false);
256
+ }
257
+ function isCommentWithValue(node, value) {
258
+ return isComment(node) && node.nodeValue === value;
259
+ }
260
+ export function makeNodeUpdater(document, comment, text = null, nodes = []) {
261
+ const element = comment.parentNode;
262
+ const get = diffable(document);
263
+ const updateCommentText = (value) => {
264
+ if (text === null) {
265
+ text = document.createTextNode("");
266
+ element.insertBefore(text, comment);
267
+ }
268
+ text.textContent = renderToString(value, "");
269
+ nodes = diffChildren(comment, nodes, [text], get);
270
+ };
271
+ const updateNodes = (updatedNodes) => {
272
+ nodes = diffChildren(comment, nodes, updatedNodes, get);
273
+ };
274
+ return (value) => {
275
+ matchNodeValue(document, value, updateCommentText, updateNodes);
276
+ };
277
+ }
278
+ export function makeBooleanUpdater(element, name) {
279
+ return (value) => {
280
+ element.toggleAttribute(name, value);
281
+ };
282
+ }
283
+ export function getAttributeValue(value) {
284
+ if (isNullish(value))
285
+ return null;
286
+ return renderToString(value, "");
287
+ }
288
+ export function getBooleanValue(value) {
289
+ return !!value;
290
+ }
291
+ export function getDatasetValue(value) {
292
+ if (isNullish(value))
293
+ return null;
294
+ if (isObject(value))
295
+ return value;
296
+ return null;
297
+ }
298
+ export function getEventHandlerValue(value) {
299
+ if (isNullish(value))
300
+ return null;
301
+ if (isEventHandler(value) || Effect.isEffect(value))
302
+ return fromEffectOrEventHandler(value);
303
+ return null;
304
+ }
@@ -0,0 +1,7 @@
1
+ export declare function escape(s: unknown): string;
2
+ export declare function unescape(s: string): any;
3
+ export declare function escapeHtml(str: string): string;
4
+ export declare function unescapeHtml(html: string): string;
5
+ export declare function renderToString(value: unknown, delimiter?: string): string;
6
+ export declare function renderToEscapedString(value: unknown, delimiter: string): string;
7
+ //# sourceMappingURL=encoding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/internal/encoding.ts"],"names":[],"mappings":"AAIA,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAuBzC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,OAYjC;AAaD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA8C9C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,UAMxC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAgC7E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/E"}