@typed/template 0.9.5 → 0.10.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/RenderQueue/package.json +6 -0
- package/dist/cjs/Directive.js +1 -1
- package/dist/cjs/Directive.js.map +1 -1
- package/dist/cjs/ElementRef.js +1 -1
- package/dist/cjs/ElementRef.js.map +1 -1
- package/dist/cjs/ElementSource.js +1 -1
- package/dist/cjs/ElementSource.js.map +1 -1
- package/dist/cjs/EventHandler.js +11 -4
- package/dist/cjs/EventHandler.js.map +1 -1
- package/dist/cjs/Html.js +84 -44
- package/dist/cjs/Html.js.map +1 -1
- package/dist/cjs/HtmlChunk.js +67 -21
- package/dist/cjs/HtmlChunk.js.map +1 -1
- package/dist/cjs/Hydrate.js +6 -6
- package/dist/cjs/Hydrate.js.map +1 -1
- package/dist/cjs/Many.js +4 -4
- package/dist/cjs/Many.js.map +1 -1
- package/dist/cjs/Meta.js +10 -3
- package/dist/cjs/Meta.js.map +1 -1
- package/dist/cjs/Parser.js +1 -1
- package/dist/cjs/Placeholder.js +5 -9
- package/dist/cjs/Placeholder.js.map +1 -1
- package/dist/cjs/Platform.js +7 -5
- package/dist/cjs/Platform.js.map +1 -1
- package/dist/cjs/Render.js +8 -7
- package/dist/cjs/Render.js.map +1 -1
- package/dist/cjs/RenderContext.js +8 -92
- package/dist/cjs/RenderContext.js.map +1 -1
- package/dist/cjs/RenderEvent.js +9 -1
- package/dist/cjs/RenderEvent.js.map +1 -1
- package/dist/cjs/RenderQueue.js +341 -0
- package/dist/cjs/RenderQueue.js.map +1 -0
- package/dist/cjs/RenderTemplate.js +1 -1
- package/dist/cjs/RenderTemplate.js.map +1 -1
- package/dist/cjs/Template.js +12 -0
- package/dist/cjs/Template.js.map +1 -1
- package/dist/cjs/Test.js +64 -33
- package/dist/cjs/Test.js.map +1 -1
- package/dist/cjs/Vitest.js +12 -20
- package/dist/cjs/Vitest.js.map +1 -1
- package/dist/cjs/index.js +6 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/EventSource.js +16 -9
- package/dist/cjs/internal/EventSource.js.map +1 -1
- package/dist/cjs/internal/HydrateContext.js.map +1 -1
- package/dist/cjs/internal/browser.js +11 -10
- package/dist/cjs/internal/browser.js.map +1 -1
- package/dist/cjs/internal/character-entities.js +2141 -0
- package/dist/cjs/internal/character-entities.js.map +1 -0
- package/dist/cjs/internal/errors.js +19 -2
- package/dist/cjs/internal/errors.js.map +1 -1
- package/dist/cjs/internal/indexRefCounter.js +36 -63
- package/dist/cjs/internal/indexRefCounter.js.map +1 -1
- package/dist/cjs/internal/parser.js +18 -17
- package/dist/cjs/internal/parser.js.map +1 -1
- package/dist/cjs/internal/parser2.js +382 -0
- package/dist/cjs/internal/parser2.js.map +1 -0
- package/dist/cjs/internal/server-parts.js +124 -0
- package/dist/cjs/internal/server-parts.js.map +1 -0
- package/dist/cjs/internal/server.js +15 -185
- package/dist/cjs/internal/server.js.map +1 -1
- package/dist/cjs/internal/utils.js +73 -9
- package/dist/cjs/internal/utils.js.map +1 -1
- package/dist/cjs/internal/v2/SyncPart.js +6 -0
- package/dist/cjs/internal/v2/SyncPart.js.map +1 -0
- package/dist/cjs/internal/v2/helpers.js +15 -0
- package/dist/cjs/internal/v2/helpers.js.map +1 -0
- package/dist/cjs/internal/v2/hydrate.js +202 -0
- package/dist/cjs/internal/v2/hydrate.js.map +1 -0
- package/dist/cjs/internal/v2/hydration-template.js +269 -0
- package/dist/cjs/internal/v2/hydration-template.js.map +1 -0
- package/dist/cjs/internal/v2/parts.js +169 -0
- package/dist/cjs/internal/v2/parts.js.map +1 -0
- package/dist/cjs/internal/v2/render-entry.js +110 -0
- package/dist/cjs/internal/v2/render-entry.js.map +1 -0
- package/dist/cjs/internal/v2/render-sync-parts.js +318 -0
- package/dist/cjs/internal/v2/render-sync-parts.js.map +1 -0
- package/dist/cjs/internal/v2/render.js +417 -0
- package/dist/cjs/internal/v2/render.js.map +1 -0
- package/dist/cjs/internal/v2/sync-parts.js +115 -0
- package/dist/cjs/internal/v2/sync-parts.js.map +1 -0
- package/dist/dts/ElementRef.d.ts +1 -1
- package/dist/dts/ElementRef.d.ts.map +1 -1
- package/dist/dts/ElementSource.d.ts +1 -1
- package/dist/dts/ElementSource.d.ts.map +1 -1
- package/dist/dts/EventHandler.d.ts +12 -8
- package/dist/dts/EventHandler.d.ts.map +1 -1
- package/dist/dts/Html.d.ts +6 -5
- package/dist/dts/Html.d.ts.map +1 -1
- package/dist/dts/HtmlChunk.d.ts.map +1 -1
- package/dist/dts/Hydrate.d.ts +1 -3
- package/dist/dts/Hydrate.d.ts.map +1 -1
- package/dist/dts/Many.d.ts +9 -11
- package/dist/dts/Many.d.ts.map +1 -1
- package/dist/dts/Meta.d.ts +5 -1
- package/dist/dts/Meta.d.ts.map +1 -1
- package/dist/dts/Parser.d.ts +1 -1
- package/dist/dts/Parser.d.ts.map +1 -1
- package/dist/dts/Part.d.ts +20 -56
- package/dist/dts/Part.d.ts.map +1 -1
- package/dist/dts/Placeholder.d.ts +6 -10
- package/dist/dts/Placeholder.d.ts.map +1 -1
- package/dist/dts/Platform.d.ts +2 -4
- package/dist/dts/Platform.d.ts.map +1 -1
- package/dist/dts/Render.d.ts +4 -8
- package/dist/dts/Render.d.ts.map +1 -1
- package/dist/dts/RenderContext.d.ts +3 -22
- package/dist/dts/RenderContext.d.ts.map +1 -1
- package/dist/dts/RenderEvent.d.ts +6 -1
- package/dist/dts/RenderEvent.d.ts.map +1 -1
- package/dist/dts/RenderQueue.d.ts +103 -0
- package/dist/dts/RenderQueue.d.ts.map +1 -0
- package/dist/dts/RenderTemplate.d.ts +3 -2
- package/dist/dts/RenderTemplate.d.ts.map +1 -1
- package/dist/dts/Renderable.d.ts +1 -1
- package/dist/dts/Template.d.ts +14 -1
- package/dist/dts/Template.d.ts.map +1 -1
- package/dist/dts/Test.d.ts +14 -1
- package/dist/dts/Test.d.ts.map +1 -1
- package/dist/dts/Vitest.d.ts +11 -8
- package/dist/dts/Vitest.d.ts.map +1 -1
- package/dist/dts/index.d.ts +4 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/EventSource.d.ts +2 -1
- package/dist/dts/internal/EventSource.d.ts.map +1 -1
- package/dist/dts/internal/browser.d.ts +3 -3
- package/dist/dts/internal/browser.d.ts.map +1 -1
- package/dist/dts/internal/character-entities.d.ts +2133 -0
- package/dist/dts/internal/character-entities.d.ts.map +1 -0
- package/dist/dts/internal/errors.d.ts +9 -1
- package/dist/dts/internal/errors.d.ts.map +1 -1
- package/dist/dts/internal/indexRefCounter.d.ts +0 -4
- package/dist/dts/internal/indexRefCounter.d.ts.map +1 -1
- package/dist/dts/internal/parser.d.ts +13 -0
- package/dist/dts/internal/parser.d.ts.map +1 -1
- package/dist/dts/internal/parser2.d.ts +12 -0
- package/dist/dts/internal/parser2.d.ts.map +1 -0
- package/dist/dts/internal/server-parts.d.ts +223 -0
- package/dist/dts/internal/server-parts.d.ts.map +1 -0
- package/dist/dts/internal/server.d.ts +2 -28
- package/dist/dts/internal/server.d.ts.map +1 -1
- package/dist/dts/internal/utils.d.ts +4 -1
- package/dist/dts/internal/utils.d.ts.map +1 -1
- package/dist/dts/internal/v2/SyncPart.d.ts +87 -0
- package/dist/dts/internal/v2/SyncPart.d.ts.map +1 -0
- package/dist/dts/internal/v2/helpers.d.ts +3 -0
- package/dist/dts/internal/v2/helpers.d.ts.map +1 -0
- package/dist/dts/internal/v2/hydrate.d.ts +7 -0
- package/dist/dts/internal/v2/hydrate.d.ts.map +1 -0
- package/dist/dts/internal/v2/hydration-template.d.ts +54 -0
- package/dist/dts/internal/v2/hydration-template.d.ts.map +1 -0
- package/dist/dts/internal/v2/parts.d.ts +245 -0
- package/dist/dts/internal/v2/parts.d.ts.map +1 -0
- package/dist/dts/internal/v2/render-entry.d.ts +6 -0
- package/dist/dts/internal/v2/render-entry.d.ts.map +1 -0
- package/dist/dts/internal/v2/render-sync-parts.d.ts +22 -0
- package/dist/dts/internal/v2/render-sync-parts.d.ts.map +1 -0
- package/dist/dts/internal/v2/render.d.ts +62 -0
- package/dist/dts/internal/v2/render.d.ts.map +1 -0
- package/dist/dts/internal/v2/sync-parts.d.ts +129 -0
- package/dist/dts/internal/v2/sync-parts.d.ts.map +1 -0
- package/dist/esm/ElementRef.js.map +1 -1
- package/dist/esm/EventHandler.js +14 -4
- package/dist/esm/EventHandler.js.map +1 -1
- package/dist/esm/Html.js +91 -50
- package/dist/esm/Html.js.map +1 -1
- package/dist/esm/HtmlChunk.js +75 -24
- package/dist/esm/HtmlChunk.js.map +1 -1
- package/dist/esm/Hydrate.js +5 -5
- package/dist/esm/Hydrate.js.map +1 -1
- package/dist/esm/Many.js +3 -3
- package/dist/esm/Many.js.map +1 -1
- package/dist/esm/Meta.js +7 -1
- package/dist/esm/Meta.js.map +1 -1
- package/dist/esm/Parser.js +1 -1
- package/dist/esm/Parser.js.map +1 -1
- package/dist/esm/Placeholder.js +4 -8
- package/dist/esm/Placeholder.js.map +1 -1
- package/dist/esm/Platform.js +3 -1
- package/dist/esm/Platform.js.map +1 -1
- package/dist/esm/Render.js +6 -5
- package/dist/esm/Render.js.map +1 -1
- package/dist/esm/RenderContext.js +5 -85
- package/dist/esm/RenderContext.js.map +1 -1
- package/dist/esm/RenderEvent.js +8 -1
- package/dist/esm/RenderEvent.js.map +1 -1
- package/dist/esm/RenderQueue.js +336 -0
- package/dist/esm/RenderQueue.js.map +1 -0
- package/dist/esm/RenderTemplate.js.map +1 -1
- package/dist/esm/Template.js +12 -0
- package/dist/esm/Template.js.map +1 -1
- package/dist/esm/Test.js +71 -30
- package/dist/esm/Test.js.map +1 -1
- package/dist/esm/Vitest.js +11 -8
- package/dist/esm/Vitest.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/EventSource.js +12 -7
- package/dist/esm/internal/EventSource.js.map +1 -1
- package/dist/esm/internal/HydrateContext.js.map +1 -1
- package/dist/esm/internal/browser.js +10 -9
- package/dist/esm/internal/browser.js.map +1 -1
- package/dist/esm/internal/character-entities.js +2134 -0
- package/dist/esm/internal/character-entities.js.map +1 -0
- package/dist/esm/internal/errors.js +22 -2
- package/dist/esm/internal/errors.js.map +1 -1
- package/dist/esm/internal/indexRefCounter.js +36 -61
- package/dist/esm/internal/indexRefCounter.js.map +1 -1
- package/dist/esm/internal/parser.js +18 -18
- package/dist/esm/internal/parser.js.map +1 -1
- package/dist/esm/internal/parser2.js +393 -0
- package/dist/esm/internal/parser2.js.map +1 -0
- package/dist/esm/internal/server-parts.js +109 -0
- package/dist/esm/internal/server-parts.js.map +1 -0
- package/dist/esm/internal/server.js +12 -161
- package/dist/esm/internal/server.js.map +1 -1
- package/dist/esm/internal/utils.js +71 -7
- package/dist/esm/internal/utils.js.map +1 -1
- package/dist/esm/internal/v2/SyncPart.js +5 -0
- package/dist/esm/internal/v2/SyncPart.js.map +1 -0
- package/dist/esm/internal/v2/helpers.js +12 -0
- package/dist/esm/internal/v2/helpers.js.map +1 -0
- package/dist/esm/internal/v2/hydrate.js +195 -0
- package/dist/esm/internal/v2/hydrate.js.map +1 -0
- package/dist/esm/internal/v2/hydration-template.js +265 -0
- package/dist/esm/internal/v2/hydration-template.js.map +1 -0
- package/dist/esm/internal/v2/parts.js +150 -0
- package/dist/esm/internal/v2/parts.js.map +1 -0
- package/dist/esm/internal/v2/render-entry.js +102 -0
- package/dist/esm/internal/v2/render-entry.js.map +1 -0
- package/dist/esm/internal/v2/render-sync-parts.js +265 -0
- package/dist/esm/internal/v2/render-sync-parts.js.map +1 -0
- package/dist/esm/internal/v2/render.js +353 -0
- package/dist/esm/internal/v2/render.js.map +1 -0
- package/dist/esm/internal/v2/sync-parts.js +102 -0
- package/dist/esm/internal/v2/sync-parts.js.map +1 -0
- package/package.json +20 -13
- package/src/ElementRef.ts +1 -1
- package/src/ElementSource.ts +1 -1
- package/src/EventHandler.ts +29 -11
- package/src/Html.ts +199 -90
- package/src/HtmlChunk.ts +77 -30
- package/src/Hydrate.ts +20 -14
- package/src/Many.ts +17 -14
- package/src/Meta.ts +8 -1
- package/src/Parser.ts +1 -1
- package/src/Part.ts +22 -66
- package/src/Placeholder.ts +17 -15
- package/src/Platform.ts +5 -5
- package/src/Render.ts +23 -26
- package/src/RenderContext.ts +14 -142
- package/src/RenderEvent.ts +10 -1
- package/src/RenderQueue.ts +445 -0
- package/src/RenderTemplate.ts +7 -2
- package/src/Renderable.ts +1 -1
- package/src/Template.ts +15 -1
- package/src/Test.ts +122 -38
- package/src/Vitest.ts +20 -10
- package/src/index.ts +4 -0
- package/src/internal/EventSource.ts +14 -8
- package/src/internal/HydrateContext.ts +3 -4
- package/src/internal/browser.ts +26 -21
- package/src/internal/character-entities.ts +2136 -0
- package/src/internal/errors.ts +30 -3
- package/src/internal/indexRefCounter.ts +38 -70
- package/src/internal/parser.ts +19 -19
- package/src/internal/parser2.ts +468 -0
- package/src/internal/server-parts.ts +161 -0
- package/src/internal/server.ts +16 -272
- package/src/internal/utils.ts +83 -7
- package/src/internal/v2/SyncPart.ts +112 -0
- package/src/internal/v2/helpers.ts +13 -0
- package/src/internal/v2/hydrate.ts +289 -0
- package/src/internal/v2/hydration-template.ts +308 -0
- package/src/internal/v2/parts.ts +254 -0
- package/src/internal/v2/render-entry.ts +131 -0
- package/src/internal/v2/render-sync-parts.ts +440 -0
- package/src/internal/v2/render.ts +588 -0
- package/src/internal/v2/sync-parts.ts +133 -0
- package/dist/cjs/internal/hydrate.js +0 -274
- package/dist/cjs/internal/hydrate.js.map +0 -1
- package/dist/cjs/internal/parts.js +0 -451
- package/dist/cjs/internal/parts.js.map +0 -1
- package/dist/cjs/internal/render.js +0 -704
- package/dist/cjs/internal/render.js.map +0 -1
- package/dist/dts/internal/hydrate.d.ts +0 -33
- package/dist/dts/internal/hydrate.d.ts.map +0 -1
- package/dist/dts/internal/parts.d.ts +0 -314
- package/dist/dts/internal/parts.d.ts.map +0 -1
- package/dist/dts/internal/render.d.ts +0 -16
- package/dist/dts/internal/render.d.ts.map +0 -1
- package/dist/esm/internal/hydrate.js +0 -239
- package/dist/esm/internal/hydrate.js.map +0 -1
- package/dist/esm/internal/parts.js +0 -373
- package/dist/esm/internal/parts.js.map +0 -1
- package/dist/esm/internal/render.js +0 -689
- package/dist/esm/internal/render.js.map +0 -1
- package/src/internal/hydrate.ts +0 -366
- package/src/internal/parts.ts +0 -609
- package/src/internal/render.ts +0 -971
package/src/internal/errors.ts
CHANGED
|
@@ -16,7 +16,34 @@ export class CouldNotFindManyCommentError extends Error {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
export class CouldNotFindTemplateHashError extends Error {
|
|
20
|
+
constructor(readonly hash: string) {
|
|
21
|
+
super(`Could not find template hash ${hash}`)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class CouldNotFindTemplateEndError extends Error {
|
|
26
|
+
constructor(readonly hash: string) {
|
|
27
|
+
super(`Could not find end of template for hash ${hash}`)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const constructors: Array<Function> = [
|
|
32
|
+
CouldNotFindCommentError,
|
|
33
|
+
CouldNotFindRootElement,
|
|
34
|
+
CouldNotFindManyCommentError,
|
|
35
|
+
CouldNotFindTemplateHashError,
|
|
36
|
+
CouldNotFindTemplateEndError
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
export function isHydrationError(
|
|
40
|
+
e: unknown
|
|
41
|
+
): e is
|
|
42
|
+
| CouldNotFindCommentError
|
|
43
|
+
| CouldNotFindRootElement
|
|
44
|
+
| CouldNotFindManyCommentError
|
|
45
|
+
| CouldNotFindTemplateHashError
|
|
46
|
+
| CouldNotFindTemplateEndError
|
|
47
|
+
{
|
|
48
|
+
return constructors.some((c) => e instanceof c)
|
|
22
49
|
}
|
|
@@ -3,36 +3,6 @@ import * as Effect from "effect/Effect"
|
|
|
3
3
|
import * as Option from "effect/Option"
|
|
4
4
|
|
|
5
5
|
export type IndexRefCounter = {
|
|
6
|
-
release: (index: number) => Effect.Effect<void>
|
|
7
|
-
wait: Effect.Effect<void>
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @internal
|
|
12
|
-
*/
|
|
13
|
-
export function indexRefCounter(expected: number): Effect.Effect<IndexRefCounter> {
|
|
14
|
-
return Effect.map(Deferred.make<void>(), (deferred) => {
|
|
15
|
-
const done = Deferred.succeed(deferred, undefined)
|
|
16
|
-
const indexes = new Set<number>(Array.from({ length: expected }, (_, i) => i))
|
|
17
|
-
|
|
18
|
-
function release(index: number) {
|
|
19
|
-
return Effect.suspend(() => {
|
|
20
|
-
if (indexes.delete(index) && indexes.size === 0) {
|
|
21
|
-
return done
|
|
22
|
-
} else {
|
|
23
|
-
return Effect.unit
|
|
24
|
-
}
|
|
25
|
-
})
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
release,
|
|
30
|
-
wait: Deferred.await(deferred)
|
|
31
|
-
}
|
|
32
|
-
})
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export type IndexRefCounter2 = {
|
|
36
6
|
release: (index: number) => Effect.Effect<void>
|
|
37
7
|
expect: (count: number) => Effect.Effect<boolean>
|
|
38
8
|
wait: Effect.Effect<void>
|
|
@@ -41,46 +11,44 @@ export type IndexRefCounter2 = {
|
|
|
41
11
|
/**
|
|
42
12
|
* @internal
|
|
43
13
|
*/
|
|
44
|
-
export
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
14
|
+
export const makeRefCounter: Effect.Effect<IndexRefCounter> = Effect.map(Deferred.make<void>(), (deferred) => {
|
|
15
|
+
let expected: Option.Option<number> = Option.none<number>()
|
|
16
|
+
const done = Deferred.succeed(deferred, undefined)
|
|
17
|
+
const indexes = new Set<number>()
|
|
18
|
+
|
|
19
|
+
function isDone() {
|
|
20
|
+
if (Option.isSome(expected)) {
|
|
21
|
+
return indexes.size === expected.value
|
|
22
|
+
} else {
|
|
23
|
+
return false
|
|
24
|
+
}
|
|
25
|
+
}
|
|
49
26
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
27
|
+
function release(index: number) {
|
|
28
|
+
return Effect.suspend(() => {
|
|
29
|
+
indexes.add(index)
|
|
30
|
+
if (isDone()) {
|
|
31
|
+
return done
|
|
53
32
|
} else {
|
|
54
|
-
return false
|
|
33
|
+
return Effect.succeed(false)
|
|
55
34
|
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
})
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return {
|
|
81
|
-
release,
|
|
82
|
-
expect,
|
|
83
|
-
wait: Deferred.await(deferred)
|
|
84
|
-
}
|
|
85
|
-
})
|
|
86
|
-
}
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function expect(count: number) {
|
|
39
|
+
return Effect.suspend(() => {
|
|
40
|
+
expected = Option.some(count)
|
|
41
|
+
if (isDone()) {
|
|
42
|
+
return Effect.as(done, false)
|
|
43
|
+
} else {
|
|
44
|
+
return Effect.succeed(true)
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
release,
|
|
51
|
+
expect,
|
|
52
|
+
wait: Deferred.await(deferred)
|
|
53
|
+
}
|
|
54
|
+
})
|
package/src/internal/parser.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as Chunk from "effect/Chunk"
|
|
|
2
2
|
import { globalValue } from "effect/GlobalValue"
|
|
3
3
|
import * as Option from "effect/Option"
|
|
4
4
|
import * as Template from "../Template.js"
|
|
5
|
+
import { convertCharacterEntities } from "./character-entities.js"
|
|
5
6
|
import type { TextChunk } from "./chunks.js"
|
|
6
7
|
import {
|
|
7
8
|
getClosingTagName,
|
|
@@ -132,7 +133,6 @@ const tagNameMatches = {
|
|
|
132
133
|
const attributeMatches = {
|
|
133
134
|
whitespace: isWhitespaceToken,
|
|
134
135
|
equals: isEqualsToken,
|
|
135
|
-
closingTag: isElementCloseToken,
|
|
136
136
|
openTagEnd: isOpenTagEndToken,
|
|
137
137
|
selfClosingTagEnd: isSelfClosingTagEndToken
|
|
138
138
|
} satisfies Predicates
|
|
@@ -149,7 +149,7 @@ const textChildMatches = {
|
|
|
149
149
|
elementClose: isElementCloseToken
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
class PathStack {
|
|
152
|
+
export class PathStack {
|
|
153
153
|
chunk: Chunk.Chunk<number> = Chunk.empty()
|
|
154
154
|
count = 0
|
|
155
155
|
|
|
@@ -168,6 +168,10 @@ class PathStack {
|
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
toChunk(): Chunk.Chunk<number> {
|
|
171
|
+
if (Chunk.isEmpty(this.chunk)) {
|
|
172
|
+
return Chunk.of(this.count)
|
|
173
|
+
}
|
|
174
|
+
|
|
171
175
|
return Chunk.append(this.chunk, this.count)
|
|
172
176
|
}
|
|
173
177
|
|
|
@@ -287,12 +291,14 @@ class ParserImpl implements Parser {
|
|
|
287
291
|
this._skipWhitespace = false
|
|
288
292
|
return [this.addPartWithPrevious(new Template.NodePart(parseInt(next.match[2], 10)))]
|
|
289
293
|
} else if ((next = this.chunk(getWhitespace))) { // Whitespace
|
|
290
|
-
return this._skipWhitespace
|
|
294
|
+
return this._skipWhitespace
|
|
295
|
+
? []
|
|
296
|
+
: (this.path.inc(), [new Template.TextNode(convertCharacterEntities(next.match[1]))])
|
|
291
297
|
} else if ((next = this.chunk(getTextUntilCloseBrace))) { // Text and parts
|
|
292
298
|
return parseTextAndParts(next.match[1], (i) => this.addPartWithPrevious(new Template.NodePart(i)))
|
|
293
299
|
} else {
|
|
294
300
|
this.path.inc()
|
|
295
|
-
return [new Template.TextNode(this.nextChar())]
|
|
301
|
+
return [new Template.TextNode(convertCharacterEntities(this.nextChar()))]
|
|
296
302
|
}
|
|
297
303
|
}
|
|
298
304
|
|
|
@@ -410,12 +416,6 @@ class ParserImpl implements Parser {
|
|
|
410
416
|
this.consumeAmount(2)
|
|
411
417
|
this.context = "unknown"
|
|
412
418
|
|
|
413
|
-
return BREAK_ATTR
|
|
414
|
-
}
|
|
415
|
-
case "closingTag": {
|
|
416
|
-
this.consumeAmount(name.length)
|
|
417
|
-
this.context = "unknown"
|
|
418
|
-
|
|
419
419
|
return BREAK_ATTR
|
|
420
420
|
}
|
|
421
421
|
}
|
|
@@ -532,17 +532,17 @@ class ParserImpl implements Parser {
|
|
|
532
532
|
this.consumeAmount(8)
|
|
533
533
|
const part = this.parsePartToken((i) => this.addPartWithPrevious(new Template.TextPartNode(i)))
|
|
534
534
|
|
|
535
|
-
return text === "" ? Continue([part]) : Continue([new Template.TextNode(text), part])
|
|
535
|
+
return text === "" ? Continue([part]) : Continue([new Template.TextNode(convertCharacterEntities(text)), part])
|
|
536
536
|
}
|
|
537
537
|
case "elementClose": {
|
|
538
538
|
this.consumeClosingTag(tagName)
|
|
539
539
|
return Break(
|
|
540
|
-
text ? [new Template.TextNode(text)] : undefined
|
|
540
|
+
text ? [new Template.TextNode(convertCharacterEntities(text))] : undefined
|
|
541
541
|
)
|
|
542
542
|
}
|
|
543
543
|
case "elementOpen": // In this case we make the assumption that you forgot to close this element
|
|
544
544
|
return Break(
|
|
545
|
-
text ? [new Template.TextNode(text)] : undefined
|
|
545
|
+
text ? [new Template.TextNode(convertCharacterEntities(text))] : undefined
|
|
546
546
|
)
|
|
547
547
|
}
|
|
548
548
|
}
|
|
@@ -670,7 +670,7 @@ class ParserImpl implements Parser {
|
|
|
670
670
|
}
|
|
671
671
|
}
|
|
672
672
|
|
|
673
|
-
function templateWithParts(template: ReadonlyArray<string>): string {
|
|
673
|
+
export function templateWithParts(template: ReadonlyArray<string>): string {
|
|
674
674
|
const length = template.length
|
|
675
675
|
const lastIndex = length - 1
|
|
676
676
|
|
|
@@ -689,7 +689,7 @@ function templateWithParts(template: ReadonlyArray<string>): string {
|
|
|
689
689
|
return output
|
|
690
690
|
}
|
|
691
691
|
|
|
692
|
-
function unsafeParsePartIndex(text: string): number {
|
|
692
|
+
export function unsafeParsePartIndex(text: string): number {
|
|
693
693
|
const next = getStrictPart(text, 0)
|
|
694
694
|
|
|
695
695
|
if (!next) {
|
|
@@ -699,13 +699,13 @@ function unsafeParsePartIndex(text: string): number {
|
|
|
699
699
|
return parseInt(next.match[2], 10)
|
|
700
700
|
}
|
|
701
701
|
|
|
702
|
-
function parseTextAndParts<T>(s: string, f: (index: number) => T): Array<Template.TextNode | T> {
|
|
702
|
+
export function parseTextAndParts<T>(s: string, f: (index: number) => T): Array<Template.TextNode | T> {
|
|
703
703
|
let next: TextChunk | undefined
|
|
704
704
|
let pos: number = 0
|
|
705
705
|
const out: Array<Template.TextNode | T> = []
|
|
706
706
|
|
|
707
707
|
if (!PART_REGEX.test(s)) {
|
|
708
|
-
return [new Template.TextNode(s)]
|
|
708
|
+
return [new Template.TextNode(convertCharacterEntities(s))]
|
|
709
709
|
}
|
|
710
710
|
|
|
711
711
|
while (pos < s.length) {
|
|
@@ -713,7 +713,7 @@ function parseTextAndParts<T>(s: string, f: (index: number) => T): Array<Templat
|
|
|
713
713
|
out.push(f(parseInt(next.match[2], 10)))
|
|
714
714
|
pos += next.length
|
|
715
715
|
} else if ((next = getTextUntilPart(s, pos))) {
|
|
716
|
-
out.push(new Template.TextNode(next.match[1]))
|
|
716
|
+
out.push(new Template.TextNode(convertCharacterEntities(next.match[1])))
|
|
717
717
|
|
|
718
718
|
pos += next.length
|
|
719
719
|
} else {
|
|
@@ -722,7 +722,7 @@ function parseTextAndParts<T>(s: string, f: (index: number) => T): Array<Templat
|
|
|
722
722
|
}
|
|
723
723
|
|
|
724
724
|
if (pos < s.length) {
|
|
725
|
-
out.push(new Template.TextNode(s.slice(pos)))
|
|
725
|
+
out.push(new Template.TextNode(convertCharacterEntities(s.slice(pos))))
|
|
726
726
|
}
|
|
727
727
|
|
|
728
728
|
return out
|