@typed/template 0.14.0 → 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -2
- package/dist/EventHandler.d.ts +273 -0
- package/dist/EventHandler.d.ts.map +1 -0
- package/dist/EventHandler.js +261 -0
- package/dist/EventSource.d.ts +82 -0
- package/dist/EventSource.d.ts.map +1 -0
- package/dist/EventSource.js +127 -0
- package/dist/Html.d.ts +122 -0
- package/dist/Html.d.ts.map +1 -0
- package/dist/Html.js +250 -0
- package/dist/HtmlChunk.d.ts +118 -0
- package/dist/HtmlChunk.d.ts.map +1 -0
- package/dist/HtmlChunk.js +211 -0
- package/dist/HydrateContext.d.ts +28 -0
- package/dist/HydrateContext.d.ts.map +1 -0
- package/dist/HydrateContext.js +25 -0
- package/dist/Parser.d.ts +35 -0
- package/dist/Parser.d.ts.map +1 -0
- package/dist/Parser.js +437 -0
- package/dist/Render.d.ts +195 -0
- package/dist/Render.d.ts.map +1 -0
- package/dist/Render.js +609 -0
- package/dist/RenderEvent.d.ts +179 -0
- package/dist/RenderEvent.d.ts.map +1 -0
- package/dist/RenderEvent.js +102 -0
- package/dist/RenderQueue.d.ts +167 -0
- package/dist/RenderQueue.d.ts.map +1 -0
- package/dist/RenderQueue.js +298 -0
- package/dist/RenderTemplate.d.ts +90 -0
- package/dist/RenderTemplate.d.ts.map +1 -0
- package/dist/RenderTemplate.js +87 -0
- package/dist/Renderable.d.ts +88 -0
- package/dist/Renderable.d.ts.map +1 -0
- package/dist/Renderable.js +3 -0
- package/dist/{dts/Template.d.ts → Template.d.ts} +109 -74
- package/dist/Template.d.ts.map +1 -0
- package/dist/{esm/Template.js → Template.js} +96 -56
- package/dist/Wire.d.ts +169 -0
- package/dist/Wire.d.ts.map +1 -0
- package/dist/Wire.js +217 -0
- package/dist/errors.d.ts +145 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +159 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/internal/IndexRefCounter.d.ts +11 -0
- package/dist/internal/IndexRefCounter.d.ts.map +1 -0
- package/dist/internal/IndexRefCounter.js +42 -0
- package/dist/internal/ParentChildNodes.d.ts +6 -0
- package/dist/internal/ParentChildNodes.d.ts.map +1 -0
- package/dist/internal/ParentChildNodes.js +1 -0
- package/dist/internal/PathStack.d.ts +9 -0
- package/dist/internal/PathStack.d.ts.map +1 -0
- package/dist/internal/PathStack.js +18 -0
- package/dist/internal/buildTemplateFragement.d.ts +3 -0
- package/dist/internal/buildTemplateFragement.d.ts.map +1 -0
- package/dist/internal/buildTemplateFragement.js +61 -0
- package/dist/internal/diff.d.ts +2 -0
- package/dist/internal/diff.d.ts.map +1 -0
- package/dist/internal/diff.js +119 -0
- package/dist/internal/dom.d.ts +45 -0
- package/dist/internal/dom.d.ts.map +1 -0
- package/dist/internal/dom.js +304 -0
- package/dist/internal/encoding.d.ts +7 -0
- package/dist/internal/encoding.d.ts.map +1 -0
- package/dist/internal/encoding.js +134 -0
- package/dist/{dts/internal/v2/hydration-template.d.ts → internal/hydration.d.ts} +10 -7
- package/dist/internal/hydration.d.ts.map +1 -0
- package/dist/{esm/internal/v2/hydration-template.js → internal/hydration.js} +80 -26
- package/dist/internal/keyToPartType.d.ts +2 -0
- package/dist/internal/keyToPartType.d.ts.map +1 -0
- package/dist/internal/keyToPartType.js +110 -0
- package/dist/internal/meta.d.ts +17 -0
- package/dist/internal/meta.d.ts.map +1 -0
- package/dist/internal/meta.js +14 -0
- package/dist/internal/takeOneIfNotRenderEvent.d.ts +4 -0
- package/dist/internal/takeOneIfNotRenderEvent.d.ts.map +1 -0
- package/dist/internal/takeOneIfNotRenderEvent.js +10 -0
- package/dist/internal/templateHash.d.ts +2 -0
- package/dist/internal/templateHash.d.ts.map +1 -0
- package/dist/internal/templateHash.js +14 -0
- package/dist/many.d.ts +68 -0
- package/dist/many.d.ts.map +1 -0
- package/dist/many.js +107 -0
- package/package.json +29 -227
- package/src/EventHandler.ts +318 -86
- package/src/EventSource.ts +202 -0
- package/src/Html.test.ts +490 -0
- package/src/Html.ts +292 -333
- package/src/HtmlChunk.ts +290 -332
- package/src/HydrateContext.ts +40 -0
- package/src/Hydration.test.ts +408 -0
- package/src/Parser.test.ts +923 -0
- package/src/Parser.ts +598 -10
- package/src/Render.test.ts +337 -0
- package/src/Render.ts +878 -63
- package/src/RenderEvent.ts +169 -40
- package/src/RenderQueue.ts +291 -385
- package/src/RenderTemplate.ts +98 -31
- package/src/Renderable.ts +122 -24
- package/src/Template.ts +246 -145
- package/src/Wire.ts +309 -0
- package/src/errors.ts +173 -0
- package/src/index.ts +14 -66
- package/src/internal/IndexRefCounter.ts +53 -0
- package/src/internal/ParentChildNodes.ts +7 -0
- package/src/internal/PathStack.ts +23 -0
- package/src/internal/buildTemplateFragement.ts +82 -0
- package/src/internal/diff.ts +127 -0
- package/src/internal/dom.ts +357 -0
- package/src/internal/encoding.ts +147 -0
- package/src/internal/hydration.ts +406 -0
- package/src/internal/keyToPartType.ts +113 -0
- package/src/internal/meta.ts +25 -0
- package/src/internal/takeOneIfNotRenderEvent.ts +19 -0
- package/src/internal/templateHash.ts +18 -0
- package/src/many.ts +148 -0
- package/Directive/package.json +0 -6
- package/ElementRef/package.json +0 -6
- package/ElementSource/package.json +0 -6
- package/Entry/package.json +0 -6
- package/EventHandler/package.json +0 -6
- package/Html/package.json +0 -6
- package/HtmlChunk/package.json +0 -6
- package/Hydrate/package.json +0 -6
- package/LICENSE +0 -21
- package/Many/package.json +0 -6
- package/Meta/package.json +0 -6
- package/Parser/package.json +0 -6
- package/Part/package.json +0 -6
- package/Placeholder/package.json +0 -6
- package/Platform/package.json +0 -6
- package/Render/package.json +0 -6
- package/RenderContext/package.json +0 -6
- package/RenderEvent/package.json +0 -6
- package/RenderQueue/package.json +0 -6
- package/RenderTemplate/package.json +0 -6
- package/Renderable/package.json +0 -6
- package/Template/package.json +0 -6
- package/Test/package.json +0 -6
- package/Vitest/package.json +0 -6
- package/compiler-tools/package.json +0 -6
- package/dist/cjs/Directive.js +0 -76
- package/dist/cjs/Directive.js.map +0 -1
- package/dist/cjs/ElementRef.js +0 -92
- package/dist/cjs/ElementRef.js.map +0 -1
- package/dist/cjs/ElementSource.js +0 -246
- package/dist/cjs/ElementSource.js.map +0 -1
- package/dist/cjs/Entry.js +0 -6
- package/dist/cjs/Entry.js.map +0 -1
- package/dist/cjs/EventHandler.js +0 -76
- package/dist/cjs/EventHandler.js.map +0 -1
- package/dist/cjs/Html.js +0 -224
- package/dist/cjs/Html.js.map +0 -1
- package/dist/cjs/HtmlChunk.js +0 -306
- package/dist/cjs/HtmlChunk.js.map +0 -1
- package/dist/cjs/Hydrate.js +0 -43
- package/dist/cjs/Hydrate.js.map +0 -1
- package/dist/cjs/Many.js +0 -66
- package/dist/cjs/Many.js.map +0 -1
- package/dist/cjs/Meta.js +0 -50
- package/dist/cjs/Meta.js.map +0 -1
- package/dist/cjs/Parser.js +0 -19
- package/dist/cjs/Parser.js.map +0 -1
- package/dist/cjs/Part.js +0 -6
- package/dist/cjs/Part.js.map +0 -1
- package/dist/cjs/Placeholder.js +0 -34
- package/dist/cjs/Placeholder.js.map +0 -1
- package/dist/cjs/Platform.js +0 -65
- package/dist/cjs/Platform.js.map +0 -1
- package/dist/cjs/Render.js +0 -50
- package/dist/cjs/Render.js.map +0 -1
- package/dist/cjs/RenderContext.js +0 -67
- package/dist/cjs/RenderContext.js.map +0 -1
- package/dist/cjs/RenderEvent.js +0 -52
- package/dist/cjs/RenderEvent.js.map +0 -1
- package/dist/cjs/RenderQueue.js +0 -343
- package/dist/cjs/RenderQueue.js.map +0 -1
- package/dist/cjs/RenderTemplate.js +0 -26
- package/dist/cjs/RenderTemplate.js.map +0 -1
- package/dist/cjs/Renderable.js +0 -6
- package/dist/cjs/Renderable.js.map +0 -1
- package/dist/cjs/Template.js +0 -305
- package/dist/cjs/Template.js.map +0 -1
- package/dist/cjs/Test.js +0 -184
- package/dist/cjs/Test.js.map +0 -1
- package/dist/cjs/Vitest.js +0 -52
- package/dist/cjs/Vitest.js.map +0 -1
- package/dist/cjs/compiler-tools.js +0 -100
- package/dist/cjs/compiler-tools.js.map +0 -1
- package/dist/cjs/index.js +0 -138
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/internal/EventSource.js +0 -129
- package/dist/cjs/internal/EventSource.js.map +0 -1
- package/dist/cjs/internal/HydrateContext.js +0 -13
- package/dist/cjs/internal/HydrateContext.js.map +0 -1
- package/dist/cjs/internal/browser.js +0 -110
- package/dist/cjs/internal/browser.js.map +0 -1
- package/dist/cjs/internal/character-entities.js +0 -2141
- package/dist/cjs/internal/character-entities.js.map +0 -1
- package/dist/cjs/internal/chunks.js +0 -68
- package/dist/cjs/internal/chunks.js.map +0 -1
- package/dist/cjs/internal/errors.js +0 -52
- package/dist/cjs/internal/errors.js.map +0 -1
- package/dist/cjs/internal/indexRefCounter.js +0 -52
- package/dist/cjs/internal/indexRefCounter.js.map +0 -1
- package/dist/cjs/internal/module-augmentation.js +0 -6
- package/dist/cjs/internal/module-augmentation.js.map +0 -1
- package/dist/cjs/internal/parser.js +0 -568
- package/dist/cjs/internal/parser.js.map +0 -1
- package/dist/cjs/internal/parser2.js +0 -382
- package/dist/cjs/internal/parser2.js.map +0 -1
- package/dist/cjs/internal/server-parts.js +0 -124
- package/dist/cjs/internal/server-parts.js.map +0 -1
- package/dist/cjs/internal/server.js +0 -48
- package/dist/cjs/internal/server.js.map +0 -1
- package/dist/cjs/internal/utils.js +0 -136
- package/dist/cjs/internal/utils.js.map +0 -1
- package/dist/cjs/internal/v2/SyncPart.js +0 -6
- package/dist/cjs/internal/v2/SyncPart.js.map +0 -1
- package/dist/cjs/internal/v2/helpers.js +0 -15
- package/dist/cjs/internal/v2/helpers.js.map +0 -1
- package/dist/cjs/internal/v2/hydration-template.js +0 -269
- package/dist/cjs/internal/v2/hydration-template.js.map +0 -1
- package/dist/cjs/internal/v2/parts.js +0 -169
- package/dist/cjs/internal/v2/parts.js.map +0 -1
- package/dist/cjs/internal/v2/render-entry.js +0 -110
- package/dist/cjs/internal/v2/render-entry.js.map +0 -1
- package/dist/cjs/internal/v2/render-sync-parts.js +0 -318
- package/dist/cjs/internal/v2/render-sync-parts.js.map +0 -1
- package/dist/cjs/internal/v2/render.js +0 -592
- package/dist/cjs/internal/v2/render.js.map +0 -1
- package/dist/cjs/internal/v2/sync-parts.js +0 -115
- package/dist/cjs/internal/v2/sync-parts.js.map +0 -1
- package/dist/dts/Directive.d.ts +0 -70
- package/dist/dts/Directive.d.ts.map +0 -1
- package/dist/dts/ElementRef.d.ts +0 -42
- package/dist/dts/ElementRef.d.ts.map +0 -1
- package/dist/dts/ElementSource.d.ts +0 -79
- package/dist/dts/ElementSource.d.ts.map +0 -1
- package/dist/dts/Entry.d.ts +0 -26
- package/dist/dts/Entry.d.ts.map +0 -1
- package/dist/dts/EventHandler.d.ts +0 -73
- package/dist/dts/EventHandler.d.ts.map +0 -1
- package/dist/dts/Html.d.ts +0 -35
- package/dist/dts/Html.d.ts.map +0 -1
- package/dist/dts/HtmlChunk.d.ts +0 -56
- package/dist/dts/HtmlChunk.d.ts.map +0 -1
- package/dist/dts/Hydrate.d.ts +0 -19
- package/dist/dts/Hydrate.d.ts.map +0 -1
- package/dist/dts/Many.d.ts +0 -32
- package/dist/dts/Many.d.ts.map +0 -1
- package/dist/dts/Meta.d.ts +0 -33
- package/dist/dts/Meta.d.ts.map +0 -1
- package/dist/dts/Parser.d.ts +0 -13
- package/dist/dts/Parser.d.ts.map +0 -1
- package/dist/dts/Part.d.ts +0 -121
- package/dist/dts/Part.d.ts.map +0 -1
- package/dist/dts/Placeholder.d.ts +0 -48
- package/dist/dts/Placeholder.d.ts.map +0 -1
- package/dist/dts/Platform.d.ts +0 -21
- package/dist/dts/Platform.d.ts.map +0 -1
- package/dist/dts/Render.d.ts +0 -31
- package/dist/dts/Render.d.ts.map +0 -1
- package/dist/dts/RenderContext.d.ts +0 -70
- package/dist/dts/RenderContext.d.ts.map +0 -1
- package/dist/dts/RenderEvent.d.ts +0 -42
- package/dist/dts/RenderEvent.d.ts.map +0 -1
- package/dist/dts/RenderQueue.d.ts +0 -103
- package/dist/dts/RenderQueue.d.ts.map +0 -1
- package/dist/dts/RenderTemplate.d.ts +0 -25
- package/dist/dts/RenderTemplate.d.ts.map +0 -1
- package/dist/dts/Renderable.d.ts +0 -28
- package/dist/dts/Renderable.d.ts.map +0 -1
- package/dist/dts/Template.d.ts.map +0 -1
- package/dist/dts/Test.d.ts +0 -85
- package/dist/dts/Test.d.ts.map +0 -1
- package/dist/dts/Vitest.d.ts +0 -43
- package/dist/dts/Vitest.d.ts.map +0 -1
- package/dist/dts/compiler-tools.d.ts +0 -143
- package/dist/dts/compiler-tools.d.ts.map +0 -1
- package/dist/dts/index.d.ts +0 -65
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/dts/internal/EventSource.d.ts +0 -13
- package/dist/dts/internal/EventSource.d.ts.map +0 -1
- package/dist/dts/internal/HydrateContext.d.ts +0 -2
- package/dist/dts/internal/HydrateContext.d.ts.map +0 -1
- package/dist/dts/internal/browser.d.ts +0 -8
- package/dist/dts/internal/browser.d.ts.map +0 -1
- package/dist/dts/internal/character-entities.d.ts +0 -2133
- package/dist/dts/internal/character-entities.d.ts.map +0 -1
- package/dist/dts/internal/chunks.d.ts +0 -23
- package/dist/dts/internal/chunks.d.ts.map +0 -1
- package/dist/dts/internal/errors.d.ts +0 -22
- package/dist/dts/internal/errors.d.ts.map +0 -1
- package/dist/dts/internal/indexRefCounter.d.ts +0 -7
- package/dist/dts/internal/indexRefCounter.d.ts.map +0 -1
- package/dist/dts/internal/module-augmentation.d.ts +0 -32
- package/dist/dts/internal/module-augmentation.d.ts.map +0 -1
- package/dist/dts/internal/parser.d.ts +0 -33
- package/dist/dts/internal/parser.d.ts.map +0 -1
- package/dist/dts/internal/parser2.d.ts +0 -12
- package/dist/dts/internal/parser2.d.ts.map +0 -1
- package/dist/dts/internal/server-parts.d.ts +0 -223
- package/dist/dts/internal/server-parts.d.ts.map +0 -1
- package/dist/dts/internal/server.d.ts +0 -5
- package/dist/dts/internal/server.d.ts.map +0 -1
- package/dist/dts/internal/utils.d.ts +0 -19
- package/dist/dts/internal/utils.d.ts.map +0 -1
- package/dist/dts/internal/v2/SyncPart.d.ts +0 -87
- package/dist/dts/internal/v2/SyncPart.d.ts.map +0 -1
- package/dist/dts/internal/v2/helpers.d.ts +0 -3
- package/dist/dts/internal/v2/helpers.d.ts.map +0 -1
- package/dist/dts/internal/v2/hydration-template.d.ts.map +0 -1
- package/dist/dts/internal/v2/parts.d.ts +0 -245
- package/dist/dts/internal/v2/parts.d.ts.map +0 -1
- package/dist/dts/internal/v2/render-entry.d.ts +0 -6
- package/dist/dts/internal/v2/render-entry.d.ts.map +0 -1
- package/dist/dts/internal/v2/render-sync-parts.d.ts +0 -22
- package/dist/dts/internal/v2/render-sync-parts.d.ts.map +0 -1
- package/dist/dts/internal/v2/render.d.ts +0 -83
- package/dist/dts/internal/v2/render.d.ts.map +0 -1
- package/dist/dts/internal/v2/sync-parts.d.ts +0 -129
- package/dist/dts/internal/v2/sync-parts.d.ts.map +0 -1
- package/dist/esm/Directive.js +0 -64
- package/dist/esm/Directive.js.map +0 -1
- package/dist/esm/ElementRef.js +0 -76
- package/dist/esm/ElementRef.js.map +0 -1
- package/dist/esm/ElementSource.js +0 -246
- package/dist/esm/ElementSource.js.map +0 -1
- package/dist/esm/Entry.js +0 -2
- package/dist/esm/Entry.js.map +0 -1
- package/dist/esm/EventHandler.js +0 -68
- package/dist/esm/EventHandler.js.map +0 -1
- package/dist/esm/Html.js +0 -230
- package/dist/esm/Html.js.map +0 -1
- package/dist/esm/HtmlChunk.js +0 -330
- package/dist/esm/HtmlChunk.js.map +0 -1
- package/dist/esm/Hydrate.js +0 -31
- package/dist/esm/Hydrate.js.map +0 -1
- package/dist/esm/Many.js +0 -54
- package/dist/esm/Many.js.map +0 -1
- package/dist/esm/Meta.js +0 -40
- package/dist/esm/Meta.js.map +0 -1
- package/dist/esm/Parser.js +0 -13
- package/dist/esm/Parser.js.map +0 -1
- package/dist/esm/Part.js +0 -5
- package/dist/esm/Part.js.map +0 -1
- package/dist/esm/Placeholder.js +0 -26
- package/dist/esm/Placeholder.js.map +0 -1
- package/dist/esm/Platform.js +0 -42
- package/dist/esm/Platform.js.map +0 -1
- package/dist/esm/Render.js +0 -36
- package/dist/esm/Render.js.map +0 -1
- package/dist/esm/RenderContext.js +0 -54
- package/dist/esm/RenderContext.js.map +0 -1
- package/dist/esm/RenderEvent.js +0 -43
- package/dist/esm/RenderEvent.js.map +0 -1
- package/dist/esm/RenderQueue.js +0 -338
- package/dist/esm/RenderQueue.js.map +0 -1
- package/dist/esm/RenderTemplate.js +0 -16
- package/dist/esm/RenderTemplate.js.map +0 -1
- package/dist/esm/Renderable.js +0 -2
- package/dist/esm/Renderable.js.map +0 -1
- package/dist/esm/Template.js.map +0 -1
- package/dist/esm/Test.js +0 -167
- package/dist/esm/Test.js.map +0 -1
- package/dist/esm/Vitest.js +0 -44
- package/dist/esm/Vitest.js.map +0 -1
- package/dist/esm/compiler-tools.js +0 -91
- package/dist/esm/compiler-tools.js.map +0 -1
- package/dist/esm/index.js +0 -65
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/internal/EventSource.js +0 -126
- package/dist/esm/internal/EventSource.js.map +0 -1
- package/dist/esm/internal/HydrateContext.js +0 -7
- package/dist/esm/internal/HydrateContext.js.map +0 -1
- package/dist/esm/internal/browser.js +0 -103
- package/dist/esm/internal/browser.js.map +0 -1
- package/dist/esm/internal/character-entities.js +0 -2134
- package/dist/esm/internal/character-entities.js.map +0 -1
- package/dist/esm/internal/chunks.js +0 -60
- package/dist/esm/internal/chunks.js.map +0 -1
- package/dist/esm/internal/errors.js +0 -46
- package/dist/esm/internal/errors.js.map +0 -1
- package/dist/esm/internal/indexRefCounter.js +0 -47
- package/dist/esm/internal/indexRefCounter.js.map +0 -1
- package/dist/esm/internal/module-augmentation.js +0 -2
- package/dist/esm/internal/module-augmentation.js.map +0 -1
- package/dist/esm/internal/parser.js +0 -596
- package/dist/esm/internal/parser.js.map +0 -1
- package/dist/esm/internal/parser2.js +0 -393
- package/dist/esm/internal/parser2.js.map +0 -1
- package/dist/esm/internal/server-parts.js +0 -109
- package/dist/esm/internal/server-parts.js.map +0 -1
- package/dist/esm/internal/server.js +0 -22
- package/dist/esm/internal/server.js.map +0 -1
- package/dist/esm/internal/utils.js +0 -119
- package/dist/esm/internal/utils.js.map +0 -1
- package/dist/esm/internal/v2/SyncPart.js +0 -5
- package/dist/esm/internal/v2/SyncPart.js.map +0 -1
- package/dist/esm/internal/v2/helpers.js +0 -12
- package/dist/esm/internal/v2/helpers.js.map +0 -1
- package/dist/esm/internal/v2/hydration-template.js.map +0 -1
- package/dist/esm/internal/v2/parts.js +0 -150
- package/dist/esm/internal/v2/parts.js.map +0 -1
- package/dist/esm/internal/v2/render-entry.js +0 -102
- package/dist/esm/internal/v2/render-entry.js.map +0 -1
- package/dist/esm/internal/v2/render-sync-parts.js +0 -265
- package/dist/esm/internal/v2/render-sync-parts.js.map +0 -1
- package/dist/esm/internal/v2/render.js +0 -521
- package/dist/esm/internal/v2/render.js.map +0 -1
- package/dist/esm/internal/v2/sync-parts.js +0 -102
- package/dist/esm/internal/v2/sync-parts.js.map +0 -1
- package/dist/esm/package.json +0 -4
- package/src/Directive.ts +0 -114
- package/src/ElementRef.ts +0 -148
- package/src/ElementSource.ts +0 -510
- package/src/Entry.ts +0 -28
- package/src/Hydrate.ts +0 -51
- package/src/Many.ts +0 -161
- package/src/Meta.ts +0 -45
- package/src/Part.ts +0 -154
- package/src/Placeholder.ts +0 -78
- package/src/Platform.ts +0 -70
- package/src/RenderContext.ts +0 -121
- package/src/Test.ts +0 -354
- package/src/Vitest.ts +0 -141
- package/src/compiler-tools.ts +0 -250
- package/src/internal/EventSource.ts +0 -188
- package/src/internal/HydrateContext.ts +0 -22
- package/src/internal/browser.ts +0 -138
- package/src/internal/character-entities.ts +0 -2136
- package/src/internal/chunks.ts +0 -89
- package/src/internal/errors.ts +0 -49
- package/src/internal/external.d.ts +0 -11
- package/src/internal/indexRefCounter.ts +0 -54
- package/src/internal/module-augmentation.ts +0 -44
- package/src/internal/parser.ts +0 -757
- package/src/internal/parser2.ts +0 -468
- package/src/internal/server-parts.ts +0 -161
- package/src/internal/server.ts +0 -37
- package/src/internal/utils.ts +0 -153
- package/src/internal/v2/SyncPart.ts +0 -112
- package/src/internal/v2/helpers.ts +0 -13
- package/src/internal/v2/hydration-template.ts +0 -308
- package/src/internal/v2/parts.ts +0 -254
- package/src/internal/v2/render-entry.ts +0 -131
- package/src/internal/v2/render-sync-parts.ts +0 -440
- package/src/internal/v2/render.ts +0 -813
- package/src/internal/v2/sync-parts.ts +0 -133
package/src/Many.ts
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @since 1.0.0
|
|
3
|
-
*/
|
|
4
|
-
import type * as AsyncData from "@typed/async-data/AsyncData"
|
|
5
|
-
import type { Progress } from "@typed/async-data/Progress"
|
|
6
|
-
import * as RefAsyncData from "@typed/fx/AsyncData"
|
|
7
|
-
import * as Fx from "@typed/fx/Fx"
|
|
8
|
-
import * as RefSubject from "@typed/fx/RefSubject"
|
|
9
|
-
import { get, getOption } from "effect/Context"
|
|
10
|
-
import * as Effect from "effect/Effect"
|
|
11
|
-
import { dual } from "effect/Function"
|
|
12
|
-
import { isSome } from "effect/Option"
|
|
13
|
-
import type * as Scope from "effect/Scope"
|
|
14
|
-
import { HydrateContext } from "./internal/HydrateContext.js"
|
|
15
|
-
import { MANY_HOLE } from "./Meta.js"
|
|
16
|
-
import { RenderContext } from "./RenderContext.js"
|
|
17
|
-
import { HtmlRenderEvent, type RenderEvent } from "./RenderEvent.js"
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @since 1.0.0
|
|
21
|
-
*/
|
|
22
|
-
export function many<A, E, R, B extends PropertyKey, R2, E2>(
|
|
23
|
-
values: Fx.Fx<ReadonlyArray<A>, E, R>,
|
|
24
|
-
getKey: (a: NoInfer<A>) => B,
|
|
25
|
-
f: (a: RefSubject.RefSubject<A>, key: B) => Fx.Fx<RenderEvent, E2, R2>
|
|
26
|
-
): Fx.Fx<RenderEvent | ReadonlyArray<RenderEvent>, E | E2, R | R2 | Scope.Scope | RenderContext> {
|
|
27
|
-
return Fx.fromFxEffect(
|
|
28
|
-
Effect.contextWith(
|
|
29
|
-
(context): Fx.Fx<RenderEvent | ReadonlyArray<RenderEvent>, E | E2, R | R2 | RenderContext | Scope.Scope> => {
|
|
30
|
-
const ctx = get(context, RenderContext)
|
|
31
|
-
const hydrateContext = getOption(context, HydrateContext)
|
|
32
|
-
|
|
33
|
-
if (ctx.environment === "dom" || ctx.environment === "test:dom") {
|
|
34
|
-
// If we're hydrating, attempt to provide the correct HydrateContext to rendering Fx
|
|
35
|
-
if (isSome(hydrateContext) && hydrateContext.value.hydrate) {
|
|
36
|
-
return Fx.keyed(values, {
|
|
37
|
-
getKey,
|
|
38
|
-
onValue: (ref, key) =>
|
|
39
|
-
Fx.provideService(f(ref, key), HydrateContext, { ...hydrateContext.value, manyKey: key.toString() })
|
|
40
|
-
})
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// In other environments we just used Fx.keyed to allow indefinite subscriptions to RefSubjects
|
|
44
|
-
return Fx.keyed(values, {
|
|
45
|
-
getKey,
|
|
46
|
-
onValue: f
|
|
47
|
-
})
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// When rendering HTML, we want to ensure that we order our HTML events in the same order
|
|
51
|
-
// as the templates are defined which is why we use mergeOrdered. We also want to ensure that
|
|
52
|
-
// our templates end, so we take only the first of our source values and also ensure that a subscription
|
|
53
|
-
// to our RefSubjects only include its first event.
|
|
54
|
-
return Fx.fromFxEffect(
|
|
55
|
-
Effect.map(Fx.first(values), (values) =>
|
|
56
|
-
Fx.mergeOrdered(
|
|
57
|
-
values.map((value, i) =>
|
|
58
|
-
Fx.fromFxEffect(Effect.map(RefSubject.of(value), (ref) => {
|
|
59
|
-
const key = getKey(value)
|
|
60
|
-
return Fx.append(
|
|
61
|
-
Fx.map(
|
|
62
|
-
f(RefSubject.take(ref, 1), key),
|
|
63
|
-
(r) => HtmlRenderEvent((r as HtmlRenderEvent).html, false)
|
|
64
|
-
),
|
|
65
|
-
HtmlRenderEvent(MANY_HOLE(key), i === values.length - 1)
|
|
66
|
-
)
|
|
67
|
-
}))
|
|
68
|
-
)
|
|
69
|
-
))
|
|
70
|
-
)
|
|
71
|
-
}
|
|
72
|
-
)
|
|
73
|
-
)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* @since 1.0.0
|
|
78
|
-
*/
|
|
79
|
-
export const manyAsyncData: {
|
|
80
|
-
<
|
|
81
|
-
E1,
|
|
82
|
-
A,
|
|
83
|
-
B extends PropertyKey,
|
|
84
|
-
NoData extends Fx.Fx<any, any, any>,
|
|
85
|
-
Loading extends Fx.Fx<any, any, any>,
|
|
86
|
-
Failure extends Fx.Fx<any, any, any>,
|
|
87
|
-
Success extends Fx.Fx<any, any, any>
|
|
88
|
-
>(
|
|
89
|
-
getKey: (a: A) => B,
|
|
90
|
-
matchers: {
|
|
91
|
-
NoData: () => NoData
|
|
92
|
-
Loading: (data: RefSubject.Filtered<Progress>) => Loading
|
|
93
|
-
Failure: (data: RefSubject.Computed<E1>) => Failure
|
|
94
|
-
Success: (value: RefSubject.Computed<A>) => Success
|
|
95
|
-
}
|
|
96
|
-
): <E, R>(
|
|
97
|
-
fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>
|
|
98
|
-
) => Fx.Fx<
|
|
99
|
-
Fx.Fx.Success<NoData | Loading | Failure | Success>,
|
|
100
|
-
E | Fx.Fx.Error<NoData | Loading | Failure | Success>,
|
|
101
|
-
R | Fx.Fx.Context<NoData | Loading | Failure | Success>
|
|
102
|
-
>
|
|
103
|
-
|
|
104
|
-
<
|
|
105
|
-
R,
|
|
106
|
-
E,
|
|
107
|
-
E1,
|
|
108
|
-
A,
|
|
109
|
-
B extends PropertyKey,
|
|
110
|
-
NoData extends Fx.Fx<any, any, any>,
|
|
111
|
-
Loading extends Fx.Fx<any, any, any>,
|
|
112
|
-
Failure extends Fx.Fx<any, any, any>,
|
|
113
|
-
Success extends Fx.Fx<any, any, any>
|
|
114
|
-
>(
|
|
115
|
-
fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>,
|
|
116
|
-
getKey: (a: A) => B,
|
|
117
|
-
matchers: {
|
|
118
|
-
NoData: () => NoData
|
|
119
|
-
Loading: (data: RefSubject.Filtered<Progress>) => Loading
|
|
120
|
-
Failure: (data: RefSubject.Computed<E1>) => Failure
|
|
121
|
-
Success: (value: RefSubject.Computed<A>) => Success
|
|
122
|
-
}
|
|
123
|
-
): Fx.Fx<
|
|
124
|
-
Fx.Fx.Success<NoData | Loading | Failure | Success>,
|
|
125
|
-
E | Fx.Fx.Error<NoData | Loading | Failure | Success>,
|
|
126
|
-
R | Fx.Fx.Context<NoData | Loading | Failure | Success>
|
|
127
|
-
>
|
|
128
|
-
} = dual(
|
|
129
|
-
3,
|
|
130
|
-
<
|
|
131
|
-
R,
|
|
132
|
-
E,
|
|
133
|
-
E1,
|
|
134
|
-
A,
|
|
135
|
-
B extends PropertyKey,
|
|
136
|
-
NoData extends Fx.Fx<RenderEvent, any, any>,
|
|
137
|
-
Loading extends Fx.Fx<RenderEvent, any, any>,
|
|
138
|
-
Failure extends Fx.Fx<RenderEvent, any, any>,
|
|
139
|
-
Success extends Fx.Fx<RenderEvent, any, any>
|
|
140
|
-
>(
|
|
141
|
-
fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>,
|
|
142
|
-
getKey: (a: A) => B,
|
|
143
|
-
matchers: {
|
|
144
|
-
NoData: NoData
|
|
145
|
-
Loading: (data: RefSubject.Filtered<Progress>) => Loading
|
|
146
|
-
Failure: (data: RefSubject.Computed<E1>) => Failure
|
|
147
|
-
Success: (value: RefSubject.Computed<A>, key: B) => Success
|
|
148
|
-
}
|
|
149
|
-
): Fx.Fx<
|
|
150
|
-
RenderEvent | ReadonlyArray<RenderEvent>,
|
|
151
|
-
E | Fx.Fx.Error<NoData | Loading | Failure | Success>,
|
|
152
|
-
R | Fx.Fx.Context<NoData | Loading | Failure | Success>
|
|
153
|
-
> => {
|
|
154
|
-
return RefAsyncData.matchAsyncData(fx, {
|
|
155
|
-
NoData: matchers.NoData,
|
|
156
|
-
Loading: matchers.Loading,
|
|
157
|
-
Failure: matchers.Failure,
|
|
158
|
-
Success: (ref) => many(ref, getKey, matchers.Success)
|
|
159
|
-
})
|
|
160
|
-
}
|
|
161
|
-
)
|
package/src/Meta.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @since 1.0.0
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
// Used to mark where the typed templates are in the html.
|
|
6
|
-
/**
|
|
7
|
-
* @since 1.0.0
|
|
8
|
-
*/
|
|
9
|
-
export const TYPED_START = `<!--typed-start-->`
|
|
10
|
-
/**
|
|
11
|
-
* @since 1.0.0
|
|
12
|
-
*/
|
|
13
|
-
export const TYPED_END = `<!--typed-end-->`
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* @since 1.0.0
|
|
17
|
-
*/
|
|
18
|
-
export const TYPED_HASH = (hash: string) => `data-typed="${hash}"`
|
|
19
|
-
|
|
20
|
-
// Inserted into the html to mark where the text starts and ensure separate
|
|
21
|
-
// text nodes are created.
|
|
22
|
-
/**
|
|
23
|
-
* @since 1.0.0
|
|
24
|
-
*/
|
|
25
|
-
export const TEXT_START = "<!--text-->"
|
|
26
|
-
|
|
27
|
-
// Used to mark where a NodePart is in the DOM. It can be found directly after the
|
|
28
|
-
// elements or text nodes it is managing.
|
|
29
|
-
/**
|
|
30
|
-
* @since 1.0.0
|
|
31
|
-
*/
|
|
32
|
-
export const TYPED_HOLE_START = (index: number) => `<!--hole${index}-->`
|
|
33
|
-
|
|
34
|
-
// Used to mark where a NodePart is in the DOM. It can be found directly after the
|
|
35
|
-
// elements or text nodes it is managing.
|
|
36
|
-
/**
|
|
37
|
-
* @since 1.0.0
|
|
38
|
-
*/
|
|
39
|
-
export const TYPED_HOLE_END = (index: number) => `<!--/hole${index}-->`
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Used to mark separation between the start and end of a template.
|
|
43
|
-
* @since 1.0.0
|
|
44
|
-
*/
|
|
45
|
-
export const MANY_HOLE = (key: PropertyKey) => `<!--many${key.toString()}-->`
|
package/src/Part.ts
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @since 1.0.0
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import type { Cause } from "effect/Cause"
|
|
6
|
-
import type { Effect } from "effect/Effect"
|
|
7
|
-
import type { Scope } from "effect/Scope"
|
|
8
|
-
import type { ElementSource } from "./ElementSource.js"
|
|
9
|
-
import type { EventHandler } from "./EventHandler.js"
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @since 1.0.0
|
|
13
|
-
*/
|
|
14
|
-
export type Part =
|
|
15
|
-
| AttributePart
|
|
16
|
-
| BooleanPart
|
|
17
|
-
| ClassNamePart
|
|
18
|
-
| CommentPart
|
|
19
|
-
| DataPart
|
|
20
|
-
| EventPart
|
|
21
|
-
| NodePart
|
|
22
|
-
| PropertyPart
|
|
23
|
-
| PropertiesPart
|
|
24
|
-
| RefPart
|
|
25
|
-
| TextPart
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @since 1.0.0
|
|
29
|
-
*/
|
|
30
|
-
export interface AttributePart {
|
|
31
|
-
readonly _tag: "attribute"
|
|
32
|
-
readonly name: string
|
|
33
|
-
readonly value: string | null | undefined
|
|
34
|
-
readonly index: number
|
|
35
|
-
|
|
36
|
-
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* @since 1.0.0
|
|
41
|
-
*/
|
|
42
|
-
export interface BooleanPart {
|
|
43
|
-
readonly _tag: "boolean"
|
|
44
|
-
readonly name: string
|
|
45
|
-
readonly value: boolean | null | undefined
|
|
46
|
-
readonly index: number
|
|
47
|
-
|
|
48
|
-
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* @since 1.0.0
|
|
53
|
-
*/
|
|
54
|
-
export interface ClassNamePart {
|
|
55
|
-
readonly _tag: "className"
|
|
56
|
-
readonly value: ReadonlyArray<string>
|
|
57
|
-
readonly index: number
|
|
58
|
-
|
|
59
|
-
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* @since 1.0.0
|
|
64
|
-
*/
|
|
65
|
-
export interface DataPart {
|
|
66
|
-
readonly _tag: "data"
|
|
67
|
-
readonly value: Readonly<Record<string, string | undefined>> | null | undefined
|
|
68
|
-
readonly index: number
|
|
69
|
-
|
|
70
|
-
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* @since 1.0.0
|
|
75
|
-
*/
|
|
76
|
-
export interface EventPart {
|
|
77
|
-
readonly _tag: "event"
|
|
78
|
-
readonly name: string
|
|
79
|
-
readonly source: ElementSource<any>
|
|
80
|
-
readonly value: null
|
|
81
|
-
readonly index: number
|
|
82
|
-
readonly onCause: (cause: Cause<unknown>) => Effect<unknown>
|
|
83
|
-
readonly addEventListener: (handler: EventHandler<Event>) => void
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* @since 1.0.0
|
|
88
|
-
*/
|
|
89
|
-
export interface PropertyPart {
|
|
90
|
-
readonly _tag: "property"
|
|
91
|
-
readonly name: string
|
|
92
|
-
readonly value: unknown
|
|
93
|
-
readonly index: number
|
|
94
|
-
|
|
95
|
-
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* @since 1.0.0
|
|
100
|
-
*/
|
|
101
|
-
export interface PropertiesPart {
|
|
102
|
-
readonly _tag: "properties"
|
|
103
|
-
readonly value: Record<string, any> | null | undefined
|
|
104
|
-
readonly index: number
|
|
105
|
-
|
|
106
|
-
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* @since 1.0.0
|
|
111
|
-
*/
|
|
112
|
-
export interface RefPart<T extends HTMLElement | SVGElement = HTMLElement | SVGElement> {
|
|
113
|
-
readonly _tag: "ref"
|
|
114
|
-
readonly value: ElementSource<T>
|
|
115
|
-
readonly index: number
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* @since 1.0.0
|
|
120
|
-
*/
|
|
121
|
-
export interface CommentPart {
|
|
122
|
-
readonly _tag: "comment"
|
|
123
|
-
readonly value: string | null | undefined
|
|
124
|
-
readonly index: number
|
|
125
|
-
|
|
126
|
-
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* @since 1.0.0
|
|
131
|
-
*/
|
|
132
|
-
export interface TextPart {
|
|
133
|
-
readonly _tag: "text"
|
|
134
|
-
readonly value: string | null | undefined
|
|
135
|
-
readonly index: number
|
|
136
|
-
|
|
137
|
-
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* @since 1.0.0
|
|
142
|
-
*/
|
|
143
|
-
export interface NodePart {
|
|
144
|
-
readonly _tag: "node"
|
|
145
|
-
readonly value: unknown
|
|
146
|
-
readonly index: number
|
|
147
|
-
|
|
148
|
-
readonly update: (value: this["value"], priority?: number) => Effect<void, never, Scope>
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* @since 1.0.0
|
|
153
|
-
*/
|
|
154
|
-
export type Parts = ReadonlyArray<Part>
|
package/src/Placeholder.ts
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @since 1.0.0
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import * as Fx from "@typed/fx"
|
|
6
|
-
import "./internal/module-augmentation.js"
|
|
7
|
-
import * as Effect from "effect/Effect"
|
|
8
|
-
import type * as Scope from "effect/Scope"
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @since 1.0.0
|
|
12
|
-
*/
|
|
13
|
-
export const PlaceholderTypeId = Symbol.for("@typed/template/Placholder")
|
|
14
|
-
/**
|
|
15
|
-
* @since 1.0.0
|
|
16
|
-
*/
|
|
17
|
-
export type PlaceholderTypeId = typeof PlaceholderTypeId
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @since 1.0.0
|
|
21
|
-
*/
|
|
22
|
-
export interface Placeholder<A = unknown, E = never, R = never> {
|
|
23
|
-
readonly [PlaceholderTypeId]: {
|
|
24
|
-
readonly _R: (_: never) => R
|
|
25
|
-
readonly _E: (_: never) => E
|
|
26
|
-
readonly _A: (_: never) => A
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* @since 1.0.0
|
|
32
|
-
*/
|
|
33
|
-
export namespace Placeholder {
|
|
34
|
-
/**
|
|
35
|
-
* @since 1.0.0
|
|
36
|
-
*/
|
|
37
|
-
export type Any<A = any> =
|
|
38
|
-
| Placeholder<A, any, any>
|
|
39
|
-
| Placeholder<A, never, any>
|
|
40
|
-
| Placeholder<A>
|
|
41
|
-
| Placeholder<A, any>
|
|
42
|
-
| Effect.Effect<A, any, any>
|
|
43
|
-
// Null/Undefined cannot be modified globally to make them placeholders
|
|
44
|
-
| ([A] extends [null] ? null : never)
|
|
45
|
-
| ([A] extends [undefined] ? undefined : never)
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* @since 1.0.0
|
|
49
|
-
*/
|
|
50
|
-
export type Context<T> = [T] extends [never] ? never
|
|
51
|
-
: T extends Effect.Effect<infer _A, infer _E, infer R> ? R
|
|
52
|
-
: T extends Placeholder<infer _A, infer _E, infer R> ? R
|
|
53
|
-
: never
|
|
54
|
-
/**
|
|
55
|
-
* @since 1.0.0
|
|
56
|
-
*/
|
|
57
|
-
export type Error<T> = [T] extends [never] ? never
|
|
58
|
-
: T extends Effect.Effect<infer _A, infer E, infer _R> ? E
|
|
59
|
-
: T extends Placeholder<infer _A, infer E, infer _R> ? E
|
|
60
|
-
: never
|
|
61
|
-
/**
|
|
62
|
-
* @since 1.0.0
|
|
63
|
-
*/
|
|
64
|
-
export type Success<T> = [T] extends [never] ? never
|
|
65
|
-
: T extends Effect.Effect<infer A, infer _E, infer _R> ? A
|
|
66
|
-
: T extends Placeholder<infer A, infer _E, infer _R> ? A
|
|
67
|
-
: never
|
|
68
|
-
|
|
69
|
-
export function asRef<A, E = never, R = never>(
|
|
70
|
-
placeholder: Fx.Fx<A, E, R> | Effect.Effect<A, E, R> | Placeholder<A, E, R> | A
|
|
71
|
-
): Effect.Effect<Fx.RefSubject.RefSubject<A, E, never>, never, Scope.Scope | R> {
|
|
72
|
-
if (Fx.isFx(placeholder) || Effect.isEffect(placeholder)) {
|
|
73
|
-
return Fx.RefSubject.make(placeholder)
|
|
74
|
-
} else {
|
|
75
|
-
return Fx.RefSubject.of(placeholder as A)
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
package/src/Platform.ts
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @since 1.0.0
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import type { HttpServerRequest } from "@effect/platform"
|
|
6
|
-
import { Headers, HttpServerResponse } from "@effect/platform"
|
|
7
|
-
import type * as Fx from "@typed/fx/Fx"
|
|
8
|
-
import { toStream } from "@typed/fx/Stream"
|
|
9
|
-
import * as Effect from "effect/Effect"
|
|
10
|
-
import * as Option from "effect/Option"
|
|
11
|
-
import * as Stream from "effect/Stream"
|
|
12
|
-
import { renderToHtml } from "./Html.js"
|
|
13
|
-
import type { RenderEvent } from "./RenderEvent.js"
|
|
14
|
-
|
|
15
|
-
const HTML_CONTENT_TYPE = "text/html"
|
|
16
|
-
const CAMEL_CASE_CONTENT_TYPE = { contentType: HTML_CONTENT_TYPE }
|
|
17
|
-
const HYPHENATED_CONTENT_TYPE = { "content-type": HTML_CONTENT_TYPE }
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @since 1.0.0
|
|
21
|
-
*/
|
|
22
|
-
export function htmlResponse<E, R>(
|
|
23
|
-
fx: Fx.Fx<RenderEvent | null, E, R>,
|
|
24
|
-
options?: HttpServerResponse.Options
|
|
25
|
-
): Effect.Effect<HttpServerResponse.HttpServerResponse, E, R> {
|
|
26
|
-
return Effect.contextWithEffect((ctx) =>
|
|
27
|
-
HttpServerResponse.stream(
|
|
28
|
-
Stream.provideContext(Stream.encodeText(toStream(renderToHtml(fx))), ctx),
|
|
29
|
-
{
|
|
30
|
-
...CAMEL_CASE_CONTENT_TYPE,
|
|
31
|
-
...options,
|
|
32
|
-
headers: Headers.unsafeFromRecord({ ...HYPHENATED_CONTENT_TYPE, ...options?.headers })
|
|
33
|
-
}
|
|
34
|
-
)
|
|
35
|
-
)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* @since 1.0.0
|
|
40
|
-
*/
|
|
41
|
-
export function htmlResponseString(
|
|
42
|
-
html: string,
|
|
43
|
-
options?: HttpServerResponse.Options
|
|
44
|
-
): HttpServerResponse.HttpServerResponse {
|
|
45
|
-
return HttpServerResponse.raw(
|
|
46
|
-
html,
|
|
47
|
-
{
|
|
48
|
-
...CAMEL_CASE_CONTENT_TYPE,
|
|
49
|
-
...options,
|
|
50
|
-
headers: Headers.unsafeFromRecord({ ...HYPHENATED_CONTENT_TYPE, ...options?.headers })
|
|
51
|
-
}
|
|
52
|
-
)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* @since 1.0.0
|
|
57
|
-
*/
|
|
58
|
-
export function getUrlFromServerRequest(request: HttpServerRequest.HttpServerRequest): URL {
|
|
59
|
-
const { headers } = request
|
|
60
|
-
const host = Headers.get(headers, "x-forwarded-host").pipe(
|
|
61
|
-
Option.orElse(() => Headers.get(headers, "host")),
|
|
62
|
-
Option.getOrElse(() => "localhost")
|
|
63
|
-
)
|
|
64
|
-
const protocol = Headers.get(headers, "x-forwarded-proto").pipe(
|
|
65
|
-
Option.orElse(() => Headers.get(headers, "protocol")),
|
|
66
|
-
Option.getOrElse(() => "http")
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
return new URL(request.url, `${protocol}://${host}`)
|
|
70
|
-
}
|
package/src/RenderContext.ts
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The context in which templates are rendered within
|
|
3
|
-
* @since 1.0.0
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import * as Context from "@typed/context"
|
|
7
|
-
import { type DomServices, domServices, type DomServicesElementParams } from "@typed/dom/DomServices"
|
|
8
|
-
import { GlobalThis } from "@typed/dom/GlobalThis"
|
|
9
|
-
import { Window } from "@typed/dom/Window"
|
|
10
|
-
import type { Environment } from "@typed/environment"
|
|
11
|
-
import { CurrentEnvironment } from "@typed/environment"
|
|
12
|
-
import type { Rendered } from "@typed/wire"
|
|
13
|
-
import * as Layer from "effect/Layer"
|
|
14
|
-
import * as Option from "effect/Option"
|
|
15
|
-
import type { Entry } from "./Entry.js"
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* The context in which templates are rendered within
|
|
19
|
-
* @since 1.0.0
|
|
20
|
-
*/
|
|
21
|
-
export interface RenderContext {
|
|
22
|
-
/**
|
|
23
|
-
* The current environment we are rendering within
|
|
24
|
-
*/
|
|
25
|
-
readonly environment: Environment
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Cache for root Node's being rendered into.
|
|
29
|
-
*/
|
|
30
|
-
readonly renderCache: WeakMap<object, Rendered | null>
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Cache for individual templates.
|
|
34
|
-
*/
|
|
35
|
-
readonly templateCache: WeakMap<TemplateStringsArray, Entry>
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* The context in which templates are rendered within
|
|
40
|
-
* @since 1.0.0
|
|
41
|
-
*/
|
|
42
|
-
export const RenderContext: Context.Tagged<RenderContext, RenderContext> = Context.Tagged<RenderContext>(
|
|
43
|
-
"@typed/template/RenderContext"
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* @since 1.0.0
|
|
48
|
-
*/
|
|
49
|
-
export type RenderContextOptions = {
|
|
50
|
-
readonly environment: Environment
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* @since 1.0.0
|
|
55
|
-
*/
|
|
56
|
-
export function make({
|
|
57
|
-
environment
|
|
58
|
-
}: RenderContextOptions): RenderContext {
|
|
59
|
-
return {
|
|
60
|
-
environment,
|
|
61
|
-
renderCache: new WeakMap(),
|
|
62
|
-
templateCache: new WeakMap()
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* @since 1.0.0
|
|
68
|
-
*/
|
|
69
|
-
export function getRenderCache<T>(renderCache: RenderContext["renderCache"], key: object): Option.Option<T> {
|
|
70
|
-
return renderCache.has(key) ? Option.some(renderCache.get(key) as T) : Option.none()
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* @since 1.0.0
|
|
75
|
-
*/
|
|
76
|
-
export function getTemplateCache(
|
|
77
|
-
templateCache: RenderContext["templateCache"],
|
|
78
|
-
key: TemplateStringsArray
|
|
79
|
-
): Option.Option<Entry> {
|
|
80
|
-
return Option.fromNullable(templateCache.get(key))
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const buildWithCurrentEnvironment = (environment: Environment) =>
|
|
84
|
-
Layer.mergeAll(
|
|
85
|
-
RenderContext.layer(make({ environment })),
|
|
86
|
-
CurrentEnvironment.layer(environment)
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* @since 1.0.0
|
|
91
|
-
*/
|
|
92
|
-
export const dom: (
|
|
93
|
-
window: Window & GlobalThis,
|
|
94
|
-
options?: DomServicesElementParams
|
|
95
|
-
) => Layer.Layer<RenderContext | CurrentEnvironment | DomServices> = (
|
|
96
|
-
window,
|
|
97
|
-
options
|
|
98
|
-
) =>
|
|
99
|
-
Layer.provideMerge(
|
|
100
|
-
Layer.mergeAll(
|
|
101
|
-
buildWithCurrentEnvironment("dom"),
|
|
102
|
-
domServices(options)
|
|
103
|
-
),
|
|
104
|
-
Layer.mergeAll(Window.layer(window), GlobalThis.layer(window))
|
|
105
|
-
)
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* @since 1.0.0
|
|
109
|
-
*/
|
|
110
|
-
export const server: Layer.Layer<RenderContext | CurrentEnvironment> = buildWithCurrentEnvironment(
|
|
111
|
-
"server"
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
const static_: Layer.Layer<RenderContext | CurrentEnvironment> = buildWithCurrentEnvironment("static")
|
|
115
|
-
|
|
116
|
-
export {
|
|
117
|
-
/**
|
|
118
|
-
* @since 1.0.0
|
|
119
|
-
*/
|
|
120
|
-
static_ as static
|
|
121
|
-
}
|