@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,134 @@
|
|
|
1
|
+
import { isOption, match } from "effect/Option";
|
|
2
|
+
import { hasProperty, isNullish } from "effect/Predicate";
|
|
3
|
+
import { isHtmlRenderEvent } from "../RenderEvent.js";
|
|
4
|
+
export function escape(s) {
|
|
5
|
+
switch (typeof s) {
|
|
6
|
+
case "string":
|
|
7
|
+
case "number":
|
|
8
|
+
case "boolean":
|
|
9
|
+
case "bigint":
|
|
10
|
+
return escapeHtml(String(s));
|
|
11
|
+
case "object": {
|
|
12
|
+
if (isNullish(s)) {
|
|
13
|
+
return "";
|
|
14
|
+
}
|
|
15
|
+
else if (Array.isArray(s)) {
|
|
16
|
+
return s.map(escape).join("");
|
|
17
|
+
}
|
|
18
|
+
else if (s instanceof Date) {
|
|
19
|
+
return escapeHtml(s.toISOString());
|
|
20
|
+
}
|
|
21
|
+
else if (s instanceof RegExp) {
|
|
22
|
+
return escapeHtml(s.toString());
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return escapeHtml(JSON.stringify(s));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
default:
|
|
29
|
+
return escapeHtml(JSON.stringify(s));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function unescape(s) {
|
|
33
|
+
const unescaped = unescapeHtml(s);
|
|
34
|
+
const couldBeJson = unescaped[0] === "[" || unescaped === "{";
|
|
35
|
+
if (couldBeJson) {
|
|
36
|
+
try {
|
|
37
|
+
return JSON.parse(unescaped);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return unescaped;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
return unescaped;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const unescapeHtmlRules = [
|
|
48
|
+
[/"/g, '"'],
|
|
49
|
+
[/'/g, "'"],
|
|
50
|
+
[/:/g, ":"],
|
|
51
|
+
[/</g, "<"],
|
|
52
|
+
[/>/g, ">"],
|
|
53
|
+
[/&/g, "&"],
|
|
54
|
+
];
|
|
55
|
+
const matchHtmlRegExp = /["'&<>]/;
|
|
56
|
+
export function escapeHtml(str) {
|
|
57
|
+
if (str.length === 0) {
|
|
58
|
+
return str;
|
|
59
|
+
}
|
|
60
|
+
const match = matchHtmlRegExp.exec(str);
|
|
61
|
+
if (!match) {
|
|
62
|
+
return str;
|
|
63
|
+
}
|
|
64
|
+
let escape;
|
|
65
|
+
let html = "";
|
|
66
|
+
let index = 0;
|
|
67
|
+
let lastIndex = 0;
|
|
68
|
+
for (index = match.index; index < str.length; index++) {
|
|
69
|
+
switch (str.charCodeAt(index)) {
|
|
70
|
+
case 34: // "
|
|
71
|
+
escape = """;
|
|
72
|
+
break;
|
|
73
|
+
case 38: // &
|
|
74
|
+
escape = "&";
|
|
75
|
+
break;
|
|
76
|
+
case 39: // '
|
|
77
|
+
escape = "'";
|
|
78
|
+
break;
|
|
79
|
+
case 60: // <
|
|
80
|
+
escape = "<";
|
|
81
|
+
break;
|
|
82
|
+
case 62: // >
|
|
83
|
+
escape = ">";
|
|
84
|
+
break;
|
|
85
|
+
default:
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (lastIndex !== index) {
|
|
89
|
+
html += str.substring(lastIndex, index);
|
|
90
|
+
}
|
|
91
|
+
lastIndex = index + 1;
|
|
92
|
+
html += escape;
|
|
93
|
+
}
|
|
94
|
+
return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
|
|
95
|
+
}
|
|
96
|
+
export function unescapeHtml(html) {
|
|
97
|
+
for (const [from, to] of unescapeHtmlRules) {
|
|
98
|
+
html = html.replace(from, to);
|
|
99
|
+
}
|
|
100
|
+
return html;
|
|
101
|
+
}
|
|
102
|
+
export function renderToString(value, delimiter = "") {
|
|
103
|
+
if (Array.isArray(value)) {
|
|
104
|
+
return value.map((v) => renderToString(v, delimiter)).join(delimiter);
|
|
105
|
+
}
|
|
106
|
+
if (isNullish(value)) {
|
|
107
|
+
return "";
|
|
108
|
+
}
|
|
109
|
+
if (isOption(value)) {
|
|
110
|
+
return match(value, {
|
|
111
|
+
onNone: () => "",
|
|
112
|
+
onSome: (v) => renderToString(v, delimiter),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
if (isHtmlRenderEvent(value)) {
|
|
116
|
+
return value.html;
|
|
117
|
+
}
|
|
118
|
+
if (typeof value === "string") {
|
|
119
|
+
return value;
|
|
120
|
+
}
|
|
121
|
+
if (hasProperty(value, "toString") && typeof value.toString === "function") {
|
|
122
|
+
const s = value.toString();
|
|
123
|
+
if (s !== "[object Object]") {
|
|
124
|
+
return s;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (typeof value === "object") {
|
|
128
|
+
return JSON.stringify(value);
|
|
129
|
+
}
|
|
130
|
+
return String(value);
|
|
131
|
+
}
|
|
132
|
+
export function renderToEscapedString(value, delimiter) {
|
|
133
|
+
return escape(renderToString(value, delimiter));
|
|
134
|
+
}
|
|
@@ -1,44 +1,47 @@
|
|
|
1
1
|
import { type Inspectable, NodeInspectSymbol } from "effect/Inspectable";
|
|
2
|
+
import type { HydrateContext } from "../HydrateContext.js";
|
|
3
|
+
export declare function getRendered(where: HydrationNode): Node | Node[];
|
|
4
|
+
export declare function findHydrationTemplateByHash(hydrateCtx: HydrateContext, hash: string): HydrationTemplate | null;
|
|
2
5
|
export declare function getHydrationRoot(root: HTMLElement): HydrationElement;
|
|
3
6
|
export declare class HydrationElement implements Inspectable {
|
|
7
|
+
readonly _tag: "element";
|
|
4
8
|
readonly parentNode: Element;
|
|
5
9
|
readonly childNodes: Array<HydrationNode>;
|
|
6
|
-
readonly _tag: "element";
|
|
7
10
|
constructor(parentNode: Element, childNodes: Array<HydrationNode>);
|
|
8
11
|
toJSON(): unknown;
|
|
9
12
|
[NodeInspectSymbol](): string;
|
|
10
13
|
}
|
|
11
14
|
export declare class HydrationTemplate implements Inspectable {
|
|
15
|
+
readonly _tag: "template";
|
|
12
16
|
readonly hash: string;
|
|
13
17
|
readonly childNodes: Array<HydrationNode>;
|
|
14
|
-
readonly _tag: "template";
|
|
15
18
|
constructor(hash: string, childNodes: Array<HydrationNode>);
|
|
16
19
|
toJSON(): unknown;
|
|
17
20
|
[NodeInspectSymbol](): string;
|
|
18
21
|
}
|
|
19
22
|
export type HydrationNode = HydrationElement | HydrationTemplate | HydrationMany | HydrationHole | HydrationLiteral;
|
|
20
23
|
export declare class HydrationMany implements Inspectable {
|
|
24
|
+
readonly _tag: "many";
|
|
21
25
|
readonly key: string;
|
|
22
26
|
readonly comment: Comment;
|
|
23
27
|
readonly childNodes: Array<HydrationNode>;
|
|
24
|
-
readonly _tag: "many";
|
|
25
28
|
constructor(key: string, comment: Comment, childNodes: Array<HydrationNode>);
|
|
26
29
|
toJSON(): unknown;
|
|
27
30
|
[NodeInspectSymbol](): string;
|
|
28
31
|
}
|
|
29
32
|
export declare class HydrationHole implements Inspectable {
|
|
33
|
+
readonly _tag: "hole";
|
|
30
34
|
readonly index: number;
|
|
31
35
|
readonly startComment: Comment;
|
|
32
36
|
readonly endComment: Comment;
|
|
33
37
|
readonly childNodes: Array<HydrationNode>;
|
|
34
|
-
readonly _tag: "hole";
|
|
35
38
|
constructor(index: number, startComment: Comment, endComment: Comment, childNodes: Array<HydrationNode>);
|
|
36
39
|
toJSON(): unknown;
|
|
37
40
|
[NodeInspectSymbol](): string;
|
|
38
41
|
}
|
|
39
42
|
export declare class HydrationLiteral implements Inspectable {
|
|
40
|
-
readonly node: Node;
|
|
41
43
|
readonly _tag: "literal";
|
|
44
|
+
readonly node: Node;
|
|
42
45
|
constructor(node: Node);
|
|
43
46
|
toJSON(): unknown;
|
|
44
47
|
[NodeInspectSymbol](): string;
|
|
@@ -50,5 +53,5 @@ export declare function findHydrationHole(nodes: Array<HydrationNode>, index: nu
|
|
|
50
53
|
export declare function findHydrationNode(node: HydrationNode, index: number, manyKey?: string): HydrationHole | HydrationMany | null;
|
|
51
54
|
export declare function getNodes(node: HydrationNode): Array<Node>;
|
|
52
55
|
export declare function getNodesExcludingStartComment(node: HydrationNode): Array<Node>;
|
|
53
|
-
export declare
|
|
54
|
-
//# sourceMappingURL=hydration
|
|
56
|
+
export declare const findHydratePath: (node: HydrationNode, path: ReadonlyArray<number>) => Node;
|
|
57
|
+
//# sourceMappingURL=hydration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../src/internal/hydration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,28 @@
|
|
|
1
|
-
import { isComment, isElement, toHtml } from "@typed/wire";
|
|
2
1
|
import { NodeInspectSymbol } from "effect/Inspectable";
|
|
3
|
-
import { CouldNotFindRootElement, CouldNotFindTemplateEndError } from "../errors";
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
2
|
+
import { CouldNotFindRootElement, CouldNotFindTemplateEndError } from "../errors.js";
|
|
3
|
+
import { isComment, isElement, toHtml } from "../Wire.js";
|
|
4
|
+
const TYPED_TEMPLATE_PREFIX = `t_`;
|
|
5
|
+
const TYPED_TEMPLATE_END_PREFIX = `/t_`;
|
|
6
|
+
const MANY_PREFIX = `/m_`;
|
|
7
|
+
const HOLE_PREFIX = `n_`;
|
|
8
|
+
export function getRendered(where) {
|
|
9
|
+
const nodes = getNodes(where);
|
|
10
|
+
if (nodes.length === 1)
|
|
11
|
+
return nodes[0];
|
|
12
|
+
return nodes;
|
|
13
|
+
}
|
|
14
|
+
export function findHydrationTemplateByHash(hydrateCtx, hash) {
|
|
15
|
+
// If there is not a manyKey, we can just find the template by its hash
|
|
16
|
+
if (hydrateCtx.manyKey === undefined) {
|
|
17
|
+
return findHydrationTemplate(getChildNodes(hydrateCtx.where), hash);
|
|
18
|
+
}
|
|
19
|
+
// If there is a manyKey, we need to find the many node first
|
|
20
|
+
const many = findHydrationMany(getChildNodes(hydrateCtx.where), hydrateCtx.manyKey);
|
|
21
|
+
if (many === null)
|
|
22
|
+
return null;
|
|
23
|
+
// Then we can find the template by its hash
|
|
24
|
+
return findHydrationTemplate(getChildNodes(many), hash);
|
|
25
|
+
}
|
|
8
26
|
export function getHydrationRoot(root) {
|
|
9
27
|
const childNodes = Array.from(root.childNodes);
|
|
10
28
|
let hydrationNodes = getHydrationNodes(childNodes);
|
|
@@ -61,7 +79,7 @@ function getTemplateEndIndex(nodes, start, hash) {
|
|
|
61
79
|
throw new CouldNotFindTemplateEndError(hash);
|
|
62
80
|
}
|
|
63
81
|
function getHoleEndIndex(nodes, start, index) {
|
|
64
|
-
const endHash =
|
|
82
|
+
const endHash = `/${HOLE_PREFIX}${index}`;
|
|
65
83
|
let templateDepth = 0;
|
|
66
84
|
for (let i = start; i < nodes.length; ++i) {
|
|
67
85
|
const node = nodes[i];
|
|
@@ -77,9 +95,9 @@ function getHoleEndIndex(nodes, start, index) {
|
|
|
77
95
|
throw new CouldNotFindRootElement(index);
|
|
78
96
|
}
|
|
79
97
|
export class HydrationElement {
|
|
98
|
+
_tag = "element";
|
|
80
99
|
parentNode;
|
|
81
100
|
childNodes;
|
|
82
|
-
_tag = "element";
|
|
83
101
|
constructor(parentNode, childNodes) {
|
|
84
102
|
this.parentNode = parentNode;
|
|
85
103
|
this.childNodes = childNodes;
|
|
@@ -88,7 +106,7 @@ export class HydrationElement {
|
|
|
88
106
|
return {
|
|
89
107
|
_tag: this._tag,
|
|
90
108
|
parentNode: toHtml(this.parentNode),
|
|
91
|
-
childNodes: this.childNodes.map((n) => n.toJSON())
|
|
109
|
+
childNodes: this.childNodes.map((n) => n.toJSON()),
|
|
92
110
|
};
|
|
93
111
|
}
|
|
94
112
|
[NodeInspectSymbol]() {
|
|
@@ -96,9 +114,9 @@ export class HydrationElement {
|
|
|
96
114
|
}
|
|
97
115
|
}
|
|
98
116
|
export class HydrationTemplate {
|
|
117
|
+
_tag = "template";
|
|
99
118
|
hash;
|
|
100
119
|
childNodes;
|
|
101
|
-
_tag = "template";
|
|
102
120
|
constructor(hash, childNodes) {
|
|
103
121
|
this.hash = hash;
|
|
104
122
|
this.childNodes = childNodes;
|
|
@@ -107,7 +125,7 @@ export class HydrationTemplate {
|
|
|
107
125
|
return {
|
|
108
126
|
_tag: this._tag,
|
|
109
127
|
hash: this.hash,
|
|
110
|
-
childNodes: this.childNodes.map((n) => n.toJSON())
|
|
128
|
+
childNodes: this.childNodes.map((n) => n.toJSON()),
|
|
111
129
|
};
|
|
112
130
|
}
|
|
113
131
|
[NodeInspectSymbol]() {
|
|
@@ -115,10 +133,10 @@ export class HydrationTemplate {
|
|
|
115
133
|
}
|
|
116
134
|
}
|
|
117
135
|
export class HydrationMany {
|
|
136
|
+
_tag = "many";
|
|
118
137
|
key;
|
|
119
138
|
comment;
|
|
120
139
|
childNodes;
|
|
121
|
-
_tag = "many";
|
|
122
140
|
constructor(key, comment, childNodes) {
|
|
123
141
|
this.key = key;
|
|
124
142
|
this.comment = comment;
|
|
@@ -128,7 +146,7 @@ export class HydrationMany {
|
|
|
128
146
|
return {
|
|
129
147
|
_tag: this._tag,
|
|
130
148
|
key: this.key,
|
|
131
|
-
childNodes: this.childNodes.map((n) => n.toJSON())
|
|
149
|
+
childNodes: this.childNodes.map((n) => n.toJSON()),
|
|
132
150
|
};
|
|
133
151
|
}
|
|
134
152
|
[NodeInspectSymbol]() {
|
|
@@ -136,11 +154,11 @@ export class HydrationMany {
|
|
|
136
154
|
}
|
|
137
155
|
}
|
|
138
156
|
export class HydrationHole {
|
|
157
|
+
_tag = "hole";
|
|
139
158
|
index;
|
|
140
159
|
startComment;
|
|
141
160
|
endComment;
|
|
142
161
|
childNodes;
|
|
143
|
-
_tag = "hole";
|
|
144
162
|
constructor(index, startComment, endComment, childNodes) {
|
|
145
163
|
this.index = index;
|
|
146
164
|
this.startComment = startComment;
|
|
@@ -151,7 +169,7 @@ export class HydrationHole {
|
|
|
151
169
|
return {
|
|
152
170
|
_tag: this._tag,
|
|
153
171
|
index: this.index,
|
|
154
|
-
childNodes: this.childNodes.map((n) => n.toJSON())
|
|
172
|
+
childNodes: this.childNodes.map((n) => n.toJSON()),
|
|
155
173
|
};
|
|
156
174
|
}
|
|
157
175
|
[NodeInspectSymbol]() {
|
|
@@ -159,15 +177,15 @@ export class HydrationHole {
|
|
|
159
177
|
}
|
|
160
178
|
}
|
|
161
179
|
export class HydrationLiteral {
|
|
162
|
-
node;
|
|
163
180
|
_tag = "literal";
|
|
181
|
+
node;
|
|
164
182
|
constructor(node) {
|
|
165
183
|
this.node = node;
|
|
166
184
|
}
|
|
167
185
|
toJSON() {
|
|
168
186
|
return {
|
|
169
187
|
_tag: this._tag,
|
|
170
|
-
node: toHtml(this.node)
|
|
188
|
+
node: toHtml(this.node),
|
|
171
189
|
};
|
|
172
190
|
}
|
|
173
191
|
[NodeInspectSymbol]() {
|
|
@@ -186,14 +204,18 @@ export function getChildNodes(node) {
|
|
|
186
204
|
}
|
|
187
205
|
}
|
|
188
206
|
export function findHydrationTemplate(nodes, templateHash) {
|
|
207
|
+
let index = 0;
|
|
189
208
|
const toProcess = [...nodes];
|
|
190
|
-
while (toProcess.length
|
|
191
|
-
const node = toProcess
|
|
209
|
+
while (index < toProcess.length) {
|
|
210
|
+
const node = toProcess[index++];
|
|
192
211
|
if (node._tag === "template" && node.hash === templateHash) {
|
|
193
212
|
return node;
|
|
194
213
|
}
|
|
195
214
|
else if (node._tag === "element") {
|
|
196
|
-
|
|
215
|
+
const childNodes = node.childNodes;
|
|
216
|
+
for (let i = 0; i < childNodes.length; i++) {
|
|
217
|
+
toProcess.push(childNodes[i]);
|
|
218
|
+
}
|
|
197
219
|
}
|
|
198
220
|
}
|
|
199
221
|
return null;
|
|
@@ -256,10 +278,42 @@ export function getNodesExcludingStartComment(node) {
|
|
|
256
278
|
return node.childNodes.flatMap(getNodesExcludingStartComment);
|
|
257
279
|
}
|
|
258
280
|
}
|
|
259
|
-
export
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
281
|
+
export const findHydratePath = (node, path) => {
|
|
282
|
+
if (path.length === 0) {
|
|
283
|
+
return getNodesExcludingStartComment(node)[0];
|
|
284
|
+
}
|
|
285
|
+
// Get initial node without creating full array if possible
|
|
286
|
+
let current;
|
|
287
|
+
const firstIndex = path[0];
|
|
288
|
+
if (node._tag === "element") {
|
|
289
|
+
current = node.parentNode;
|
|
290
|
+
}
|
|
291
|
+
else if (node._tag === "literal") {
|
|
292
|
+
current = node.node;
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
// For holes, templates, many - need to get nodes array
|
|
296
|
+
const nodes = getNodesExcludingStartComment(node);
|
|
297
|
+
current = nodes[firstIndex];
|
|
298
|
+
}
|
|
299
|
+
// Traverse remaining path indices
|
|
300
|
+
for (let i = 1; i < path.length; i++) {
|
|
301
|
+
const index = path[i];
|
|
302
|
+
// Use secondary index to skip start comments without creating intermediate arrays
|
|
303
|
+
let targetIndex = 0;
|
|
304
|
+
for (let j = 0; j < current.childNodes.length; j++) {
|
|
305
|
+
const child = current.childNodes[j];
|
|
306
|
+
if (isNotStartComment(child)) {
|
|
307
|
+
if (targetIndex === index) {
|
|
308
|
+
current = child;
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
targetIndex++;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return current;
|
|
316
|
+
};
|
|
317
|
+
function isNotStartComment(node) {
|
|
318
|
+
return !isComment(node) || !node.data.startsWith("n_");
|
|
264
319
|
}
|
|
265
|
-
//# sourceMappingURL=hydration-template.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare function keyToPartType(key: string): readonly ["data"] | readonly ["properties"] | readonly ["ref"] | readonly ["class"] | readonly ["boolean", string] | readonly ["property", string] | readonly ["event", string] | readonly ["attr", string];
|
|
2
|
+
//# sourceMappingURL=keyToPartType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyToPartType.d.ts","sourceRoot":"","sources":["../../src/internal/keyToPartType.ts"],"names":[],"mappings":"AAoEA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,+MA4CxC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
function getCodePoints(str) {
|
|
2
|
+
return Array.from(str, (c) => c.codePointAt(0));
|
|
3
|
+
}
|
|
4
|
+
// Pre-computed character codes for fast comparisons
|
|
5
|
+
const CHAR_CODES = {
|
|
6
|
+
QUESTION: "?".codePointAt(0),
|
|
7
|
+
DOT: ".".codePointAt(0),
|
|
8
|
+
AT: "@".codePointAt(0),
|
|
9
|
+
LOWERCASE_O: "o".codePointAt(0),
|
|
10
|
+
LOWERCASE_N: "n".codePointAt(0),
|
|
11
|
+
UPPERCASE_A: "A".codePointAt(0),
|
|
12
|
+
UPPERCASE_Z: "Z".codePointAt(0),
|
|
13
|
+
CASE_OFFSET: "a".codePointAt(0) - "A".codePointAt(0),
|
|
14
|
+
};
|
|
15
|
+
// Pre-computed string patterns for exact matches
|
|
16
|
+
const PATTERNS = {
|
|
17
|
+
REF: getCodePoints("ref"),
|
|
18
|
+
CLASS: getCodePoints("class"),
|
|
19
|
+
CLASSNAME: getCodePoints("classname"),
|
|
20
|
+
DATA: getCodePoints(".data"),
|
|
21
|
+
PROPS: getCodePoints(".props"),
|
|
22
|
+
PROPERTIES: getCodePoints(".properties"),
|
|
23
|
+
};
|
|
24
|
+
const NAMES = {
|
|
25
|
+
ATTR: "attr",
|
|
26
|
+
BOOLEAN: "boolean",
|
|
27
|
+
REF: "ref",
|
|
28
|
+
CLASS: "class",
|
|
29
|
+
DATA: "data",
|
|
30
|
+
EVENT: "event",
|
|
31
|
+
PROPERTY: "property",
|
|
32
|
+
PROPERTIES: "properties",
|
|
33
|
+
};
|
|
34
|
+
const NAME_TUPLE = {
|
|
35
|
+
DATA: [NAMES.DATA],
|
|
36
|
+
PROPERTIES: [NAMES.PROPERTIES],
|
|
37
|
+
REF: [NAMES.REF],
|
|
38
|
+
CLASS: [NAMES.CLASS],
|
|
39
|
+
BOOLEAN: (key) => [NAMES.BOOLEAN, key],
|
|
40
|
+
PROPERTY: (key) => [NAMES.PROPERTY, key],
|
|
41
|
+
EVENT: (key) => [NAMES.EVENT, fastUncapitalize(key)],
|
|
42
|
+
ATTR: (key) => [NAMES.ATTR, key],
|
|
43
|
+
};
|
|
44
|
+
// Fast uncapitalize using pre-computed character codes
|
|
45
|
+
function fastUncapitalize(str) {
|
|
46
|
+
if (str.length === 0)
|
|
47
|
+
return str;
|
|
48
|
+
const first = str.codePointAt(0);
|
|
49
|
+
if (first >= CHAR_CODES.UPPERCASE_A && first <= CHAR_CODES.UPPERCASE_Z) {
|
|
50
|
+
return String.fromCodePoint(first + CHAR_CODES.CASE_OFFSET) + str.slice(1);
|
|
51
|
+
}
|
|
52
|
+
return str;
|
|
53
|
+
}
|
|
54
|
+
// Fast string comparison using pre-computed patterns
|
|
55
|
+
function matchesPattern(str, pattern) {
|
|
56
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
57
|
+
if (str.codePointAt(i) !== pattern[i])
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
export function keyToPartType(key) {
|
|
63
|
+
const len = key.length;
|
|
64
|
+
// Check for static keys
|
|
65
|
+
switch (len) {
|
|
66
|
+
case 3: {
|
|
67
|
+
if (matchesPattern(key, PATTERNS.REF))
|
|
68
|
+
return NAME_TUPLE.REF;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
case 5: {
|
|
72
|
+
if (matchesPattern(key, PATTERNS.DATA))
|
|
73
|
+
return NAME_TUPLE.DATA;
|
|
74
|
+
if (matchesPattern(key, PATTERNS.CLASS))
|
|
75
|
+
return NAME_TUPLE.CLASS;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
case 6: {
|
|
79
|
+
if (matchesPattern(key, PATTERNS.PROPS))
|
|
80
|
+
return NAME_TUPLE.PROPERTIES;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
case 9: {
|
|
84
|
+
if (matchesPattern(key, PATTERNS.CLASSNAME))
|
|
85
|
+
return NAME_TUPLE.CLASS;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case 11: {
|
|
89
|
+
if (matchesPattern(key, PATTERNS.PROPERTIES))
|
|
90
|
+
return NAME_TUPLE.PROPERTIES;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Check for special prefixes
|
|
94
|
+
const first = key.codePointAt(0);
|
|
95
|
+
switch (first) {
|
|
96
|
+
case CHAR_CODES.QUESTION:
|
|
97
|
+
return NAME_TUPLE.BOOLEAN(key.slice(1));
|
|
98
|
+
case CHAR_CODES.DOT:
|
|
99
|
+
return NAME_TUPLE.PROPERTY(key.slice(1));
|
|
100
|
+
case CHAR_CODES.AT:
|
|
101
|
+
return NAME_TUPLE.EVENT(fastUncapitalize(key.slice(1)));
|
|
102
|
+
case CHAR_CODES.LOWERCASE_O: {
|
|
103
|
+
if (key.codePointAt(1) === CHAR_CODES.LOWERCASE_N)
|
|
104
|
+
return NAME_TUPLE.EVENT(fastUncapitalize(key.slice(2)));
|
|
105
|
+
return NAME_TUPLE.ATTR(key);
|
|
106
|
+
}
|
|
107
|
+
default:
|
|
108
|
+
return NAME_TUPLE.ATTR(key);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const PART_REGEX: RegExp;
|
|
2
|
+
export declare const STRICT_PART_REGEX: RegExp;
|
|
3
|
+
export declare const PART_STRING: (i: number) => string;
|
|
4
|
+
export declare const TEMPLATE_START_COMMENT: (hash: string) => string;
|
|
5
|
+
export declare const TEMPLATE_END_COMMENT: (hash: string) => string;
|
|
6
|
+
export declare const TEXT_START = "<!--txt-->";
|
|
7
|
+
export declare const TYPED_NODE_START: (i: number) => string;
|
|
8
|
+
export declare const TYPED_NODE_END: (i: number) => string;
|
|
9
|
+
export declare const TYPED_COMMENT_PART: (i: number) => string;
|
|
10
|
+
export declare const isTemplateStartComment: (comment: {
|
|
11
|
+
nodeValue: string;
|
|
12
|
+
}) => boolean;
|
|
13
|
+
export declare const isTemplateEndComment: (comment: {
|
|
14
|
+
nodeValue: string;
|
|
15
|
+
}) => boolean;
|
|
16
|
+
export declare const stripTypedTemplateComments: (html: string) => string;
|
|
17
|
+
//# sourceMappingURL=meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/internal/meta.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,QAAqB,CAAC;AAC7C,eAAO,MAAM,iBAAiB,QAAqB,CAAC;AACpD,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,WAAe,CAAC;AAErD,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,WAAuB,CAAC;AAC3E,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,WAAwB,CAAC;AAE1E,eAAO,MAAM,UAAU,eAAe,CAAC;AAEvC,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,WAAoB,CAAC;AAC/D,eAAO,MAAM,cAAc,GAAI,GAAG,MAAM,WAAqB,CAAC;AAE9D,eAAO,MAAM,kBAAkB,GAAI,GAAG,MAAM,WAAoB,CAAC;AAKjE,eAAO,MAAM,sBAAsB,GAAI,SAAS;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,YACb,CAAC;AAEzD,eAAO,MAAM,oBAAoB,GAAI,SAAS;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,YACb,CAAC;AAEvD,eAAO,MAAM,0BAA0B,GAAI,MAAM,MAAM,WACqC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const PART_REGEX = /(\{\{(\d+)\}\})/g;
|
|
2
|
+
export const STRICT_PART_REGEX = /^(\{\{(\d+)\}\})/;
|
|
3
|
+
export const PART_STRING = (i) => `{{${i}}}`;
|
|
4
|
+
export const TEMPLATE_START_COMMENT = (hash) => `<!--t_${hash}-->`;
|
|
5
|
+
export const TEMPLATE_END_COMMENT = (hash) => `<!--/t_${hash}-->`;
|
|
6
|
+
export const TEXT_START = "<!--txt-->";
|
|
7
|
+
export const TYPED_NODE_START = (i) => `<!--n_${i}-->`;
|
|
8
|
+
export const TYPED_NODE_END = (i) => `<!--/n_${i}-->`;
|
|
9
|
+
export const TYPED_COMMENT_PART = (i) => `<!--c_${i}-->`;
|
|
10
|
+
const typedTemplateStartCommentRegex = /<!--[t|n|txt]_(.*?)-->/g;
|
|
11
|
+
const typedTemplateEndCommentRegex = /<!--\/[t|n|txt]_(.*?)-->/g;
|
|
12
|
+
export const isTemplateStartComment = (comment) => typedTemplateStartCommentRegex.test(comment.nodeValue);
|
|
13
|
+
export const isTemplateEndComment = (comment) => typedTemplateEndCommentRegex.test(comment.nodeValue);
|
|
14
|
+
export const stripTypedTemplateComments = (html) => html.replace(typedTemplateStartCommentRegex, "").replace(typedTemplateEndCommentRegex, "");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"takeOneIfNotRenderEvent.d.ts","sourceRoot":"","sources":["../../src/internal/takeOneIfNotRenderEvent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAQ,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7C,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACjB,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAWlC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { Fx, Sink } from "@typed/fx";
|
|
3
|
+
import { isHtmlRenderEvent } from "../RenderEvent.js";
|
|
4
|
+
export function takeOneIfNotRenderEvent(fx) {
|
|
5
|
+
return Fx.make((sink) => Sink.withEarlyExit(sink, (sink) => fx.run(Sink.make(sink.onFailure, (event) => {
|
|
6
|
+
if (isHtmlRenderEvent(event) && !event.last)
|
|
7
|
+
return sink.onSuccess(event);
|
|
8
|
+
return Effect.flatMap(sink.onSuccess(event), () => sink.earlyExit);
|
|
9
|
+
}))));
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateHash.d.ts","sourceRoot":"","sources":["../../src/internal/templateHash.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,UAa1D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const digestSize = 2;
|
|
2
|
+
const multiplier = 33;
|
|
3
|
+
const fill = 5381;
|
|
4
|
+
export function templateHash(strings) {
|
|
5
|
+
const hashes = new Uint32Array(digestSize).fill(fill);
|
|
6
|
+
for (let i = 0; i < strings.length; i++) {
|
|
7
|
+
const string = strings[i];
|
|
8
|
+
for (let j = 0; j < string.length; j++) {
|
|
9
|
+
const key = j % digestSize;
|
|
10
|
+
hashes[key] = hashes[key] * multiplier + string.charCodeAt(j);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return btoa(String.fromCharCode(...new Uint8Array(hashes.buffer)));
|
|
14
|
+
}
|