Skip to content

Commit d9dd1d4

Browse files
authored
Merge branch 'main' into fail_on_docs_warnings
2 parents efecf31 + 10eae84 commit d9dd1d4

12 files changed

Lines changed: 84 additions & 34 deletions

File tree

packages/browser-sdk/README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,8 +274,7 @@ See details in [Feedback HTTP API](https://docs.bucket.co/reference/http-trackin
274274

275275
Event listeners allow for capturing various events occurring in the `BucketClient`. This is useful to build integrations with other system or for various debugging purposes. There are 5 kinds of events:
276276

277-
- `configCheck`: Your code used a feature config
278-
- `enabledCheck`: Your code checked whether a specific feature should be enabled
277+
- `check`: Your code used `isEnabled` or `config` for a feature
279278
- `featuresUpdated`: Features were updated. Either because they were loaded as part of initialization or because the user/company updated
280279
- `user`: User information updated (similar to the `identify` call used in tracking terminology)
281280
- `company`: Company information updated (sometimes to the `group` call used in tracking terminology)

packages/browser-sdk/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
document.getElementById("loading").style.display = "none";
5555
});
5656

57-
bucket.on("enabledCheck", (check) =>
57+
bucket.on("check", (check) =>
5858
console.log(`Check event for ${check.key}`),
5959
);
6060

packages/browser-sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@bucketco/browser-sdk",
3-
"version": "3.1.0",
3+
"version": "3.1.1",
44
"packageManager": "yarn@4.1.1",
55
"license": "MIT",
66
"repository": {

packages/browser-sdk/src/client.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -480,28 +480,32 @@ export class BucketClient {
480480
}
481481

482482
/**
483-
* Add a hook to the client.
483+
* Add an event listener
484484
*
485+
* @param type Type of events to listen for
486+
* @param handler The function to call when the event is triggered.
485487
* @returns A function to remove the hook.
486488
*/
487489
on<THookType extends keyof HookArgs>(
488490
type: THookType,
489491
handler: (args0: HookArgs[THookType]) => void,
490492
) {
491-
this.hooks.addHook(type, handler);
492-
return () => this.hooks.removeHook(type, handler);
493+
return this.hooks.addHook(type, handler);
493494
}
494495

495496
/**
496-
* Remove a hook from the client.
497+
* Remove an event listener
498+
*
499+
* @param type Type of event to remove.
500+
* @param handler The same function that was passed to `on`.
497501
*
498502
* @returns A function to remove the hook.
499503
*/
500504
off<THookType extends keyof HookArgs>(
501505
type: THookType,
502506
handler: (args0: HookArgs[THookType]) => void,
503507
) {
504-
return this.hooks.removeHook(type, handler);
508+
this.hooks.removeHook(type, handler);
505509
}
506510

507511
/**
@@ -797,6 +801,7 @@ export class BucketClient {
797801
checkEvent.action == "check-config" ? "configCheck" : "enabledCheck",
798802
checkEvent,
799803
);
804+
this.hooks.trigger("check", checkEvent);
800805
});
801806
}
802807

packages/browser-sdk/src/hooksManager.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,17 @@ import { CheckEvent, RawFeatures } from "./feature/features";
22
import { CompanyContext, UserContext } from "./context";
33

44
export interface HookArgs {
5+
/**
6+
* Deprecated: Use `check` instead.
7+
* @deprecated
8+
*/
59
configCheck: CheckEvent;
10+
/**
11+
* Deprecated: Use `check` instead.
12+
* @deprecated
13+
*/
614
enabledCheck: CheckEvent;
15+
check: CheckEvent;
716
featuresUpdated: RawFeatures;
817
user: UserContext;
918
company: CompanyContext;
@@ -25,13 +34,15 @@ export class HooksManager {
2534
private hooks: {
2635
enabledCheck: ((arg0: CheckEvent) => void)[];
2736
configCheck: ((arg0: CheckEvent) => void)[];
37+
check: ((arg0: CheckEvent) => void)[];
2838
featuresUpdated: ((arg0: RawFeatures) => void)[];
2939
user: ((arg0: UserContext) => void)[];
3040
company: ((arg0: CompanyContext) => void)[];
3141
track: ((arg0: TrackEvent) => void)[];
3242
} = {
3343
enabledCheck: [],
3444
configCheck: [],
45+
check: [],
3546
featuresUpdated: [],
3647
user: [],
3748
company: [],

packages/browser-sdk/test/client.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,15 @@ describe("BucketClient", () => {
8080
const trackHook = vi.fn();
8181
const userHook = vi.fn();
8282
const companyHook = vi.fn();
83+
const checkHook = vi.fn();
8384
const checkHookIsEnabled = vi.fn();
8485
const checkHookConfig = vi.fn();
8586
const featuresUpdated = vi.fn();
8687

8788
client.on("track", trackHook);
8889
client.on("user", userHook);
8990
client.on("company", companyHook);
91+
client.on("check", checkHook);
9092
client.on("configCheck", checkHookConfig);
9193
client.on("enabledCheck", checkHookIsEnabled);
9294
client.on("featuresUpdated", featuresUpdated);
@@ -108,10 +110,14 @@ describe("BucketClient", () => {
108110
// eslint-disable-next-line @typescript-eslint/no-unused-expressions -- special getter triggering event
109111
client.getFeature("featureA").isEnabled;
110112
expect(checkHookIsEnabled).toHaveBeenCalled();
113+
expect(checkHook).toHaveBeenCalled();
114+
115+
checkHook.mockReset();
111116

112117
// eslint-disable-next-line @typescript-eslint/no-unused-expressions -- special getter triggering event
113118
client.getFeature("featureA").config;
114119
expect(checkHookConfig).toHaveBeenCalled();
120+
expect(checkHook).toHaveBeenCalled();
115121

116122
expect(featuresUpdated).not.toHaveBeenCalled();
117123
await client.updateOtherContext({ key: "value" });
@@ -121,6 +127,7 @@ describe("BucketClient", () => {
121127
client.off("track", trackHook);
122128
client.off("user", userHook);
123129
client.off("company", companyHook);
130+
client.off("check", checkHook);
124131
client.off("configCheck", checkHookConfig);
125132
client.off("enabledCheck", checkHookIsEnabled);
126133
client.off("featuresUpdated", featuresUpdated);
@@ -129,6 +136,7 @@ describe("BucketClient", () => {
129136
trackHook.mockReset();
130137
userHook.mockReset();
131138
companyHook.mockReset();
139+
checkHook.mockReset();
132140
checkHookIsEnabled.mockReset();
133141
checkHookConfig.mockReset();
134142
featuresUpdated.mockReset();
@@ -147,6 +155,7 @@ describe("BucketClient", () => {
147155
expect(trackHook).not.toHaveBeenCalled();
148156
expect(userHook).not.toHaveBeenCalled();
149157
expect(companyHook).not.toHaveBeenCalled();
158+
expect(checkHook).not.toHaveBeenCalled();
150159
expect(checkHookIsEnabled).not.toHaveBeenCalled();
151160
expect(checkHookConfig).not.toHaveBeenCalled();
152161
expect(featuresUpdated).not.toHaveBeenCalled();

packages/browser-sdk/test/hooksManager.test.ts

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,21 @@ describe("HookManager", () => {
1111
hookManager = new HooksManager();
1212
});
1313

14-
it("should add and trigger check-is-enabled hooks", () => {
14+
it("should add and trigger `check` hooks", () => {
15+
const callback = vi.fn();
16+
hookManager.addHook("check", callback);
17+
18+
const checkEvent: CheckEvent = {
19+
action: "check-is-enabled",
20+
key: "test-key",
21+
value: true,
22+
};
23+
hookManager.trigger("check", checkEvent);
24+
25+
expect(callback).toHaveBeenCalledWith(checkEvent);
26+
});
27+
28+
it("should add and trigger `enabledCheck` hooks", () => {
1529
const callback = vi.fn();
1630
hookManager.addHook("enabledCheck", callback);
1731

@@ -25,7 +39,7 @@ describe("HookManager", () => {
2539
expect(callback).toHaveBeenCalledWith(checkEvent);
2640
});
2741

28-
it("should add and trigger configCheck hooks", () => {
42+
it("should add and trigger `configCheck` hooks", () => {
2943
const callback = vi.fn();
3044
hookManager.addHook("configCheck", callback);
3145

@@ -39,7 +53,7 @@ describe("HookManager", () => {
3953
expect(callback).toHaveBeenCalledWith(checkEvent);
4054
});
4155

42-
it("should add and trigger features-updated hooks", () => {
56+
it("should add and trigger `featuresUpdated` hooks", () => {
4357
const callback = vi.fn();
4458
hookManager.addHook("featuresUpdated", callback);
4559

@@ -51,7 +65,7 @@ describe("HookManager", () => {
5165
expect(callback).toHaveBeenCalledWith(features);
5266
});
5367

54-
it("should add and trigger track hooks", () => {
68+
it("should add and trigger `track` hooks", () => {
5569
const callback = vi.fn();
5670
const user: UserContext = { id: "user-id", name: "user-name" };
5771
const company: CompanyContext = { id: "company-id", name: "company-name" };
@@ -69,7 +83,7 @@ describe("HookManager", () => {
6983
});
7084
});
7185

72-
it("should add and trigger user hooks", () => {
86+
it("should add and trigger `user` hooks", () => {
7387
const callback = vi.fn();
7488

7589
hookManager.addHook("user", callback);
@@ -80,7 +94,7 @@ describe("HookManager", () => {
8094
expect(callback).toHaveBeenCalledWith(user);
8195
});
8296

83-
it("should add and trigger company hooks", () => {
97+
it("should add and trigger `company` hooks", () => {
8498
const callback = vi.fn();
8599
hookManager.addHook("company", callback);
86100

@@ -94,15 +108,15 @@ describe("HookManager", () => {
94108
const callback1 = vi.fn();
95109
const callback2 = vi.fn();
96110

97-
hookManager.addHook("enabledCheck", callback1);
98-
hookManager.addHook("enabledCheck", callback2);
111+
hookManager.addHook("check", callback1);
112+
hookManager.addHook("check", callback2);
99113

100114
const checkEvent: CheckEvent = {
101115
action: "check-is-enabled",
102116
key: "test-key",
103117
value: true,
104118
};
105-
hookManager.trigger("enabledCheck", checkEvent);
119+
hookManager.trigger("check", checkEvent);
106120

107121
expect(callback1).toHaveBeenCalledWith(checkEvent);
108122
expect(callback2).toHaveBeenCalledWith(checkEvent);
@@ -112,16 +126,16 @@ describe("HookManager", () => {
112126
const callback1 = vi.fn();
113127
const callback2 = vi.fn();
114128

115-
hookManager.addHook("enabledCheck", callback1);
116-
hookManager.addHook("enabledCheck", callback2);
117-
hookManager.removeHook("enabledCheck", callback1);
129+
hookManager.addHook("check", callback1);
130+
hookManager.addHook("check", callback2);
131+
hookManager.removeHook("check", callback1);
118132

119133
const checkEvent: CheckEvent = {
120134
action: "check-is-enabled",
121135
key: "test-key",
122136
value: true,
123137
};
124-
hookManager.trigger("enabledCheck", checkEvent);
138+
hookManager.trigger("check", checkEvent);
125139

126140
expect(callback1).not.toHaveBeenCalled();
127141
expect(callback2).toHaveBeenCalledWith(checkEvent);
@@ -131,16 +145,16 @@ describe("HookManager", () => {
131145
const callback1 = vi.fn();
132146
const callback2 = vi.fn();
133147

134-
const removeHook1 = hookManager.addHook("enabledCheck", callback1);
135-
hookManager.addHook("enabledCheck", callback2);
148+
const removeHook1 = hookManager.addHook("check", callback1);
149+
hookManager.addHook("check", callback2);
136150
removeHook1();
137151

138152
const checkEvent: CheckEvent = {
139153
action: "check-is-enabled",
140154
key: "test-key",
141155
value: true,
142156
};
143-
hookManager.trigger("enabledCheck", checkEvent);
157+
hookManager.trigger("check", checkEvent);
144158

145159
expect(callback1).not.toHaveBeenCalled();
146160
expect(callback2).toHaveBeenCalledWith(checkEvent);

packages/openfeature-browser-provider/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@
2929
"types": "./dist/index.d.ts",
3030
"exports": {
3131
".": {
32+
"types": "./dist/index.d.ts",
3233
"import": "./dist/bucket-openfeature-browser-provider.mjs",
33-
"require": "./dist/bucket-openfeature-browser-provider.umd.js",
34-
"types": "./dist/index.d.ts"
34+
"require": "./dist/bucket-openfeature-browser-provider.umd.js"
3535
}
3636
},
3737
"dependencies": {

packages/react-sdk/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ function LoggingWrapper({ children }: { children: ReactNode }) {
409409
const client = useClient();
410410

411411
useEffect(() => {
412-
client.on("enabledCheck", (evt) => {
412+
client.on("check", (evt) => {
413413
console.log(`The feature ${evt.key} is ${evt.value} for user.`);
414414
});
415415
}, [client]);

packages/react-sdk/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@bucketco/react-sdk",
3-
"version": "3.1.0",
3+
"version": "3.1.1",
44
"license": "MIT",
55
"repository": {
66
"type": "git",
@@ -34,7 +34,7 @@
3434
}
3535
},
3636
"dependencies": {
37-
"@bucketco/browser-sdk": "3.1.0",
37+
"@bucketco/browser-sdk": "3.1.1",
3838
"canonical-json": "^0.0.4",
3939
"rollup": "^4.2.0"
4040
},

0 commit comments

Comments
 (0)