@typed/template 0.14.0 → 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 -224
- 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 -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/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 -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
package/src/compiler-tools.ts
DELETED
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A collection of tools utilized by @typed/compiler to setup templates imperatively.
|
|
3
|
-
* This is not intended for direct usage by end-users and the API surface is not guaranteed
|
|
4
|
-
* to have the same stabilitiy as the rest of the library.
|
|
5
|
-
*
|
|
6
|
-
* @since 1.0.0
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { Option } from "effect"
|
|
10
|
-
import type * as Cause from "effect/Cause"
|
|
11
|
-
import type * as Chunk from "effect/Chunk"
|
|
12
|
-
import type * as Effect from "effect/Effect"
|
|
13
|
-
import type * as Scope from "effect/Scope"
|
|
14
|
-
import type * as internalHydrateContext from "./internal/HydrateContext.js"
|
|
15
|
-
import * as utils from "./internal/utils.js"
|
|
16
|
-
import * as hydrationTemplate from "./internal/v2/hydration-template.js"
|
|
17
|
-
import * as render from "./internal/v2/render.js"
|
|
18
|
-
import type { Placeholder } from "./Placeholder.js"
|
|
19
|
-
import type { Renderable } from "./Renderable.js"
|
|
20
|
-
import type { RenderContext } from "./RenderContext.js"
|
|
21
|
-
import type { RenderQueue } from "./RenderQueue.js"
|
|
22
|
-
import type * as Template from "./Template.js"
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @since 1.0.0
|
|
26
|
-
*/
|
|
27
|
-
export interface TemplateContext extends render.TemplateContext {}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* @since 1.0.0
|
|
31
|
-
*/
|
|
32
|
-
export interface HydrateContext extends internalHydrateContext.HydrateContext {}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* @since 1.0.0
|
|
36
|
-
*/
|
|
37
|
-
export interface HydrationTemplate extends hydrationTemplate.HydrationTemplate {}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* @since 1.0.0
|
|
41
|
-
*/
|
|
42
|
-
export type HydrationNode = hydrationTemplate.HydrationNode
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @since 1.0.0
|
|
46
|
-
*/
|
|
47
|
-
export interface HydrationHole extends hydrationTemplate.HydrationHole {}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* @since 1.0.0
|
|
51
|
-
*/
|
|
52
|
-
export interface HydrationMany extends hydrationTemplate.HydrationMany {}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* @since 1.0.0
|
|
56
|
-
*/
|
|
57
|
-
export interface HydrationElement extends hydrationTemplate.HydrationElement {}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* @since 1.0.0
|
|
61
|
-
*/
|
|
62
|
-
export interface HydrationLiteral extends hydrationTemplate.HydrationLiteral {}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* @since 1.0.0
|
|
66
|
-
*/
|
|
67
|
-
export const makeTemplateContext: <Values extends ReadonlyArray<Renderable<any, any>>>(
|
|
68
|
-
document: Document,
|
|
69
|
-
renderContext: RenderContext,
|
|
70
|
-
values: ReadonlyArray<Renderable<any, any>>,
|
|
71
|
-
onCause: (cause: Cause.Cause<Placeholder.Error<Values[number]>>) => Effect.Effect<unknown, never, never>
|
|
72
|
-
) => Effect.Effect<TemplateContext, never, Scope.Scope | RenderQueue | Placeholder.Context<Values[number]>> =
|
|
73
|
-
render.makeTemplateContext
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* @since 1.0.0
|
|
77
|
-
*/
|
|
78
|
-
export const setupAttrPart: (
|
|
79
|
-
{ index, name }: Pick<Template.AttrPartNode, "index" | "name">,
|
|
80
|
-
element: HTMLElement | SVGElement,
|
|
81
|
-
ctx: TemplateContext,
|
|
82
|
-
renderable: Renderable<any, any>
|
|
83
|
-
) => Effect.Effect<void, any, any> | null = render.setupAttrPart
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* @since 1.0.0
|
|
87
|
-
*/
|
|
88
|
-
export const setupBooleanPart: (
|
|
89
|
-
{ index, name }: Pick<Template.BooleanPartNode, "index" | "name">,
|
|
90
|
-
element: HTMLElement | SVGElement,
|
|
91
|
-
ctx: TemplateContext,
|
|
92
|
-
renderable: Renderable<any, any>
|
|
93
|
-
) => Effect.Effect<void, any, any> | null = render.setupBooleanPart
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* @since 1.0.0
|
|
97
|
-
*/
|
|
98
|
-
export const setupClassNamePart: (
|
|
99
|
-
{ index }: Pick<Template.ClassNamePartNode, "index">,
|
|
100
|
-
element: HTMLElement | SVGElement,
|
|
101
|
-
ctx: TemplateContext,
|
|
102
|
-
renderable: Renderable<any, any>
|
|
103
|
-
) => Effect.Effect<void, any, any> | null = render.setupClassNamePart
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* @since 1.0.0
|
|
107
|
-
*/
|
|
108
|
-
export const setupCommentPart: (
|
|
109
|
-
{ index }: Pick<Template.CommentPartNode, "index">,
|
|
110
|
-
comment: Comment,
|
|
111
|
-
ctx: render.TemplateContext,
|
|
112
|
-
renderable: Renderable<any, any>
|
|
113
|
-
) => Effect.Effect<void, any, any> | null = render.setupCommentPart
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* @since 1.0.0
|
|
117
|
-
*/
|
|
118
|
-
export const setupDataPart: (
|
|
119
|
-
{ index }: Pick<Template.DataPartNode, "index">,
|
|
120
|
-
element: HTMLElement | SVGElement,
|
|
121
|
-
ctx: TemplateContext,
|
|
122
|
-
renderable: Renderable<any, any>
|
|
123
|
-
) => Effect.Effect<void, any, any> | null = render.setupDataPart
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* @since 1.0.0
|
|
127
|
-
*/
|
|
128
|
-
export const setupEventPart: (
|
|
129
|
-
{ index, name }: Pick<Template.EventPartNode, "index" | "name">,
|
|
130
|
-
element: HTMLElement | SVGElement,
|
|
131
|
-
ctx: TemplateContext,
|
|
132
|
-
renderable: Renderable<any, any>
|
|
133
|
-
) => Effect.Effect<unknown, unknown, unknown> | null = render.setupEventPart
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* @since 1.0.0
|
|
137
|
-
*/
|
|
138
|
-
export const setupNodePart: (
|
|
139
|
-
{ index }: Template.NodePart,
|
|
140
|
-
comment: Comment,
|
|
141
|
-
ctx: TemplateContext,
|
|
142
|
-
text: Text | null,
|
|
143
|
-
nodes: Array<Node>
|
|
144
|
-
) => Effect.Effect<void, any, any> | null = render.setupNodePart
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* @since 1.0.0
|
|
148
|
-
*/
|
|
149
|
-
export const setupHydratedNodePart: (
|
|
150
|
-
part: Template.NodePart,
|
|
151
|
-
hole: hydrationTemplate.HydrationHole,
|
|
152
|
-
ctx: render.HydrateTemplateContext
|
|
153
|
-
) => Effect.Effect<void, any, any> | null = render.setupHydratedNodePart
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* @since 1.0.0
|
|
157
|
-
*/
|
|
158
|
-
export const setupPropertyPart: (
|
|
159
|
-
{ index, name }: Pick<Template.PropertyPartNode, "index" | "name">,
|
|
160
|
-
element: HTMLElement | SVGElement,
|
|
161
|
-
ctx: TemplateContext,
|
|
162
|
-
renderable: Renderable<any, any>
|
|
163
|
-
) => Effect.Effect<void, any, any> | null = render.setupPropertyPart
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* @since 1.0.0
|
|
167
|
-
*/
|
|
168
|
-
export const setupRefPart: (
|
|
169
|
-
{ index }: Pick<Template.RefPartNode, "index">,
|
|
170
|
-
element: HTMLElement | SVGElement,
|
|
171
|
-
renderable: Renderable<any, any>
|
|
172
|
-
) => Effect.Effect<void, any, any> | null = render.setupRefPart
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* @since 1.0.0
|
|
176
|
-
*/
|
|
177
|
-
export const setupPropertiesPart: (
|
|
178
|
-
element: HTMLElement | SVGElement,
|
|
179
|
-
ctx: render.TemplateContext,
|
|
180
|
-
renderable: Renderable<any, any>
|
|
181
|
-
) => Effect.Effect<Array<void>, any, any> | null = render.setupPropertiesPart
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* @since 1.0.0
|
|
185
|
-
*/
|
|
186
|
-
export const setupSparseAttrPart: (
|
|
187
|
-
{ name, nodes }: Pick<Template.SparseAttrNode, "name" | "nodes">,
|
|
188
|
-
element: HTMLElement | SVGElement,
|
|
189
|
-
ctx: render.TemplateContext
|
|
190
|
-
) => Effect.Effect<void, any, any> = render.setupSparseAttrPart
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* @since 1.0.0
|
|
194
|
-
*/
|
|
195
|
-
export const setupSparseClassNamePart: (
|
|
196
|
-
{ nodes }: Pick<Template.SparseClassNameNode, "nodes">,
|
|
197
|
-
element: HTMLElement | SVGElement,
|
|
198
|
-
ctx: render.TemplateContext
|
|
199
|
-
) => Effect.Effect<void, any, any> = render.setupSparseClassNamePart
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* @since 1.0.0
|
|
203
|
-
*/
|
|
204
|
-
export const setupSparseCommentPart: (
|
|
205
|
-
{ nodes }: Template.SparseCommentNode,
|
|
206
|
-
comment: Comment,
|
|
207
|
-
ctx: render.TemplateContext
|
|
208
|
-
) => Effect.Effect<void, any, any> = render.setupSparseCommentPart
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* @since 1.0.0
|
|
212
|
-
*/
|
|
213
|
-
export const setupTextPart: (
|
|
214
|
-
{ index }: Template.TextPartNode,
|
|
215
|
-
comment: Comment,
|
|
216
|
-
ctx: render.TemplateContext
|
|
217
|
-
) => Effect.Effect<void, any, any> | null = render.setupTextPart
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* @since 1.0.0
|
|
221
|
-
*/
|
|
222
|
-
export const findHydrationHole: (
|
|
223
|
-
nodes: Array<hydrationTemplate.HydrationNode>,
|
|
224
|
-
index: number
|
|
225
|
-
) => hydrationTemplate.HydrationHole | null = hydrationTemplate.findHydrationHole
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* @since 1.0.0
|
|
229
|
-
*/
|
|
230
|
-
export const getChildNodes: (node: hydrationTemplate.HydrationNode) => Array<hydrationTemplate.HydrationNode> =
|
|
231
|
-
hydrationTemplate.getChildNodes
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* @since 1.0.0
|
|
235
|
-
*/
|
|
236
|
-
export const findHydratePath: (node: hydrationTemplate.HydrationNode, path: Chunk.Chunk<number>) => Node =
|
|
237
|
-
utils.findHydratePath
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* @since 1.0.0
|
|
241
|
-
*/
|
|
242
|
-
export const attemptHydration: (
|
|
243
|
-
ctx: TemplateContext,
|
|
244
|
-
hash: string
|
|
245
|
-
) => Option.Option<
|
|
246
|
-
{
|
|
247
|
-
readonly where: HydrationTemplate
|
|
248
|
-
readonly hydrateCtx: HydrateContext
|
|
249
|
-
}
|
|
250
|
-
> = render.attemptHydration
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import type { Rendered } from "@typed/wire"
|
|
2
|
-
import * as Effect from "effect/Effect"
|
|
3
|
-
import * as Fiber from "effect/Fiber"
|
|
4
|
-
import * as Runtime from "effect/Runtime"
|
|
5
|
-
import * as Scope from "effect/Scope"
|
|
6
|
-
import { getElements } from "../ElementSource.js"
|
|
7
|
-
import type { EventHandler } from "../EventHandler.js"
|
|
8
|
-
|
|
9
|
-
type EventName = string
|
|
10
|
-
|
|
11
|
-
type Handler<Ev extends Event> = EventHandler<Ev>
|
|
12
|
-
|
|
13
|
-
export interface EventSource {
|
|
14
|
-
readonly addEventListener: <Ev extends Event>(
|
|
15
|
-
element: Element,
|
|
16
|
-
event: EventName,
|
|
17
|
-
handler: Handler<Ev>
|
|
18
|
-
) => void
|
|
19
|
-
|
|
20
|
-
readonly setup: (rendered: Rendered, scope: Scope.Scope) => Effect.Effect<void>
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
type Entry = readonly [Element, Handler<any>]
|
|
24
|
-
type Run = <E, A>(effect: Effect.Effect<A, E>) => Fiber.RuntimeFiber<A, E>
|
|
25
|
-
|
|
26
|
-
const disposable = (f: () => void): Disposable => ({
|
|
27
|
-
[Symbol.dispose]: f
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
const dispose = (d: Disposable): void => d[Symbol.dispose]()
|
|
31
|
-
|
|
32
|
-
export function makeEventSource(): EventSource {
|
|
33
|
-
const bubbleListeners = new Map<
|
|
34
|
-
EventName,
|
|
35
|
-
readonly [normal: Set<Entry>, once: Set<Entry>]
|
|
36
|
-
>()
|
|
37
|
-
const captureListeners = new Map<
|
|
38
|
-
EventName,
|
|
39
|
-
readonly [normal: Set<Entry>, once: Set<Entry>]
|
|
40
|
-
>()
|
|
41
|
-
|
|
42
|
-
function addListener(
|
|
43
|
-
listeners: Map<
|
|
44
|
-
EventName,
|
|
45
|
-
readonly [normal: Set<Entry>, once: Set<Entry>]
|
|
46
|
-
>,
|
|
47
|
-
event: EventName,
|
|
48
|
-
entry: Entry
|
|
49
|
-
): void {
|
|
50
|
-
const sets = listeners.get(event)
|
|
51
|
-
const isOnce = entry[1].options?.once === true
|
|
52
|
-
if (sets === undefined) {
|
|
53
|
-
const normal = new Set<Entry>()
|
|
54
|
-
const once = new Set<Entry>()
|
|
55
|
-
if (isOnce) {
|
|
56
|
-
once.add(entry)
|
|
57
|
-
} else {
|
|
58
|
-
normal.add(entry)
|
|
59
|
-
}
|
|
60
|
-
listeners.set(event, [normal, once])
|
|
61
|
-
} else {
|
|
62
|
-
const [normal, once] = sets
|
|
63
|
-
if (isOnce) {
|
|
64
|
-
once.add(entry)
|
|
65
|
-
} else {
|
|
66
|
-
normal.add(entry)
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function addEventListener<Ev extends Event>(
|
|
72
|
-
element: Element,
|
|
73
|
-
event: EventName,
|
|
74
|
-
handler: Handler<Ev>
|
|
75
|
-
): void {
|
|
76
|
-
if (handler.options?.capture === true) {
|
|
77
|
-
return addListener(captureListeners, event, [element, handler])
|
|
78
|
-
} else {
|
|
79
|
-
return addListener(bubbleListeners, event, [element, handler])
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function setupBubbleListeners(element: Element, run: Run) {
|
|
84
|
-
const disposables: Array<Disposable> = []
|
|
85
|
-
|
|
86
|
-
for (const [event, sets] of bubbleListeners) {
|
|
87
|
-
for (const handlers of sets) {
|
|
88
|
-
if (handlers.size === 0) continue
|
|
89
|
-
const listener = (ev: Event) =>
|
|
90
|
-
run(
|
|
91
|
-
Effect.forEach(
|
|
92
|
-
handlers,
|
|
93
|
-
([el, { handler }]) => ev.target === el || el.contains(ev.target as Node) ? handler(ev) : Effect.void
|
|
94
|
-
)
|
|
95
|
-
)
|
|
96
|
-
|
|
97
|
-
element.addEventListener(event, listener, getDerivedAddEventListenerOptions(handlers))
|
|
98
|
-
disposables.push(disposable(() => element.removeEventListener(event, listener)))
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return disposables
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function setupCaptureListeners(element: Element, run: Run) {
|
|
106
|
-
const disposables: Array<Disposable> = []
|
|
107
|
-
|
|
108
|
-
for (const [event, sets] of captureListeners) {
|
|
109
|
-
for (const handlers of sets) {
|
|
110
|
-
if (handlers.size === 0) continue
|
|
111
|
-
const listener = (ev: Event) =>
|
|
112
|
-
run(
|
|
113
|
-
Effect.forEach(handlers, ([el, { handler }]) =>
|
|
114
|
-
ev.target === el || el.contains(ev.target as Node)
|
|
115
|
-
? handler(proxyCurrentTargetForCaptureEvents(ev, el))
|
|
116
|
-
: Effect.void)
|
|
117
|
-
)
|
|
118
|
-
element.addEventListener(event, listener, getDerivedAddEventListenerOptions(handlers))
|
|
119
|
-
disposables.push(disposable(() => element.removeEventListener(event, listener)))
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return disposables
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
function setup(rendered: Rendered, scope: Scope.Scope) {
|
|
127
|
-
const hasBubbleListeners = bubbleListeners.size > 0
|
|
128
|
-
const hasCaptureListeners = captureListeners.size > 0
|
|
129
|
-
const elements = getElements(rendered)
|
|
130
|
-
|
|
131
|
-
if (elements.length === 0 || (!hasBubbleListeners && !hasCaptureListeners)) {
|
|
132
|
-
return Effect.void
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return Effect.flatMap(Effect.runtime<never>(), (runtime) => {
|
|
136
|
-
const disposables: Array<Disposable> = []
|
|
137
|
-
const fibers = new Map<symbol, Fiber.RuntimeFiber<any, any>>()
|
|
138
|
-
const runFork = Runtime.runFork(runtime)
|
|
139
|
-
const run: Run = <E, A>(effect: Effect.Effect<A, E>) => {
|
|
140
|
-
const id = Symbol()
|
|
141
|
-
const fiber = runFork(Effect.onExit(effect, () => Effect.sync(() => fibers.delete(id))))
|
|
142
|
-
fibers.set(id, fiber)
|
|
143
|
-
return fiber
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
for (const element of elements) {
|
|
147
|
-
if (hasBubbleListeners) {
|
|
148
|
-
disposables.push(...setupBubbleListeners(element, run))
|
|
149
|
-
}
|
|
150
|
-
if (hasCaptureListeners) {
|
|
151
|
-
disposables.push(...setupCaptureListeners(element, run))
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return Scope.addFinalizer(
|
|
156
|
-
scope,
|
|
157
|
-
Effect.suspend(() => {
|
|
158
|
-
disposables.forEach(dispose)
|
|
159
|
-
if (fibers.size === 0) return Effect.void
|
|
160
|
-
return Fiber.interruptAll(fibers.values())
|
|
161
|
-
})
|
|
162
|
-
)
|
|
163
|
-
})
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
return {
|
|
167
|
-
addEventListener,
|
|
168
|
-
setup
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const EVENT_PROPERTY_TO_REPLACE = "currentTarget"
|
|
173
|
-
|
|
174
|
-
function proxyCurrentTargetForCaptureEvents<E extends Event>(event: E, currentTarget: Element): E {
|
|
175
|
-
return new Proxy(event, {
|
|
176
|
-
get(target: E, property: string | symbol) {
|
|
177
|
-
return property === EVENT_PROPERTY_TO_REPLACE ? currentTarget : target[property as keyof E]
|
|
178
|
-
}
|
|
179
|
-
})
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
function getDerivedAddEventListenerOptions(entries: Set<Entry>): AddEventListenerOptions {
|
|
183
|
-
const hs = Array.from(entries)
|
|
184
|
-
return {
|
|
185
|
-
once: hs.every((h) => h[1].options?.once === true),
|
|
186
|
-
passive: hs.every((h) => h[1].options?.passive === true)
|
|
187
|
-
}
|
|
188
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Tagged } from "@typed/context"
|
|
2
|
-
import type { HydrationNode } from "./v2/hydration-template.js"
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Used Internally to pass context down to components for hydration
|
|
6
|
-
* @internal
|
|
7
|
-
*/
|
|
8
|
-
export type HydrateContext = {
|
|
9
|
-
readonly where: HydrationNode
|
|
10
|
-
|
|
11
|
-
// Used to match sibling components using many() to the correct elements
|
|
12
|
-
readonly manyKey?: string
|
|
13
|
-
|
|
14
|
-
/**@internal */
|
|
15
|
-
hydrate: boolean
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Used Internally to pass context down to components for hydration
|
|
20
|
-
* @internal
|
|
21
|
-
*/
|
|
22
|
-
export const HydrateContext = Tagged<HydrateContext>("@typed/html/HydrateContext")
|
package/src/internal/browser.ts
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { diffable, isComment } from "@typed/wire"
|
|
2
|
-
import udomdiff from "udomdiff"
|
|
3
|
-
import { isRenderEvent } from "../RenderEvent.js"
|
|
4
|
-
import type { RenderQueue } from "../RenderQueue.js"
|
|
5
|
-
import { convertCharacterEntities } from "./character-entities.js"
|
|
6
|
-
import { NodePartImpl } from "./server-parts.js"
|
|
7
|
-
import { findHoleComment, isCommentWithValue } from "./utils.js"
|
|
8
|
-
|
|
9
|
-
export function makeRenderNodePart(
|
|
10
|
-
index: number,
|
|
11
|
-
parent: HTMLElement | SVGElement,
|
|
12
|
-
queue: RenderQueue,
|
|
13
|
-
document: Document,
|
|
14
|
-
isHydrating: boolean
|
|
15
|
-
) {
|
|
16
|
-
const comment = findHoleComment(parent, index)
|
|
17
|
-
let text: Text | null = isHydrating ? getPreviousTextSibling(comment) : null
|
|
18
|
-
let nodes = isHydrating ? findPreviousNodes(comment, index) : []
|
|
19
|
-
|
|
20
|
-
return new NodePartImpl(index, ({ part, value }, priority) => {
|
|
21
|
-
return queue.add(
|
|
22
|
-
part,
|
|
23
|
-
() => {
|
|
24
|
-
matchValue(
|
|
25
|
-
value,
|
|
26
|
-
(content) => {
|
|
27
|
-
if (text === null) {
|
|
28
|
-
text = document.createTextNode("")
|
|
29
|
-
}
|
|
30
|
-
text.textContent = convertCharacterEntities(content)
|
|
31
|
-
|
|
32
|
-
nodes = diffChildren(comment, nodes, [text], document)
|
|
33
|
-
},
|
|
34
|
-
(updatedNodes) => {
|
|
35
|
-
nodes = diffChildren(comment, nodes, updatedNodes, document)
|
|
36
|
-
}
|
|
37
|
-
)
|
|
38
|
-
},
|
|
39
|
-
priority
|
|
40
|
-
)
|
|
41
|
-
}, nodes)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function getPreviousTextSibling(node: Node | null) {
|
|
45
|
-
if (!node) return null
|
|
46
|
-
|
|
47
|
-
if (node && node.nodeType === node.TEXT_NODE) {
|
|
48
|
-
// During hydration there should be a comment to separate these values
|
|
49
|
-
if (
|
|
50
|
-
node.previousSibling &&
|
|
51
|
-
isComment(node.previousSibling) &&
|
|
52
|
-
isCommentWithValue(node.previousSibling, "text")
|
|
53
|
-
) {
|
|
54
|
-
return node as Text
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return null
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export function notIsEmptyTextNode(node: Node) {
|
|
62
|
-
if (node.nodeType === node.TEXT_NODE) {
|
|
63
|
-
return node.nodeValue?.trim() === ""
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return true
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export function findPreviousNodes(comment: Comment, index: number) {
|
|
70
|
-
const previousIndex = `hole${index - 1}`
|
|
71
|
-
|
|
72
|
-
const nodes: Array<Node> = []
|
|
73
|
-
|
|
74
|
-
let node = comment.previousSibling
|
|
75
|
-
while (node && !isCommentWithValue(node, previousIndex) && !isCommentWithValue(node, "text")) {
|
|
76
|
-
nodes.unshift(node)
|
|
77
|
-
node = node.previousSibling
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return nodes
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export function diffChildren(
|
|
84
|
-
comment: Comment,
|
|
85
|
-
currentNodes: Array<Node>,
|
|
86
|
-
nextNodes: Array<Node>,
|
|
87
|
-
document: Document
|
|
88
|
-
) {
|
|
89
|
-
return udomdiff(
|
|
90
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
91
|
-
comment.parentNode!,
|
|
92
|
-
// Document Fragments cannot be removed, so we filter them out
|
|
93
|
-
currentNodes.filter((x) => x.nodeType !== x.DOCUMENT_FRAGMENT_NODE),
|
|
94
|
-
nextNodes,
|
|
95
|
-
diffable(document),
|
|
96
|
-
comment
|
|
97
|
-
)
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function matchValue<A, B>(value: unknown, onText: (text: string) => A, onNodes: (nodes: Array<Node>) => B): A | B {
|
|
101
|
-
switch (typeof value) {
|
|
102
|
-
// primitives are handled as text content
|
|
103
|
-
case "string":
|
|
104
|
-
case "symbol":
|
|
105
|
-
case "number":
|
|
106
|
-
case "bigint":
|
|
107
|
-
case "boolean":
|
|
108
|
-
return onText(String(value))
|
|
109
|
-
case "undefined":
|
|
110
|
-
case "object": {
|
|
111
|
-
if (!value) {
|
|
112
|
-
return onNodes([])
|
|
113
|
-
} else if (Array.isArray(value)) {
|
|
114
|
-
// arrays can be used to cleanup, if empty
|
|
115
|
-
if (value.length === 0) return onNodes([])
|
|
116
|
-
// or diffed, if these contains nodes or "wires"
|
|
117
|
-
else if (value.some((x) => typeof x === "object")) {
|
|
118
|
-
return onNodes(value.flatMap(renderEventToArray))
|
|
119
|
-
} // in all other cases the content is stringified as is
|
|
120
|
-
else return onText(String(value))
|
|
121
|
-
} else {
|
|
122
|
-
return onNodes(renderEventToArray(value))
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
case "function":
|
|
126
|
-
return onNodes([])
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
function renderEventToArray(x: unknown): Array<Node> {
|
|
131
|
-
if (x === null || x === undefined) return []
|
|
132
|
-
if (isRenderEvent(x)) {
|
|
133
|
-
const value = x.valueOf()
|
|
134
|
-
return Array.isArray(value) ? value : [value]
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return [x as Node]
|
|
138
|
-
}
|