Skip to content

Commit

Permalink
Merge pull request #93 from splitio/development
Browse files Browse the repository at this point in the history
Release v1.0.0
  • Loading branch information
EmilianoSanchez authored Nov 2, 2024
2 parents dc3d7c5 + 871562f commit f570cb2
Show file tree
Hide file tree
Showing 15 changed files with 181 additions and 1,319 deletions.
9 changes: 9 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
1.0.0 (November 1, 2024)
- Added support for targeting rules based on large segments.
- Added `factory.destroy()` method, which invokes the `destroy` method of all clients created by the factory.
- Updated @splitsoftware/splitio-commons package to version 2.0.0 that includes major updates and updated some transitive dependencies for vulnerability fixes.
- BREAKING CHANGES:
- 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.
- Renamed some TypeScript definitions in the SplitIO namespace to avoid conflicts with other Split packages: `SplitIO.ISDK` to `SplitIO.IBrowserSDK`, and `SplitIO.IClient` to `SplitIO.IBrowserClient`.
- Removed the `LocalhostFromObject` export from the default import (`import { LocalhostFromObject } from '@splitsoftware/splitio-react-native'`). It is no longer necessary to manually import and configure it in the `sync.localhostMode` option to enable localhost mode.

0.10.0 (September 13, 2024)
- Updated @splitsoftware/splitio-commons package to version 1.17.0 that includes minor updates:
- Added `sync.requestOptions.getHeaderOverrides` configuration option to enhance SDK HTTP request Headers for Authorization Frameworks.
Expand Down
42 changes: 29 additions & 13 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@splitsoftware/splitio-react-native",
"version": "0.10.0",
"version": "1.0.0",
"description": "Split SDK for React Native",
"main": "lib/commonjs/index.js",
"module": "lib/module/index.js",
Expand Down Expand Up @@ -37,7 +37,8 @@
"check:version": "./scripts/check_version.sh",
"build": "bob build && ./scripts/build_replace_imports.sh",
"test": "jest",
"all": "npm run check && npm run build && npm run test",
"test-ts-decls": "tsc --build ts-tests",
"all": "npm run check && npm run build && npm run test-ts-decls && npm run test",
"publish:rc": "npm run check && npm run build && npm publish --tag rc",
"publish:stable": "npm run check && npm run build && npm publish"
},
Expand All @@ -60,7 +61,7 @@
},
"homepage": "https://github.com/splitio/react-native-client#readme",
"dependencies": {
"@splitsoftware/splitio-commons": "1.17.0"
"@splitsoftware/splitio-commons": "2.0.0"
},
"devDependencies": {
"@react-native-community/eslint-config": "^2.0.0",
Expand Down
9 changes: 4 additions & 5 deletions src/full/splitFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,17 @@ import { settingsFactory } from '../settings/full';
import { getModules } from '../platform/getModules';
import { sdkFactory } from '@splitsoftware/splitio-commons/src/sdkFactory/index';
import type { ISdkFactoryParams } from '@splitsoftware/splitio-commons/src/sdkFactory/types';
import { IReactNativeSettings } from '../../types/splitio';
import type SplitIO from '@splitsoftware/splitio-commons/types/splitio';

/**
* SplitFactory for React Native.
* Includes localhost mode.
*
* @param config Configuration object used to instantiate the SDK
* @param __updateModules Optional function that lets redefine internal SDK modules. Use with
* @param config - Configuration object used to instantiate the SDK
* @param __updateModules - Optional function that lets redefine internal SDK modules. Use with
* caution since, unlike `config`, this param is not validated neither considered part of the public API.
* @throws Will throw an error if the provided config is invalid.
*/
export function SplitFactory(config: IReactNativeSettings, __updateModules?: (modules: ISdkFactoryParams) => void) {
export function SplitFactory(config: SplitIO.IReactNativeSettings, __updateModules?: (modules: ISdkFactoryParams) => void) {
const settings = settingsFactory(config);
const modules = getModules(settings);
if (__updateModules) __updateModules(modules);
Expand Down
1 change: 0 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,3 @@ export { ErrorLogger } from '@splitsoftware/splitio-commons/src/logger/browser/E
export { WarnLogger } from '@splitsoftware/splitio-commons/src/logger/browser/WarnLogger';
export { InfoLogger } from '@splitsoftware/splitio-commons/src/logger/browser/InfoLogger';
export { DebugLogger } from '@splitsoftware/splitio-commons/src/logger/browser/DebugLogger';
export { LocalhostFromObject } from '@splitsoftware/splitio-commons/src/sync/offline/LocalhostFromObject';
6 changes: 3 additions & 3 deletions src/platform/getModules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ import { sdkManagerFactory } from '@splitsoftware/splitio-commons/src/sdkManager
import { sdkClientMethodCSFactory } from '@splitsoftware/splitio-commons/src/sdkClient/sdkClientMethodCS';
import { impressionObserverCSFactory } from '@splitsoftware/splitio-commons/src/trackers/impressionObserver/impressionObserverCS';
import { EventEmitter } from '@splitsoftware/splitio-commons/src/utils/MinEvents';

import { ISdkFactoryParams } from '@splitsoftware/splitio-commons/src/sdkFactory/types';
import { ISettings } from '@splitsoftware/splitio-commons/src/types';
import { LOCALHOST_MODE } from '@splitsoftware/splitio-commons/src/utils/constants';
import { createUserConsentAPI } from '@splitsoftware/splitio-commons/src/consent/sdkUserConsent';
import { now } from '@splitsoftware/splitio-commons/src/utils/timeTracker/now/browser';
import { localhostFromObjectFactory } from '@splitsoftware/splitio-commons/src/sync/offline/LocalhostFromObject';

import { RNSignalListener } from './RNSignalListener';
import { getEventSource } from './getEventSource';
Expand All @@ -34,7 +34,7 @@ export function getModules(settings: ISettings): ISdkFactoryParams {

platform,

storageFactory: settings.storage,
storageFactory: settings.storage as ISdkFactoryParams['storageFactory'],

splitApiFactory,

Expand All @@ -57,7 +57,7 @@ export function getModules(settings: ISettings): ISdkFactoryParams {

if (settings.mode === LOCALHOST_MODE) {
modules.splitApiFactory = undefined;
modules.syncManagerFactory = settings.sync.localhostMode;
modules.syncManagerFactory = localhostFromObjectFactory;
modules.SignalListener = undefined;
}

Expand Down
6 changes: 3 additions & 3 deletions src/settings/defaults.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ConsentStatus } from '@splitsoftware/splitio-commons/src/types';
import type SplitIO from '@splitsoftware/splitio-commons/types/splitio';
import { CONSENT_GRANTED } from '@splitsoftware/splitio-commons/src/utils/constants';

const packageVersion = '0.10.0';
const packageVersion = '1.0.0';

export const defaults = {
startup: {
Expand All @@ -16,7 +16,7 @@ export const defaults = {
},

// Consent is considered granted by default
userConsent: CONSENT_GRANTED as ConsentStatus,
userConsent: CONSENT_GRANTED as SplitIO.ConsentStatus,

// Instance version.
version: `reactnative-${packageVersion}`,
Expand Down
2 changes: 0 additions & 2 deletions src/settings/full.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { validateRuntime } from '@splitsoftware/splitio-commons/src/utils/settin
import { validateStorageCS } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/storage/storageCS';
import { validatePluggableIntegrations } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/integrations/pluggable';
import { validateLogger } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/logger/pluggableLogger';
import { validateLocalhostWithDefault } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/localhost/builtin';
import { validateConsent } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/consent';

const params = {
Expand All @@ -14,7 +13,6 @@ const params = {
storage: validateStorageCS,
integrations: validatePluggableIntegrations,
logger: validateLogger,
localhost: validateLocalhostWithDefault, // Full SplitFactory provides a default localhost module, except a valid one is provided
consent: validateConsent,
};

Expand Down
2 changes: 0 additions & 2 deletions src/settings/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { validateRuntime } from '@splitsoftware/splitio-commons/src/utils/settin
import { validateStorageCS } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/storage/storageCS';
import { validatePluggableIntegrations } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/integrations/pluggable';
import { validateLogger } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/logger/pluggableLogger';
import { validateLocalhost } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/localhost/pluggable';
import { validateConsent } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/consent';

const params = {
Expand All @@ -14,7 +13,6 @@ const params = {
storage: validateStorageCS,
integrations: validatePluggableIntegrations,
logger: validateLogger,
localhost: validateLocalhost, // Slim SplitFactory validates that the localhost module is passed in localhost mode
consent: validateConsent,
};

Expand Down
11 changes: 5 additions & 6 deletions src/splitFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,17 @@ import { settingsFactory } from './settings';
import { getModules } from './platform/getModules';
import { sdkFactory } from '@splitsoftware/splitio-commons/src/sdkFactory/index';
import type { ISdkFactoryParams } from '@splitsoftware/splitio-commons/src/sdkFactory/types';
import { IReactNativeSettings } from '../types/splitio';
import type SplitIO from '@splitsoftware/splitio-commons/types/splitio';

/**
* Slim SplitFactory for React Native.
* Doesn't include localhost mode out-of-the-box.
* SplitFactory for React Native.
*
* @param config Configuration object used to instantiate the SDK
* @param __updateModules Optional function that lets redefine internal SDK modules. Use with
* @param config - Configuration object used to instantiate the SDK
* @param __updateModules - Optional function that lets redefine internal SDK modules. Use with
* caution since, unlike `config`, this param is not validated neither considered part of the public API.
* @throws Will throw an error if the provided config is invalid.
*/
export function SplitFactory(config: IReactNativeSettings, __updateModules?: (modules: ISdkFactoryParams) => void) {
export function SplitFactory(config: SplitIO.IReactNativeSettings, __updateModules?: (modules: ISdkFactoryParams) => void) {
const settings = settingsFactory(config);
const modules = getModules(settings);
if (__updateModules) __updateModules(modules);
Expand Down
105 changes: 105 additions & 0 deletions ts-tests/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
/**
* Split software typescript declarations testing.
*
* This file is not meant to run but to be compiled without errors. This is the same way to test .d.ts files
* that you will need to comply to publish packages on @types organization on NPM (DefinitelyTyped).
* We import the declarations through the NPM package name (using the development branch of the repo)
* to test in the same way in which customers will be using it on development.
*
* The step of compiling this file is part of the continous integration systems in place.
*
* @author Nico Zelaya <nicolas.zelaya@split.io>
*/

import { SplitFactory, DebugLogger, InfoLogger, WarnLogger, ErrorLogger } from '../types/index';

let reactNativeSettings: SplitIO.IReactNativeSettings = {
core: {
authorizationKey: 'another-key',
key: 'customer-key',
},
};

let fullReactNativeSettings: SplitIO.IReactNativeSettings = {
core: {
authorizationKey: 'asd',
key: 'asd',
labelsEnabled: false,
},
scheduler: {
featuresRefreshRate: 1,
impressionsRefreshRate: 1,
impressionsQueueSize: 1,
telemetryRefreshRate: 1,
segmentsRefreshRate: 1,
offlineRefreshRate: 1,
eventsPushRate: 1,
eventsQueueSize: 1,
pushRetryBackoffBase: 1,
},
startup: {
readyTimeout: 1,
requestTimeoutBeforeReady: 1,
retriesOnFailureBeforeReady: 1,
eventsFirstPushWindow: 1,
},
urls: {
sdk: 'https://asd.com/sdk',
events: 'https://asd.com/events',
auth: 'https://asd.com/auth',
streaming: 'https://asd.com/streaming',
telemetry: 'https://asd.com/telemetry',
},
features: {
feature1: 'treatment',
feature2: { treatment: 'treatment2', config: "{ 'prop': 'value'}" },
feature3: { treatment: 'treatment3', config: null },
},
storage: undefined,
impressionListener: {
logImpression: (data: SplitIO.ImpressionData) => {
let impressionData: SplitIO.ImpressionData = data;
},
},
debug: true,
integrations: [],
streamingEnabled: true,
sync: {
splitFilters: [
{
type: 'bySet',
values: ['set_a', 'set_b'],
},
{
type: 'byName',
values: ['my_split_1', 'my_split_1'],
},
{
type: 'byPrefix',
values: ['my_split', 'test_split_'],
},
],
impressionsMode: 'DEBUG',
enabled: true,
requestOptions: {
getHeaderOverrides(context) {
return { ...context.headers, headerName: 'value' };
},
},
},
userConsent: 'GRANTED',
mode: 'standalone',
};

reactNativeSettings.userConsent = 'DECLINED';
reactNativeSettings.userConsent = 'UNKNOWN';

// debug property can be a log level or Logger instance
reactNativeSettings.debug = 'ERROR';
reactNativeSettings.debug = DebugLogger();
reactNativeSettings.debug = InfoLogger();
reactNativeSettings.debug = WarnLogger();
reactNativeSettings.debug = ErrorLogger();

const SDK: SplitIO.IBrowserSDK = SplitFactory(reactNativeSettings);
11 changes: 11 additions & 0 deletions ts-tests/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"compilerOptions": {
"noImplicitAny": true,
"target": "es5",
"module": "commonjs",
"noEmit": true
},
"files": [
"index"
]
}
Loading

0 comments on commit f570cb2

Please # to comment.