Skip to content

Commit 02074d4

Browse files
authored
feat(shared): Add JSON watcher wrapper for Launch Darkly (#2628)
Our LD wrapper hides the raw ld client so we have to re-wrap and re-export any methods we want to use
1 parent 94d002d commit 02074d4

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

packages/shared/pkg/featureflags/client.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/launchdarkly/go-sdk-common/v3/ldlog"
1010
"github.com/launchdarkly/go-sdk-common/v3/ldvalue"
1111
ldclient "github.com/launchdarkly/go-server-sdk/v7"
12+
"github.com/launchdarkly/go-server-sdk/v7/interfaces"
1213
"github.com/launchdarkly/go-server-sdk/v7/ldcomponents"
1314
"github.com/launchdarkly/go-server-sdk/v7/testhelpers/ldtestdata"
1415
"go.uber.org/zap"
@@ -105,6 +106,25 @@ func (c *Client) JSONFlag(ctx context.Context, flag JSONFlag, contexts ...ldcont
105106
return getFlag(ctx, c.ld, c.ld.JSONVariationCtx, flag, c.allContexts(contexts))
106107
}
107108

109+
func (c *Client) WatchJSONFlag(ctx context.Context, flag JSONFlag, contexts ...ldcontext.Context) (<-chan interfaces.FlagValueChangeEvent, func()) {
110+
if c.ld == nil {
111+
ch := make(chan interfaces.FlagValueChangeEvent)
112+
close(ch)
113+
114+
return ch, func() {}
115+
}
116+
117+
listener := c.ld.GetFlagTracker().AddFlagValueChangeListener(
118+
flag.Key(),
119+
mergeContexts(ctx, c.allContexts(contexts)),
120+
flag.Fallback(),
121+
)
122+
123+
return listener, func() {
124+
c.ld.GetFlagTracker().RemoveFlagValueChangeListener(listener)
125+
}
126+
}
127+
108128
func (c *Client) IntFlag(ctx context.Context, flag IntFlag, contexts ...ldcontext.Context) int {
109129
return getFlag(ctx, c.ld, c.ld.IntVariationCtx, flag, c.allContexts(contexts))
110130
}

0 commit comments

Comments
 (0)