@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,923 @@
1
+ import { assert, describe, expect, it } from "vitest";
2
+ import { templateHash } from "./internal/templateHash.js";
3
+ import * as Parser from "./Parser.js";
4
+ import * as Template from "./Template.js";
5
+
6
+ describe("Parser", () => {
7
+ it("parses a simple template", () => {
8
+ const template = h`<div></div>`;
9
+ const expected = new Template.Template(
10
+ [new Template.ElementNode("div", [], [])],
11
+ templateHash(template),
12
+ [],
13
+ );
14
+
15
+ expect(Parser.parse(template)).toEqual(expected);
16
+ });
17
+
18
+ it("parses a template with attributes", () => {
19
+ const template = h`<div id="foo" class="bar"></div>`;
20
+
21
+ const element = new Template.ElementNode("div", [], []);
22
+ const id = new Template.AttributeNode("id", "foo");
23
+ const className = new Template.AttributeNode("class", "bar");
24
+
25
+ element.attributes.push(id, className);
26
+
27
+ const expected = new Template.Template([element], templateHash(template), []);
28
+ const actual = Parser.parse(template);
29
+
30
+ expect(actual).toEqual(expected);
31
+ });
32
+
33
+ it("parses a template with attributes with holes", () => {
34
+ const template = h`<div id=${"foo"} class=${"bar"}></div>`;
35
+ const div = new Template.ElementNode("div", [], []);
36
+ const id = new Template.AttrPartNode("id", 0);
37
+ const className = new Template.ClassNamePartNode(1);
38
+
39
+ div.attributes.push(id, className);
40
+
41
+ const expected = new Template.Template([div], templateHash(template), [
42
+ [id, [0]],
43
+ [className, [0]],
44
+ ]);
45
+
46
+ const actual = Parser.parse(template);
47
+
48
+ expect(actual).toEqual(expected);
49
+ });
50
+
51
+ it("parses sparse attributes", () => {
52
+ const template = h`<div id="${"foo"} ${"bar"} ${"baz"}"></div>`;
53
+ const div = new Template.ElementNode("div", [], []);
54
+ const id0 = new Template.AttrPartNode("id", 0);
55
+ const id1 = new Template.AttrPartNode("id", 1);
56
+ const id2 = new Template.AttrPartNode("id", 2);
57
+ const idText = new Template.TextNode(" ");
58
+ const idText2 = new Template.TextNode(" ");
59
+ const sparse = new Template.SparseAttrNode("id", [id0, idText, id1, idText2, id2]);
60
+
61
+ div.attributes.push(sparse);
62
+
63
+ const expected = new Template.Template([div], templateHash(template), [[sparse, [0]]]);
64
+ const actual = Parser.parse(template);
65
+
66
+ expect(actual).toEqual(expected);
67
+ });
68
+
69
+ it("parses sparse attributes with text", () => {
70
+ const template = h`<div id="${"foo"} hello ${"bar"} world ${"baz"}"></div>`;
71
+ const div = new Template.ElementNode("div", [], []);
72
+ const id0 = new Template.AttrPartNode("id", 0);
73
+ const id1 = new Template.AttrPartNode("id", 1);
74
+ const id2 = new Template.AttrPartNode("id", 2);
75
+ const idText = new Template.TextNode(" hello ");
76
+ const idText2 = new Template.TextNode(" world ");
77
+ const sparse = new Template.SparseAttrNode("id", [id0, idText, id1, idText2, id2]);
78
+
79
+ div.attributes.push(sparse);
80
+
81
+ const expected = new Template.Template([div], templateHash(template), [[sparse, [0]]]);
82
+ const actual = Parser.parse(template);
83
+
84
+ assert.deepStrictEqual(actual, expected);
85
+ });
86
+
87
+ it("parses boolean attributes", () => {
88
+ const template = h`<div hidden></div>`;
89
+ const div = new Template.ElementNode("div", [], []);
90
+ const hidden = new Template.BooleanNode("hidden");
91
+
92
+ div.attributes.push(hidden);
93
+
94
+ const expected = new Template.Template([div], templateHash(template), []);
95
+
96
+ expect(Parser.parse(template)).toEqual(expected);
97
+ });
98
+
99
+ it("parses boolean attributes with holes", () => {
100
+ const template = h`<div ?hidden="${true}"></div>`;
101
+ const div = new Template.ElementNode("div", [], []);
102
+ const hidden = new Template.BooleanPartNode("hidden", 0);
103
+
104
+ div.attributes.push(hidden);
105
+
106
+ const expected = new Template.Template([div], templateHash(template), [[hidden, [0]]]);
107
+
108
+ expect(Parser.parse(template)).toEqual(expected);
109
+ });
110
+
111
+ it("parses class name attributes", () => {
112
+ const template = h`<div class="foo bar baz"></div>`;
113
+ const div = new Template.ElementNode("div", [], []);
114
+ const className = new Template.AttributeNode("class", "foo bar baz");
115
+
116
+ div.attributes.push(className);
117
+
118
+ const expected = new Template.Template([div], templateHash(template), []);
119
+
120
+ expect(Parser.parse(template)).toEqual(expected);
121
+ });
122
+
123
+ it("parses class name attributes with holes", () => {
124
+ const template = h`<div class=${"foo"}></div>`;
125
+ const div = new Template.ElementNode("div", [], []);
126
+ const className = new Template.ClassNamePartNode(0);
127
+
128
+ div.attributes.push(className);
129
+
130
+ const expected = new Template.Template([div], templateHash(template), [[className, [0]]]);
131
+
132
+ expect(Parser.parse(template)).toEqual(expected);
133
+ });
134
+
135
+ it("parses sparse class name attributes", () => {
136
+ const template = h`<div class="${"foo"} ${"bar"} ${"baz"}"></div>`;
137
+ const div = new Template.ElementNode("div", [], []);
138
+
139
+ const className0 = new Template.ClassNamePartNode(0);
140
+ const className1 = new Template.ClassNamePartNode(1);
141
+ const className2 = new Template.ClassNamePartNode(2);
142
+ const sparse = new Template.SparseClassNameNode([
143
+ className0,
144
+ new Template.TextNode(" "),
145
+ className1,
146
+ new Template.TextNode(" "),
147
+ className2,
148
+ ]);
149
+
150
+ div.attributes.push(sparse);
151
+
152
+ const expected = new Template.Template([div], templateHash(template), [[sparse, [0]]]);
153
+
154
+ expect(Parser.parse(template)).toEqual(expected);
155
+ });
156
+
157
+ it("parses a template with children", () => {
158
+ const template = h`<div><span></span></div>`;
159
+ const div = new Template.ElementNode("div", [], []);
160
+ const span = new Template.ElementNode("span", [], []);
161
+
162
+ div.children.push(span);
163
+
164
+ const expected = new Template.Template([div], templateHash(template), []);
165
+ const actual = Parser.parse(template);
166
+
167
+ expect(actual).toEqual(expected);
168
+ });
169
+
170
+ it("parses a template with children with holes", () => {
171
+ const template = h`<div><span>${"foo"}</span></div>`;
172
+ const div = new Template.ElementNode("div", [], []);
173
+ const span = new Template.ElementNode("span", [], []);
174
+ const part = new Template.NodePart(0);
175
+
176
+ span.children.push(part);
177
+
178
+ div.children.push(span);
179
+
180
+ const expected = new Template.Template([div], templateHash(template), [[part, [0, 0]]]);
181
+
182
+ expect(Parser.parse(template)).toEqual(expected);
183
+ });
184
+
185
+ it("parses a template with children with holes and attributes", () => {
186
+ const template = h`<div id=${"foo"}><span>${"bar"}</span></div>`;
187
+ const div = new Template.ElementNode("div", [], []);
188
+ const id = new Template.AttrPartNode("id", 0);
189
+ const span = new Template.ElementNode("span", [], []);
190
+ const part = new Template.NodePart(1);
191
+
192
+ span.children.push(part);
193
+
194
+ div.attributes.push(id);
195
+ div.children.push(span);
196
+
197
+ const expected = new Template.Template([div], templateHash(template), [
198
+ [id, [0]],
199
+ [part, [0, 0]],
200
+ ]);
201
+
202
+ const actual = Parser.parse(template);
203
+
204
+ expect(actual).toEqual(expected);
205
+ });
206
+
207
+ it("parses a template with children with holes and attributes and class names", () => {
208
+ const template = h`<div id=${"foo"} class=${"bar"}><span>${"baz"}</span></div>`;
209
+
210
+ const div = new Template.ElementNode("div", [], []);
211
+ const id = new Template.AttrPartNode("id", 0);
212
+ const className = new Template.ClassNamePartNode(1);
213
+ const span = new Template.ElementNode("span", [], []);
214
+ const part = new Template.NodePart(2);
215
+
216
+ span.children.push(part);
217
+
218
+ div.attributes.push(id, className);
219
+ div.children.push(span);
220
+
221
+ const expected = new Template.Template([div], templateHash(template), [
222
+ [id, [0]],
223
+ [className, [0]],
224
+ [part, [0, 0]],
225
+ ]);
226
+
227
+ expect(Parser.parse(template)).toEqual(expected);
228
+ });
229
+
230
+ it("parses a template with children with holes and attributes and class names and sparse attributes", () => {
231
+ const template = h`<div id=${"foo"} class=${"bar"} ?hidden=${true}><span>${"baz"}</span></div>`;
232
+ const div = new Template.ElementNode("div", [], []);
233
+ const id = new Template.AttrPartNode("id", 0);
234
+ const className = new Template.ClassNamePartNode(1);
235
+ const hidden = new Template.BooleanPartNode("hidden", 2);
236
+ const span = new Template.ElementNode("span", [], []);
237
+ const part = new Template.NodePart(3);
238
+
239
+ span.children.push(part);
240
+
241
+ div.attributes.push(id, className, hidden);
242
+ div.children.push(span);
243
+
244
+ const expected = new Template.Template([div], templateHash(template), [
245
+ [id, [0]],
246
+ [className, [0]],
247
+ [hidden, [0]],
248
+ [part, [0, 0]],
249
+ ]);
250
+
251
+ expect(Parser.parse(template)).toEqual(expected);
252
+ });
253
+
254
+ it("parser a template with data attributes", () => {
255
+ const template = h`<div data-foo=${"bar"}></div>`;
256
+ const div = new Template.ElementNode("div", [], []);
257
+ const data = new Template.AttrPartNode("data-foo", 0);
258
+
259
+ div.attributes.push(data);
260
+
261
+ const expected = new Template.Template([div], templateHash(template), [[data, [0]]]);
262
+
263
+ expect(Parser.parse(template)).toEqual(expected);
264
+ });
265
+
266
+ it("parses a template with .data property", () => {
267
+ const template = h`<div .data=${{ a: "1", b: "2" }}></div>`;
268
+
269
+ const div = new Template.ElementNode("div", [], []);
270
+ const data = new Template.DataPartNode(0);
271
+
272
+ div.attributes.push(data);
273
+
274
+ const expected = new Template.Template([div], templateHash(template), [[data, [0]]]);
275
+
276
+ expect(Parser.parse(template)).toEqual(expected);
277
+ });
278
+
279
+ it("parses a template with @ event attributes", () => {
280
+ const template = h`<div @click=${() => {}}></div>`;
281
+ const div = new Template.ElementNode("div", [], []);
282
+ const event = new Template.EventPartNode("click", 0);
283
+
284
+ div.attributes.push(event);
285
+
286
+ const expected = new Template.Template([div], templateHash(template), [[event, [0]]]);
287
+
288
+ expect(Parser.parse(template)).toEqual(expected);
289
+ });
290
+
291
+ it("parses a template with event attributes with on* syntax", () => {
292
+ const template = h`<div onclick=${() => {}}></div>`;
293
+ const div = new Template.ElementNode("div", [], []);
294
+ const event = new Template.EventPartNode("click", 0);
295
+
296
+ div.attributes.push(event);
297
+
298
+ const expected = new Template.Template([div], templateHash(template), [[event, [0]]]);
299
+
300
+ expect(Parser.parse(template)).toEqual(expected);
301
+ });
302
+
303
+ it("parses nested templates", () => {
304
+ const template = h`<div>${h`<span></span>`}</div>`;
305
+ const div = new Template.ElementNode("div", [], []);
306
+ const part = new Template.NodePart(0);
307
+
308
+ div.children.push(part);
309
+
310
+ const expected = new Template.Template([div], templateHash(template), [[part, [0]]]);
311
+
312
+ expect(Parser.parse(template)).toEqual(expected);
313
+ });
314
+
315
+ it("parses properties", () => {
316
+ const template = h`<div .foo=${"bar"}></div>`;
317
+ const div = new Template.ElementNode("div", [], []);
318
+ const property = new Template.PropertyPartNode("foo", 0);
319
+
320
+ div.attributes.push(property);
321
+
322
+ const expected = new Template.Template([div], templateHash(template), [[property, [0]]]);
323
+
324
+ expect(Parser.parse(template)).toEqual(expected);
325
+ });
326
+
327
+ it("parse ref attributes", () => {
328
+ const template = h`<div ref=${"foo"}></div>`;
329
+ const div = new Template.ElementNode("div", [], []);
330
+ const ref = new Template.RefPartNode(0);
331
+
332
+ div.attributes.push(ref);
333
+
334
+ const expected = new Template.Template([div], templateHash(template), [[ref, [0]]]);
335
+
336
+ expect(Parser.parse(template)).toEqual(expected);
337
+ });
338
+
339
+ it("parses text-only nodes", () => {
340
+ const template = h`<textarea>foo</textarea>`;
341
+ const textarea = new Template.TextOnlyElement("textarea", [], new Template.TextNode("foo"));
342
+ const expected = new Template.Template([textarea], templateHash(template), []);
343
+
344
+ expect(Parser.parse(template)).toEqual(expected);
345
+ });
346
+
347
+ it("parses text-only nodes with holes", () => {
348
+ const template = h`<textarea>${"foo"}</textarea>`;
349
+ const part = new Template.TextPartNode(0);
350
+ const textarea = new Template.TextOnlyElement("textarea", [], part);
351
+
352
+ const expected = new Template.Template([textarea], templateHash(template), [[part, [0]]]);
353
+
354
+ expect(Parser.parse(template)).toEqual(expected);
355
+ });
356
+
357
+ it("parses self-closing elements", () => {
358
+ const template = h`<input />`;
359
+ const expected = new Template.Template(
360
+ [new Template.SelfClosingElementNode("input", [])],
361
+ templateHash(template),
362
+ [],
363
+ );
364
+
365
+ expect(Parser.parse(template)).toEqual(expected);
366
+ });
367
+
368
+ it("parses self-closing elements with attributes", () => {
369
+ const template = h`<input type=${"text"} />`;
370
+ const input = new Template.SelfClosingElementNode("input", []);
371
+ const type = new Template.AttrPartNode("type", 0);
372
+
373
+ input.attributes.push(type);
374
+
375
+ const expected = new Template.Template([input], templateHash(template), [[type, [0]]]);
376
+
377
+ expect(Parser.parse(template)).toEqual(expected);
378
+ });
379
+
380
+ it("parses self-closing elements with attributes and class names", () => {
381
+ const template = h`<input type=${"text"} class=${"foo"} />`;
382
+ const input = new Template.SelfClosingElementNode("input", []);
383
+ const type = new Template.AttrPartNode("type", 0);
384
+ const className = new Template.ClassNamePartNode(1);
385
+
386
+ input.attributes.push(type);
387
+ input.attributes.push(className);
388
+
389
+ const expected = new Template.Template([input], templateHash(template), [
390
+ [type, [0]],
391
+ [className, [0]],
392
+ ]);
393
+
394
+ expect(Parser.parse(template)).toEqual(expected);
395
+ });
396
+
397
+ it("parses empty templates", () => {
398
+ const template = h``;
399
+ const expected = new Template.Template([], templateHash(template), []);
400
+
401
+ expect(Parser.parse(template)).toEqual(expected);
402
+ });
403
+
404
+ it("determines the correct path for parts", () => {
405
+ const template = h`
406
+ <div>
407
+ <p>test ${"test"}</p>
408
+ </div>
409
+ <div>
410
+ <p>test ${"test"}</p>
411
+ </div>
412
+ <footer>
413
+ <div>
414
+ <p>test</p>
415
+ </div>
416
+ <div>
417
+ <p>${"test"}</p>
418
+ </div>
419
+ </footer>`;
420
+ const part1 = new Template.NodePart(0);
421
+ const part2 = new Template.NodePart(1);
422
+ const part3 = new Template.NodePart(2);
423
+ const expected = new Template.Template(
424
+ [
425
+ new Template.ElementNode(
426
+ "div",
427
+ [],
428
+ [new Template.ElementNode("p", [], [new Template.TextNode("test "), part1])],
429
+ ),
430
+ new Template.ElementNode(
431
+ "div",
432
+ [],
433
+ [new Template.ElementNode("p", [], [new Template.TextNode("test "), part2])],
434
+ ),
435
+ new Template.ElementNode(
436
+ "footer",
437
+ [],
438
+ [
439
+ new Template.ElementNode(
440
+ "div",
441
+ [],
442
+ [new Template.ElementNode("p", [], [new Template.TextNode("test")])],
443
+ ),
444
+ new Template.ElementNode("div", [], [new Template.ElementNode("p", [], [part3])]),
445
+ ],
446
+ ),
447
+ ],
448
+ templateHash(template),
449
+ [
450
+ [part1, [0, 0]],
451
+ [part2, [1, 0]],
452
+ [part3, [2, 1, 0]],
453
+ ],
454
+ );
455
+
456
+ const actual = Parser.parse(template);
457
+
458
+ expect(actual).toEqual(expected);
459
+ });
460
+
461
+ it("parses comments", () => {
462
+ const template = h`<!-- test -->`;
463
+ const expected = new Template.Template(
464
+ [new Template.CommentNode(" test ")],
465
+ templateHash(template),
466
+ [],
467
+ );
468
+
469
+ expect(Parser.parse(template)).toEqual(expected);
470
+ });
471
+
472
+ it("parses comments with hole", () => {
473
+ const template = h`<!-- ${"test"} -->`;
474
+ const part = new Template.CommentPartNode(0);
475
+ const expected = new Template.Template([part], templateHash(template), [[part, [0]]]);
476
+
477
+ expect(Parser.parse(template)).toEqual(expected);
478
+ });
479
+
480
+ it("parses template with only holes", () => {
481
+ const template = h`${"test"} ${"test"}`;
482
+ const part1 = new Template.NodePart(0);
483
+ const part2 = new Template.NodePart(1);
484
+ const expected = new Template.Template(
485
+ [part1, new Template.TextNode(" "), part2],
486
+ templateHash(template),
487
+ [
488
+ [part1, []],
489
+ [part2, []],
490
+ ],
491
+ );
492
+
493
+ expect(Parser.parse(template)).toEqual(expected);
494
+ });
495
+
496
+ it("parses templates with doctypes", () => {
497
+ const template = h`<!DOCTYPE html>
498
+ <html>
499
+ <head>
500
+ <title>Test</title>
501
+ </head>
502
+ <body>
503
+ <div id="root"></div>
504
+ </body>
505
+ </html>`;
506
+ const expected = new Template.Template(
507
+ [
508
+ new Template.DocType("html"),
509
+ new Template.ElementNode(
510
+ "html",
511
+ [],
512
+ [
513
+ new Template.ElementNode(
514
+ "head",
515
+ [],
516
+ [new Template.TextOnlyElement("title", [], new Template.TextNode("Test"))],
517
+ ),
518
+ new Template.ElementNode(
519
+ "body",
520
+ [],
521
+ [new Template.ElementNode("div", [new Template.AttributeNode("id", "root")], [])],
522
+ ),
523
+ ],
524
+ ),
525
+ ],
526
+ templateHash(template),
527
+ [],
528
+ );
529
+
530
+ assert.deepStrictEqual(Parser.parse(template), expected);
531
+ });
532
+
533
+ it("parses templates with spread props", () => {
534
+ const template = h`<div ...${{ id: "foo", class: "bar" }}></div>`;
535
+ const props = new Template.PropertiesPartNode(0);
536
+ const expected = new Template.Template(
537
+ [new Template.ElementNode("div", [props], [])],
538
+ templateHash(template),
539
+ [[props, [0]]],
540
+ );
541
+
542
+ assert.deepStrictEqual(Parser.parse(template), expected);
543
+ });
544
+
545
+ it("parses large svg templates", () => {
546
+ const template = h`<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
547
+ width="1280.000000pt" height="1280.000000pt" viewBox="0 0 1280.000000 1280.000000"
548
+ preserveAspectRatio="xMidYMid meet">
549
+ <g transform="translate(0.000000,1280.000000) scale(0.100000,-0.100000)"
550
+ fill="#000000" stroke="none">
551
+ <path d="M11331 11544 c-747 -65 -1419 -278 -2023 -641 -655 -393 -1210 -946
552
+ -1677 -1673 -380 -590 -748 -1442 -961 -2228 -35 -127 -65 -231 -67 -229 -9 9
553
+ -133 878 -144 1005 -13 163 -7 630 11 757 59 425 166 740 338 999 72 108 222
554
+ 258 332 331 122 82 194 115 360 166 160 49 237 86 290 139 57 57 71 89 62 141
555
+ -6 37 -13 47 -42 61 -101 51 -268 -2 -458 -146 -372 -279 -597 -597 -761
556
+ -1078 -136 -400 -218 -861 -209 -1175 l5 -153 -39 0 c-21 0 -38 3 -38 8 0 112
557
+ -36 569 -51 662 -95 558 -301 1060 -576 1400 -99 122 -332 343 -427 405 -174
558
+ 114 -306 125 -416 36 l-25 -20 20 -37 c41 -77 154 -151 480 -316 281 -142 328
559
+ -172 418 -267 187 -199 330 -484 422 -836 61 -235 110 -591 122 -882 l6 -163
560
+ -42 -59 c-23 -33 -48 -76 -56 -95 -19 -45 -19 -180 0 -266 24 -107 18 -162
561
+ -36 -391 -27 -117 -52 -215 -54 -217 -2 -3 -7 9 -11 24 -90 400 -230 812 -430
562
+ 1264 -87 198 -319 666 -413 834 -809 1443 -1990 2341 -3392 2580 -229 39 -413
563
+ 56 -691 63 l-258 6 0 -79 c0 -43 5 -153 10 -244 154 -2522 965 -4535 2186
564
+ -5426 463 -337 949 -510 1504 -533 96 -4 168 -10 160 -13 -8 -4 -104 -29 -212
565
+ -57 -218 -55 -321 -96 -495 -197 -683 -397 -1042 -1043 -1248 -2248 -59 -346
566
+ -69 -467 -70 -811 0 -350 29 -754 85 -1160 16 -121 30 -226 30 -232 0 -21 28
567
+ -15 149 33 310 124 615 309 906 553 127 106 401 384 525 531 451 540 863 1253
568
+ 1194 2067 131 322 307 846 435 1293 l56 198 0 -342 c0 -420 23 -661 99 -1021
569
+ 39 -182 160 -626 167 -612 9 17 82 437 129 745 45 296 74 677 75 964 0 97 1
570
+ 176 1 175 1 -1 34 -112 74 -247 134 -458 309 -965 431 -1247 78 -181 296 -616
571
+ 417 -834 315 -565 604 -961 972 -1330 285 -286 549 -492 888 -692 112 -67 464
572
+ -247 481 -247 5 0 12 33 15 72 14 179 37 461 56 673 27 310 38 625 29 825 -7
573
+ 160 -64 683 -95 865 -19 112 -80 349 -135 520 -120 376 -276 687 -481 958 -86
574
+ 114 -283 308 -405 400 -251 187 -583 352 -794 395 l-94 19 105 7 c58 4 191 18
575
+ 295 32 384 50 823 207 1115 398 300 196 646 532 907 881 460 614 840 1489
576
+ 1062 2448 74 321 235 1179 281 1497 44 305 89 817 90 1018 0 16 -260 14 -469
577
+ -4z m94 -536 c-3 -24 -12 -106 -21 -183 -60 -535 -211 -1148 -394 -1601 -76
578
+ -186 -201 -430 -291 -563 -178 -267 -340 -401 -569 -472 -98 -31 -299 -33
579
+ -400 -6 -259 71 -468 275 -586 571 -118 295 -90 642 80 1001 255 537 700 908
580
+ 1366 1139 158 55 632 148 792 155 27 1 27 0 23 -41z m-9845 6 c294 -42 565
581
+ -125 829 -254 556 -271 934 -681 1115 -1207 94 -273 102 -558 24 -788 -26 -74
582
+ -90 -205 -131 -265 -107 -157 -288 -284 -477 -336 -90 -25 -300 -25 -390 -1
583
+ -118 31 -243 102 -337 191 -455 430 -786 1378 -927 2650 l-4 39 96 -7 c53 -4
584
+ 144 -14 202 -22z m7316 -1030 c113 -256 91 -714 -49 -1006 -55 -117 -140 -230
585
+ -249 -334 -137 -131 -257 -214 -588 -404 -325 -187 -520 -331 -695 -511 -130
586
+ -134 -183 -209 -277 -393 l-77 -151 -1 86 c0 98 17 207 61 389 32 137 99 352
587
+ 127 415 l18 40 29 -78 c15 -43 31 -74 35 -70 4 4 20 69 35 143 40 198 89 333
588
+ 176 481 42 73 158 223 166 215 3 -2 -7 -50 -21 -106 -14 -56 -28 -138 -31
589
+ -183 l-6 -82 68 135 c133 261 280 482 376 565 50 43 123 84 114 63 -58 -133
590
+ -94 -277 -85 -338 2 -21 8 -14 34 40 38 80 90 144 170 207 62 51 241 149 251
591
+ 139 3 -3 -9 -38 -27 -78 -35 -79 -72 -179 -67 -184 2 -2 27 29 57 69 30 39 95
592
+ 115 143 167 101 108 186 231 221 317 50 121 60 179 60 345 1 87 2 158 4 158 2
593
+ 0 14 -25 28 -56z m-5071 -136 c0 -132 3 -163 23 -228 34 -109 100 -230 190
594
+ -350 91 -120 264 -308 270 -291 5 16 -25 103 -69 199 -21 45 -36 82 -33 82 15
595
+ 0 140 -70 202 -113 98 -67 175 -154 220 -249 20 -42 41 -77 45 -77 21 -2 -19
596
+ 220 -59 326 -13 35 -20 63 -15 63 14 0 100 -72 152 -126 143 -150 302 -414
597
+ 367 -607 10 -31 22 -61 27 -65 14 -14 -7 153 -35 266 l-28 114 45 -44 c155
598
+ -152 289 -447 324 -713 15 -111 25 -112 60 -7 l23 67 43 -135 c119 -367 149
599
+ -497 158 -694 l5 -111 -24 66 c-62 172 -161 323 -306 470 -156 157 -316 274
600
+ -730 534 -378 237 -475 307 -618 448 -316 310 -410 764 -260 1260 11 37 21 67
601
+ 21 67 1 0 2 -69 2 -152z m665 -1834 c257 -42 504 -160 726 -347 294 -247 553
602
+ -691 669 -1147 35 -138 56 -232 52 -236 -2 -2 -41 78 -88 178 -148 321 -302
603
+ 522 -507 661 -179 122 -386 161 -575 108 -99 -27 -139 -47 -257 -130 -128 -90
604
+ -151 -104 -158 -96 -4 4 -7 43 -6 88 0 69 7 101 42 201 23 66 40 122 37 124
605
+ -8 9 -127 -82 -189 -145 -174 -176 -289 -442 -312 -723 -4 -44 -10 -80 -13
606
+ -80 -3 0 -21 21 -40 45 -36 49 -72 132 -117 268 -15 48 -31 87 -35 87 -10 0
607
+ -30 -137 -36 -255 -13 -251 58 -514 191 -699 57 -79 175 -193 250 -241 53 -34
608
+ 144 -79 201 -99 35 -13 -4 -26 -76 -26 -69 0 -209 32 -307 70 -256 99 -482
609
+ 314 -617 588 -94 191 -129 346 -129 572 1 241 52 458 159 675 108 220 266 379
610
+ 482 486 42 21 98 37 177 51 64 10 133 26 154 34 44 17 176 12 322 -12z m4025
611
+ 15 c194 -24 366 -84 503 -178 281 -190 468 -552 489 -945 16 -300 -100 -713
612
+ -263 -942 -181 -255 -486 -405 -824 -404 l-85 0 56 24 c131 53 247 133 355
613
+ 241 125 126 215 284 254 446 34 141 21 431 -26 588 l-17 56 -22 -93 c-26 -109
614
+ -98 -307 -124 -342 l-19 -24 -7 49 c-46 339 -135 560 -299 742 -63 69 -210
615
+ 181 -214 162 -1 -8 17 -102 42 -209 24 -107 42 -197 40 -199 -2 -3 -49 27
616
+ -104 65 -159 110 -215 142 -298 171 -66 23 -93 27 -192 27 -103 0 -124 -3
617
+ -202 -31 -151 -53 -294 -157 -435 -315 -96 -109 -182 -243 -272 -428 -48 -96
618
+ -81 -154 -81 -140 0 14 11 73 25 133 66 292 211 602 400 857 151 202 309 354
619
+ 498 480 107 71 133 84 290 136 232 78 354 95 532 73z m-6199 -372 c357 -133
620
+ 637 -150 853 -51 30 13 56 23 58 21 2 -2 -17 -46 -41 -98 -138 -294 -199 -555
621
+ -200 -844 0 -229 36 -411 118 -604 l35 -81 -37 15 c-111 46 -276 187 -383 327
622
+ -116 152 -198 302 -417 764 -132 279 -172 345 -361 595 -72 95 -131 176 -131
623
+ 180 0 4 87 -34 193 -86 105 -51 246 -113 313 -138z m8502 144 c-150 -183 -324
624
+ -483 -468 -806 -98 -218 -202 -422 -262 -511 -69 -104 -191 -229 -327 -338
625
+ -144 -114 -191 -149 -196 -145 -1 2 23 76 56 165 93 257 121 446 100 664 -16
626
+ 156 -34 242 -86 395 -39 119 -143 363 -167 393 -16 19 2 15 83 -18 116 -48
627
+ 185 -63 289 -62 169 1 399 54 637 148 120 47 323 146 378 183 17 12 31 21 33
628
+ 21 2 0 -30 -40 -70 -89z m-5830 -917 c315 -64 659 -419 880 -908 52 -115 137
629
+ -354 129 -363 -2 -2 -62 60 -132 138 -183 201 -286 279 -435 329 -149 51 -234
630
+ 45 -467 -31 -134 -44 -170 -52 -238 -53 -66 0 -90 4 -136 26 -200 92 -255 332
631
+ -134 584 34 71 117 173 159 196 36 20 250 96 274 97 13 0 58 -6 100 -15z
632
+ m2923 -68 c116 -36 233 -123 285 -212 53 -90 67 -150 68 -289 1 -159 -15 -217
633
+ -78 -280 -81 -80 -170 -84 -422 -19 -167 43 -187 47 -304 46 -102 0 -143 -5
634
+ -224 -26 -229 -60 -406 -184 -496 -347 -16 -30 -30 -48 -30 -41 0 38 110 335
635
+ 170 457 143 293 313 498 520 627 68 43 95 53 190 74 41 9 82 21 90 26 20 12
636
+ 174 2 231 -16z m-354 -958 c131 -27 180 -33 290 -33 73 0 133 -3 133 -7 0 -3
637
+ -24 -27 -52 -51 -103 -87 -230 -142 -434 -187 -80 -18 -148 -24 -359 -30 -232
638
+ -6 -266 -9 -315 -28 -30 -12 -56 -22 -58 -22 -7 0 41 82 77 130 57 76 134 132
639
+ 286 207 l130 64 72 -5 c40 -3 143 -20 230 -38z m-2012 -2 c109 -35 195 -88
640
+ 269 -166 51 -54 126 -170 126 -194 0 -4 -17 2 -38 13 -79 41 -118 45 -397 46
641
+ -291 2 -331 7 -453 61 -55 24 -336 194 -330 199 2 2 32 -2 68 -7 125 -18 382
642
+ 18 467 67 41 23 185 14 288 -19z m1545 -487 c397 -39 744 -175 948 -373 136
643
+ -131 232 -304 441 -793 224 -524 294 -643 472 -798 50 -44 87 -81 81 -83 -5
644
+ -1 -62 18 -126 42 -307 119 -590 304 -848 554 -128 125 -178 192 -338 457
645
+ -214 353 -370 570 -532 740 -122 128 -181 173 -288 221 -47 21 -89 41 -95 46
646
+ -10 9 118 3 285 -13z m-1254 -20 c-244 -84 -505 -387 -936 -1083 -106 -172
647
+ -179 -266 -310 -396 -175 -176 -374 -316 -595 -421 -108 -51 -268 -112 -325
648
+ -124 -34 -7 -33 -6 50 81 231 241 335 416 523 885 184 456 264 581 470 738
649
+ 211 159 433 255 706 306 146 27 201 33 326 34 l150 0 -59 -20z m1224 -236
650
+ c192 -183 322 -427 380 -715 22 -107 22 -146 -10 -621 -11 -164 0 -383 25
651
+ -527 8 -47 15 -87 15 -89 0 -13 -40 34 -75 89 -91 140 -179 342 -241 555 -45
652
+ 155 -61 257 -69 435 -7 170 -46 475 -81 643 -25 119 -70 261 -105 329 -11 21
653
+ -19 40 -19 43 0 14 100 -65 180 -142z m-1273 70 c-93 -186 -134 -397 -152
654
+ -778 -7 -163 -29 -330 -60 -461 -50 -210 -142 -459 -226 -608 -41 -72 -118
655
+ -180 -124 -174 -2 2 3 30 11 63 24 97 28 326 10 556 -29 373 -19 562 41 754
656
+ 48 155 116 277 225 410 41 49 296 304 306 305 1 0 -13 -30 -31 -67z m1873
657
+ -1008 c141 -208 279 -551 334 -830 22 -115 33 -208 56 -490 34 -398 58 -512
658
+ 152 -698 l50 -100 -44 32 c-203 149 -381 355 -478 556 -47 96 -101 257 -126
659
+ 380 -22 104 -26 414 -10 800 10 237 2 333 -34 443 l-19 57 35 -40 c20 -22 58
660
+ -71 84 -110z m-2545 4 l-36 -124 12 -455 c12 -454 12 -455 -10 -565 -86 -428
661
+ -308 -784 -592 -948 -25 -15 -48 -27 -52 -27 -3 0 6 20 19 44 14 25 38 80 54
662
+ 124 59 163 85 300 120 642 54 526 111 741 284 1075 62 120 223 371 233 362 1
663
+ -2 -13 -59 -32 -128z m4021 -1300 c279 -134 460 -727 481 -1573 l6 -239 -129
664
+ 67 c-420 220 -672 421 -837 664 -156 232 -194 461 -112 695 58 168 160 282
665
+ 330 370 99 51 115 57 155 52 25 -3 73 -19 106 -36z m-5413 16 c104 -27 176
666
+ -71 267 -164 136 -137 202 -292 204 -481 1 -114 -13 -177 -65 -289 -126 -271
667
+ -358 -500 -731 -719 -114 -68 -309 -172 -321 -172 -11 0 -3 339 14 560 46 617
668
+ 195 1021 454 1231 67 55 85 58 178 34z" />
669
+ </g>
670
+ </svg>`;
671
+ // eslint-disable-next-line no-console
672
+ console.time("parse large svg (cold start)");
673
+ const actual = Parser.parse(template);
674
+ // eslint-disable-next-line no-console
675
+ console.timeEnd("parse large svg (cold start)");
676
+
677
+ const expected = new Template.Template(
678
+ [
679
+ new Template.ElementNode(
680
+ "svg",
681
+ [
682
+ new Template.AttributeNode("version", "1.0"),
683
+ new Template.AttributeNode("xmlns", "http://www.w3.org/2000/svg"),
684
+ new Template.AttributeNode("width", "1280.000000pt"),
685
+ new Template.AttributeNode("height", "1280.000000pt"),
686
+ new Template.AttributeNode("viewBox", "0 0 1280.000000 1280.000000"),
687
+ new Template.AttributeNode("preserveAspectRatio", "xMidYMid meet"),
688
+ ],
689
+ [
690
+ new Template.ElementNode(
691
+ "g",
692
+ [
693
+ new Template.AttributeNode(
694
+ "transform",
695
+ "translate(0.000000,1280.000000) scale(0.100000,-0.100000)",
696
+ ),
697
+ new Template.AttributeNode("fill", "#000000"),
698
+ new Template.AttributeNode("stroke", "none"),
699
+ ],
700
+ [
701
+ new Template.ElementNode(
702
+ "path",
703
+ [
704
+ new Template.AttributeNode(
705
+ "d",
706
+ `M11331 11544 c-747 -65 -1419 -278 -2023 -641 -655 -393 -1210 -946
707
+ -1677 -1673 -380 -590 -748 -1442 -961 -2228 -35 -127 -65 -231 -67 -229 -9 9
708
+ -133 878 -144 1005 -13 163 -7 630 11 757 59 425 166 740 338 999 72 108 222
709
+ 258 332 331 122 82 194 115 360 166 160 49 237 86 290 139 57 57 71 89 62 141
710
+ -6 37 -13 47 -42 61 -101 51 -268 -2 -458 -146 -372 -279 -597 -597 -761
711
+ -1078 -136 -400 -218 -861 -209 -1175 l5 -153 -39 0 c-21 0 -38 3 -38 8 0 112
712
+ -36 569 -51 662 -95 558 -301 1060 -576 1400 -99 122 -332 343 -427 405 -174
713
+ 114 -306 125 -416 36 l-25 -20 20 -37 c41 -77 154 -151 480 -316 281 -142 328
714
+ -172 418 -267 187 -199 330 -484 422 -836 61 -235 110 -591 122 -882 l6 -163
715
+ -42 -59 c-23 -33 -48 -76 -56 -95 -19 -45 -19 -180 0 -266 24 -107 18 -162
716
+ -36 -391 -27 -117 -52 -215 -54 -217 -2 -3 -7 9 -11 24 -90 400 -230 812 -430
717
+ 1264 -87 198 -319 666 -413 834 -809 1443 -1990 2341 -3392 2580 -229 39 -413
718
+ 56 -691 63 l-258 6 0 -79 c0 -43 5 -153 10 -244 154 -2522 965 -4535 2186
719
+ -5426 463 -337 949 -510 1504 -533 96 -4 168 -10 160 -13 -8 -4 -104 -29 -212
720
+ -57 -218 -55 -321 -96 -495 -197 -683 -397 -1042 -1043 -1248 -2248 -59 -346
721
+ -69 -467 -70 -811 0 -350 29 -754 85 -1160 16 -121 30 -226 30 -232 0 -21 28
722
+ -15 149 33 310 124 615 309 906 553 127 106 401 384 525 531 451 540 863 1253
723
+ 1194 2067 131 322 307 846 435 1293 l56 198 0 -342 c0 -420 23 -661 99 -1021
724
+ 39 -182 160 -626 167 -612 9 17 82 437 129 745 45 296 74 677 75 964 0 97 1
725
+ 176 1 175 1 -1 34 -112 74 -247 134 -458 309 -965 431 -1247 78 -181 296 -616
726
+ 417 -834 315 -565 604 -961 972 -1330 285 -286 549 -492 888 -692 112 -67 464
727
+ -247 481 -247 5 0 12 33 15 72 14 179 37 461 56 673 27 310 38 625 29 825 -7
728
+ 160 -64 683 -95 865 -19 112 -80 349 -135 520 -120 376 -276 687 -481 958 -86
729
+ 114 -283 308 -405 400 -251 187 -583 352 -794 395 l-94 19 105 7 c58 4 191 18
730
+ 295 32 384 50 823 207 1115 398 300 196 646 532 907 881 460 614 840 1489
731
+ 1062 2448 74 321 235 1179 281 1497 44 305 89 817 90 1018 0 16 -260 14 -469
732
+ -4z m94 -536 c-3 -24 -12 -106 -21 -183 -60 -535 -211 -1148 -394 -1601 -76
733
+ -186 -201 -430 -291 -563 -178 -267 -340 -401 -569 -472 -98 -31 -299 -33
734
+ -400 -6 -259 71 -468 275 -586 571 -118 295 -90 642 80 1001 255 537 700 908
735
+ 1366 1139 158 55 632 148 792 155 27 1 27 0 23 -41z m-9845 6 c294 -42 565
736
+ -125 829 -254 556 -271 934 -681 1115 -1207 94 -273 102 -558 24 -788 -26 -74
737
+ -90 -205 -131 -265 -107 -157 -288 -284 -477 -336 -90 -25 -300 -25 -390 -1
738
+ -118 31 -243 102 -337 191 -455 430 -786 1378 -927 2650 l-4 39 96 -7 c53 -4
739
+ 144 -14 202 -22z m7316 -1030 c113 -256 91 -714 -49 -1006 -55 -117 -140 -230
740
+ -249 -334 -137 -131 -257 -214 -588 -404 -325 -187 -520 -331 -695 -511 -130
741
+ -134 -183 -209 -277 -393 l-77 -151 -1 86 c0 98 17 207 61 389 32 137 99 352
742
+ 127 415 l18 40 29 -78 c15 -43 31 -74 35 -70 4 4 20 69 35 143 40 198 89 333
743
+ 176 481 42 73 158 223 166 215 3 -2 -7 -50 -21 -106 -14 -56 -28 -138 -31
744
+ -183 l-6 -82 68 135 c133 261 280 482 376 565 50 43 123 84 114 63 -58 -133
745
+ -94 -277 -85 -338 2 -21 8 -14 34 40 38 80 90 144 170 207 62 51 241 149 251
746
+ 139 3 -3 -9 -38 -27 -78 -35 -79 -72 -179 -67 -184 2 -2 27 29 57 69 30 39 95
747
+ 115 143 167 101 108 186 231 221 317 50 121 60 179 60 345 1 87 2 158 4 158 2
748
+ 0 14 -25 28 -56z m-5071 -136 c0 -132 3 -163 23 -228 34 -109 100 -230 190
749
+ -350 91 -120 264 -308 270 -291 5 16 -25 103 -69 199 -21 45 -36 82 -33 82 15
750
+ 0 140 -70 202 -113 98 -67 175 -154 220 -249 20 -42 41 -77 45 -77 21 -2 -19
751
+ 220 -59 326 -13 35 -20 63 -15 63 14 0 100 -72 152 -126 143 -150 302 -414
752
+ 367 -607 10 -31 22 -61 27 -65 14 -14 -7 153 -35 266 l-28 114 45 -44 c155
753
+ -152 289 -447 324 -713 15 -111 25 -112 60 -7 l23 67 43 -135 c119 -367 149
754
+ -497 158 -694 l5 -111 -24 66 c-62 172 -161 323 -306 470 -156 157 -316 274
755
+ -730 534 -378 237 -475 307 -618 448 -316 310 -410 764 -260 1260 11 37 21 67
756
+ 21 67 1 0 2 -69 2 -152z m665 -1834 c257 -42 504 -160 726 -347 294 -247 553
757
+ -691 669 -1147 35 -138 56 -232 52 -236 -2 -2 -41 78 -88 178 -148 321 -302
758
+ 522 -507 661 -179 122 -386 161 -575 108 -99 -27 -139 -47 -257 -130 -128 -90
759
+ -151 -104 -158 -96 -4 4 -7 43 -6 88 0 69 7 101 42 201 23 66 40 122 37 124
760
+ -8 9 -127 -82 -189 -145 -174 -176 -289 -442 -312 -723 -4 -44 -10 -80 -13
761
+ -80 -3 0 -21 21 -40 45 -36 49 -72 132 -117 268 -15 48 -31 87 -35 87 -10 0
762
+ -30 -137 -36 -255 -13 -251 58 -514 191 -699 57 -79 175 -193 250 -241 53 -34
763
+ 144 -79 201 -99 35 -13 -4 -26 -76 -26 -69 0 -209 32 -307 70 -256 99 -482
764
+ 314 -617 588 -94 191 -129 346 -129 572 1 241 52 458 159 675 108 220 266 379
765
+ 482 486 42 21 98 37 177 51 64 10 133 26 154 34 44 17 176 12 322 -12z m4025
766
+ 15 c194 -24 366 -84 503 -178 281 -190 468 -552 489 -945 16 -300 -100 -713
767
+ -263 -942 -181 -255 -486 -405 -824 -404 l-85 0 56 24 c131 53 247 133 355
768
+ 241 125 126 215 284 254 446 34 141 21 431 -26 588 l-17 56 -22 -93 c-26 -109
769
+ -98 -307 -124 -342 l-19 -24 -7 49 c-46 339 -135 560 -299 742 -63 69 -210
770
+ 181 -214 162 -1 -8 17 -102 42 -209 24 -107 42 -197 40 -199 -2 -3 -49 27
771
+ -104 65 -159 110 -215 142 -298 171 -66 23 -93 27 -192 27 -103 0 -124 -3
772
+ -202 -31 -151 -53 -294 -157 -435 -315 -96 -109 -182 -243 -272 -428 -48 -96
773
+ -81 -154 -81 -140 0 14 11 73 25 133 66 292 211 602 400 857 151 202 309 354
774
+ 498 480 107 71 133 84 290 136 232 78 354 95 532 73z m-6199 -372 c357 -133
775
+ 637 -150 853 -51 30 13 56 23 58 21 2 -2 -17 -46 -41 -98 -138 -294 -199 -555
776
+ -200 -844 0 -229 36 -411 118 -604 l35 -81 -37 15 c-111 46 -276 187 -383 327
777
+ -116 152 -198 302 -417 764 -132 279 -172 345 -361 595 -72 95 -131 176 -131
778
+ 180 0 4 87 -34 193 -86 105 -51 246 -113 313 -138z m8502 144 c-150 -183 -324
779
+ -483 -468 -806 -98 -218 -202 -422 -262 -511 -69 -104 -191 -229 -327 -338
780
+ -144 -114 -191 -149 -196 -145 -1 2 23 76 56 165 93 257 121 446 100 664 -16
781
+ 156 -34 242 -86 395 -39 119 -143 363 -167 393 -16 19 2 15 83 -18 116 -48
782
+ 185 -63 289 -62 169 1 399 54 637 148 120 47 323 146 378 183 17 12 31 21 33
783
+ 21 2 0 -30 -40 -70 -89z m-5830 -917 c315 -64 659 -419 880 -908 52 -115 137
784
+ -354 129 -363 -2 -2 -62 60 -132 138 -183 201 -286 279 -435 329 -149 51 -234
785
+ 45 -467 -31 -134 -44 -170 -52 -238 -53 -66 0 -90 4 -136 26 -200 92 -255 332
786
+ -134 584 34 71 117 173 159 196 36 20 250 96 274 97 13 0 58 -6 100 -15z
787
+ m2923 -68 c116 -36 233 -123 285 -212 53 -90 67 -150 68 -289 1 -159 -15 -217
788
+ -78 -280 -81 -80 -170 -84 -422 -19 -167 43 -187 47 -304 46 -102 0 -143 -5
789
+ -224 -26 -229 -60 -406 -184 -496 -347 -16 -30 -30 -48 -30 -41 0 38 110 335
790
+ 170 457 143 293 313 498 520 627 68 43 95 53 190 74 41 9 82 21 90 26 20 12
791
+ 174 2 231 -16z m-354 -958 c131 -27 180 -33 290 -33 73 0 133 -3 133 -7 0 -3
792
+ -24 -27 -52 -51 -103 -87 -230 -142 -434 -187 -80 -18 -148 -24 -359 -30 -232
793
+ -6 -266 -9 -315 -28 -30 -12 -56 -22 -58 -22 -7 0 41 82 77 130 57 76 134 132
794
+ 286 207 l130 64 72 -5 c40 -3 143 -20 230 -38z m-2012 -2 c109 -35 195 -88
795
+ 269 -166 51 -54 126 -170 126 -194 0 -4 -17 2 -38 13 -79 41 -118 45 -397 46
796
+ -291 2 -331 7 -453 61 -55 24 -336 194 -330 199 2 2 32 -2 68 -7 125 -18 382
797
+ 18 467 67 41 23 185 14 288 -19z m1545 -487 c397 -39 744 -175 948 -373 136
798
+ -131 232 -304 441 -793 224 -524 294 -643 472 -798 50 -44 87 -81 81 -83 -5
799
+ -1 -62 18 -126 42 -307 119 -590 304 -848 554 -128 125 -178 192 -338 457
800
+ -214 353 -370 570 -532 740 -122 128 -181 173 -288 221 -47 21 -89 41 -95 46
801
+ -10 9 118 3 285 -13z m-1254 -20 c-244 -84 -505 -387 -936 -1083 -106 -172
802
+ -179 -266 -310 -396 -175 -176 -374 -316 -595 -421 -108 -51 -268 -112 -325
803
+ -124 -34 -7 -33 -6 50 81 231 241 335 416 523 885 184 456 264 581 470 738
804
+ 211 159 433 255 706 306 146 27 201 33 326 34 l150 0 -59 -20z m1224 -236
805
+ c192 -183 322 -427 380 -715 22 -107 22 -146 -10 -621 -11 -164 0 -383 25
806
+ -527 8 -47 15 -87 15 -89 0 -13 -40 34 -75 89 -91 140 -179 342 -241 555 -45
807
+ 155 -61 257 -69 435 -7 170 -46 475 -81 643 -25 119 -70 261 -105 329 -11 21
808
+ -19 40 -19 43 0 14 100 -65 180 -142z m-1273 70 c-93 -186 -134 -397 -152
809
+ -778 -7 -163 -29 -330 -60 -461 -50 -210 -142 -459 -226 -608 -41 -72 -118
810
+ -180 -124 -174 -2 2 3 30 11 63 24 97 28 326 10 556 -29 373 -19 562 41 754
811
+ 48 155 116 277 225 410 41 49 296 304 306 305 1 0 -13 -30 -31 -67z m1873
812
+ -1008 c141 -208 279 -551 334 -830 22 -115 33 -208 56 -490 34 -398 58 -512
813
+ 152 -698 l50 -100 -44 32 c-203 149 -381 355 -478 556 -47 96 -101 257 -126
814
+ 380 -22 104 -26 414 -10 800 10 237 2 333 -34 443 l-19 57 35 -40 c20 -22 58
815
+ -71 84 -110z m-2545 4 l-36 -124 12 -455 c12 -454 12 -455 -10 -565 -86 -428
816
+ -308 -784 -592 -948 -25 -15 -48 -27 -52 -27 -3 0 6 20 19 44 14 25 38 80 54
817
+ 124 59 163 85 300 120 642 54 526 111 741 284 1075 62 120 223 371 233 362 1
818
+ -2 -13 -59 -32 -128z m4021 -1300 c279 -134 460 -727 481 -1573 l6 -239 -129
819
+ 67 c-420 220 -672 421 -837 664 -156 232 -194 461 -112 695 58 168 160 282
820
+ 330 370 99 51 115 57 155 52 25 -3 73 -19 106 -36z m-5413 16 c104 -27 176
821
+ -71 267 -164 136 -137 202 -292 204 -481 1 -114 -13 -177 -65 -289 -126 -271
822
+ -358 -500 -731 -719 -114 -68 -309 -172 -321 -172 -11 0 -3 339 14 560 46 617
823
+ 195 1021 454 1231 67 55 85 58 178 34z`,
824
+ ),
825
+ ],
826
+ [],
827
+ ),
828
+ ],
829
+ ),
830
+ ],
831
+ ),
832
+ ],
833
+ templateHash(template),
834
+ [],
835
+ );
836
+
837
+ assert.deepEqual(actual, expected);
838
+
839
+ const iterations = 1000;
840
+ let totalTime = 0;
841
+ for (let i = 0; i < iterations; i++) {
842
+ const start = performance.now();
843
+ Parser.parse(template);
844
+ const end = performance.now();
845
+ totalTime += end - start;
846
+ }
847
+ // eslint-disable-next-line no-console
848
+ console.log(`parse large svg (${iterations} iterations): ${totalTime / iterations}ms`);
849
+ });
850
+
851
+ it("parses any element as self-closing", () => {
852
+ const template = h`<div /><p>Hello</p>`;
853
+ const expected = new Template.Template(
854
+ [
855
+ new Template.ElementNode("div", [], []),
856
+ new Template.ElementNode("p", [], [new Template.TextNode("Hello")]),
857
+ ],
858
+ templateHash(template),
859
+ [],
860
+ );
861
+ const actual = Parser.parse(template);
862
+
863
+ expect(actual).toEqual(expected);
864
+ });
865
+
866
+ it("parses text-only elements with sparse text", () => {
867
+ const template = h`<textarea>${"foo"} ${"bar"}</textarea>`;
868
+ const fooPart = new Template.TextPartNode(0);
869
+ const barPart = new Template.TextPartNode(1);
870
+ const sparseText = new Template.SparseTextNode([fooPart, new Template.TextNode(" "), barPart]);
871
+ const textarea = new Template.TextOnlyElement("textarea", [], sparseText);
872
+ const expected = new Template.Template([textarea], templateHash(template), [[sparseText, [0]]]);
873
+ const actual = Parser.parse(template);
874
+
875
+ expect(actual).toEqual(expected);
876
+ });
877
+
878
+ it("parses public doctype", () => {
879
+ const template = h`<!DOCTYPE html PUBLIC "http://www.w3.org/TR/html5/strict.dtd">`;
880
+ const expected = new Template.Template(
881
+ [new Template.DocType("html", "http://www.w3.org/TR/html5/strict.dtd")],
882
+ templateHash(template),
883
+ [],
884
+ );
885
+ const actual = Parser.parse(template);
886
+
887
+ expect(actual).toEqual(expected);
888
+ });
889
+
890
+ it("parses system doctype", () => {
891
+ const template = h`<!DOCTYPE html SYSTEM "http://www.w3.org/TR/html5/strict.dtd">`;
892
+ const expected = new Template.Template(
893
+ [new Template.DocType("html", undefined, "http://www.w3.org/TR/html5/strict.dtd")],
894
+ templateHash(template),
895
+ [],
896
+ );
897
+ const actual = Parser.parse(template);
898
+
899
+ expect(actual).toEqual(expected);
900
+ });
901
+
902
+ it("parses public and system doctype", () => {
903
+ const template = h`<!DOCTYPE html PUBLIC "http://www.w3.org/TR/html5/strict.dtd" SYSTEM "http://www.w3.org/TR/html5/strict.dtd">`;
904
+ const expected = new Template.Template(
905
+ [
906
+ new Template.DocType(
907
+ "html",
908
+ "http://www.w3.org/TR/html5/strict.dtd",
909
+ "http://www.w3.org/TR/html5/strict.dtd",
910
+ ),
911
+ ],
912
+ templateHash(template),
913
+ [],
914
+ );
915
+ const actual = Parser.parse(template);
916
+
917
+ expect(actual).toEqual(expected);
918
+ });
919
+ });
920
+
921
+ function h<Values extends ReadonlyArray<any>>(template: TemplateStringsArray, ..._: Values) {
922
+ return template;
923
+ }