added object flag to nestjs go file and tmpl file

Signed-off-by: bbland1 <104288486+bbland1@users.noreply.github.com>
This commit is contained in:
bbland1 2025-06-16 22:24:20 -04:00
parent a9b2efe61a
commit cb8e563bee
2 changed files with 17 additions and 7 deletions

View File

@ -2,6 +2,7 @@ package nestjs
import (
_ "embed"
"encoding/json"
"text/template"
"github.com/open-feature/cli/internal/flagset"
@ -28,14 +29,25 @@ func openFeatureType(t flagset.FlagType) string {
return "boolean"
case flagset.StringType:
return "string"
case flagset.ObjectType:
return "object"
default:
return ""
}
}
func toJSONString(value any) string {
bytes, err := json.Marshal(value)
if err != nil {
return "{}"
}
return string(bytes)
}
func (g *NestJsGenerator) Generate(params *generators.Params[Params]) error {
funcs := template.FuncMap{
"OpenFeatureType": openFeatureType,
"ToJSONString": toJSONString,
}
newParams := &generators.Params[any]{
@ -49,8 +61,6 @@ func (g *NestJsGenerator) Generate(params *generators.Params[Params]) error {
// NewGenerator creates a generator for NestJS.
func NewGenerator(fs *flagset.Flagset) *NestJsGenerator {
return &NestJsGenerator{
CommonGenerator: *generators.NewGenerator(fs, map[flagset.FlagType]bool{
flagset.ObjectType: true,
}),
CommonGenerator: *generators.NewGenerator(fs, map[flagset.FlagType]bool{}),
}
}

View File

@ -9,7 +9,7 @@ import type {
EvaluationDetails,
OpenFeatureModuleOptions,
} from "@openfeature/nestjs-sdk";
import { OpenFeatureModule, BooleanFeatureFlag, StringFeatureFlag, NumberFeatureFlag } from "@openfeature/nestjs-sdk";
import { OpenFeatureModule, BooleanFeatureFlag, StringFeatureFlag, NumberFeatureFlag, ObjectFeatureFlag } from "@openfeature/nestjs-sdk";
import type { GeneratedClient } from "./openfeature";
import { getGeneratedClient } from "./openfeature";
@ -100,7 +100,7 @@ interface TypedFeatureProps {
* **Details:**
* - flag key: `{{ .Key }}`
* - description: `{{ .Description }}`
* - default value: `{{ .DefaultValue }}`
* - default value: `{{ if eq (.Type | OpenFeatureType) "object"}}{{ .DefaultValue | ToJSONString }}{{ else }}{{ .DefaultValue | QuoteString }}{{ end }}`
* - type: `{{ .Type | OpenFeatureType }}`
*
* Usage:
@ -108,13 +108,13 @@ interface TypedFeatureProps {
* @Get("/")
* public async handleRequest(
* @{{ .Key | ToPascal }}()
* {{ .Key | ToCamel }}: Observable<EvaluationDetails<number>>,
* {{ .Key | ToCamel }}: Observable<EvaluationDetails<{{ .Type | OpenFeatureType }}>>,
* )
* ```
* @param {TypedFeatureProps} props The options for injecting the feature flag.
* @returns {ParameterDecorator} The decorator function.
*/
export function {{ .Key | ToPascal }}(props?: TypedFeatureProps): ParameterDecorator {
return {{ .Type | OpenFeatureType | ToPascal }}FeatureFlag({ flagKey: {{ .Key | Quote }}, defaultValue: {{ .DefaultValue | QuoteString }}, ...props });
return {{ .Type | OpenFeatureType | ToPascal }}FeatureFlag({ flagKey: {{ .Key | Quote }}, defaultValue: {{ if eq (.Type | OpenFeatureType) "object"}}{{ .DefaultValue | ToJSONString }}{{ else }}{{ .DefaultValue | QuoteString }}{{ end }}, ...props });
}
{{ end -}}