@@ -2,7 +2,7 @@ import { ValueToken, Liquid, Tokenizer, toValue, evalToken, Value, Emitter, TagT
2
2
3
3
export default class extends Tag {
4
4
value : Value
5
- branches : { value ? : ValueToken , templates : Template [ ] } [ ] = [ ]
5
+ branches : { values : ValueToken [ ] , templates : Template [ ] } [ ] = [ ]
6
6
elseTemplates : Template [ ] = [ ]
7
7
constructor ( tagToken : TagToken , remainTokens : TopLevelToken [ ] , liquid : Liquid ) {
8
8
super ( tagToken , remainTokens , liquid )
@@ -15,15 +15,15 @@ export default class extends Tag {
15
15
p = [ ]
16
16
17
17
const tokenizer = new Tokenizer ( token . args , this . liquid . options . operators )
18
-
18
+ const values : ValueToken [ ] = [ ]
19
19
while ( ! tokenizer . end ( ) ) {
20
- const value = tokenizer . readValue ( )
21
- this . branches . push ( {
22
- value : value ,
23
- templates : p
24
- } )
20
+ values . push ( tokenizer . readValueOrThrow ( ) )
25
21
tokenizer . readTo ( ',' )
26
22
}
23
+ this . branches . push ( {
24
+ values,
25
+ templates : p
26
+ } )
27
27
} )
28
28
. on ( 'tag:else' , ( ) => ( p = this . elseTemplates ) )
29
29
. on ( 'tag:endcase' , ( ) => stream . stop ( ) )
@@ -35,16 +35,22 @@ export default class extends Tag {
35
35
stream . start ( )
36
36
}
37
37
38
- * render ( ctx : Context , emitter : Emitter ) : Generator < unknown , unknown , unknown > {
38
+ * render ( ctx : Context , emitter : Emitter ) : Generator < unknown , void , unknown > {
39
39
const r = this . liquid . renderer
40
- const value = toValue ( yield this . value . value ( ctx , ctx . opts . lenientIf ) )
40
+ const target = toValue ( yield this . value . value ( ctx , ctx . opts . lenientIf ) )
41
+ let branchHit = false
41
42
for ( const branch of this . branches ) {
42
- const target = yield evalToken ( branch . value , ctx , ctx . opts . lenientIf )
43
- if ( target === value ) {
44
- yield r . renderTemplates ( branch . templates , ctx , emitter )
45
- return
43
+ for ( const valueToken of branch . values ) {
44
+ const value = yield evalToken ( valueToken , ctx , ctx . opts . lenientIf )
45
+ if ( target === value ) {
46
+ yield r . renderTemplates ( branch . templates , ctx , emitter )
47
+ branchHit = true
48
+ break
49
+ }
46
50
}
47
51
}
48
- yield r . renderTemplates ( this . elseTemplates , ctx , emitter )
52
+ if ( ! branchHit ) {
53
+ yield r . renderTemplates ( this . elseTemplates , ctx , emitter )
54
+ }
49
55
}
50
56
}
0 commit comments