Skip to content

Commit f86289b

Browse files
Merge pull request #841 from splitio/development
Add MIGRATION-GUIDE.md file
2 parents a1e5434 + a395b47 commit f86289b

File tree

19 files changed

+134
-63
lines changed

19 files changed

+134
-63
lines changed

.github/workflows/sonar-scan.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
with:
2020
fetch-depth: 0
2121

22-
- name: Set up nodejs
22+
- name: Set up Node.js
2323
uses: actions/setup-node@v3
2424
with:
2525
node-version: 'lts/*'

CHANGES.txt

Lines changed: 38 additions & 37 deletions
Large diffs are not rendered by default.

CONTRIBUTORS-GUIDE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Split SDK is an open source project and we welcome feedback and contribution. Th
77
### Development process
88

99
1. Fork the repository and create a topic branch from `development` branch. Please use a descriptive name for your branch.
10-
2. Run `nvm use` to ensure that you are using the right npm and node version, and `npm install` to have the dependencies up to date.
10+
2. Run `nvm use` to ensure that you are using the right npm and Node.js version, and `npm install` to have the dependencies up to date.
1111
3. While developing, use descriptive messages in your commits. Avoid short or meaningless sentences like: "fix bug".
1212
4. Make sure to add tests for both positive and negative cases.
1313
5. If your changes have any impact on the public API, make sure you update the TypeScript declarations as well as it's related test file.
@@ -46,7 +46,7 @@ Consider running the linter script (`npm run check:lint`) and fixing any issues
4646

4747
If you want to debug your changes consuming it from a test application, you could:
4848
- For browsers, import the **UMD** bundle from an HTML document. To debug you can use the browser dev tools.
49-
- For Node, you could use symlinks via [npm link command](https://docs.npmjs.com/cli/link.html) and then import the package as usual. To debug you could use the [Node inspector](https://nodejs.org/en/docs/guides/debugging-getting-started/).
49+
- For Node.js, you could use symlinks via [npm link command](https://docs.npmjs.com/cli/link.html) and then import the package as usual. To debug you could use the [Node.js inspector](https://nodejs.org/en/docs/guides/debugging-getting-started/).
5050

5151
# Contact
5252

MIGRATION-GUIDE.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Migrating to JavaScript SDK v11
2+
3+
JavaScript SDK v11.0.0 has a few breaking changes that you should consider when migrating from version 10.x.x.
4+
5+
## Changes that affect server-side API (Node.js)
6+
7+
While JavaScript SDK previously supported Node.js v6 and above, the SDK now requires Node.js v14 or above.
8+
9+
## Changes that affect client-side API (Browser)
10+
11+
Below you will find a list of the changes:
12+
13+
- **Removed the `core.trafficType` configuration option (`SplitIO.IBrowserSettings['core']['trafficType]`) and the `trafficType` parameter from the SDK `client()` method in Browser (`SplitIO.IBrowserSDK['client']`). As a result, traffic types can no longer be bound to SDK clients, and the traffic type must be provided in the `track` method.**
14+
15+
This change was made to align the SDK with the client-side APIs of the [Browser SDK](https://help.split.io/hc/en-us/articles/360058730852-Browser-SDK) and [React Native SDK](https://help.split.io/hc/en-us/articles/4406066357901-React-Native-SDK).
16+
17+
SDK clients cannot be bound to a traffic type anymore, and so the traffic type must be provided when calling the `client.track` method. For example:
18+
19+
```javascript
20+
// JS SDK v10.x.x
21+
const factory = SplitFactory({
22+
core: {
23+
authorizationKey: '...',
24+
key: USER_KEY,
25+
trafficType: 'user'
26+
}
27+
});
28+
29+
const client = factory.client();
30+
const accountClient = factory.client(ACCOUNT_ID, 'account');
31+
32+
client.track('my_event');
33+
accountClient.track('my_event');
34+
```
35+
36+
should be replaced with:
37+
38+
```javascript
39+
// JS SDK v11.0.0
40+
const factory = SplitFactory({
41+
core: {
42+
authorizationKey: '...',
43+
key: USER_KEY
44+
}
45+
});
46+
47+
const client = factory.client();
48+
const accountClient = factory.client(ACCOUNT_ID);
49+
50+
client.track('usuer', 'my_event');
51+
accountClient.track('account', 'my_event');
52+
```
53+
54+
- **Removed the deprecated `GOOGLE_ANALYTICS_TO_SPLIT` and `SPLIT_TO_GOOGLE_ANALYTICS` integrations. The `integrations` configuration option has been removed from the SDK factory configuration, along with the associated interfaces in the TypeScript definitions.**
55+
56+
The Google Analytics integrations were removed since they integrate with the *Google Universal Analytics* library, which was shut down on July 1, 2024, and [replaced by *Google Analytics 4*](https://support.google.com/analytics/answer/11583528?hl=en). Go to Split's [Google Analytics integration guide](https://help.split.io/hc/en-us/articles/360040838752-Google-Analytics) for more information on how to integrate Split with Google Analytics 4.
57+
58+
The integrations have stopped being used and maintained, and were removed from the SDK, together with the `integrations` configuration option. If you were using the `integrations` option, you should remove it from your SDK configuration object.
59+
60+
- **Removed internal polyfills for the `Map` and `Set` global objects, dropping support for IE and other outdated browsers.**
61+
62+
The SDK no longer ships with internal implementations for the `Map` and `Set` global objects, which were used to support old browsers like IE.
63+
64+
If you need to target environments that do not support these features natively, you should provide a polyfill for them. For example, [es6-map](https://github.com/medikoo/es6-map) for `Map`, and [es6-set](https://github.com/medikoo/es6-set) for `Set`.
65+
66+
In addition, the Split SDK depends on support for ES6 promises. Since v10.2.0, the SDK does not pollute any global variable to add the ES6 promise polyfill. If your environment does not support ES6 promises, you can [polyfill](https:/github.com/stefanpenner/es6-promise).
67+
68+
- **Dropped support for Split Proxy below version 5.9.0, when using in the browser (client-side API). The SDK now requires Split Proxy 5.9.0 or above.**
69+
70+
If using the Split Proxy with the SDK in the browser, make sure to update it to version 5.9.0 or above. This is required due to the introduction of Large Segments matchers in the SDK on client-side, which uses a new HTTP endpoint to retrieve the segments data and is only supported by Split Proxy 5.9.0.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ Split has built and maintains SDKs for:
7171
* Java [Github](https://github.com/splitio/java-client) [Docs](https://help.split.io/hc/en-us/articles/360020405151-Java-SDK)
7272
* JavaScript [Github](https://github.com/splitio/javascript-client) [Docs](https://help.split.io/hc/en-us/articles/360020448791-JavaScript-SDK)
7373
* JavaScript for Browser [Github](https://github.com/splitio/javascript-browser-client) [Docs](https://help.split.io/hc/en-us/articles/360058730852-Browser-SDK)
74-
* Node [Github](https://github.com/splitio/javascript-client) [Docs](https://help.split.io/hc/en-us/articles/360020564931-Node-js-SDK)
74+
* Node.js [Github](https://github.com/splitio/javascript-client) [Docs](https://help.split.io/hc/en-us/articles/360020564931-Node-js-SDK)
7575
* PHP [Github](https://github.com/splitio/php-client) [Docs](https://help.split.io/hc/en-us/articles/360020350372-PHP-SDK)
7676
* PHP thin-client [Github](https://github.com/splitio/php-thin-client) [Docs](https://help.split.io/hc/en-us/articles/18305128673933-PHP-Thin-Client-SDK)
7777
* Python [Github](https://github.com/splitio/python-client) [Docs](https://help.split.io/hc/en-us/articles/360020359652-Python-SDK)

src/__tests__/consumer/node_redis.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ const initializeRedisServer = (mock = '') => {
8383
exec(`cat ./src/__tests__/mocks/${mockFileName}.txt | redis-cli -p ${redisPort}`, err => {
8484
if (err) {
8585
reject(server);
86-
// node couldn't execute the command
86+
// Node.js couldn't execute the command
8787
return;
8888
}
8989

@@ -95,7 +95,7 @@ const initializeRedisServer = (mock = '') => {
9595
return promise;
9696
};
9797

98-
tape('NodeJS Redis', function (t) {
98+
tape('Node.js Redis', function (t) {
9999

100100
t.test('Regular usage - DEBUG strategy', assert => {
101101
initializeRedisServer()

src/__tests__/destroy/node.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ fetchMock.get(url(settings, '/splitChanges?s=1.1&since=-1'), { status: 200, body
2121
fetchMock.get(url(settings, '/splitChanges?s=1.1&since=1500492097547'), { status: 200, body: splitChangesMock2 });
2222
fetchMock.postOnce(url(settings, '/v1/metrics/config'), 200);
2323

24-
tape('SDK destroy for NodeJS', async function (assert) {
24+
tape('SDK destroy for Node.js', async function (assert) {
2525
const config = {
2626
core: {
2727
authorizationKey: 'fake-key',

src/__tests__/offline/node.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ const settingsGenerator = mockFileName => {
5555
};
5656

5757

58-
tape('NodeJS Offline Mode', function (t) {
58+
tape('Node.js Offline Mode', function (t) {
5959

6060
t.test('Old format evaluations - .split', DotSplitTests);
6161
t.test('New format evaluations - .yaml extension', DotYAMLTests.bind(null, 'split', 'yaml'));

src/__tests__/online/node.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ fetchMock.post(url(settings, '/testImpressions/count'), 200);
5555
fetchMock.post(url(settings, '/v1/metrics/config'), 200);
5656
fetchMock.post(url(settings, '/v1/metrics/usage'), 200);
5757

58-
tape('## Node JS - E2E CI Tests ##', async function (assert) {
58+
tape('## Node.js - E2E CI Tests ##', async function (assert) {
5959
/* Check client evaluations. */
6060
assert.test('E2E / In Memory', evaluationsSuite.bind(null, config, key));
6161
assert.test('E2E / In Memory - Semver', evaluationsSemverSuite.bind(null, fetchMock));

src/__tests__/push/node.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ fetchMock.config.overwriteRoutes = false;
1313
fetchMock.post('https://telemetry.split.io/api/v1/metrics/config', 200);
1414
fetchMock.post('https://telemetry.split.io/api/v1/metrics/usage', 200);
1515

16-
tape('## Node JS - E2E CI Tests for PUSH ##', async function (assert) {
16+
tape('## Node.js - E2E CI Tests for PUSH ##', async function (assert) {
1717

1818
// Non-recoverable issues on inizialization
1919
assert.test('E2E / PUSH initialization: auth with push disabled', testAuthWithPushDisabled.bind(null, fetchMock));

0 commit comments

Comments
 (0)