@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.
- package/README.md +121 -2
- package/dist/EventHandler.d.ts +273 -0
- package/dist/EventHandler.d.ts.map +1 -0
- package/dist/EventHandler.js +261 -0
- package/dist/EventSource.d.ts +82 -0
- package/dist/EventSource.d.ts.map +1 -0
- package/dist/EventSource.js +127 -0
- package/dist/Html.d.ts +122 -0
- package/dist/Html.d.ts.map +1 -0
- package/dist/Html.js +250 -0
- package/dist/HtmlChunk.d.ts +118 -0
- package/dist/HtmlChunk.d.ts.map +1 -0
- package/dist/HtmlChunk.js +211 -0
- package/dist/HydrateContext.d.ts +28 -0
- package/dist/HydrateContext.d.ts.map +1 -0
- package/dist/HydrateContext.js +25 -0
- package/dist/Parser.d.ts +35 -0
- package/dist/Parser.d.ts.map +1 -0
- package/dist/Parser.js +437 -0
- package/dist/Render.d.ts +195 -0
- package/dist/Render.d.ts.map +1 -0
- package/dist/Render.js +609 -0
- package/dist/RenderEvent.d.ts +179 -0
- package/dist/RenderEvent.d.ts.map +1 -0
- package/dist/RenderEvent.js +102 -0
- package/dist/RenderQueue.d.ts +167 -0
- package/dist/RenderQueue.d.ts.map +1 -0
- package/dist/RenderQueue.js +298 -0
- package/dist/RenderTemplate.d.ts +90 -0
- package/dist/RenderTemplate.d.ts.map +1 -0
- package/dist/RenderTemplate.js +87 -0
- package/dist/Renderable.d.ts +88 -0
- package/dist/Renderable.d.ts.map +1 -0
- package/dist/Renderable.js +3 -0
- package/dist/{dts/Template.d.ts → Template.d.ts} +109 -74
- package/dist/Template.d.ts.map +1 -0
- package/dist/{esm/Template.js → Template.js} +96 -56
- package/dist/Wire.d.ts +169 -0
- package/dist/Wire.d.ts.map +1 -0
- package/dist/Wire.js +217 -0
- package/dist/errors.d.ts +145 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +159 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/internal/IndexRefCounter.d.ts +11 -0
- package/dist/internal/IndexRefCounter.d.ts.map +1 -0
- package/dist/internal/IndexRefCounter.js +42 -0
- package/dist/internal/ParentChildNodes.d.ts +6 -0
- package/dist/internal/ParentChildNodes.d.ts.map +1 -0
- package/dist/internal/ParentChildNodes.js +1 -0
- package/dist/internal/PathStack.d.ts +9 -0
- package/dist/internal/PathStack.d.ts.map +1 -0
- package/dist/internal/PathStack.js +18 -0
- package/dist/internal/buildTemplateFragement.d.ts +3 -0
- package/dist/internal/buildTemplateFragement.d.ts.map +1 -0
- package/dist/internal/buildTemplateFragement.js +61 -0
- package/dist/internal/diff.d.ts +2 -0
- package/dist/internal/diff.d.ts.map +1 -0
- package/dist/internal/diff.js +119 -0
- package/dist/internal/dom.d.ts +45 -0
- package/dist/internal/dom.d.ts.map +1 -0
- package/dist/internal/dom.js +304 -0
- package/dist/internal/encoding.d.ts +7 -0
- package/dist/internal/encoding.d.ts.map +1 -0
- package/dist/internal/encoding.js +134 -0
- package/dist/{dts/internal/v2/hydration-template.d.ts → internal/hydration.d.ts} +10 -7
- package/dist/internal/hydration.d.ts.map +1 -0
- package/dist/{esm/internal/v2/hydration-template.js → internal/hydration.js} +80 -26
- package/dist/internal/keyToPartType.d.ts +2 -0
- package/dist/internal/keyToPartType.d.ts.map +1 -0
- package/dist/internal/keyToPartType.js +110 -0
- package/dist/internal/meta.d.ts +17 -0
- package/dist/internal/meta.d.ts.map +1 -0
- package/dist/internal/meta.js +14 -0
- package/dist/internal/takeOneIfNotRenderEvent.d.ts +4 -0
- package/dist/internal/takeOneIfNotRenderEvent.d.ts.map +1 -0
- package/dist/internal/takeOneIfNotRenderEvent.js +10 -0
- package/dist/internal/templateHash.d.ts +2 -0
- package/dist/internal/templateHash.d.ts.map +1 -0
- package/dist/internal/templateHash.js +14 -0
- package/dist/many.d.ts +68 -0
- package/dist/many.d.ts.map +1 -0
- package/dist/many.js +107 -0
- package/package.json +29 -227
- package/src/EventHandler.ts +318 -86
- package/src/EventSource.ts +202 -0
- package/src/Html.test.ts +490 -0
- package/src/Html.ts +292 -333
- package/src/HtmlChunk.ts +290 -332
- package/src/HydrateContext.ts +40 -0
- package/src/Hydration.test.ts +408 -0
- package/src/Parser.test.ts +923 -0
- package/src/Parser.ts +598 -10
- package/src/Render.test.ts +337 -0
- package/src/Render.ts +878 -63
- package/src/RenderEvent.ts +169 -40
- package/src/RenderQueue.ts +291 -385
- package/src/RenderTemplate.ts +98 -31
- package/src/Renderable.ts +122 -24
- package/src/Template.ts +246 -145
- package/src/Wire.ts +309 -0
- package/src/errors.ts +173 -0
- package/src/index.ts +14 -66
- package/src/internal/IndexRefCounter.ts +53 -0
- package/src/internal/ParentChildNodes.ts +7 -0
- package/src/internal/PathStack.ts +23 -0
- package/src/internal/buildTemplateFragement.ts +82 -0
- package/src/internal/diff.ts +127 -0
- package/src/internal/dom.ts +357 -0
- package/src/internal/encoding.ts +147 -0
- package/src/internal/hydration.ts +406 -0
- package/src/internal/keyToPartType.ts +113 -0
- package/src/internal/meta.ts +25 -0
- package/src/internal/takeOneIfNotRenderEvent.ts +19 -0
- package/src/internal/templateHash.ts +18 -0
- package/src/many.ts +148 -0
- package/Directive/package.json +0 -6
- package/ElementRef/package.json +0 -6
- package/ElementSource/package.json +0 -6
- package/Entry/package.json +0 -6
- package/EventHandler/package.json +0 -6
- package/Html/package.json +0 -6
- package/HtmlChunk/package.json +0 -6
- package/Hydrate/package.json +0 -6
- package/LICENSE +0 -21
- package/Many/package.json +0 -6
- package/Meta/package.json +0 -6
- package/Parser/package.json +0 -6
- package/Part/package.json +0 -6
- package/Placeholder/package.json +0 -6
- package/Platform/package.json +0 -6
- package/Render/package.json +0 -6
- package/RenderContext/package.json +0 -6
- package/RenderEvent/package.json +0 -6
- package/RenderQueue/package.json +0 -6
- package/RenderTemplate/package.json +0 -6
- package/Renderable/package.json +0 -6
- package/Template/package.json +0 -6
- package/Test/package.json +0 -6
- package/Vitest/package.json +0 -6
- package/compiler-tools/package.json +0 -6
- package/dist/cjs/Directive.js +0 -76
- package/dist/cjs/Directive.js.map +0 -1
- package/dist/cjs/ElementRef.js +0 -92
- package/dist/cjs/ElementRef.js.map +0 -1
- package/dist/cjs/ElementSource.js +0 -246
- package/dist/cjs/ElementSource.js.map +0 -1
- package/dist/cjs/Entry.js +0 -6
- package/dist/cjs/Entry.js.map +0 -1
- package/dist/cjs/EventHandler.js +0 -76
- package/dist/cjs/EventHandler.js.map +0 -1
- package/dist/cjs/Html.js +0 -224
- package/dist/cjs/Html.js.map +0 -1
- package/dist/cjs/HtmlChunk.js +0 -306
- package/dist/cjs/HtmlChunk.js.map +0 -1
- package/dist/cjs/Hydrate.js +0 -43
- package/dist/cjs/Hydrate.js.map +0 -1
- package/dist/cjs/Many.js +0 -66
- package/dist/cjs/Many.js.map +0 -1
- package/dist/cjs/Meta.js +0 -50
- package/dist/cjs/Meta.js.map +0 -1
- package/dist/cjs/Parser.js +0 -19
- package/dist/cjs/Parser.js.map +0 -1
- package/dist/cjs/Part.js +0 -6
- package/dist/cjs/Part.js.map +0 -1
- package/dist/cjs/Placeholder.js +0 -34
- package/dist/cjs/Placeholder.js.map +0 -1
- package/dist/cjs/Platform.js +0 -65
- package/dist/cjs/Platform.js.map +0 -1
- package/dist/cjs/Render.js +0 -50
- package/dist/cjs/Render.js.map +0 -1
- package/dist/cjs/RenderContext.js +0 -67
- package/dist/cjs/RenderContext.js.map +0 -1
- package/dist/cjs/RenderEvent.js +0 -52
- package/dist/cjs/RenderEvent.js.map +0 -1
- package/dist/cjs/RenderQueue.js +0 -343
- package/dist/cjs/RenderQueue.js.map +0 -1
- package/dist/cjs/RenderTemplate.js +0 -26
- package/dist/cjs/RenderTemplate.js.map +0 -1
- package/dist/cjs/Renderable.js +0 -6
- package/dist/cjs/Renderable.js.map +0 -1
- package/dist/cjs/Template.js +0 -305
- package/dist/cjs/Template.js.map +0 -1
- package/dist/cjs/Test.js +0 -184
- package/dist/cjs/Test.js.map +0 -1
- package/dist/cjs/Vitest.js +0 -52
- package/dist/cjs/Vitest.js.map +0 -1
- package/dist/cjs/compiler-tools.js +0 -100
- package/dist/cjs/compiler-tools.js.map +0 -1
- package/dist/cjs/index.js +0 -138
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/internal/EventSource.js +0 -129
- package/dist/cjs/internal/EventSource.js.map +0 -1
- package/dist/cjs/internal/HydrateContext.js +0 -13
- package/dist/cjs/internal/HydrateContext.js.map +0 -1
- package/dist/cjs/internal/browser.js +0 -110
- package/dist/cjs/internal/browser.js.map +0 -1
- package/dist/cjs/internal/character-entities.js +0 -2141
- package/dist/cjs/internal/character-entities.js.map +0 -1
- package/dist/cjs/internal/chunks.js +0 -68
- package/dist/cjs/internal/chunks.js.map +0 -1
- package/dist/cjs/internal/errors.js +0 -52
- package/dist/cjs/internal/errors.js.map +0 -1
- package/dist/cjs/internal/indexRefCounter.js +0 -52
- package/dist/cjs/internal/indexRefCounter.js.map +0 -1
- package/dist/cjs/internal/module-augmentation.js +0 -6
- package/dist/cjs/internal/module-augmentation.js.map +0 -1
- package/dist/cjs/internal/parser.js +0 -568
- package/dist/cjs/internal/parser.js.map +0 -1
- package/dist/cjs/internal/parser2.js +0 -382
- package/dist/cjs/internal/parser2.js.map +0 -1
- package/dist/cjs/internal/server-parts.js +0 -124
- package/dist/cjs/internal/server-parts.js.map +0 -1
- package/dist/cjs/internal/server.js +0 -48
- package/dist/cjs/internal/server.js.map +0 -1
- package/dist/cjs/internal/utils.js +0 -136
- package/dist/cjs/internal/utils.js.map +0 -1
- package/dist/cjs/internal/v2/SyncPart.js +0 -6
- package/dist/cjs/internal/v2/SyncPart.js.map +0 -1
- package/dist/cjs/internal/v2/helpers.js +0 -15
- package/dist/cjs/internal/v2/helpers.js.map +0 -1
- package/dist/cjs/internal/v2/hydration-template.js +0 -269
- package/dist/cjs/internal/v2/hydration-template.js.map +0 -1
- package/dist/cjs/internal/v2/parts.js +0 -169
- package/dist/cjs/internal/v2/parts.js.map +0 -1
- package/dist/cjs/internal/v2/render-entry.js +0 -110
- package/dist/cjs/internal/v2/render-entry.js.map +0 -1
- package/dist/cjs/internal/v2/render-sync-parts.js +0 -318
- package/dist/cjs/internal/v2/render-sync-parts.js.map +0 -1
- package/dist/cjs/internal/v2/render.js +0 -592
- package/dist/cjs/internal/v2/render.js.map +0 -1
- package/dist/cjs/internal/v2/sync-parts.js +0 -115
- package/dist/cjs/internal/v2/sync-parts.js.map +0 -1
- package/dist/dts/Directive.d.ts +0 -70
- package/dist/dts/Directive.d.ts.map +0 -1
- package/dist/dts/ElementRef.d.ts +0 -42
- package/dist/dts/ElementRef.d.ts.map +0 -1
- package/dist/dts/ElementSource.d.ts +0 -79
- package/dist/dts/ElementSource.d.ts.map +0 -1
- package/dist/dts/Entry.d.ts +0 -26
- package/dist/dts/Entry.d.ts.map +0 -1
- package/dist/dts/EventHandler.d.ts +0 -73
- package/dist/dts/EventHandler.d.ts.map +0 -1
- package/dist/dts/Html.d.ts +0 -35
- package/dist/dts/Html.d.ts.map +0 -1
- package/dist/dts/HtmlChunk.d.ts +0 -56
- package/dist/dts/HtmlChunk.d.ts.map +0 -1
- package/dist/dts/Hydrate.d.ts +0 -19
- package/dist/dts/Hydrate.d.ts.map +0 -1
- package/dist/dts/Many.d.ts +0 -32
- package/dist/dts/Many.d.ts.map +0 -1
- package/dist/dts/Meta.d.ts +0 -33
- package/dist/dts/Meta.d.ts.map +0 -1
- package/dist/dts/Parser.d.ts +0 -13
- package/dist/dts/Parser.d.ts.map +0 -1
- package/dist/dts/Part.d.ts +0 -121
- package/dist/dts/Part.d.ts.map +0 -1
- package/dist/dts/Placeholder.d.ts +0 -48
- package/dist/dts/Placeholder.d.ts.map +0 -1
- package/dist/dts/Platform.d.ts +0 -21
- package/dist/dts/Platform.d.ts.map +0 -1
- package/dist/dts/Render.d.ts +0 -31
- package/dist/dts/Render.d.ts.map +0 -1
- package/dist/dts/RenderContext.d.ts +0 -70
- package/dist/dts/RenderContext.d.ts.map +0 -1
- package/dist/dts/RenderEvent.d.ts +0 -42
- package/dist/dts/RenderEvent.d.ts.map +0 -1
- package/dist/dts/RenderQueue.d.ts +0 -103
- package/dist/dts/RenderQueue.d.ts.map +0 -1
- package/dist/dts/RenderTemplate.d.ts +0 -25
- package/dist/dts/RenderTemplate.d.ts.map +0 -1
- package/dist/dts/Renderable.d.ts +0 -28
- package/dist/dts/Renderable.d.ts.map +0 -1
- package/dist/dts/Template.d.ts.map +0 -1
- package/dist/dts/Test.d.ts +0 -85
- package/dist/dts/Test.d.ts.map +0 -1
- package/dist/dts/Vitest.d.ts +0 -43
- package/dist/dts/Vitest.d.ts.map +0 -1
- package/dist/dts/compiler-tools.d.ts +0 -143
- package/dist/dts/compiler-tools.d.ts.map +0 -1
- package/dist/dts/index.d.ts +0 -65
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/dts/internal/EventSource.d.ts +0 -13
- package/dist/dts/internal/EventSource.d.ts.map +0 -1
- package/dist/dts/internal/HydrateContext.d.ts +0 -2
- package/dist/dts/internal/HydrateContext.d.ts.map +0 -1
- package/dist/dts/internal/browser.d.ts +0 -8
- package/dist/dts/internal/browser.d.ts.map +0 -1
- package/dist/dts/internal/character-entities.d.ts +0 -2133
- package/dist/dts/internal/character-entities.d.ts.map +0 -1
- package/dist/dts/internal/chunks.d.ts +0 -23
- package/dist/dts/internal/chunks.d.ts.map +0 -1
- package/dist/dts/internal/errors.d.ts +0 -22
- package/dist/dts/internal/errors.d.ts.map +0 -1
- package/dist/dts/internal/indexRefCounter.d.ts +0 -7
- package/dist/dts/internal/indexRefCounter.d.ts.map +0 -1
- package/dist/dts/internal/module-augmentation.d.ts +0 -32
- package/dist/dts/internal/module-augmentation.d.ts.map +0 -1
- package/dist/dts/internal/parser.d.ts +0 -33
- package/dist/dts/internal/parser.d.ts.map +0 -1
- package/dist/dts/internal/parser2.d.ts +0 -12
- package/dist/dts/internal/parser2.d.ts.map +0 -1
- package/dist/dts/internal/server-parts.d.ts +0 -223
- package/dist/dts/internal/server-parts.d.ts.map +0 -1
- package/dist/dts/internal/server.d.ts +0 -5
- package/dist/dts/internal/server.d.ts.map +0 -1
- package/dist/dts/internal/utils.d.ts +0 -19
- package/dist/dts/internal/utils.d.ts.map +0 -1
- package/dist/dts/internal/v2/SyncPart.d.ts +0 -87
- package/dist/dts/internal/v2/SyncPart.d.ts.map +0 -1
- package/dist/dts/internal/v2/helpers.d.ts +0 -3
- package/dist/dts/internal/v2/helpers.d.ts.map +0 -1
- package/dist/dts/internal/v2/hydration-template.d.ts.map +0 -1
- package/dist/dts/internal/v2/parts.d.ts +0 -245
- package/dist/dts/internal/v2/parts.d.ts.map +0 -1
- package/dist/dts/internal/v2/render-entry.d.ts +0 -6
- package/dist/dts/internal/v2/render-entry.d.ts.map +0 -1
- package/dist/dts/internal/v2/render-sync-parts.d.ts +0 -22
- package/dist/dts/internal/v2/render-sync-parts.d.ts.map +0 -1
- package/dist/dts/internal/v2/render.d.ts +0 -83
- package/dist/dts/internal/v2/render.d.ts.map +0 -1
- package/dist/dts/internal/v2/sync-parts.d.ts +0 -129
- package/dist/dts/internal/v2/sync-parts.d.ts.map +0 -1
- package/dist/esm/Directive.js +0 -64
- package/dist/esm/Directive.js.map +0 -1
- package/dist/esm/ElementRef.js +0 -76
- package/dist/esm/ElementRef.js.map +0 -1
- package/dist/esm/ElementSource.js +0 -246
- package/dist/esm/ElementSource.js.map +0 -1
- package/dist/esm/Entry.js +0 -2
- package/dist/esm/Entry.js.map +0 -1
- package/dist/esm/EventHandler.js +0 -68
- package/dist/esm/EventHandler.js.map +0 -1
- package/dist/esm/Html.js +0 -230
- package/dist/esm/Html.js.map +0 -1
- package/dist/esm/HtmlChunk.js +0 -330
- package/dist/esm/HtmlChunk.js.map +0 -1
- package/dist/esm/Hydrate.js +0 -31
- package/dist/esm/Hydrate.js.map +0 -1
- package/dist/esm/Many.js +0 -54
- package/dist/esm/Many.js.map +0 -1
- package/dist/esm/Meta.js +0 -40
- package/dist/esm/Meta.js.map +0 -1
- package/dist/esm/Parser.js +0 -13
- package/dist/esm/Parser.js.map +0 -1
- package/dist/esm/Part.js +0 -5
- package/dist/esm/Part.js.map +0 -1
- package/dist/esm/Placeholder.js +0 -26
- package/dist/esm/Placeholder.js.map +0 -1
- package/dist/esm/Platform.js +0 -42
- package/dist/esm/Platform.js.map +0 -1
- package/dist/esm/Render.js +0 -36
- package/dist/esm/Render.js.map +0 -1
- package/dist/esm/RenderContext.js +0 -54
- package/dist/esm/RenderContext.js.map +0 -1
- package/dist/esm/RenderEvent.js +0 -43
- package/dist/esm/RenderEvent.js.map +0 -1
- package/dist/esm/RenderQueue.js +0 -338
- package/dist/esm/RenderQueue.js.map +0 -1
- package/dist/esm/RenderTemplate.js +0 -16
- package/dist/esm/RenderTemplate.js.map +0 -1
- package/dist/esm/Renderable.js +0 -2
- package/dist/esm/Renderable.js.map +0 -1
- package/dist/esm/Template.js.map +0 -1
- package/dist/esm/Test.js +0 -167
- package/dist/esm/Test.js.map +0 -1
- package/dist/esm/Vitest.js +0 -44
- package/dist/esm/Vitest.js.map +0 -1
- package/dist/esm/compiler-tools.js +0 -91
- package/dist/esm/compiler-tools.js.map +0 -1
- package/dist/esm/index.js +0 -65
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/internal/EventSource.js +0 -126
- package/dist/esm/internal/EventSource.js.map +0 -1
- package/dist/esm/internal/HydrateContext.js +0 -7
- package/dist/esm/internal/HydrateContext.js.map +0 -1
- package/dist/esm/internal/browser.js +0 -103
- package/dist/esm/internal/browser.js.map +0 -1
- package/dist/esm/internal/character-entities.js +0 -2134
- package/dist/esm/internal/character-entities.js.map +0 -1
- package/dist/esm/internal/chunks.js +0 -60
- package/dist/esm/internal/chunks.js.map +0 -1
- package/dist/esm/internal/errors.js +0 -46
- package/dist/esm/internal/errors.js.map +0 -1
- package/dist/esm/internal/indexRefCounter.js +0 -47
- package/dist/esm/internal/indexRefCounter.js.map +0 -1
- package/dist/esm/internal/module-augmentation.js +0 -2
- package/dist/esm/internal/module-augmentation.js.map +0 -1
- package/dist/esm/internal/parser.js +0 -596
- package/dist/esm/internal/parser.js.map +0 -1
- package/dist/esm/internal/parser2.js +0 -393
- package/dist/esm/internal/parser2.js.map +0 -1
- package/dist/esm/internal/server-parts.js +0 -109
- package/dist/esm/internal/server-parts.js.map +0 -1
- package/dist/esm/internal/server.js +0 -22
- package/dist/esm/internal/server.js.map +0 -1
- package/dist/esm/internal/utils.js +0 -119
- package/dist/esm/internal/utils.js.map +0 -1
- package/dist/esm/internal/v2/SyncPart.js +0 -5
- package/dist/esm/internal/v2/SyncPart.js.map +0 -1
- package/dist/esm/internal/v2/helpers.js +0 -12
- package/dist/esm/internal/v2/helpers.js.map +0 -1
- package/dist/esm/internal/v2/hydration-template.js.map +0 -1
- package/dist/esm/internal/v2/parts.js +0 -150
- package/dist/esm/internal/v2/parts.js.map +0 -1
- package/dist/esm/internal/v2/render-entry.js +0 -102
- package/dist/esm/internal/v2/render-entry.js.map +0 -1
- package/dist/esm/internal/v2/render-sync-parts.js +0 -265
- package/dist/esm/internal/v2/render-sync-parts.js.map +0 -1
- package/dist/esm/internal/v2/render.js +0 -521
- package/dist/esm/internal/v2/render.js.map +0 -1
- package/dist/esm/internal/v2/sync-parts.js +0 -102
- package/dist/esm/internal/v2/sync-parts.js.map +0 -1
- package/dist/esm/package.json +0 -4
- package/src/Directive.ts +0 -114
- package/src/ElementRef.ts +0 -148
- package/src/ElementSource.ts +0 -510
- package/src/Entry.ts +0 -28
- package/src/Hydrate.ts +0 -51
- package/src/Many.ts +0 -161
- package/src/Meta.ts +0 -45
- package/src/Part.ts +0 -154
- package/src/Placeholder.ts +0 -78
- package/src/Platform.ts +0 -70
- package/src/RenderContext.ts +0 -121
- package/src/Test.ts +0 -354
- package/src/Vitest.ts +0 -141
- package/src/compiler-tools.ts +0 -250
- package/src/internal/EventSource.ts +0 -188
- package/src/internal/HydrateContext.ts +0 -22
- package/src/internal/browser.ts +0 -138
- package/src/internal/character-entities.ts +0 -2136
- package/src/internal/chunks.ts +0 -89
- package/src/internal/errors.ts +0 -49
- package/src/internal/external.d.ts +0 -11
- package/src/internal/indexRefCounter.ts +0 -54
- package/src/internal/module-augmentation.ts +0 -44
- package/src/internal/parser.ts +0 -757
- package/src/internal/parser2.ts +0 -468
- package/src/internal/server-parts.ts +0 -161
- package/src/internal/server.ts +0 -37
- package/src/internal/utils.ts +0 -153
- package/src/internal/v2/SyncPart.ts +0 -112
- package/src/internal/v2/helpers.ts +0 -13
- package/src/internal/v2/hydration-template.ts +0 -308
- package/src/internal/v2/parts.ts +0 -254
- package/src/internal/v2/render-entry.ts +0 -131
- package/src/internal/v2/render-sync-parts.ts +0 -440
- package/src/internal/v2/render.ts +0 -813
- 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
|
+
}
|