@@ -2,7 +2,7 @@ import { ValueToken, Liquid, Tokenizer, toValue, evalToken, Value, Emitter, TagT
22
33export default class extends Tag {
44 value : Value
5- branches : { value ? : ValueToken , templates : Template [ ] } [ ] = [ ]
5+ branches : { values : ValueToken [ ] , templates : Template [ ] } [ ] = [ ]
66 elseTemplates : Template [ ] = [ ]
77 constructor ( tagToken : TagToken , remainTokens : TopLevelToken [ ] , liquid : Liquid ) {
88 super ( tagToken , remainTokens , liquid )
@@ -15,15 +15,15 @@ export default class extends Tag {
1515 p = [ ]
1616
1717 const tokenizer = new Tokenizer ( token . args , this . liquid . options . operators )
18-
18+ const values : ValueToken [ ] = [ ]
1919 while ( ! tokenizer . end ( ) ) {
20- const value = tokenizer . readValue ( )
21- this . branches . push ( {
22- value : value ,
23- templates : p
24- } )
20+ values . push ( tokenizer . readValueOrThrow ( ) )
2521 tokenizer . readTo ( ',' )
2622 }
23+ this . branches . push ( {
24+ values,
25+ templates : p
26+ } )
2727 } )
2828 . on ( 'tag:else' , ( ) => ( p = this . elseTemplates ) )
2929 . on ( 'tag:endcase' , ( ) => stream . stop ( ) )
@@ -35,16 +35,22 @@ export default class extends Tag {
3535 stream . start ( )
3636 }
3737
38- * render ( ctx : Context , emitter : Emitter ) : Generator < unknown , unknown , unknown > {
38+ * render ( ctx : Context , emitter : Emitter ) : Generator < unknown , void , unknown > {
3939 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
4142 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+ }
4650 }
4751 }
48- yield r . renderTemplates ( this . elseTemplates , ctx , emitter )
52+ if ( ! branchHit ) {
53+ yield r . renderTemplates ( this . elseTemplates , ctx , emitter )
54+ }
4955 }
5056}
0 commit comments