diff --git a/CHANGES.txt b/CHANGES.txt index f0ff989..b6a9b44 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,6 +6,7 @@ - Removed internal ponyfills for the `Map` and `Set` global objects, dropping support for IE and other outdated browsers. The SDK now requires the runtime environment to support these features natively or provide a polyfill. - Removed the deprecated `GoogleAnalyticsToSplit` and `SplitToGoogleAnalytics` pluggable integration modules, along with the related interfaces in the TypeScript definitions. - Removed the `LocalhostFromObject` export from the default import (`import { LocalhostFromObject } from '@splitsoftware/splitio-browserjs'`). It is no longer necessary to manually import and configure it in the `sync.localhostMode` option to enable localhost mode. + - Removed the "full" import (`import { SplitFactory } from '@splitsoftware/splitio-browserjs/full'`), since with the removal of `LocalhostFromObject` from the default import, the difference between them is minimal. The "full" import differs only by including the `unfetch` ponyfill to support older browsers. 0.15.0 (September 13, 2024) - Updated @splitsoftware/splitio-commons package to version 1.17.0 that includes minor updates: diff --git a/full/package.json b/full/package.json deleted file mode 100644 index a59cb3f..0000000 --- a/full/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "main": "../cjs/full/index.js", - "module": "../esm/full/index.js", - "types": "../types/full/index.d.ts", - "sideEffects": false -} diff --git a/package-lock.json b/package-lock.json index 8607b1b..505a79b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,7 @@ "license": "Apache-2.0", "dependencies": { "@splitsoftware/splitio-commons": "2.0.0-rc.3", - "tslib": "^2.3.1", - "unfetch": "^4.2.0" + "tslib": "^2.3.1" }, "devDependencies": { "@rollup/plugin-commonjs": "^24.0.1", @@ -9093,11 +9092,6 @@ "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", "dev": true }, - "node_modules/unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" - }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -16231,11 +16225,6 @@ "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", "dev": true }, - "unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", diff --git a/package.json b/package.json index 7c0bb2f..fde9c4b 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,7 @@ "cjs", "esm", "src", - "types", - "full" + "types" ], "scripts": { "check": "npm run check:lint && npm run check:types && npm run check:version", @@ -62,8 +61,7 @@ "homepage": "https://github.com/splitio/javascript-browser-client#readme", "dependencies": { "@splitsoftware/splitio-commons": "2.0.0-rc.3", - "tslib": "^2.3.1", - "unfetch": "^4.2.0" + "tslib": "^2.3.1" }, "devDependencies": { "@rollup/plugin-commonjs": "^24.0.1", diff --git a/rollup.ci.config.js b/rollup.ci.config.js index af1d738..80dcb43 100644 --- a/rollup.ci.config.js +++ b/rollup.ci.config.js @@ -35,7 +35,7 @@ export default env => { * * Only https://www.npmjs.com/package/rollup-plugin-ts compiles from node_modules, and is used for tests. */ - createRollupConfig('esm/full/umd.js', 'full'), // umd/split-browser-VERSION.full[.min].js + createRollupConfig('esm/umd-full.js', 'full'), // umd/split-browser-VERSION.full[.min].js createRollupConfig('esm/umd.js') // umd/split-browser-VERSION[.min].js ]; }; diff --git a/src/__tests__/offline/browser.spec.js b/src/__tests__/offline/browser.spec.js index 6b2d981..2c5ee06 100644 --- a/src/__tests__/offline/browser.spec.js +++ b/src/__tests__/offline/browser.spec.js @@ -2,8 +2,7 @@ import tape from 'tape-catch'; import sinon from 'sinon'; import fetchMock from '../testUtils/fetchMock'; import { url } from '../testUtils'; -import { SplitFactory, InLocalStorage } from '../../full'; -import { SplitFactory as SplitFactorySlim } from '../../'; +import { SplitFactory, InLocalStorage } from '../../index'; import { settingsFactory } from '../../settings'; const settings = settingsFactory({ core: { key: 'facundo@split.io' } }); @@ -88,10 +87,7 @@ tape('Browser offline mode', function (assert) { sharedUpdateCount++; }); - const factoriesReadyFromCache = [ - SplitFactory({ ...config, storage: InLocalStorage() }), - SplitFactorySlim({ ...config, storage: InLocalStorage() }) - ]; + const factoryReadyFromCache = SplitFactory({ ...config, storage: InLocalStorage() }); const configs = [ { ...config, features: { ...config.features }, storage: InLocalStorage /* invalid */ }, { ...config }, @@ -99,7 +95,7 @@ tape('Browser offline mode', function (assert) { ]; const factories = [ ...configs.map(config => SplitFactory(config)), - ...factoriesReadyFromCache + factoryReadyFromCache ]; let readyCount = 0, updateCount = 0, readyFromCacheCount = 0; @@ -361,7 +357,7 @@ tape('Browser offline mode', function (assert) { // SDK events on other factory clients assert.equal(readyCount, factories.length, 'Each factory client should have emitted SDK_READY event once'); assert.equal(updateCount, factories.length - 1, 'Each factory client except one should have emitted SDK_UPDATE event once'); - assert.equal(readyFromCacheCount, factoriesReadyFromCache.length * 2, 'The main and shared client of the factories with LOCALSTORAGE should have emitted SDK_READY_FROM_CACHE event'); + assert.equal(readyFromCacheCount, 2, 'The main and shared client of the factory with LOCALSTORAGE should have emitted SDK_READY_FROM_CACHE event'); assert.end(); }); diff --git a/src/full/index.ts b/src/full/index.ts deleted file mode 100644 index be0ed7a..0000000 --- a/src/full/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { SplitFactory } from './splitFactory'; -export { InLocalStorage } from '@splitsoftware/splitio-commons/src/storages/inLocalStorage/index'; -export { ErrorLogger } from '@splitsoftware/splitio-commons/src/logger/browser/ErrorLogger'; -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 { PluggableStorage } from '@splitsoftware/splitio-commons/src/storages/pluggable'; diff --git a/src/full/splitFactory.ts b/src/full/splitFactory.ts deleted file mode 100644 index 7443557..0000000 --- a/src/full/splitFactory.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { settingsFactory } from '../settings/full'; -import { getModules } from '../platform/getModules'; -import { sdkFactory } from '@splitsoftware/splitio-commons/src/sdkFactory/index'; -import { ISdkFactoryParams } from '@splitsoftware/splitio-commons/src/sdkFactory/types'; -import { getFetch } from '../platform/getFetchFull'; -import { getEventSource } from '../platform/getEventSource'; -import { EventEmitter } from '@splitsoftware/splitio-commons/src/utils/MinEvents'; -import { now } from '@splitsoftware/splitio-commons/src/utils/timeTracker/now/browser'; -import { IBrowserSettings } from '../../types/splitio'; - -const platform = { getFetch, getEventSource, EventEmitter, now }; - -/** - * SplitFactory with pluggable modules for Browser. - * It includes a `fetch` polyfill out-of-the-box. - * - * @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: IBrowserSettings, __updateModules?: (modules: ISdkFactoryParams) => void) { - const settings = settingsFactory(config); - const modules = getModules(settings, platform); - if (__updateModules) __updateModules(modules); - return sdkFactory(modules); -} diff --git a/src/platform/getFetchSlim.ts b/src/platform/getFetch.ts similarity index 100% rename from src/platform/getFetchSlim.ts rename to src/platform/getFetch.ts diff --git a/src/platform/getFetchFull.ts b/src/platform/getFetchFull.ts deleted file mode 100644 index 496c07a..0000000 --- a/src/platform/getFetchFull.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { IFetch } from '@splitsoftware/splitio-commons/src/services/types'; -import unfetch from 'unfetch'; - -export function getFetch() { - return typeof fetch === 'function' ? fetch : unfetch as unknown as IFetch; -} diff --git a/src/settings/__tests__/index.spec.ts b/src/settings/__tests__/index.spec.ts index 4b1ad49..ab157b6 100644 --- a/src/settings/__tests__/index.spec.ts +++ b/src/settings/__tests__/index.spec.ts @@ -1,18 +1,15 @@ -import { settingsFactory as slimSettingsFactory } from '../index'; -import { settingsFactory as fullSettingsFactory } from '../full'; +import { settingsFactory } from '../index'; test('SETTINGS / Consent is overwritable and "GRANTED" by default', () => { - [slimSettingsFactory, fullSettingsFactory].forEach((settingsFactory) => { - let settings = settingsFactory({}); - expect(settings.userConsent).toEqual('GRANTED'); // userConsent defaults to granted if not provided + let settings = settingsFactory({}); + expect(settings.userConsent).toEqual('GRANTED'); // userConsent defaults to granted if not provided - settings = settingsFactory({ userConsent: 'INVALID-VALUE' }); - expect(settings.userConsent).toEqual('GRANTED'); // userConsent defaults to granted if a wrong value is provided + settings = settingsFactory({ userConsent: 'INVALID-VALUE' }); + expect(settings.userConsent).toEqual('GRANTED'); // userConsent defaults to granted if a wrong value is provided - settings = settingsFactory({ userConsent: 'UNKNOWN' }); - expect(settings.userConsent).toEqual('UNKNOWN'); // userConsent can be overwritten + settings = settingsFactory({ userConsent: 'UNKNOWN' }); + expect(settings.userConsent).toEqual('UNKNOWN'); // userConsent can be overwritten - settings = settingsFactory({ userConsent: 'declined' }); - expect(settings.userConsent).toEqual('DECLINED'); // userConsent can be overwritten - }); + settings = settingsFactory({ userConsent: 'declined' }); + expect(settings.userConsent).toEqual('DECLINED'); // userConsent can be overwritten }); diff --git a/src/settings/full.ts b/src/settings/full.ts deleted file mode 100644 index 8c6f6fb..0000000 --- a/src/settings/full.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { settingsValidation } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/index'; -import { defaults } from './defaults'; -import { validateRuntime } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/runtime'; -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 { validateConsent } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/consent'; - -const params = { - defaults, - acceptKey: true, // Client with bound key - runtime: validateRuntime, - storage: validateStorageCS, - integrations: validatePluggableIntegrations, - logger: validateLogger, - consent: validateConsent, -}; - -export function settingsFactory(config: any) { - const settings = settingsValidation(config, params); - - return settings; -} diff --git a/src/splitFactory.ts b/src/splitFactory.ts index efd49ef..f38f382 100644 --- a/src/splitFactory.ts +++ b/src/splitFactory.ts @@ -2,7 +2,7 @@ import { settingsFactory } from './settings'; import { getModules } from './platform/getModules'; import { sdkFactory } from '@splitsoftware/splitio-commons/src/sdkFactory/index'; import { ISdkFactoryParams } from '@splitsoftware/splitio-commons/src/sdkFactory/types'; -import { getFetch } from './platform/getFetchSlim'; +import { getFetch } from './platform/getFetch'; import { getEventSource } from './platform/getEventSource'; import { EventEmitter } from '@splitsoftware/splitio-commons/src/utils/MinEvents'; import { now } from '@splitsoftware/splitio-commons/src/utils/timeTracker/now/browser'; diff --git a/src/full/umd.ts b/src/umd-full.ts similarity index 100% rename from src/full/umd.ts rename to src/umd-full.ts diff --git a/ts-tests/index.ts b/ts-tests/index.ts index ad8e512..462daac 100644 --- a/ts-tests/index.ts +++ b/ts-tests/index.ts @@ -11,13 +11,8 @@ * @author Nico Zelaya */ -import { SplitFactory as SplitFactoryFull, InLocalStorage as InLocalStorageFull, DebugLogger as DebugLoggerFull, InfoLogger as InfoLoggerFull, WarnLogger as WarnLoggerFull, ErrorLogger as ErrorLoggerFull, PluggableStorage as PluggableStorageFull } from '@splitsoftware/splitio-browserjs/full'; import { SplitFactory, InLocalStorage, DebugLogger, InfoLogger, WarnLogger, ErrorLogger, PluggableStorage } from '@splitsoftware/splitio-browserjs'; -// Entry points must export the same objects -let splitFactory = SplitFactory; splitFactory = SplitFactoryFull; -let inLocalStorage = InLocalStorage; inLocalStorage = InLocalStorageFull; -let pluggableStorage = PluggableStorage; pluggableStorage = PluggableStorageFull; let stringPromise: Promise; let splitNamesPromise: Promise; @@ -626,10 +621,6 @@ fullBrowserSettings.debug = DebugLogger(); fullBrowserSettings.debug = InfoLogger(); fullBrowserSettings.debug = WarnLogger(); fullBrowserSettings.debug = ErrorLogger(); -fullBrowserSettings.debug = DebugLoggerFull(); -fullBrowserSettings.debug = InfoLoggerFull(); -fullBrowserSettings.debug = WarnLoggerFull(); -fullBrowserSettings.debug = ErrorLoggerFull(); // let fullNodeSettings: SplitIO.INodeSettings = { // core: { diff --git a/types/full/index.d.ts b/types/full/index.d.ts deleted file mode 100644 index 2b350cb..0000000 --- a/types/full/index.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Declaration file for JavaScript Browser Split Software SDK -// Project: http://www.split.io/ -// Definitions by: Nico Zelaya - -/// -export = JsSdk; - -declare module JsSdk { - /** - * Full version of the Split.io SDK factory function. - * - * It includes a `fetch` polyfill out-of-the-box. @see {@link https://help.split.io/hc/en-us/articles/360058730852-Browser-SDK#language-support}. - * - * The settings parameter should be an object that complies with the SplitIO.IBrowserSettings. - * For more information read the corresponding article: @see {@link https://help.split.io/hc/en-us/articles/360058730852-Browser-SDK#configuration} - */ - export function SplitFactory(settings: SplitIO.IBrowserSettings): SplitIO.ISDK; - export function SplitFactory(settings: SplitIO.IBrowserAsyncSettings): SplitIO.IAsyncSDK; - - /** - * Persistent storage based on the LocalStorage Web API for browsers. - * - * @see {@link https://help.split.io/hc/en-us/articles/360058730852-Browser-SDK#storage} - */ - export function InLocalStorage(options?: SplitIO.InLocalStorageOptions): SplitIO.StorageSyncFactory; - - /** - * Pluggable storage to use the SDK in consumer mode. - * - * @see {@link https://help.split.io/hc/en-us/articles/360058730852-Browser-SDK#sharing-state-with-a-pluggable-storage} - */ - export function PluggableStorage(options: SplitIO.PluggableStorageOptions): SplitIO.StorageAsyncFactory; - - /** - * Creates a logger instance that enables descriptive log messages with DEBUG log level when passed in the factory settings. - * - * @see {@link https://help.split.io/hc/en-us/articles/360058730852-Browser-SDK#logging} - */ - export function DebugLogger(): SplitIO.ILogger; - - /** - * Creates a logger instance that enables descriptive log messages with INFO log level when passed in the factory settings. - * - * @see {@link https://help.split.io/hc/en-us/articles/360058730852-Browser-SDK#logging} - */ - export function InfoLogger(): SplitIO.ILogger; - - /** - * Creates a logger instance that enables descriptive log messages with WARN log level when passed in the factory settings. - * - * @see {@link https://help.split.io/hc/en-us/articles/360058730852-Browser-SDK#logging} - */ - export function WarnLogger(): SplitIO.ILogger; - - /** - * Creates a logger instance that enables descriptive log messages with ERROR log level when passed in the factory settings. - * - * @see {@link https://help.split.io/hc/en-us/articles/360058730852-Browser-SDK#logging} - */ - export function ErrorLogger(): SplitIO.ILogger; -}