From cb8e563bee059483239637da8ed313f409f3dd5f Mon Sep 17 00:00:00 2001 From: bbland1 <104288486+bbland1@users.noreply.github.com> Date: Mon, 16 Jun 2025 22:24:20 -0400 Subject: [PATCH] added object flag to nestjs go file and tmpl file Signed-off-by: bbland1 <104288486+bbland1@users.noreply.github.com> --- internal/generators/nestjs/nestjs.go | 16 +++++++++++++--- internal/generators/nestjs/nestjs.tmpl | 8 ++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/internal/generators/nestjs/nestjs.go b/internal/generators/nestjs/nestjs.go index 74b3227..9ff86a8 100644 --- a/internal/generators/nestjs/nestjs.go +++ b/internal/generators/nestjs/nestjs.go @@ -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{}), } } diff --git a/internal/generators/nestjs/nestjs.tmpl b/internal/generators/nestjs/nestjs.tmpl index 971a74e..910b9bb 100644 --- a/internal/generators/nestjs/nestjs.tmpl +++ b/internal/generators/nestjs/nestjs.tmpl @@ -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>, + * {{ .Key | ToCamel }}: Observable>, * ) * ``` * @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 -}}