@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
package/src/Wire.ts ADDED
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Wire is a data type that serves as a persistent, reusable DocumentFragment.
3
+ *
4
+ * Unlike a standard `DocumentFragment`, which empties itself when appended to the DOM,
5
+ * a `Wire` retains references to its child nodes. This allows it to be moved around
6
+ * the DOM or updated without losing track of its content.
7
+ *
8
+ * It is used internally to manage the lifecycle of template instances.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { persistent } from "@typed/template/Wire"
13
+ *
14
+ * // Wire is created internally by the template renderer
15
+ * // It wraps DocumentFragments with multiple children
16
+ * // to maintain references after DOM operations
17
+ * ```
18
+ *
19
+ * @since 1.0.0
20
+ * @category models
21
+ */
22
+ export interface Wire {
23
+ readonly ELEMENT_NODE: 1;
24
+ readonly DOCUMENT_FRAGMENT_NODE: 11;
25
+ readonly nodeType: 111;
26
+ readonly firstChild: Node | null;
27
+ readonly lastChild: Node | null;
28
+ readonly childNodes: Array<Node>;
29
+ readonly valueOf: () => DocumentFragment;
30
+ }
31
+
32
+ const ELEMENT_NODE = 1;
33
+ const DOCUMENT_FRAGMENT_NODE = 11;
34
+ const nodeType = 111;
35
+
36
+ const remove = ({ firstChild, lastChild }: Node, document: Document): Node => {
37
+ const range = document.createRange();
38
+
39
+ range.setStartAfter(firstChild!);
40
+
41
+ range.setEndAfter(lastChild!);
42
+ range.deleteContents();
43
+ return firstChild as Node;
44
+ };
45
+
46
+ /**
47
+ * Create a diffable node from any Node which also might be a Wire.
48
+ * @internal
49
+ */
50
+ export const diffable =
51
+ (document: Document) =>
52
+ (node: Node, operation: number): Node => {
53
+ if (node.nodeType !== nodeType) return node;
54
+
55
+ if (1 / operation < 0) {
56
+ return operation ? remove(node, document) : (node.lastChild as Node);
57
+ }
58
+
59
+ return operation ? (node.valueOf() as Node) : (node.firstChild as Node);
60
+ };
61
+
62
+ /**
63
+ * Creates a Wire from a DocumentFragment.
64
+ *
65
+ * If the fragment has only one child, that child is returned directly.
66
+ * If it has multiple children, they are wrapped in a `Wire` structure (bounded by comments)
67
+ * to allow them to be treated as a single unit.
68
+ */
69
+ export const persistent = (
70
+ document: Document,
71
+ templateHash: string,
72
+ fragment: DocumentFragment,
73
+ ): DocumentFragment | Node | Wire => {
74
+ const { childNodes } = fragment;
75
+ const { length } = childNodes;
76
+ if (length === 0) return fragment;
77
+ if (length === 1) return childNodes[0];
78
+ const firstChild = document.createComment(`t_${templateHash}`);
79
+ const lastChild = document.createComment(`/t_${templateHash}`);
80
+ return fromComments(fragment, firstChild, lastChild);
81
+ };
82
+
83
+ /**
84
+ * Creates a Wire from a Fragment and boundary comments.
85
+ * @internal
86
+ */
87
+ export const fromComments = (
88
+ fragment: DocumentFragment,
89
+ firstChild: Comment,
90
+ lastChild: Comment,
91
+ ): Wire => {
92
+ if (fragment.childNodes[0] !== firstChild) {
93
+ fragment.prepend(firstChild);
94
+ }
95
+ if (fragment.childNodes[fragment.childNodes.length - 1] !== lastChild) {
96
+ fragment.append(lastChild);
97
+ }
98
+
99
+ const getChildNodes = () => {
100
+ const nodes = getAllSiblingsBetween(firstChild, lastChild);
101
+
102
+ if (fragment.childNodes.length !== nodes.length) {
103
+ fragment.replaceChildren(...nodes);
104
+ }
105
+
106
+ return nodes;
107
+ };
108
+
109
+ return {
110
+ ELEMENT_NODE,
111
+ DOCUMENT_FRAGMENT_NODE,
112
+ nodeType,
113
+ firstChild,
114
+ lastChild,
115
+ get childNodes() {
116
+ return getChildNodes();
117
+ },
118
+ valueOf(): DocumentFragment {
119
+ getChildNodes();
120
+ return fragment;
121
+ },
122
+ };
123
+ };
124
+
125
+ /**
126
+ * Gets all sibling nodes between a start and end node (exclusive).
127
+ * @internal
128
+ */
129
+ export function getAllSiblingsBetween(start: Node, end: Node): Array<Node> {
130
+ const siblings = [];
131
+ let node = start.nextSibling as Node;
132
+ while (node && node !== end) {
133
+ siblings.push(node);
134
+ node = node.nextSibling as Node;
135
+ }
136
+ return siblings;
137
+ }
138
+
139
+ /**
140
+ * A union type representing all possible rendered values.
141
+ * Can be a single Node, a DocumentFragment, a Wire, or an array of these.
142
+ *
143
+ * @example
144
+ * ```ts
145
+ * import type { Rendered } from "@typed/template/Wire"
146
+ *
147
+ * // Rendered can be various DOM node types
148
+ * const node: Rendered = document.createElement("div")
149
+ * const fragment: Rendered = document.createDocumentFragment()
150
+ * const array: Rendered = [node, fragment]
151
+ * ```
152
+ *
153
+ * @since 1.0.0
154
+ * @category models
155
+ */
156
+ export type Rendered = Rendered.Value | ReadonlyArray<Rendered>;
157
+
158
+ export namespace Rendered {
159
+ /**
160
+ * Single rendered value type.
161
+ */
162
+ export type Value = Node | DocumentFragment | Wire;
163
+
164
+ /**
165
+ * Extract the values from a Rendered type
166
+ */
167
+ export type Values<T extends Rendered> = [T] extends [ReadonlyArray<infer R>]
168
+ ? ReadonlyArray<R | Exclude<T, ReadonlyArray<any>>>
169
+ : ReadonlyArray<T>;
170
+
171
+ /**
172
+ * Extract the elements from a Rendered type
173
+ */
174
+ export type Elements<T extends Rendered> = ReadonlyArray<
175
+ [Node] extends [Exclude<T, DocumentFragment | Wire | ReadonlyArray<Rendered>>]
176
+ ? HTMLElement | SVGElement
177
+ : Exclude<T, DocumentFragment | Wire | ReadonlyArray<Rendered>>
178
+ >;
179
+ }
180
+
181
+ /**
182
+ * Checks if a rendered node is a `Wire`.
183
+ */
184
+ export function isWire(node: Rendered): node is Wire {
185
+ if (!isArray(node)) return node.nodeType === nodeType;
186
+ return false;
187
+ }
188
+
189
+ /**
190
+ * Checks if a rendered node is a standard DOM `Node`.
191
+ */
192
+ export function isNode(node: Rendered): node is Node {
193
+ if (!isArray(node)) return node.nodeType !== node.DOCUMENT_FRAGMENT_NODE;
194
+ return false;
195
+ }
196
+
197
+ /**
198
+ * Checks if a rendered node is an `Element`.
199
+ */
200
+ export function isElement(node: Rendered): node is Element {
201
+ return isNode(node) && node.nodeType === node.ELEMENT_NODE;
202
+ }
203
+
204
+ /**
205
+ * Checks if a rendered node is an `SVGElement`.
206
+ */
207
+ export function isSvgElement(node: Rendered): node is SVGElement {
208
+ return isElement(node) && "ownerSVGElement" in node;
209
+ }
210
+
211
+ /**
212
+ * Checks if a rendered node is an `HTMLElement`.
213
+ */
214
+ export function isHtmlElement(node: Rendered): node is HTMLElement {
215
+ return isElement(node) && !("ownerSVGElement" in node);
216
+ }
217
+
218
+ /**
219
+ * Checks if a rendered node is a `Text` node.
220
+ */
221
+ export function isText(node: Rendered): node is Text {
222
+ return isNode(node) && node.nodeType === node.TEXT_NODE;
223
+ }
224
+
225
+ /**
226
+ * Checks if a rendered node is an `Attr` node.
227
+ */
228
+ export function isAttr(node: Rendered): node is Attr {
229
+ return isNode(node) && node.nodeType === node.ATTRIBUTE_NODE;
230
+ }
231
+
232
+ /**
233
+ * Checks if a rendered node is a `Comment` node.
234
+ */
235
+ export function isComment(node: Rendered): node is Comment {
236
+ return isNode(node) && node.nodeType === node.COMMENT_NODE;
237
+ }
238
+
239
+ /**
240
+ * Checks if a rendered node is a `DocumentFragment`.
241
+ */
242
+ export function isDocumentFragment(node: Rendered): node is DocumentFragment {
243
+ if (!isArray(node)) return node.nodeType === node.DOCUMENT_FRAGMENT_NODE;
244
+ return false;
245
+ }
246
+
247
+ /**
248
+ * Checks if a rendered value is an array of nodes.
249
+ */
250
+ export function isArray(node: Rendered): node is ReadonlyArray<Rendered> {
251
+ return Array.isArray(node);
252
+ }
253
+
254
+ /**
255
+ * Converts a `Rendered` value to an HTML string.
256
+ *
257
+ * @example
258
+ * ```ts
259
+ * import { toHtml } from "@typed/template/Wire"
260
+ *
261
+ * const div = document.createElement("div")
262
+ * div.textContent = "Hello"
263
+ * const html = toHtml(div) // "<div>Hello</div>"
264
+ *
265
+ * const fragment = document.createDocumentFragment()
266
+ * fragment.appendChild(div)
267
+ * const fragmentHtml = toHtml(fragment) // "<div>Hello</div>"
268
+ * ```
269
+ *
270
+ * @since 1.0.0
271
+ * @category utilities
272
+ */
273
+ export function toHtml(node: Rendered): string {
274
+ if (isArray(node)) return node.map(toHtml).join("");
275
+ if (isWire(node)) return toHtml(node.valueOf());
276
+ if (isElement(node)) return node.outerHTML;
277
+ if (isText(node)) return node.data;
278
+ if (isComment(node)) return `<!--${node.data}-->`;
279
+ if (isDocumentFragment(node)) return Array.from(node.childNodes ?? [], toHtml).join("");
280
+ return node.nodeValue || "";
281
+ }
282
+
283
+ /**
284
+ * Extracts all Elements from a `Rendered` value.
285
+ *
286
+ * @example
287
+ * ```ts
288
+ * import { getElements } from "@typed/template/Wire"
289
+ *
290
+ * const div = document.createElement("div")
291
+ * const span = document.createElement("span")
292
+ * const fragment = document.createDocumentFragment()
293
+ * fragment.appendChild(div)
294
+ * fragment.appendChild(span)
295
+ *
296
+ * const elements = getElements(fragment)
297
+ * console.log(elements.length) // 2
298
+ * ```
299
+ *
300
+ * @since 1.0.0
301
+ * @category utilities
302
+ */
303
+ export function getElements(node: Rendered): Array<Element> {
304
+ if (isArray(node)) return node.flatMap(getElements);
305
+ if (isWire(node)) return getElements(node.valueOf());
306
+ if (isElement(node)) return [node];
307
+ if (isDocumentFragment(node)) return Array.from(node.childNodes ?? []).flatMap(getElements);
308
+ return [];
309
+ }
package/src/errors.ts ADDED
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Error thrown when a comment marker for a template part cannot be found during hydration.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * import { CouldNotFindCommentError } from "@typed/template/errors"
7
+ *
8
+ * try {
9
+ * // Hydration code that might fail
10
+ * } catch (error) {
11
+ * if (error instanceof CouldNotFindCommentError) {
12
+ * console.error(`Part ${error.partIndex} comment not found`)
13
+ * }
14
+ * }
15
+ * ```
16
+ *
17
+ * @since 1.0.0
18
+ * @category errors
19
+ */
20
+ export class CouldNotFindCommentError extends Error {
21
+ readonly partIndex: number;
22
+ constructor(partIndex: number) {
23
+ super(`Could not find comment for part ${partIndex}`);
24
+ this.partIndex = partIndex;
25
+ }
26
+ }
27
+
28
+ /**
29
+ * Error thrown when root elements for a template part cannot be found during hydration.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import { CouldNotFindRootElement } from "@typed/template/errors"
34
+ *
35
+ * try {
36
+ * // Hydration code
37
+ * } catch (error) {
38
+ * if (error instanceof CouldNotFindRootElement) {
39
+ * console.error(`Root elements for part ${error.partIndex} not found`)
40
+ * }
41
+ * }
42
+ * ```
43
+ *
44
+ * @since 1.0.0
45
+ * @category errors
46
+ */
47
+ export class CouldNotFindRootElement extends Error {
48
+ readonly partIndex: number;
49
+ constructor(partIndex: number) {
50
+ super(`Could not find root elements for part ${partIndex}`);
51
+ this.partIndex = partIndex;
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Error thrown when a comment marker for a `many()` list cannot be found during hydration.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * import { CouldNotFindManyCommentError } from "@typed/template/errors"
61
+ *
62
+ * try {
63
+ * // Hydration code for many()
64
+ * } catch (error) {
65
+ * if (error instanceof CouldNotFindManyCommentError) {
66
+ * console.error(`Many comment for key ${error.manyIndex} not found`)
67
+ * }
68
+ * }
69
+ * ```
70
+ *
71
+ * @since 1.0.0
72
+ * @category errors
73
+ */
74
+ export class CouldNotFindManyCommentError extends Error {
75
+ readonly manyIndex: string;
76
+ constructor(manyIndex: string) {
77
+ super(`Could not find comment for many part ${manyIndex}`);
78
+ this.manyIndex = manyIndex;
79
+ }
80
+ }
81
+
82
+ /**
83
+ * Error thrown when a template hash cannot be found in the DOM during hydration.
84
+ *
85
+ * @example
86
+ * ```ts
87
+ * import { CouldNotFindTemplateHashError } from "@typed/template/errors"
88
+ *
89
+ * try {
90
+ * // Hydration code
91
+ * } catch (error) {
92
+ * if (error instanceof CouldNotFindTemplateHashError) {
93
+ * console.error(`Template hash ${error.hash} not found`)
94
+ * }
95
+ * }
96
+ * ```
97
+ *
98
+ * @since 1.0.0
99
+ * @category errors
100
+ */
101
+ export class CouldNotFindTemplateHashError extends Error {
102
+ readonly hash: string;
103
+ constructor(hash: string) {
104
+ super(`Could not find template hash ${hash}`);
105
+ this.hash = hash;
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Error thrown when the end marker of a template cannot be found during hydration.
111
+ *
112
+ * @example
113
+ * ```ts
114
+ * import { CouldNotFindTemplateEndError } from "@typed/template/errors"
115
+ *
116
+ * try {
117
+ * // Hydration code
118
+ * } catch (error) {
119
+ * if (error instanceof CouldNotFindTemplateEndError) {
120
+ * console.error(`End of template ${error.hash} not found`)
121
+ * }
122
+ * }
123
+ * ```
124
+ *
125
+ * @since 1.0.0
126
+ * @category errors
127
+ */
128
+ export class CouldNotFindTemplateEndError extends Error {
129
+ readonly hash: string;
130
+ constructor(hash: string) {
131
+ super(`Could not find end of template for hash ${hash}`);
132
+ this.hash = hash;
133
+ }
134
+ }
135
+
136
+ const constructors = [
137
+ CouldNotFindCommentError,
138
+ CouldNotFindRootElement,
139
+ CouldNotFindManyCommentError,
140
+ CouldNotFindTemplateHashError,
141
+ CouldNotFindTemplateEndError,
142
+ ] as const;
143
+
144
+ /**
145
+ * A union type of all hydration-related errors.
146
+ *
147
+ * @since 1.0.0
148
+ * @category errors
149
+ */
150
+ export type HydrationError = InstanceType<(typeof constructors)[number]>;
151
+
152
+ /**
153
+ * Checks if an error is a hydration error.
154
+ *
155
+ * @example
156
+ * ```ts
157
+ * import { isHydrationError } from "@typed/template/errors"
158
+ *
159
+ * try {
160
+ * // Hydration code
161
+ * } catch (error) {
162
+ * if (isHydrationError(error)) {
163
+ * console.error("Hydration failed:", error)
164
+ * }
165
+ * }
166
+ * ```
167
+ *
168
+ * @since 1.0.0
169
+ * @category guards
170
+ */
171
+ export function isHydrationError(e: unknown): e is HydrationError {
172
+ return constructors.some((c) => e instanceof c);
173
+ }
package/src/index.ts CHANGED
@@ -1,66 +1,14 @@
1
- /**
2
- * @since 1.0.0
3
- */
4
-
5
- import "./internal/module-augmentation.js"
6
-
7
- /**
8
- * @since 1.0.0
9
- */
10
- export * as Directive from "./Directive.js"
11
- /**
12
- * @since 1.0.0
13
- */
14
- export * as ElementRef from "./ElementRef.js"
15
- /**
16
- * @since 1.0.0
17
- */
18
- export * as ElementSource from "./ElementSource.js"
19
- /**
20
- * @since 1.0.0
21
- */
22
- export * as EventHandler from "./EventHandler.js"
23
- /**
24
- * @since 1.0.0
25
- */
26
- export * from "./Html.js"
27
- /**
28
- * @since 1.0.0
29
- */
30
- export * from "./Hydrate.js"
31
- /**
32
- * @since 1.0.0
33
- */
34
- export * from "./Many.js"
35
- /**
36
- * @since 1.0.0
37
- */
38
- export * from "./Part.js"
39
- /**
40
- * @since 1.0.0
41
- */
42
- export * from "./Placeholder.js"
43
- /**
44
- * @since 1.0.0
45
- */
46
- export * from "./Render.js"
47
- /**
48
- * @since 1.0.0
49
- */
50
- export * from "./Renderable.js"
51
- /**
52
- * @since 1.0.0
53
- */
54
- export * as RenderContext from "./RenderContext.js"
55
- /**
56
- * @since 1.0.0
57
- */
58
- export * as RenderQueue from "./RenderQueue.js"
59
- /**
60
- * @since 1.0.0
61
- */
62
- export * from "./RenderEvent.js"
63
- /**
64
- * @since 1.0.0
65
- */
66
- export * from "./RenderTemplate.js"
1
+ export * as EventHandler from "./EventHandler.js";
2
+ export * from "./EventSource.js";
3
+ export * from "./Html.js";
4
+ export * from "./HtmlChunk.js";
5
+ export * from "./HydrateContext.js";
6
+ export * from "./many.js";
7
+ export * from "./Parser.js";
8
+ export * from "./Render.js";
9
+ export * from "./Renderable.js";
10
+ export * from "./RenderEvent.js";
11
+ export * from "./RenderQueue.js";
12
+ export * from "./RenderTemplate.js";
13
+ export * from "./Template.js";
14
+ export * from "./Wire.js";
@@ -0,0 +1,53 @@
1
+ import * as Deferred from "effect/Deferred";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Option from "effect/Option";
4
+
5
+ export type IndexRefCounter = {
6
+ release: (index: number) => void;
7
+ expect: (count: number) => boolean;
8
+ wait: Effect.Effect<void>;
9
+ };
10
+
11
+ /**
12
+ * @internal
13
+ */
14
+ export const makeRefCounter: Effect.Effect<IndexRefCounter> = Effect.map(
15
+ Deferred.make<void>(),
16
+ (deferred) => {
17
+ let expected: Option.Option<number> = Option.none<number>();
18
+ const indexes = new Set<number>();
19
+
20
+ function isDone() {
21
+ if (Option.isSome(expected)) {
22
+ return indexes.size === expected.value;
23
+ } else {
24
+ return false;
25
+ }
26
+ }
27
+
28
+ function release(index: number) {
29
+ indexes.add(index);
30
+ if (isDone()) {
31
+ return Deferred.doneUnsafe(deferred, Effect.void);
32
+ } else {
33
+ return false;
34
+ }
35
+ }
36
+
37
+ function expect(count: number) {
38
+ expected = Option.some(count);
39
+ if (isDone()) {
40
+ Deferred.doneUnsafe(deferred, Effect.void);
41
+ return false;
42
+ } else {
43
+ return true;
44
+ }
45
+ }
46
+
47
+ return {
48
+ release,
49
+ expect,
50
+ wait: Deferred.await(deferred),
51
+ };
52
+ },
53
+ );
@@ -0,0 +1,7 @@
1
+ export interface ParentChildNodes {
2
+ readonly parentNode: Node | null;
3
+ readonly childNodes: ArrayLike<Node>;
4
+ }
5
+
6
+ export const findPath = (node: ParentChildNodes, path: ReadonlyArray<number>): Node =>
7
+ path.reduce(({ childNodes }, index) => childNodes[index], node) as Node;
@@ -0,0 +1,23 @@
1
+ export class PathStack {
2
+ path: Array<number> = [0];
3
+
4
+ inc(): void {
5
+ this.path[this.path.length - 1] += 1;
6
+ }
7
+
8
+ push(): void {
9
+ this.path.push(0);
10
+ }
11
+
12
+ pop(): void {
13
+ this.path.pop();
14
+ }
15
+
16
+ toChunk(): Array<number> {
17
+ return this.path.slice(0);
18
+ }
19
+
20
+ previousChunk(): Array<number> {
21
+ return this.path.slice(0, -1);
22
+ }
23
+ }