diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index bb226c0..55b89dd 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -4,4 +4,4 @@ ## How do we test the changes introduced in this PR? -## Extra Notes \ No newline at end of file +## Extra Notes diff --git a/CHANGES.txt b/CHANGES.txt index c1e06db..398f79f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,11 @@ +1.6.0 (XXX XX, 2026) + - Updated TypeScript declaration to use `namespace` instead of `module` for compatibility with TypeScript 7 (Related to issue https://github.com/splitio/javascript-client/issues/920). + - Updated @splitsoftware/splitio-commons package to version 3.0.1, which: + - adds functionality to provide metadata alongside SDK update and READY events. Read more in our docs. + - updates the order of storage operations to prevent inconsistent states when using the `InLocalStorage` module and the browser’s `localStorage` fails due to quota limits. + - updates internal modules to handle `null` values from `/splitChanges` response. + - updates some dependencies for vulnerability fixes. + 1.5.0 (October 31, 2025) - Added new configuration for Fallback Treatments, which allows setting a treatment value and optional config to be returned in place of "control", either globally or by flag. Read more in our docs. - Added `client.getStatus()` method to retrieve the client readiness status properties (`isReady`, `isReadyFromCache`, etc). diff --git a/package-lock.json b/package-lock.json index 1625949..caf9ab5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "@splitsoftware/splitio-react-native", - "version": "1.5.0", + "version": "1.6.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@splitsoftware/splitio-react-native", - "version": "1.5.0", + "version": "1.6.0", "license": "Apache-2.0", "dependencies": { - "@splitsoftware/splitio-commons": "2.8.0" + "@splitsoftware/splitio-commons": "3.0.1-rc.1" }, "devDependencies": { "@react-native-community/eslint-config": "^3.2.0", @@ -75,6 +75,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", "dev": true, + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", @@ -1660,6 +1661,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.4.tgz", "integrity": "sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA==", "dev": true, + "peer": true, "dependencies": { "@babel/compat-data": "^7.14.4", "@babel/helper-compilation-targets": "^7.14.4", @@ -4887,20 +4889,28 @@ } }, "node_modules/@splitsoftware/splitio-commons": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-2.8.0.tgz", - "integrity": "sha512-QgHUreMOEDwf4GZzVPu4AzkZJvuaeSoHsiJc4tT3CxSIYl2bKMz1SSDlI1tW/oVbIFeWjkrIp2lCYEyUBgcvyA==", + "version": "3.0.1-rc.1", + "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-3.0.1-rc.1.tgz", + "integrity": "sha512-XZn3ptV9kCgVZLUoiCzG5Lv/xQttY4XkXyJA4DEWQuTskCfckCZ4TuD4N2C7HLB+elI9vjqmnHWlilpsKbK/wA==", "license": "Apache-2.0", "dependencies": { "@types/ioredis": "^4.28.0", "tslib": "^2.3.1" }, "peerDependencies": { - "ioredis": "^4.28.0" + "bloom-filters": "^3.0.0", + "ioredis": "^4.28.0 || ^5.0.0", + "node-fetch": "^2.7.0" }, "peerDependenciesMeta": { + "bloom-filters": { + "optional": true + }, "ioredis": { "optional": true + }, + "node-fetch": { + "optional": true } } }, @@ -5136,6 +5146,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, + "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.62.0", @@ -5170,6 +5181,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", @@ -5367,6 +5379,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6116,6 +6129,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001646", "electron-to-chromium": "^1.5.4", @@ -7138,6 +7152,7 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14640,7 +14655,8 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, + "devOptional": true, + "peer": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -15206,6 +15222,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", "dev": true, + "peer": true, "bin": { "prettier": "bin-prettier.js" }, @@ -15442,6 +15459,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dev": true, + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -15470,6 +15488,7 @@ "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.72.15.tgz", "integrity": "sha512-UDxOZwCxhwb0dGuvcB/04uWzhDJ8etqW3fMOq6bv35WwEXMgKXXqZpshhMo64UVWm/m2ZmM32ckn5sf1EIqD9Q==", "dev": true, + "peer": true, "dependencies": { "@jest/create-cache-key-function": "^29.2.1", "@react-native-community/cli": "^11.4.1", @@ -17199,7 +17218,7 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "devOptional": true }, "node_modules/tsconfig-paths": { "version": "3.14.2", @@ -17366,6 +17385,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17608,7 +17628,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "devOptional": true }, "node_modules/whatwg-fetch": { "version": "3.6.2", @@ -17620,7 +17640,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, + "devOptional": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -17997,6 +18017,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", "dev": true, + "peer": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", @@ -19173,6 +19194,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.4.tgz", "integrity": "sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA==", "dev": true, + "peer": true, "requires": { "@babel/compat-data": "^7.14.4", "@babel/helper-compilation-targets": "^7.14.4", @@ -21659,9 +21681,9 @@ } }, "@splitsoftware/splitio-commons": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-2.8.0.tgz", - "integrity": "sha512-QgHUreMOEDwf4GZzVPu4AzkZJvuaeSoHsiJc4tT3CxSIYl2bKMz1SSDlI1tW/oVbIFeWjkrIp2lCYEyUBgcvyA==", + "version": "3.0.1-rc.1", + "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-3.0.1-rc.1.tgz", + "integrity": "sha512-XZn3ptV9kCgVZLUoiCzG5Lv/xQttY4XkXyJA4DEWQuTskCfckCZ4TuD4N2C7HLB+elI9vjqmnHWlilpsKbK/wA==", "requires": { "@types/ioredis": "^4.28.0", "tslib": "^2.3.1" @@ -21891,6 +21913,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, + "peer": true, "requires": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.62.0", @@ -21909,6 +21932,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, + "peer": true, "requires": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", @@ -22022,7 +22046,8 @@ "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true + "dev": true, + "peer": true }, "acorn-jsx": { "version": "5.3.2", @@ -22586,6 +22611,7 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, + "peer": true, "requires": { "caniuse-lite": "^1.0.30001646", "electron-to-chromium": "^1.5.4", @@ -23361,6 +23387,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, + "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -28920,7 +28947,8 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, + "devOptional": true, + "peer": true, "requires": { "whatwg-url": "^5.0.0" } @@ -29312,7 +29340,8 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", - "dev": true + "dev": true, + "peer": true }, "prettier-linter-helpers": { "version": "1.0.0", @@ -29492,6 +29521,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dev": true, + "peer": true, "requires": { "loose-envify": "^1.1.0" } @@ -29517,6 +29547,7 @@ "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.72.15.tgz", "integrity": "sha512-UDxOZwCxhwb0dGuvcB/04uWzhDJ8etqW3fMOq6bv35WwEXMgKXXqZpshhMo64UVWm/m2ZmM32ckn5sf1EIqD9Q==", "dev": true, + "peer": true, "requires": { "@jest/create-cache-key-function": "^29.2.1", "@react-native-community/cli": "^11.4.1", @@ -30854,7 +30885,7 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "devOptional": true }, "tsconfig-paths": { "version": "3.14.2", @@ -30977,7 +31008,8 @@ "version": "4.4.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true + "dev": true, + "peer": true }, "uglify-es": { "version": "3.3.9", @@ -31152,7 +31184,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "devOptional": true }, "whatwg-fetch": { "version": "3.6.2", @@ -31164,7 +31196,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, + "devOptional": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" diff --git a/package.json b/package.json index 0abd107..f2359ce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-react-native", - "version": "1.5.0", + "version": "1.6.0", "description": "Split SDK for React Native", "main": "lib/commonjs/index.js", "module": "lib/module/index.js", @@ -61,7 +61,7 @@ }, "homepage": "https://github.com/splitio/react-native-client#readme", "dependencies": { - "@splitsoftware/splitio-commons": "2.8.0" + "@splitsoftware/splitio-commons": "3.0.1-rc.1" }, "devDependencies": { "@react-native-community/eslint-config": "^3.2.0", diff --git a/src/platform/RNSignalListener.ts b/src/platform/RNSignalListener.ts index 2385288..0fe4a8b 100644 --- a/src/platform/RNSignalListener.ts +++ b/src/platform/RNSignalListener.ts @@ -1,5 +1,6 @@ import { ISignalListener } from '@splitsoftware/splitio-commons/src/listeners/types'; import { CLEANUP_REGISTERING, CLEANUP_DEREGISTERING } from '@splitsoftware/splitio-commons/src/logger/constants'; +import { ISdkFactoryContext } from '@splitsoftware/splitio-commons/src/sdkFactory/types'; import { ISyncManager } from '@splitsoftware/splitio-commons/src/sync/types'; import { ISettings } from '@splitsoftware/splitio-commons/src/types'; import { AppState, AppStateStatus } from 'react-native'; @@ -21,8 +22,13 @@ export class RNSignalListener implements ISignalListener { private _lastTransition: Transition | undefined; private _appStateSubscription: NativeEventSubscription | undefined; private _lastBgTimestamp: number | undefined; + private settings: ISettings & { flushDataOnBackground?: boolean }; + private syncManager: ISyncManager; - constructor(private syncManager: ISyncManager, private settings: ISettings & { flushDataOnBackground?: boolean }) {} + constructor({ syncManager, settings }: Pick) { + this.settings = settings; + this.syncManager = syncManager!; + } private _getTransition(nextAppState: AppStateStatus): Transition { // 'inactive' iOS state and 'active' state are considered foreground states. diff --git a/src/platform/__tests__/RNSignalListener.spec.ts b/src/platform/__tests__/RNSignalListener.spec.ts index 95aa3a7..4d7110e 100644 --- a/src/platform/__tests__/RNSignalListener.spec.ts +++ b/src/platform/__tests__/RNSignalListener.spec.ts @@ -25,7 +25,7 @@ describe('RNSignalListener', () => { test('starting in foreground', async () => { // @ts-expect-error. SyncManager mock partially implemented - const signalListener = new RNSignalListener(syncManagerMockWithPushManager, settingsMock); + const signalListener = new RNSignalListener({ syncManager: syncManagerMockWithPushManager, settings: settingsMock }); // Starting with app in foreground AppStateMock.currentState = 'active'; @@ -82,8 +82,11 @@ describe('RNSignalListener', () => { }); test('starting in background & without flushDataOnBackground', () => { - // @ts-expect-error. SyncManager mock partially implemented - const signalListener = new RNSignalListener(syncManagerMockWithPushManager, { ...settingsMock, flushDataOnBackground: undefined }); + const signalListener = new RNSignalListener({ + // @ts-expect-error. SyncManager mock partially implemented + syncManager: syncManagerMockWithPushManager, // @ts-expect-error. Settings mock partially implemented + settings: { ...settingsMock, flushDataOnBackground: undefined }, + }); // Starting with app in background AppStateMock.currentState = 'background'; diff --git a/src/platform/getModules.ts b/src/platform/getModules.ts index 6ee2583..a0c43c0 100644 --- a/src/platform/getModules.ts +++ b/src/platform/getModules.ts @@ -24,6 +24,7 @@ const platform = { EventEmitter, getEventSource, now, + SignalListener: RNSignalListener, }; const syncManagerOnlineCSFactory = syncManagerOnlineFactory(pollingManagerCSFactory, pushManagerFactory); @@ -36,7 +37,7 @@ export function getModules(settings: ISettings): ISdkFactoryParams { storageFactory: settings.storage as ISdkFactoryParams['storageFactory'], - splitApiFactory, + serviceApiFactory: splitApiFactory, syncManagerFactory: syncManagerOnlineCSFactory, @@ -44,8 +45,6 @@ export function getModules(settings: ISettings): ISdkFactoryParams { sdkClientMethodFactory: sdkClientMethodCSFactory, - SignalListener: RNSignalListener as ISdkFactoryParams['SignalListener'], - impressionsObserverFactory: impressionObserverCSFactory, extraProps: (params) => { @@ -56,9 +55,8 @@ export function getModules(settings: ISettings): ISdkFactoryParams { }; if (settings.mode === LOCALHOST_MODE) { - modules.splitApiFactory = undefined; + modules.serviceApiFactory = undefined; modules.syncManagerFactory = localhostFromObjectFactory; - modules.SignalListener = undefined; } return modules; diff --git a/src/settings/defaults.ts b/src/settings/defaults.ts index 4b1dbf6..a96f432 100644 --- a/src/settings/defaults.ts +++ b/src/settings/defaults.ts @@ -1,7 +1,7 @@ import type SplitIO from '@splitsoftware/splitio-commons/types/splitio'; import { CONSENT_GRANTED } from '@splitsoftware/splitio-commons/src/utils/constants'; -const packageVersion = '1.5.0'; +const packageVersion = '1.6.0'; export const defaults = { startup: { diff --git a/types/full/index.d.ts b/types/full/index.d.ts index bd44b0f..d2f587a 100644 --- a/types/full/index.d.ts +++ b/types/full/index.d.ts @@ -6,7 +6,7 @@ export = JsSdk; -declare module JsSdk { +declare namespace JsSdk { /** * Split.io SDK factory function. * diff --git a/types/index.d.ts b/types/index.d.ts index 459e7f2..3c28ab3 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -6,7 +6,7 @@ export = JsSdk; -declare module JsSdk { +declare namespace JsSdk { /** * Split.io SDK factory function. *