@typed/template 0.13.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 -223
  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 -383
  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 -242
  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 -66
  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 -341
  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 -77
  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 -240
  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 -43
  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 -336
  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 -126
  420. package/src/ElementSource.ts +0 -432
  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 -71
  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
@@ -1,468 +0,0 @@
1
- /* eslint-disable @typescript-eslint/consistent-type-imports */
2
- import * as Chunk from "effect/Chunk"
3
- import type { IToken } from "html5parser"
4
- import { tokenize } from "html5parser"
5
- import * as Template from "../Template.js"
6
- import { convertCharacterEntities } from "./character-entities.js"
7
- import { PART_REGEX, PART_STRING } from "./chunks.js"
8
- import { PathStack, templateHash, unsafeParsePartIndex } from "./parser.js"
9
- import { keyToPartType } from "./utils.js"
10
-
11
- export { templateHash } from "./parser.js"
12
-
13
- // Unfortunately these are compiled as `const enum` and cannot be exported
14
- enum TokenKind {
15
- Literal = 0 as import("html5parser").TokenKind.Literal,
16
- OpenTag = 1 as import("html5parser").TokenKind.OpenTag,
17
- OpenTagEnd = 2 as import("html5parser").TokenKind.OpenTagEnd,
18
- CloseTag = 3 as import("html5parser").TokenKind.CloseTag,
19
- Whitespace = 4 as import("html5parser").TokenKind.Whitespace,
20
- AttrValueEq = 5 as import("html5parser").TokenKind.AttrValueEq,
21
- AttrValueNq = 6 as import("html5parser").TokenKind.AttrValueNq,
22
- AttrValueSq = 7 as import("html5parser").TokenKind.AttrValueSq,
23
- AttrValueDq = 8 as import("html5parser").TokenKind.AttrValueDq
24
- }
25
-
26
- /**
27
- * @since 1.0.0
28
- */
29
- export const TEXT_ONLY_NODES_REGEX = new Set([
30
- "textarea",
31
- "script",
32
- "style",
33
- "title",
34
- "plaintext",
35
- "xmp"
36
- ])
37
-
38
- /**
39
- * @since 1.0.0
40
- */
41
- export const SELF_CLOSING_TAGS = new Set([
42
- "area",
43
- "base",
44
- "br",
45
- "col",
46
- "command",
47
- "embed",
48
- "hr",
49
- "img",
50
- "input",
51
- "keygen",
52
- "link",
53
- "meta",
54
- "param",
55
- "source",
56
- "track",
57
- "wbr"
58
- ])
59
-
60
- class Parser {
61
- protected html!: string
62
- protected tokens!: Array<IToken>
63
- protected index: number = 0
64
- protected parts!: Array<readonly [part: Template.PartNode | Template.SparsePartNode, path: Chunk.Chunk<number>]>
65
- protected path!: PathStack
66
-
67
- parse(templateStrings: ReadonlyArray<string>): Template.Template {
68
- this.init(templateStrings)
69
- return new Template.Template(this.parseNodes(), templateHash(templateStrings), this.parts)
70
- }
71
-
72
- private init(templateStrings: ReadonlyArray<string>) {
73
- this.html = templateWithParts(templateStrings)
74
- this.tokens = tokenize(this.html)
75
- this.index = 0
76
- this.parts = []
77
- this.path = new PathStack()
78
- }
79
-
80
- private peek(): IToken | undefined {
81
- return this.tokens[this.index]
82
- }
83
-
84
- private consumeNextTokenOfKind(kind: TokenKind) {
85
- const token = this.tokens[this.index]
86
- // @ts-expect-error
87
- if (token.type !== kind) {
88
- throw new Error(`Expected ${kind} but got ${token.type}`)
89
- }
90
- this.index++
91
- return token
92
- }
93
-
94
- private consumeWhitespace() {
95
- // @ts-expect-error
96
- while (this.tokens[this.index]?.type === TokenKind.Whitespace) {
97
- this.index++
98
- }
99
- }
100
-
101
- private consumeNextTokenOfKinds(...kinds: Array<TokenKind>) {
102
- const token = this.tokens[this.index]
103
- if (!kinds.includes(token.type as any)) {
104
- throw new Error(`Expected ${kinds.join(" or ")} but got ${token.type}`)
105
- }
106
- this.index++
107
- return token
108
- }
109
-
110
- private parseNodes(): Array<Template.Node> {
111
- const nodes: Array<Template.Node> = []
112
-
113
- while (this.index < this.tokens.length) {
114
- const token = this.peek()
115
- if (token === undefined) {
116
- break
117
- }
118
-
119
- // @ts-expect-error
120
- if (token.type === TokenKind.Literal) {
121
- nodes.push(...this.parseNodeParts())
122
- // @ts-expect-error
123
- } else if (token.type === TokenKind.OpenTag) {
124
- nodes.push(this.parseOpenTag())
125
- this.path.inc()
126
- // @ts-expect-error
127
- } else if (token.type === TokenKind.CloseTag) {
128
- this.index++
129
- this.consumeWhitespace()
130
- break
131
- // @ts-expect-error
132
- } else if (token.type === TokenKind.Whitespace) {
133
- if (nodes.length > 0) {
134
- this.path.inc()
135
- nodes.push(new Template.TextNode(token.value))
136
- }
137
- this.index++
138
- } else {
139
- throw new Error(`Unexpected token ${token.type}`)
140
- }
141
- }
142
-
143
- return nodes
144
- }
145
-
146
- private parseNodeParts(): Array<Template.Node> {
147
- const token = this.consumeNextTokenOfKind(TokenKind.Literal)
148
- const parts = parseTextAndParts(
149
- token.value,
150
- (index) => new Template.NodePart(index)
151
- )
152
-
153
- return parts.map((p) => {
154
- if (p._tag === "text") {
155
- this.path.inc()
156
- return p
157
- } else {
158
- return this.addPartWithPrevious(p)
159
- }
160
- })
161
- }
162
-
163
- private parseOpenTag(): Template.Node {
164
- const { value: name } = this.consumeNextTokenOfKind(TokenKind.OpenTag)
165
-
166
- // Comments
167
- if (name === "!--") {
168
- const node = this.parseCommentNode()
169
- this.path.inc()
170
-
171
- return node
172
- }
173
-
174
- // Doctype
175
- if (name === "!doctype") {
176
- this.consumeWhitespace()
177
- const next = this.peek()
178
- // @ts-expect-error
179
- if (next && next.type === TokenKind.AttrValueNq) {
180
- this.index++
181
- this.consumeWhitespace()
182
- this.consumeNextTokenOfKind(TokenKind.OpenTagEnd)
183
- return new Template.DocType(next.value)
184
- }
185
- this.consumeNextTokenOfKind(TokenKind.OpenTagEnd)
186
- return new Template.DocType("html")
187
- }
188
-
189
- // Self-closing tags
190
- if (SELF_CLOSING_TAGS.has(name)) {
191
- return this.parseSelfClosingElementNode(name)
192
- }
193
-
194
- // Text-only nodes, e.g. <script>, <style>, <textarea>
195
- if (TEXT_ONLY_NODES_REGEX.has(name)) {
196
- return this.parseTextOnlyElementNode(name)
197
- }
198
-
199
- const next = this.peek()
200
-
201
- if (next === undefined) {
202
- throw new Error(`Unexpected end of template at element node ${name}`)
203
- }
204
-
205
- // @ts-expect-error No Attributes
206
- if (next.type === TokenKind.OpenTagEnd) {
207
- this.index++
208
- this.path.push()
209
- const children = this.parseNodes()
210
- this.path.pop()
211
-
212
- return new Template.ElementNode(name, [], children)
213
- }
214
-
215
- this.consumeWhitespace()
216
-
217
- const attributes = this.parseAttributes()
218
- this.path.push()
219
- const children = this.parseNodes()
220
- this.path.pop()
221
-
222
- return new Template.ElementNode(name, attributes, children)
223
- }
224
-
225
- private parseCommentNode(): Template.Node {
226
- const { value } = this.consumeNextTokenOfKind(TokenKind.Literal)
227
- this.consumeNextTokenOfKind(TokenKind.OpenTagEnd)
228
-
229
- const parts = parseTextAndParts(
230
- value,
231
- (index) => new Template.CommentPartNode(index)
232
- )
233
-
234
- if (parts.length === 1) {
235
- if (parts[0]._tag === "text") {
236
- return new Template.CommentNode(parts[0].value)
237
- } else {
238
- return this.addPart(parts[0])
239
- }
240
- }
241
-
242
- return this.addPart(new Template.SparseCommentNode(parts))
243
- }
244
-
245
- private parseSelfClosingElementNode(name: string): Template.Node {
246
- return new Template.SelfClosingElementNode(name, this.parseAttributes())
247
- }
248
-
249
- private parseTextOnlyElementNode(name: string): Template.Node {
250
- const attributes = this.parseAttributes()
251
- this.path.push()
252
- const children = this.parseTextOnlyChildren()
253
- this.path.pop()
254
-
255
- return new Template.TextOnlyElement(name, attributes, children)
256
- }
257
-
258
- private parseAttributes(): Array<Template.Attribute> {
259
- const attributes: Array<Template.Attribute> = []
260
-
261
- this.consumeWhitespace()
262
-
263
- while (this.index < this.tokens.length) {
264
- const token = this.peek()
265
-
266
- if (token === undefined) {
267
- throw new Error("Unexpected end of template in attributes")
268
- }
269
-
270
- if (
271
- // @ts-expect-error
272
- token.type === TokenKind.Whitespace
273
- ) {
274
- this.index++
275
- continue
276
- }
277
-
278
- if (
279
- // @ts-expect-error
280
- token.type === TokenKind.OpenTagEnd
281
- ) {
282
- this.index++
283
- break
284
- }
285
-
286
- if (
287
- // @ts-expect-error
288
- token.type === TokenKind.CloseTag
289
- ) {
290
- break
291
- }
292
-
293
- const [shouldContinue, attr] = this.parseAttribute()
294
-
295
- attributes.push(attr)
296
-
297
- if (shouldContinue === false) {
298
- break
299
- }
300
- }
301
-
302
- return attributes
303
- }
304
-
305
- private parseAttribute(): [boolean, Template.Attribute] {
306
- const { value: rawName } = this.consumeNextTokenOfKind(TokenKind.AttrValueNq)
307
-
308
- if (rawName.startsWith("...")) {
309
- return [true, this.addPart(new Template.PropertiesPartNode(unsafeParsePartIndex(rawName.slice(3))))]
310
- }
311
-
312
- const [match, name] = keyToPartType(rawName)
313
- const next = this.peek()
314
-
315
- // @ts-expect-error
316
- if (next.type === TokenKind.AttrValueEq) {
317
- this.consumeNextTokenOfKind(TokenKind.AttrValueEq)
318
- const { type, value: rawValue } = this.consumeNextTokenOfKinds(
319
- TokenKind.AttrValueDq,
320
- TokenKind.AttrValueSq,
321
- TokenKind.AttrValueNq
322
- )
323
-
324
- // @ts-expect-error
325
- const value = type === TokenKind.AttrValueNq ? rawValue : rawValue.slice(1, -1)
326
-
327
- switch (match) {
328
- case "attr": {
329
- const parts = parseTextAndParts(value, (index) => new Template.AttrPartNode(name, index))
330
-
331
- if (parts.length === 0) return [true, new Template.AttributeNode(name, "")]
332
-
333
- if (parts.length === 1) {
334
- if (parts[0]._tag === "text") {
335
- return [true, new Template.AttributeNode(name, parts[0].value)]
336
- } else {
337
- return [true, this.addPart(new Template.AttrPartNode(name, parts[0].index))]
338
- }
339
- }
340
-
341
- return [true, this.addPart(new Template.SparseAttrNode(name, parts))]
342
- }
343
- case "boolean": {
344
- const parts = parseTextAndParts(value, (index) => new Template.BooleanPartNode(name, index))
345
- if (parts.length === 1) {
346
- if (parts[0]._tag === "text") {
347
- return [true, new Template.BooleanNode(name)]
348
- } else {
349
- return [true, this.addPart(parts[0])]
350
- }
351
- }
352
-
353
- throw new Error("Boolean attributes cannot have multiple parts")
354
- }
355
- case "class": {
356
- const parts = parseTextAndParts(value, (index) => new Template.ClassNamePartNode(index))
357
- if (parts.length === 1) {
358
- if (parts[0]._tag === "text") {
359
- return [true, new Template.AttributeNode("class", parts[0].value.trim())]
360
- } else {
361
- return [true, this.addPart(parts[0])]
362
- }
363
- }
364
-
365
- return [true, this.addPart(new Template.SparseClassNameNode(parts))]
366
- }
367
- case "data":
368
- return [true, this.addPart(new Template.DataPartNode(unsafeParsePartIndex(value)))]
369
- case "event":
370
- return [true, this.addPart(new Template.EventPartNode(name, unsafeParsePartIndex(value)))]
371
- case "properties":
372
- return [true, this.addPart(new Template.PropertiesPartNode(unsafeParsePartIndex(value)))]
373
- case "property":
374
- return [true, this.addPart(new Template.PropertyPartNode(name, unsafeParsePartIndex(value)))]
375
- case "ref":
376
- return [true, this.addPart(new Template.RefPartNode(unsafeParsePartIndex(value)))]
377
- }
378
- // @ts-expect-error
379
- } else if (next.type === TokenKind.Whitespace) {
380
- this.index++
381
- return [true, new Template.BooleanNode(name!)]
382
- // @ts-expect-error
383
- } else if (next.type === TokenKind.OpenTagEnd) {
384
- this.index++
385
- this.consumeWhitespace()
386
- return [false, new Template.BooleanNode(name!)]
387
- } else {
388
- if (next === undefined) {
389
- throw new Error(`Unexpected end of template at attribute ${name}`)
390
- }
391
- throw new Error(`Unexpected token ${TokenKind[next.type]} in place of attribute`)
392
- }
393
- }
394
-
395
- private parseTextOnlyChildren(): Array<Template.Text> {
396
- const { type, value } = this.consumeNextTokenOfKinds(TokenKind.Literal, TokenKind.CloseTag)
397
-
398
- // @ts-expect-error
399
- if (type === TokenKind.Literal) {
400
- this.consumeNextTokenOfKind(TokenKind.CloseTag)
401
- return parseTextAndParts(value, (index) => this.addPartWithPrevious(new Template.TextPartNode(index)))
402
- }
403
- this.consumeWhitespace()
404
- return []
405
- }
406
-
407
- private addPart<T extends Template.PartNode | Template.SparsePartNode>(part: T): T {
408
- this.parts.push([part, this.path.toChunk()])
409
- return part
410
- }
411
-
412
- private addPartWithPrevious<T extends Template.PartNode | Template.SparsePartNode>(part: T): T {
413
- this.parts.push([part, this.path.previousChunk()])
414
- this.path.inc() // Nodes will be inserted as a comment
415
- return part
416
- }
417
- }
418
-
419
- const parser = new Parser()
420
-
421
- export function parse(template: ReadonlyArray<string>): Template.Template {
422
- return parser.parse(template)
423
- }
424
-
425
- function templateWithParts(template: ReadonlyArray<string>): string {
426
- const length = template.length
427
- const lastIndex = length - 1
428
-
429
- let output = ""
430
-
431
- for (let i = 0; i < length; i++) {
432
- const str = template[i]
433
-
434
- if (i === lastIndex) {
435
- output += str
436
- } else {
437
- output += str + PART_STRING(i)
438
- }
439
- }
440
-
441
- return output
442
- }
443
-
444
- function parseTextAndParts<T>(
445
- s: string,
446
- f: (index: number) => T
447
- ): Array<Template.TextNode | T> {
448
- let skipWhitespace = false
449
- const out: Array<Template.TextNode | T> = []
450
- const parts = s.split(PART_REGEX)
451
- const last = parts.length - 2
452
-
453
- for (let i = 0; i < parts.length; i++) {
454
- const part = parts[i]
455
-
456
- if (part[0] === "{" && part[1] === "{") {
457
- out.push(f(parseInt(parts[++i], 10)))
458
- // If we encounter a part, we should not skip whitespace
459
- skipWhitespace = i === last
460
- } else if (((skipWhitespace || i === 0) ? part.trim() : part) === "") {
461
- continue
462
- } else {
463
- out.push(new Template.TextNode(convertCharacterEntities(part)))
464
- }
465
- }
466
-
467
- return out
468
- }
@@ -1,161 +0,0 @@
1
- import type { Cause } from "effect/Cause"
2
- import * as Effect from "effect/Effect"
3
- import { equals } from "effect/Equal"
4
- import * as Equivalence from "effect/Equivalence"
5
- import type { Scope } from "effect/Scope"
6
- import type { ElementSource } from "../ElementSource.js"
7
- import type { EventHandler } from "../EventHandler.js"
8
- import type {
9
- AttributePart,
10
- BooleanPart,
11
- ClassNamePart,
12
- CommentPart,
13
- DataPart,
14
- EventPart,
15
- NodePart,
16
- Part,
17
- PropertiesPart,
18
- PropertyPart,
19
- RefPart,
20
- TextPart
21
- } from "../Part.js"
22
- import { DEFAULT_PRIORITY } from "../RenderQueue.js"
23
-
24
- const strictEq = Equivalence.strict<any>()
25
-
26
- const base = <T extends Part["_tag"]>(tag: T) => (class Base {
27
- readonly _tag: T = tag
28
-
29
- constructor(
30
- readonly index: number,
31
- readonly commit: (
32
- params: {
33
- previous: Extract<Part, { readonly _tag: T }>["value"]
34
- value: Extract<Part, { readonly _tag: T }>["value"]
35
- part: Extract<Part, { readonly _tag: T }>
36
- },
37
- priority: number
38
- ) => Effect.Effect<void, never, Scope>,
39
- public value: Extract<Part, { readonly _tag: T }>["value"],
40
- readonly eq: Equivalence.Equivalence<Extract<Part, { readonly _tag: T }>["value"]> = equals
41
- ) {
42
- this.update = this.update.bind(this)
43
- }
44
-
45
- update(input: this["value"], priority: number = DEFAULT_PRIORITY) {
46
- const previous = this.value as any
47
- const value = this.getValue(input) as any
48
-
49
- if (this.eq(previous as any, value as any)) {
50
- return Effect.void
51
- }
52
-
53
- return Effect.flatMap(
54
- this.commit.call(this, {
55
- previous,
56
- value,
57
- part: this as any
58
- }, priority),
59
- () => Effect.sync(() => this.value = value)
60
- )
61
- }
62
-
63
- getValue(value: unknown) {
64
- return value
65
- }
66
- })
67
-
68
- export class AttributePartImpl extends base("attribute") implements AttributePart {
69
- constructor(
70
- readonly name: string,
71
- index: number,
72
- commit: AttributePartImpl["commit"],
73
- value: AttributePart["value"]
74
- ) {
75
- super(index, commit, value, strictEq)
76
- }
77
- }
78
-
79
- export class BooleanPartImpl extends base("boolean") implements BooleanPart {
80
- constructor(
81
- readonly name: string,
82
- index: number,
83
- commit: BooleanPartImpl["commit"],
84
- value: BooleanPart["value"]
85
- ) {
86
- super(index, commit, value, strictEq)
87
- }
88
- }
89
-
90
- const isString = (x: unknown): x is string => typeof x === "string"
91
-
92
- export class ClassNamePartImpl extends base("className") implements ClassNamePart {
93
- constructor(
94
- index: number,
95
- commit: ClassNamePartImpl["commit"],
96
- value: ClassNamePart["value"]
97
- ) {
98
- super(index, commit, value, strictEq)
99
- }
100
-
101
- getValue(value: unknown): ReadonlyArray<string> {
102
- if (isString(value)) {
103
- return value.split(" ").filter((x) => isString(x) && x.trim() !== "")
104
- }
105
-
106
- if (Array.isArray(value)) {
107
- return value.filter((x) => isString(x) && x.trim() !== "")
108
- }
109
-
110
- return []
111
- }
112
- }
113
-
114
- export class CommentPartImpl extends base("comment") implements CommentPart {}
115
-
116
- export class DataPartImpl extends base("data") implements DataPart {}
117
-
118
- export class EventPartImpl implements EventPart {
119
- readonly _tag = "event"
120
- readonly value: EventPart["value"] = null
121
-
122
- constructor(
123
- readonly name: string,
124
- readonly index: number,
125
- readonly source: ElementSource<any>,
126
- readonly onCause: <E>(cause: Cause<E>) => Effect.Effect<unknown>,
127
- readonly addEventListener: <Ev extends Event>(handler: EventHandler<Ev>) => void
128
- ) {
129
- }
130
- }
131
-
132
- export class NodePartImpl extends base("node") implements NodePart {}
133
-
134
- export class PropertyPartImpl extends base("property") implements PropertyPart {
135
- constructor(
136
- readonly name: string,
137
- index: number,
138
- commit: PropertyPartImpl["commit"],
139
- value: PropertyPartImpl["value"]
140
- ) {
141
- super(index, commit, value, strictEq)
142
- }
143
- }
144
-
145
- export class PropertiesPartImpl extends base("properties") implements PropertiesPart {
146
- constructor(
147
- index: number,
148
- commit: PropertiesPartImpl["commit"],
149
- value: PropertiesPartImpl["value"]
150
- ) {
151
- super(index, commit, value, strictEq)
152
- }
153
- }
154
-
155
- export class RefPartImpl implements RefPart {
156
- readonly _tag = "ref"
157
-
158
- constructor(readonly value: ElementSource<any>, readonly index: number) {}
159
- }
160
-
161
- export class TextPartImpl extends base("text") implements TextPart {}
@@ -1,37 +0,0 @@
1
- import type * as Effect from "effect/Effect"
2
- import type { Part } from "../Part.js"
3
- import type { PartNode } from "../Template.js"
4
- import * as impls from "./server-parts.js"
5
-
6
- type PartNodeMap = {
7
- readonly [K in PartNode["_tag"]]: (
8
- node: Extract<PartNode, { _tag: K }>,
9
- onChunk: (value: unknown) => Effect.Effect<void>
10
- ) => Part
11
- }
12
-
13
- const partNodeMap: PartNodeMap = {
14
- attr: (node, onChunk) => new impls.AttributePartImpl(node.name, node.index, ({ value }) => onChunk(value), null),
15
- "boolean-part": (node, onChunk) =>
16
- new impls.BooleanPartImpl(node.name, node.index, ({ value }) => onChunk(value), null),
17
- "className-part": (node, onChunk) => new impls.ClassNamePartImpl(node.index, ({ value }) => onChunk(value), []),
18
- "comment-part": (node, onChunk) => new impls.CommentPartImpl(node.index, ({ value }) => onChunk(value), null),
19
- data: (node, onChunk) => new impls.DataPartImpl(node.index, ({ value }) => onChunk(value), null),
20
- event: () => {
21
- throw new Error("Events are not utilized on the server")
22
- },
23
- node: (node, onChunk) => new impls.NodePartImpl(node.index, ({ value }) => onChunk(value), null),
24
- property: (node, onChunk) => new impls.PropertyPartImpl(node.name, node.index, ({ value }) => onChunk(value), null),
25
- ref: () => {
26
- throw new Error("Refs are not utilized on the server")
27
- },
28
- "text-part": (node, onChunk) => new impls.TextPartImpl(node.index, ({ value }) => onChunk(value), null),
29
- properties: (node, onChunk) => new impls.PropertiesPartImpl(node.index, ({ value }) => onChunk(value), [])
30
- }
31
-
32
- export function partNodeToPart(
33
- node: PartNode,
34
- onChunk: (value: unknown) => Effect.Effect<void>
35
- ): Part {
36
- return partNodeMap[node._tag](node as any, onChunk)
37
- }