@@ -2908,6 +2908,13 @@ func (p *Parser) ParseFields(function string, internalFields map[int][]InternalF
2908
2908
break
2909
2909
} else if tok == field .tokenType {
2910
2910
2911
+ if tok == STRING {
2912
+ var err error
2913
+ lit , err = p .parseTemplateString (tok , lit , pos , function )
2914
+ if err != nil {
2915
+ return nil , err
2916
+ }
2917
+ }
2911
2918
field .lit = lit
2912
2919
findType = true
2913
2920
@@ -2950,6 +2957,53 @@ func (p *Parser) ParseFields(function string, internalFields map[int][]InternalF
2950
2957
return res , nil
2951
2958
}
2952
2959
2960
+ // parseTemplateString evaluate a string lit to parse template string
2961
+ func (p * Parser ) parseTemplateString (tok Token , lit string , pos Pos , function string ) (string , error ) {
2962
+
2963
+ if ! strings .Contains (lit , "${" ) && ! strings .Contains (lit , "}" ) {
2964
+ return lit , nil
2965
+ }
2966
+
2967
+ toEvaluateArray := strings .Split (lit , "${" )
2968
+
2969
+ resultString := lit
2970
+
2971
+ for index , evaluationString := range toEvaluateArray {
2972
+ if index == 0 || ! strings .Contains (evaluationString , "}" ) {
2973
+ continue
2974
+ }
2975
+
2976
+ toEvaluateArray = strings .Split (evaluationString , "}" )
2977
+
2978
+ toEvaluate := toEvaluateArray [0 ]
2979
+
2980
+ variable , exists := p .variables [toEvaluate ]
2981
+ if ! exists {
2982
+ errMessage := fmt .Sprintf ("Error when parsing template %q in %q function, %q variable isn't declared" , lit , function , toEvaluate )
2983
+ return "" , p .NewTslError (errMessage , pos )
2984
+ }
2985
+
2986
+ if variable .tokenType == INTERNALLIST {
2987
+
2988
+ stringList := "["
2989
+ prefix := ""
2990
+ for _ , field := range variable .fieldList {
2991
+ fieldLit , err := p .parseTemplateString (field .tokenType , field .lit , pos , function )
2992
+ if err != nil {
2993
+ return "" , err
2994
+ }
2995
+ stringList += prefix + fieldLit
2996
+ prefix = ", "
2997
+ }
2998
+ stringList += "]"
2999
+
3000
+ resultString = strings .Replace (lit , "${" + toEvaluate + "}" , stringList , 1 )
3001
+ }
3002
+ resultString = strings .Replace (resultString , "${" + toEvaluate + "}" , variable .lit , 1 )
3003
+ }
3004
+ return resultString , nil
3005
+ }
3006
+
2953
3007
// ParseInternalFieldList Parse an internal list split per COMMA
2954
3008
func (p * Parser ) ParseInternalFieldList (function string , field InternalField ) (* InternalField , error ) {
2955
3009
field .fieldList = make ([]InternalField , 0 )
@@ -2965,6 +3019,14 @@ func (p *Parser) ParseInternalFieldList(function string, field InternalField) (*
2965
3019
break
2966
3020
}
2967
3021
3022
+ if tok == STRING {
3023
+ var err error
3024
+ lit , err = p .parseTemplateString (tok , lit , pos , function )
3025
+ if err != nil {
3026
+ return nil , err
3027
+ }
3028
+ }
3029
+
2968
3030
field .fieldList = append (field .fieldList , InternalField {tokenType : tok , lit : lit })
2969
3031
2970
3032
tok , pos , lit = p .ScanIgnoreWhitespace ()
0 commit comments