@typed/template 0.13.0 → 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -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 +297 -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 +22 -223
- 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 +409 -0
- package/src/Parser.test.ts +924 -0
- package/src/Parser.ts +598 -10
- package/src/Render.test.ts +338 -0
- package/src/Render.ts +878 -63
- package/src/RenderEvent.ts +169 -40
- package/src/RenderQueue.ts +290 -383
- 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/tsconfig.json +6 -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 -242
- 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 -66
- 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 -341
- 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 -77
- 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 -240
- 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 -43
- 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 -336
- 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 -126
- package/src/ElementSource.ts +0 -432
- 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 -71
- 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,406 @@
|
|
|
1
|
+
import { type Inspectable, NodeInspectSymbol } from "effect/Inspectable";
|
|
2
|
+
import { CouldNotFindRootElement, CouldNotFindTemplateEndError } from "../errors.js";
|
|
3
|
+
import type { HydrateContext } from "../HydrateContext.js";
|
|
4
|
+
import { isComment, isElement, toHtml } from "../Wire.js";
|
|
5
|
+
|
|
6
|
+
const TYPED_TEMPLATE_PREFIX = `t_`;
|
|
7
|
+
const TYPED_TEMPLATE_END_PREFIX = `/t_`;
|
|
8
|
+
const MANY_PREFIX = `/m_`;
|
|
9
|
+
const HOLE_PREFIX = `n_`;
|
|
10
|
+
|
|
11
|
+
export function getRendered(where: HydrationNode) {
|
|
12
|
+
const nodes = getNodes(where);
|
|
13
|
+
if (nodes.length === 1) return nodes[0];
|
|
14
|
+
return nodes;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function findHydrationTemplateByHash(
|
|
18
|
+
hydrateCtx: HydrateContext,
|
|
19
|
+
hash: string,
|
|
20
|
+
): HydrationTemplate | null {
|
|
21
|
+
// If there is not a manyKey, we can just find the template by its hash
|
|
22
|
+
if (hydrateCtx.manyKey === undefined) {
|
|
23
|
+
return findHydrationTemplate(getChildNodes(hydrateCtx.where), hash);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// If there is a manyKey, we need to find the many node first
|
|
27
|
+
const many = findHydrationMany(getChildNodes(hydrateCtx.where), hydrateCtx.manyKey);
|
|
28
|
+
|
|
29
|
+
if (many === null) return null;
|
|
30
|
+
|
|
31
|
+
// Then we can find the template by its hash
|
|
32
|
+
return findHydrationTemplate(getChildNodes(many), hash);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function getHydrationRoot(root: HTMLElement): HydrationElement {
|
|
36
|
+
const childNodes = Array.from(root.childNodes);
|
|
37
|
+
let hydrationNodes = getHydrationNodes(childNodes);
|
|
38
|
+
|
|
39
|
+
// If your whole template is wrapped in a single hole, unwrap it.
|
|
40
|
+
if (hydrationNodes.length === 1 && hydrationNodes[0]._tag === "hole") {
|
|
41
|
+
hydrationNodes = getChildNodes(hydrationNodes[0]);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return new HydrationElement(root, hydrationNodes);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function getHydrationNodes(nodes: Array<Node>): Array<HydrationNode> {
|
|
48
|
+
const out: Array<HydrationNode> = [];
|
|
49
|
+
|
|
50
|
+
for (let i = 0; i < nodes.length; ++i) {
|
|
51
|
+
const node = nodes[i];
|
|
52
|
+
if (isComment(node)) {
|
|
53
|
+
if (node.data.startsWith(TYPED_TEMPLATE_PREFIX)) {
|
|
54
|
+
const hash = node.data.slice(TYPED_TEMPLATE_PREFIX.length);
|
|
55
|
+
const endIndex = getTemplateEndIndex(nodes, i, hash);
|
|
56
|
+
const childNodes = nodes.slice(i + 1, endIndex);
|
|
57
|
+
|
|
58
|
+
out.push(new HydrationTemplate(hash, getHydrationNodes(childNodes)));
|
|
59
|
+
|
|
60
|
+
i = endIndex;
|
|
61
|
+
} else if (node.data.startsWith(MANY_PREFIX)) {
|
|
62
|
+
const last = out.pop();
|
|
63
|
+
out.push(new HydrationMany(node.data.slice(MANY_PREFIX.length), node, last ? [last] : []));
|
|
64
|
+
} else if (node.data.startsWith(HOLE_PREFIX)) {
|
|
65
|
+
const index = parseInt(node.data.slice(HOLE_PREFIX.length), 10);
|
|
66
|
+
const endIndex = getHoleEndIndex(nodes, i, index);
|
|
67
|
+
const endComment = nodes[endIndex] as Comment;
|
|
68
|
+
out.push(
|
|
69
|
+
new HydrationHole(
|
|
70
|
+
index,
|
|
71
|
+
node,
|
|
72
|
+
endComment,
|
|
73
|
+
getHydrationNodes(nodes.slice(i + 1, endIndex)),
|
|
74
|
+
),
|
|
75
|
+
);
|
|
76
|
+
i = endIndex;
|
|
77
|
+
} else {
|
|
78
|
+
out.push(new HydrationLiteral(node));
|
|
79
|
+
}
|
|
80
|
+
} else if (isElement(node)) {
|
|
81
|
+
out.push(new HydrationElement(node, getHydrationNodes(Array.from(node.childNodes))));
|
|
82
|
+
} else {
|
|
83
|
+
out.push(new HydrationLiteral(node));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function getTemplateEndIndex(nodes: Array<Node>, start: number, hash: string): number {
|
|
91
|
+
const endHash = TYPED_TEMPLATE_END_PREFIX + hash;
|
|
92
|
+
|
|
93
|
+
for (let i = start; i < nodes.length; ++i) {
|
|
94
|
+
const node = nodes[i];
|
|
95
|
+
|
|
96
|
+
if (isComment(node) && node.data === endHash) {
|
|
97
|
+
return i;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
throw new CouldNotFindTemplateEndError(hash);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function getHoleEndIndex(nodes: Array<Node>, start: number, index: number): number {
|
|
105
|
+
const endHash = `/${HOLE_PREFIX}${index}`;
|
|
106
|
+
|
|
107
|
+
let templateDepth = 0;
|
|
108
|
+
|
|
109
|
+
for (let i = start; i < nodes.length; ++i) {
|
|
110
|
+
const node = nodes[i];
|
|
111
|
+
|
|
112
|
+
if (isComment(node)) {
|
|
113
|
+
if (templateDepth === 0 && node.data === endHash) return i;
|
|
114
|
+
else if (node.data.startsWith(TYPED_TEMPLATE_PREFIX)) templateDepth++;
|
|
115
|
+
else if (node.data.startsWith(TYPED_TEMPLATE_END_PREFIX)) templateDepth--;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
throw new CouldNotFindRootElement(index);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export class HydrationElement implements Inspectable {
|
|
123
|
+
readonly _tag = "element" as const;
|
|
124
|
+
|
|
125
|
+
readonly parentNode: Element;
|
|
126
|
+
readonly childNodes: Array<HydrationNode>;
|
|
127
|
+
|
|
128
|
+
constructor(parentNode: Element, childNodes: Array<HydrationNode>) {
|
|
129
|
+
this.parentNode = parentNode;
|
|
130
|
+
this.childNodes = childNodes;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
toJSON(): unknown {
|
|
134
|
+
return {
|
|
135
|
+
_tag: this._tag,
|
|
136
|
+
parentNode: toHtml(this.parentNode),
|
|
137
|
+
childNodes: this.childNodes.map((n) => n.toJSON()),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
[NodeInspectSymbol]() {
|
|
142
|
+
return JSON.stringify(this.toJSON(), null, 2);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export class HydrationTemplate implements Inspectable {
|
|
147
|
+
readonly _tag = "template" as const;
|
|
148
|
+
|
|
149
|
+
readonly hash: string;
|
|
150
|
+
readonly childNodes: Array<HydrationNode>;
|
|
151
|
+
|
|
152
|
+
constructor(hash: string, childNodes: Array<HydrationNode>) {
|
|
153
|
+
this.hash = hash;
|
|
154
|
+
this.childNodes = childNodes;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
toJSON(): unknown {
|
|
158
|
+
return {
|
|
159
|
+
_tag: this._tag,
|
|
160
|
+
hash: this.hash,
|
|
161
|
+
childNodes: this.childNodes.map((n) => n.toJSON()),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
[NodeInspectSymbol]() {
|
|
166
|
+
return JSON.stringify(this.toJSON(), null, 2);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export type HydrationNode =
|
|
171
|
+
| HydrationElement
|
|
172
|
+
| HydrationTemplate
|
|
173
|
+
| HydrationMany
|
|
174
|
+
| HydrationHole
|
|
175
|
+
| HydrationLiteral;
|
|
176
|
+
|
|
177
|
+
export class HydrationMany implements Inspectable {
|
|
178
|
+
readonly _tag = "many" as const;
|
|
179
|
+
|
|
180
|
+
readonly key: string;
|
|
181
|
+
readonly comment: Comment;
|
|
182
|
+
readonly childNodes: Array<HydrationNode>;
|
|
183
|
+
|
|
184
|
+
constructor(key: string, comment: Comment, childNodes: Array<HydrationNode>) {
|
|
185
|
+
this.key = key;
|
|
186
|
+
this.comment = comment;
|
|
187
|
+
this.childNodes = childNodes;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
toJSON(): unknown {
|
|
191
|
+
return {
|
|
192
|
+
_tag: this._tag,
|
|
193
|
+
key: this.key,
|
|
194
|
+
childNodes: this.childNodes.map((n) => n.toJSON()),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
[NodeInspectSymbol]() {
|
|
199
|
+
return JSON.stringify(this.toJSON(), null, 2);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export class HydrationHole implements Inspectable {
|
|
204
|
+
readonly _tag = "hole" as const;
|
|
205
|
+
|
|
206
|
+
readonly index: number;
|
|
207
|
+
readonly startComment: Comment;
|
|
208
|
+
readonly endComment: Comment;
|
|
209
|
+
readonly childNodes: Array<HydrationNode>;
|
|
210
|
+
|
|
211
|
+
constructor(
|
|
212
|
+
index: number,
|
|
213
|
+
startComment: Comment,
|
|
214
|
+
endComment: Comment,
|
|
215
|
+
childNodes: Array<HydrationNode>,
|
|
216
|
+
) {
|
|
217
|
+
this.index = index;
|
|
218
|
+
this.startComment = startComment;
|
|
219
|
+
this.endComment = endComment;
|
|
220
|
+
this.childNodes = childNodes;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
toJSON(): unknown {
|
|
224
|
+
return {
|
|
225
|
+
_tag: this._tag,
|
|
226
|
+
index: this.index,
|
|
227
|
+
childNodes: this.childNodes.map((n) => n.toJSON()),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
[NodeInspectSymbol]() {
|
|
232
|
+
return JSON.stringify(this.toJSON(), null, 2);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export class HydrationLiteral implements Inspectable {
|
|
237
|
+
readonly _tag = "literal" as const;
|
|
238
|
+
|
|
239
|
+
readonly node: Node;
|
|
240
|
+
|
|
241
|
+
constructor(node: Node) {
|
|
242
|
+
this.node = node;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
toJSON(): unknown {
|
|
246
|
+
return {
|
|
247
|
+
_tag: this._tag,
|
|
248
|
+
node: toHtml(this.node),
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
[NodeInspectSymbol]() {
|
|
253
|
+
return JSON.stringify(this.toJSON(), null, 2);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export function getChildNodes(node: HydrationNode): Array<HydrationNode> {
|
|
258
|
+
switch (node._tag) {
|
|
259
|
+
case "literal":
|
|
260
|
+
return [];
|
|
261
|
+
case "hole":
|
|
262
|
+
case "element":
|
|
263
|
+
case "template":
|
|
264
|
+
case "many":
|
|
265
|
+
return node.childNodes;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
export function findHydrationTemplate(
|
|
270
|
+
nodes: Array<HydrationNode>,
|
|
271
|
+
templateHash: string,
|
|
272
|
+
): HydrationTemplate | null {
|
|
273
|
+
let index = 0;
|
|
274
|
+
const toProcess: Array<HydrationNode> = [...nodes];
|
|
275
|
+
|
|
276
|
+
while (index < toProcess.length) {
|
|
277
|
+
const node = toProcess[index++];
|
|
278
|
+
|
|
279
|
+
if (node._tag === "template" && node.hash === templateHash) {
|
|
280
|
+
return node;
|
|
281
|
+
} else if (node._tag === "element") {
|
|
282
|
+
const childNodes = node.childNodes;
|
|
283
|
+
for (let i = 0; i < childNodes.length; i++) {
|
|
284
|
+
toProcess.push(childNodes[i]);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
export function findHydrationMany(nodes: Array<HydrationNode>, key: string): HydrationMany | null {
|
|
293
|
+
for (let i = 0; i < nodes.length; ++i) {
|
|
294
|
+
const node = nodes[i];
|
|
295
|
+
if (node._tag === "many" && node.key === key) {
|
|
296
|
+
return node;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export function findHydrationHole(
|
|
304
|
+
nodes: Array<HydrationNode>,
|
|
305
|
+
index: number,
|
|
306
|
+
): HydrationHole | null {
|
|
307
|
+
for (const node of nodes) {
|
|
308
|
+
if (node._tag === "hole" && node.index === index) {
|
|
309
|
+
return node;
|
|
310
|
+
} else if (node._tag === "element") {
|
|
311
|
+
const found = findHydrationHole(node.childNodes, index);
|
|
312
|
+
if (found !== null) {
|
|
313
|
+
return found;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return null;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
export function findHydrationNode(
|
|
322
|
+
node: HydrationNode,
|
|
323
|
+
index: number,
|
|
324
|
+
manyKey?: string,
|
|
325
|
+
): HydrationHole | HydrationMany | null {
|
|
326
|
+
const childNodes = getChildNodes(node);
|
|
327
|
+
const found =
|
|
328
|
+
manyKey === undefined
|
|
329
|
+
? findHydrationHole(childNodes, index)
|
|
330
|
+
: findHydrationMany(childNodes, manyKey);
|
|
331
|
+
|
|
332
|
+
return found;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
export function getNodes(node: HydrationNode): Array<Node> {
|
|
336
|
+
switch (node._tag) {
|
|
337
|
+
case "element":
|
|
338
|
+
return [node.parentNode];
|
|
339
|
+
case "literal":
|
|
340
|
+
return [node.node];
|
|
341
|
+
case "hole":
|
|
342
|
+
return [node.startComment, ...node.childNodes.flatMap(getNodes), node.endComment];
|
|
343
|
+
case "many":
|
|
344
|
+
return [...node.childNodes.flatMap(getNodes), node.comment];
|
|
345
|
+
case "template":
|
|
346
|
+
return node.childNodes.flatMap(getNodes);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export function getNodesExcludingStartComment(node: HydrationNode): Array<Node> {
|
|
351
|
+
switch (node._tag) {
|
|
352
|
+
case "element":
|
|
353
|
+
return [node.parentNode];
|
|
354
|
+
case "literal":
|
|
355
|
+
return [node.node];
|
|
356
|
+
case "hole":
|
|
357
|
+
return [...node.childNodes.flatMap(getNodesExcludingStartComment), node.endComment];
|
|
358
|
+
case "many":
|
|
359
|
+
return [...node.childNodes.flatMap(getNodesExcludingStartComment), node.comment];
|
|
360
|
+
case "template":
|
|
361
|
+
return node.childNodes.flatMap(getNodesExcludingStartComment);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
export const findHydratePath = (node: HydrationNode, path: ReadonlyArray<number>): Node => {
|
|
366
|
+
if (path.length === 0) {
|
|
367
|
+
return getNodesExcludingStartComment(node)[0];
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// Get initial node without creating full array if possible
|
|
371
|
+
let current: Node;
|
|
372
|
+
const firstIndex = path[0];
|
|
373
|
+
if (node._tag === "element") {
|
|
374
|
+
current = node.parentNode;
|
|
375
|
+
} else if (node._tag === "literal") {
|
|
376
|
+
current = node.node;
|
|
377
|
+
} else {
|
|
378
|
+
// For holes, templates, many - need to get nodes array
|
|
379
|
+
const nodes = getNodesExcludingStartComment(node);
|
|
380
|
+
current = nodes[firstIndex];
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// Traverse remaining path indices
|
|
384
|
+
for (let i = 1; i < path.length; i++) {
|
|
385
|
+
const index = path[i];
|
|
386
|
+
// Use secondary index to skip start comments without creating intermediate arrays
|
|
387
|
+
let targetIndex = 0;
|
|
388
|
+
|
|
389
|
+
for (let j = 0; j < current.childNodes.length; j++) {
|
|
390
|
+
const child = current.childNodes[j];
|
|
391
|
+
if (isNotStartComment(child)) {
|
|
392
|
+
if (targetIndex === index) {
|
|
393
|
+
current = child;
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
targetIndex++;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
return current;
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
function isNotStartComment(node: Node) {
|
|
405
|
+
return !isComment(node) || !node.data.startsWith("n_");
|
|
406
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
function getCodePoints(str: string) {
|
|
2
|
+
return Array.from(str, (c) => c.codePointAt(0)!);
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
// Pre-computed character codes for fast comparisons
|
|
6
|
+
const CHAR_CODES = {
|
|
7
|
+
QUESTION: "?".codePointAt(0)!,
|
|
8
|
+
DOT: ".".codePointAt(0)!,
|
|
9
|
+
AT: "@".codePointAt(0)!,
|
|
10
|
+
LOWERCASE_O: "o".codePointAt(0)!,
|
|
11
|
+
LOWERCASE_N: "n".codePointAt(0)!,
|
|
12
|
+
UPPERCASE_A: "A".codePointAt(0)!,
|
|
13
|
+
UPPERCASE_Z: "Z".codePointAt(0)!,
|
|
14
|
+
CASE_OFFSET: "a".codePointAt(0)! - "A".codePointAt(0)!,
|
|
15
|
+
} as const;
|
|
16
|
+
|
|
17
|
+
// Pre-computed string patterns for exact matches
|
|
18
|
+
const PATTERNS = {
|
|
19
|
+
REF: getCodePoints("ref"),
|
|
20
|
+
CLASS: getCodePoints("class"),
|
|
21
|
+
CLASSNAME: getCodePoints("classname"),
|
|
22
|
+
|
|
23
|
+
DATA: getCodePoints(".data"),
|
|
24
|
+
PROPS: getCodePoints(".props"),
|
|
25
|
+
PROPERTIES: getCodePoints(".properties"),
|
|
26
|
+
} as const;
|
|
27
|
+
|
|
28
|
+
const NAMES = {
|
|
29
|
+
ATTR: "attr",
|
|
30
|
+
BOOLEAN: "boolean",
|
|
31
|
+
REF: "ref",
|
|
32
|
+
CLASS: "class",
|
|
33
|
+
DATA: "data",
|
|
34
|
+
EVENT: "event",
|
|
35
|
+
PROPERTY: "property",
|
|
36
|
+
PROPERTIES: "properties",
|
|
37
|
+
} as const;
|
|
38
|
+
|
|
39
|
+
const NAME_TUPLE = {
|
|
40
|
+
DATA: [NAMES.DATA],
|
|
41
|
+
PROPERTIES: [NAMES.PROPERTIES],
|
|
42
|
+
REF: [NAMES.REF],
|
|
43
|
+
CLASS: [NAMES.CLASS],
|
|
44
|
+
|
|
45
|
+
BOOLEAN: (key: string) => [NAMES.BOOLEAN, key] as const,
|
|
46
|
+
PROPERTY: (key: string) => [NAMES.PROPERTY, key] as const,
|
|
47
|
+
EVENT: (key: string) => [NAMES.EVENT, fastUncapitalize(key)] as const,
|
|
48
|
+
ATTR: (key: string) => [NAMES.ATTR, key] as const,
|
|
49
|
+
} as const;
|
|
50
|
+
|
|
51
|
+
// Fast uncapitalize using pre-computed character codes
|
|
52
|
+
function fastUncapitalize(str: string): string {
|
|
53
|
+
if (str.length === 0) return str;
|
|
54
|
+
const first = str.codePointAt(0)!;
|
|
55
|
+
if (first >= CHAR_CODES.UPPERCASE_A && first <= CHAR_CODES.UPPERCASE_Z) {
|
|
56
|
+
return String.fromCodePoint(first + CHAR_CODES.CASE_OFFSET) + str.slice(1);
|
|
57
|
+
}
|
|
58
|
+
return str;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Fast string comparison using pre-computed patterns
|
|
62
|
+
function matchesPattern(str: string, pattern: ReadonlyArray<number>): boolean {
|
|
63
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
64
|
+
if (str.codePointAt(i) !== pattern[i]) return false;
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function keyToPartType(key: string) {
|
|
70
|
+
const len = key.length;
|
|
71
|
+
|
|
72
|
+
// Check for static keys
|
|
73
|
+
switch (len) {
|
|
74
|
+
case 3: {
|
|
75
|
+
if (matchesPattern(key, PATTERNS.REF)) return NAME_TUPLE.REF;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
case 5: {
|
|
79
|
+
if (matchesPattern(key, PATTERNS.DATA)) return NAME_TUPLE.DATA;
|
|
80
|
+
if (matchesPattern(key, PATTERNS.CLASS)) return NAME_TUPLE.CLASS;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
case 6: {
|
|
84
|
+
if (matchesPattern(key, PATTERNS.PROPS)) return NAME_TUPLE.PROPERTIES;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
case 9: {
|
|
88
|
+
if (matchesPattern(key, PATTERNS.CLASSNAME)) return NAME_TUPLE.CLASS;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
case 11: {
|
|
92
|
+
if (matchesPattern(key, PATTERNS.PROPERTIES)) return NAME_TUPLE.PROPERTIES;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Check for special prefixes
|
|
97
|
+
const first = key.codePointAt(0)!;
|
|
98
|
+
switch (first) {
|
|
99
|
+
case CHAR_CODES.QUESTION:
|
|
100
|
+
return NAME_TUPLE.BOOLEAN(key.slice(1));
|
|
101
|
+
case CHAR_CODES.DOT:
|
|
102
|
+
return NAME_TUPLE.PROPERTY(key.slice(1));
|
|
103
|
+
case CHAR_CODES.AT:
|
|
104
|
+
return NAME_TUPLE.EVENT(fastUncapitalize(key.slice(1)));
|
|
105
|
+
case CHAR_CODES.LOWERCASE_O: {
|
|
106
|
+
if (key.codePointAt(1) === CHAR_CODES.LOWERCASE_N)
|
|
107
|
+
return NAME_TUPLE.EVENT(fastUncapitalize(key.slice(2)));
|
|
108
|
+
return NAME_TUPLE.ATTR(key);
|
|
109
|
+
}
|
|
110
|
+
default:
|
|
111
|
+
return NAME_TUPLE.ATTR(key);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const PART_REGEX = /(\{\{(\d+)\}\})/g;
|
|
2
|
+
export const STRICT_PART_REGEX = /^(\{\{(\d+)\}\})/;
|
|
3
|
+
export const PART_STRING = (i: number) => `{{${i}}}`;
|
|
4
|
+
|
|
5
|
+
export const TEMPLATE_START_COMMENT = (hash: string) => `<!--t_${hash}-->`;
|
|
6
|
+
export const TEMPLATE_END_COMMENT = (hash: string) => `<!--/t_${hash}-->`;
|
|
7
|
+
|
|
8
|
+
export const TEXT_START = "<!--txt-->";
|
|
9
|
+
|
|
10
|
+
export const TYPED_NODE_START = (i: number) => `<!--n_${i}-->`;
|
|
11
|
+
export const TYPED_NODE_END = (i: number) => `<!--/n_${i}-->`;
|
|
12
|
+
|
|
13
|
+
export const TYPED_COMMENT_PART = (i: number) => `<!--c_${i}-->`;
|
|
14
|
+
|
|
15
|
+
const typedTemplateStartCommentRegex = /<!--[t|n|txt]_(.*?)-->/g;
|
|
16
|
+
const typedTemplateEndCommentRegex = /<!--\/[t|n|txt]_(.*?)-->/g;
|
|
17
|
+
|
|
18
|
+
export const isTemplateStartComment = (comment: { nodeValue: string }) =>
|
|
19
|
+
typedTemplateStartCommentRegex.test(comment.nodeValue);
|
|
20
|
+
|
|
21
|
+
export const isTemplateEndComment = (comment: { nodeValue: string }) =>
|
|
22
|
+
typedTemplateEndCommentRegex.test(comment.nodeValue);
|
|
23
|
+
|
|
24
|
+
export const stripTypedTemplateComments = (html: string) =>
|
|
25
|
+
html.replace(typedTemplateStartCommentRegex, "").replace(typedTemplateEndCommentRegex, "");
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { Fx, Sink } from "@typed/fx";
|
|
3
|
+
import type { HtmlRenderEvent } from "../RenderEvent.js";
|
|
4
|
+
import { isHtmlRenderEvent } from "../RenderEvent.js";
|
|
5
|
+
|
|
6
|
+
export function takeOneIfNotRenderEvent<A, E, R>(
|
|
7
|
+
fx: Fx.Fx<A, E, R>,
|
|
8
|
+
): Fx.Fx<A | HtmlRenderEvent, E, R> {
|
|
9
|
+
return Fx.make<A | HtmlRenderEvent, E, R>((sink) =>
|
|
10
|
+
Sink.withEarlyExit(sink, (sink) =>
|
|
11
|
+
fx.run(
|
|
12
|
+
Sink.make(sink.onFailure, (event) => {
|
|
13
|
+
if (isHtmlRenderEvent(event) && !event.last) return sink.onSuccess(event);
|
|
14
|
+
return Effect.flatMap(sink.onSuccess(event), () => sink.earlyExit);
|
|
15
|
+
}),
|
|
16
|
+
),
|
|
17
|
+
),
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const digestSize = 2;
|
|
2
|
+
const multiplier = 33;
|
|
3
|
+
const fill = 5381;
|
|
4
|
+
|
|
5
|
+
export function templateHash(strings: ReadonlyArray<string>) {
|
|
6
|
+
const hashes = new Uint32Array(digestSize).fill(fill);
|
|
7
|
+
|
|
8
|
+
for (let i = 0; i < strings.length; i++) {
|
|
9
|
+
const string = strings[i];
|
|
10
|
+
|
|
11
|
+
for (let j = 0; j < string.length; j++) {
|
|
12
|
+
const key = j % digestSize;
|
|
13
|
+
hashes[key] = hashes[key] * multiplier + string.charCodeAt(j);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return btoa(String.fromCharCode(...new Uint8Array(hashes.buffer)));
|
|
18
|
+
}
|