Skip to content

Commit 38469cf

Browse files
Merge branch 'add_factory_destroy_method' into rename_dist_folders
2 parents aaad4a2 + 8ba5830 commit 38469cf

File tree

9 files changed

+55
-88
lines changed

9 files changed

+55
-88
lines changed

CHANGES.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
11.0.0 (October XX, 2024)
2-
- Updated @splitsoftware/splitio-commons package to version 1.18.0 that includes minor updates:
3-
- Added support for targeting rules based on large segments for browsers.
4-
- Updated some transitive dependencies for vulnerability fixes.
2+
- Added support for targeting rules based on large segments for browsers.
3+
- Added `factory.destroy()` method, which invokes the `destroy` method of all clients created by the factory.
4+
- Updated @splitsoftware/splitio-commons package to version 2.0.0 that includes major updates and updated some transitive dependencies for vulnerability fixes.
55
- BREAKING CHANGES:
66
- Renamed distribution folders from `/lib` to `/cjs` for CommonJS build, and `/es` to `/esm` for EcmaScript Modules build.
77

package-lock.json

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@splitsoftware/splitio",
3-
"version": "10.28.1-rc.1",
3+
"version": "10.28.1-rc.2",
44
"description": "Split SDK",
55
"files": [
66
"README.md",
@@ -40,7 +40,7 @@
4040
"node": ">=6"
4141
},
4242
"dependencies": {
43-
"@splitsoftware/splitio-commons": "1.17.1-rc.0",
43+
"@splitsoftware/splitio-commons": "1.17.1-rc.1",
4444
"@types/google.analytics": "0.0.40",
4545
"@types/ioredis": "^4.28.0",
4646
"bloom-filters": "^3.0.0",

src/__tests__/browserSuites/push-synchronization.spec.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ const config = {
4747
},
4848
urls: baseUrls,
4949
streamingEnabled: true,
50-
debug: true
5150
};
5251
const settings = settingsFactory(config);
5352

src/__tests__/browserSuites/readiness.spec.js

Lines changed: 21 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -209,12 +209,7 @@ export default function (fetchMock, assert) {
209209
t.equal(getMembershipsHits(), 4 * CLIENTS_COUNT - 1, 'It should have not tried to synchronize segments again after the last update that left us in a no segment state.');
210210
t.equal(readyCount, CLIENTS_COUNT, 'all clients must be ready');
211211

212-
Promise.all([
213-
client2.destroy(),
214-
client3.destroy(),
215-
client.destroy()
216-
]).then(() => { t.end(); });
217-
212+
splitio.destroy().then(() => { t.end(); });
218213
}, 10000);
219214
}, 0);
220215
});
@@ -293,12 +288,7 @@ export default function (fetchMock, assert) {
293288
t.equal(getMembershipsHits(), 4 * CLIENTS_COUNT - 1, 'It should have not tried to synchronize segments again after the last update that left us in a no segment state.');
294289
t.equal(readyCount, CLIENTS_COUNT, 'all clients must be ready');
295290

296-
Promise.all([
297-
client2.destroy(),
298-
client3.destroy(),
299-
client.destroy()
300-
]).then(() => { t.end(); });
301-
291+
splitio.destroy().then(() => { t.end(); });
302292
}, 10000);
303293
}, 0);
304294
});
@@ -373,12 +363,7 @@ export default function (fetchMock, assert) {
373363
t.equal(getMembershipsHits(), 6 * CLIENTS_COUNT - 1, 'It should keep the producer synchronizing periodically..');
374364
t.equal(readyCount, CLIENTS_COUNT, 'all clients must be ready');
375365

376-
Promise.all([
377-
client2.destroy(),
378-
client3.destroy(),
379-
client.destroy()
380-
]).then(() => { t.end(); });
381-
366+
splitio.destroy().then(() => { t.end(); });
382367
}, 3000);
383368
}, 0);
384369
});
@@ -417,8 +402,8 @@ export default function (fetchMock, assert) {
417402
});
418403
const CLIENTS_COUNT = 3; // Just so it's easier to read the assertions.
419404
const client = splitio.client();
420-
const client2 = splitio.client('nicolas2@split.io');
421-
const client3 = splitio.client('nicolas3@split.io');
405+
splitio.client('nicolas2@split.io');
406+
splitio.client('nicolas3@split.io');
422407

423408
client.once(client.Event.SDK_READY, () => {
424409
t.ok(Date.now() - start >= membershipsEndpointDelay, 'It should not be ready without waiting for memberships, as there are segments in the first splits payload.');
@@ -442,12 +427,7 @@ export default function (fetchMock, assert) {
442427
setTimeout(() => {
443428
t.equal(getMembershipsHits(), 6 * CLIENTS_COUNT, 'It should keep the producer synchronizing periodically..');
444429

445-
Promise.all([
446-
client2.destroy(),
447-
client3.destroy(),
448-
client.destroy()
449-
]).then(() => { t.end(); });
450-
430+
splitio.destroy().then(() => { t.end(); });
451431
}, 3000);
452432
}, 0);
453433
});
@@ -486,19 +466,15 @@ export default function (fetchMock, assert) {
486466
});
487467
const CLIENTS_COUNT = 3; // Just so it's easier to read the assertions.
488468
const client = splitio.client();
489-
const client2 = splitio.client('nicolas2@split.io');
490-
const client3 = splitio.client('nicolas3@split.io');
469+
splitio.client('nicolas2@split.io');
470+
splitio.client('nicolas3@split.io');
491471

492472
client.once(client.Event.SDK_READY, () => {
493473
t.ok(Date.now() - start >= membershipsEndpointDelay, 'It should not be ready without waiting for memberships, when we start from cache it might be stale.');
494474

495475
setTimeout(() => {
496476
t.equal(getMembershipsHits(), 3 * CLIENTS_COUNT, 'memberships should had been hit once per client on the first attempt and keep syncing afterwards.');
497-
Promise.all([
498-
client2.destroy(),
499-
client3.destroy(),
500-
client.destroy()
501-
]).then(() => { t.end(); });
477+
splitio.destroy().then(() => { t.end(); });
502478
}, 2500);
503479
});
504480
client.once(client.Event.SDK_READY_TIMED_OUT, () => {
@@ -533,19 +509,15 @@ export default function (fetchMock, assert) {
533509
});
534510
const CLIENTS_COUNT = 3; // Just so it's easier to read the assertions.
535511
const client = splitio.client();
536-
const client2 = splitio.client('nicolas2@split.io');
537-
const client3 = splitio.client('nicolas3@split.io');
512+
splitio.client('nicolas2@split.io');
513+
splitio.client('nicolas3@split.io');
538514

539515
client.once(client.Event.SDK_READY, () => {
540516
t.ok(Date.now() - start < 50, 'It should be ready quickly, since it had no segments and update has no segments either.');
541517

542518
setTimeout(() => {
543519
t.equal(getMembershipsHits(), 1 * CLIENTS_COUNT, 'memberships should had been hit once per client on the first attempt but stopped syncing afterwards');
544-
Promise.all([
545-
client2.destroy(),
546-
client3.destroy(),
547-
client.destroy()
548-
]).then(() => { t.end(); });
520+
splitio.destroy().then(() => { t.end(); });
549521
}, 4500);
550522
});
551523
client.once(client.Event.SDK_READY_TIMED_OUT, () => {
@@ -584,19 +556,15 @@ export default function (fetchMock, assert) {
584556
});
585557
const CLIENTS_COUNT = 3; // Just so it's easier to read the assertions.
586558
const client = splitio.client();
587-
const client2 = splitio.client('nicolas2@split.io');
588-
const client3 = splitio.client('nicolas3@split.io');
559+
splitio.client('nicolas2@split.io');
560+
splitio.client('nicolas3@split.io');
589561

590562
client.once(client.Event.SDK_READY, () => {
591563
const delay = Date.now() - start;
592564
t.ok(delay >= membershipsEndpointDelay, 'It should not be ready without waiting for memberships, when we start from cache it might be stale.');
593565
setTimeout(() => {
594566
t.equal(getMembershipsHits(), 3 * CLIENTS_COUNT, 'memberships should had been hit once per client on the first attempt but stopped syncing afterwards');
595-
Promise.all([
596-
client2.destroy(),
597-
client3.destroy(),
598-
client.destroy()
599-
]).then(() => { t.end(); });
567+
splitio.destroy().then(() => { t.end(); });
600568
}, 3000);
601569
});
602570
client.once(client.Event.SDK_READY_TIMED_OUT, () => {
@@ -631,19 +599,15 @@ export default function (fetchMock, assert) {
631599
});
632600
const CLIENTS_COUNT = 3; // Just so it's easier to read the assertions.
633601
const client = splitio.client();
634-
const client2 = splitio.client('nicolas2@split.io');
635-
const client3 = splitio.client('nicolas3@split.io');
602+
splitio.client('nicolas2@split.io');
603+
splitio.client('nicolas3@split.io');
636604

637605
client.once(client.Event.SDK_READY, () => {
638606
t.ok(Date.now() - start >= membershipsEndpointDelay, 'It should not be ready without waiting for memberships, when we start from cache it might be stale and we had segments even though the update has nothing.');
639607

640608
setTimeout(() => {
641609
t.equal(getMembershipsHits(), 3 * CLIENTS_COUNT, 'memberships should had been hit once per client on the first attempt and kept syncing afterwards');
642-
Promise.all([
643-
client2.destroy(),
644-
client3.destroy(),
645-
client.destroy()
646-
]).then(() => { t.end(); });
610+
splitio.destroy().then(() => { t.end(); });
647611
}, 3000);
648612
});
649613
client.once(client.Event.SDK_READY_TIMED_OUT, () => {
@@ -681,19 +645,15 @@ export default function (fetchMock, assert) {
681645
});
682646
const CLIENTS_COUNT = 3; // Just so it's easier to read the assertions.
683647
const client = splitio.client();
684-
const client2 = splitio.client('nicolas2@split.io');
685-
const client3 = splitio.client('nicolas3@split.io');
648+
splitio.client('nicolas2@split.io');
649+
splitio.client('nicolas3@split.io');
686650

687651
client.once(client.Event.SDK_READY, () => {
688652
t.ok(Date.now() - start < 50, 'It should be ready without waiting for memberships, since when it downloads changes it will have no more use for them.');
689653

690654
setTimeout(() => {
691655
t.equal(getMembershipsHits(), 1 * CLIENTS_COUNT, 'memberships should had been hit once per client on the first attempt and stopped syncing afterwards');
692-
Promise.all([
693-
client2.destroy(),
694-
client3.destroy(),
695-
client.destroy()
696-
]).then(() => { t.end(); });
656+
splitio.destroy().then(() => { t.end(); });
697657
}, 3000);
698658
});
699659
client.once(client.Event.SDK_READY_TIMED_OUT, () => {

src/__tests__/nodeSuites/readiness.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export default function (fetchMock, assert) {
4949
try {
5050
await client.ready();
5151
} catch (e) {
52-
await client.destroy();
52+
await splitio.destroy();
5353
t.end();
5454
}
5555
});

src/settings/defaults/version.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export const packageVersion = '10.28.1-rc.1';
1+
export const packageVersion = '10.28.1-rc.2';

ts-tests/index.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,11 @@ const b: number = client.listenerCount(splitEvent);
240240
let nodeEventEmitter: NodeJS.EventEmitter = client;
241241

242242
// Ready, destroy and flush
243-
const readyPromise: Promise<void> = client.ready();
244-
const destroyPromise: Promise<void> = client.destroy();
245-
// @ts-ignore
246-
const flushPromise: Promise<void> = client.flush();
243+
let promise: Promise<void> = client.ready();
244+
promise = client.destroy();
245+
promise = SDK.destroy();
246+
// @TODO not public yet
247+
// promise = client.flush();
247248

248249
// We can call getTreatment with or without a key.
249250
treatment = client.getTreatment(splitKey, 'mySplit');
@@ -332,10 +333,11 @@ const b1: number = asyncClient.listenerCount(splitEvent);
332333
nodeEventEmitter = asyncClient;
333334

334335
// Ready, destroy and flush (same as for sync client, just for interface checking)
335-
const readyPromise1: Promise<void> = asyncClient.ready();
336-
asyncClient.destroy();
337-
// @ts-ignore
338-
asyncClient.flush();
336+
promise = asyncClient.ready();
337+
promise = asyncClient.destroy();
338+
promise = AsyncSDK.destroy();
339+
// @TODO not public yet
340+
// promise = asyncClient.flush();
339341

340342
// We can call getTreatment but always with a key.
341343
asyncTreatment = asyncClient.getTreatment(splitKey, 'mySplit');
@@ -391,7 +393,7 @@ splitView = manager.split('mySplit');
391393
splitViews = manager.splits();
392394

393395
// Manager implements ready promise.
394-
const managerReadyPromise: Promise<void> = manager.ready();
396+
promise = manager.ready();
395397

396398
// Manager implements methods from NodeJS.Events. Testing a few.
397399
manager = manager.on(splitEvent, () => { });
@@ -415,7 +417,7 @@ splitViewAsync = asyncManager.split('mySplit');
415417
splitViewsAsync = asyncManager.splits();
416418

417419
// asyncManager implements ready promise.
418-
const asyncManagerReadyPromise: Promise<void> = asyncManager.ready();
420+
promise = asyncManager.ready();
419421

420422
// asyncManager implements methods from NodeJS.Events. Testing a few.
421423
asyncManager = asyncManager.on(splitEvent, () => { });

types/splitio.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,12 @@ interface IBasicSDK {
491491
* @property Logger
492492
*/
493493
Logger: ILoggerAPI
494+
/**
495+
* Destroys all the clients created by this factory.
496+
* @function destroy
497+
* @returns {Promise<void>}
498+
*/
499+
destroy(): Promise<void>
494500
}
495501
/****** Exposed namespace ******/
496502
/**

0 commit comments

Comments
 (0)