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